diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 95dc268aab..1707938a77 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -65,6 +65,7 @@ /generative-ai/vision/gradio/gradio_image_generation_sdk.ipynb @jbrache @GoogleCloudPlatform/generative-ai-devrel /generative-ai/search/retrieval-augmented-generation/examples/contract_analysis.ipynb @guruvittal @GoogleCloudPlatform/generative-ai-devrel /generative-ai/genkit/generate-synthetic-database @aikozhaoz @GoogleCloudPlatform/generative-ai-devrel +/generative-ai/genkit/postcard-generator @mattsday @GoogleCloudPlatform/generative-ai-devrel /generative-ai/gemini/evaluation/evaluate_langchain_chains.ipynb @eliasecchig @GoogleCloudPlatform/generative-ai-devrel /generative-ai/gemini/use-cases/retrieval-augmented-generation/rag_qna_with_bq_and_featurestore.ipynb @eliasecchig @lspatarog @GoogleCloudPlatform/generative-ai-devrel /generative-ai/gemini/tuning/gemini_supervised_finetuning_text_classification.ipynb @gabrielahrlr @eliasecchig @GoogleCloudPlatform/generative-ai-devrel @@ -74,3 +75,4 @@ /generative-ai/gemini/use-cases/applying-llms-to-data/semantic-search-in-bigquery/stackoverflow_questions_semantic_search.ipynb @sethijaideep @GoogleCloudPlatform/generative-ai-devrel /generative-ai/gemini/use-cases/retrieval-augmented-generation/raw_with_bigquery.ipynb @jeffonelson @GoogleCloudPlatform/generative-ai-devrel /generative-ai/gemini/sample-apps/e2e-gen-ai-app-starter-pack @eliasecchig @lspatarog @GoogleCloudPlatform/generative-ai-devrel +/generative-ai/vision/use-cases/hey_llm @tushuhei @GoogleCloudPlatform/generative-ai-devrel diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index b2c59c2979..fa67bd3982 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -1,12 +1,16 @@ +AALR AFX AGG AIP AMNOSH ANZ APIENTRY +appspot APSTUDIO +AUVs Adidas Akihiro +Akkaoui Aniston Arborio Arepa @@ -18,14 +22,19 @@ Autechre Autorater BIKBEAR BITCODE +BYOR +Bao Beckham Benno Bettes Biden Bigtable Bitcoin +Borregas Borthwick Boyz +Breazeal +Broadoak Buckleys Buffay CALIPSO @@ -38,8 +47,10 @@ CWLEY CZE Caitlyn Caprese +Chocolat Codelab Codey +Codicote Colab Colm Cowabunga @@ -51,9 +62,11 @@ DWMWA Dataform DeepEval Depatmint +Dexin Disturbia Doaa Doogler +dotprompt Dreesen Durafast Durmus @@ -75,7 +88,10 @@ FLX FMWK FPDF FTPS +Fangming Federer +Feitian +Feng Finvest Firestore Fishburne @@ -93,7 +109,7 @@ Gameplay Gandalf Gatace GenTwo -Genkit +genkit Gfm Gisting Glickman @@ -128,12 +144,17 @@ Isner JPY Jang Jedi +Jian +Jibo Joji +Junzhe +KFBI KNN KPIs Kaelen Kaggle Kamradt +Kanagawa Katelyn Kaufmanns Kawagoe @@ -149,6 +170,7 @@ Kubeflow Kudrow LCEL LLMs +LMPA LOOKBACK LRESULT LSTATUS @@ -158,6 +180,7 @@ LUVBPTK Ladhak LangGraph Lego +Leung Llion Logrus Lottry @@ -165,6 +188,7 @@ MLB MSCHF MSGSEND MTL +Maa Maarten Mahindra Malware @@ -185,6 +209,7 @@ NCCREATE NDEBUG NGRAM NGRAMS +NHK NICOLAS NMT NOMINMAX @@ -193,7 +218,10 @@ NVIDIA Nagasu Niitsuma Nintendo +noabe +Nominatim Noogler +ODb OOTB Oberst Ohashi @@ -203,18 +231,23 @@ Ollama Omnibox Onone Oort +PBA +PDEs PDFs PEFT PLOTLYENV PYINK Parmar +Pengyu Persero Phaidon +Phanfone Pharma Photoshop Pistorius Priyanka QPM +Qwiklab Qwiklabs RAGAS RLHF @@ -229,7 +262,9 @@ Resona Rizzoli Robben Robeco +Robo Ronaldo +Rosso Rousey SDKROOT SEK @@ -246,6 +281,7 @@ SYMED SYSROOT Sagar Sahel +Schlenoff Schwimmer Selam Sestero @@ -261,6 +297,7 @@ Statcast Storrer Strappy Surampudi +Suzaka TARG TGI TOKENLIST @@ -274,6 +311,8 @@ Tencent Testables Tetsuo Tianli +Tianxiang +Tongsheng Topolino Traceloop Trapp @@ -291,6 +330,8 @@ VFT VMs VOS VREDRAW +VSJ +VSPM Vandamm Vaswani Vergadia @@ -306,10 +347,16 @@ WNDCLASS Wakatipu Weaviate Wehn +Welwyn Wnd Womens XXE +Xiang +Youxi +Yuxuan Yuzuru +Zhao +Zhaohua Zijin Zom Zscaler @@ -330,6 +377,7 @@ airlume alloydb antiword apikey +apikeys apredict aquery arXiv @@ -357,6 +405,7 @@ bitcoin blogs boundings bpa +bpd bqml carbonara caudatus @@ -427,6 +476,7 @@ emojis ename epath epoc +erty etf etils eur @@ -466,12 +516,14 @@ gcsfs gdk gdkx genai +geocoded getdata getexif getparent gfile gidiyor github +gitleaks gke glowin gms @@ -509,6 +561,7 @@ imagefont imageno imdb imshow +informati iostream ipd iphoneos @@ -566,6 +619,7 @@ morty moviepy mpn mrr +multitool mwouts nbconvert nbfmt @@ -578,15 +632,21 @@ ngrams nlp nmade nmilitary +nobserved +norigin notetaker nrows +ntheory nunique oai objc ollama onesie onesies +openai +osm osx +outro owlbot oxml pagemap @@ -621,6 +681,7 @@ preds projectid protobuf pstotext +pubmed pubspec putalpha putdata @@ -635,6 +696,7 @@ pyplot pysftp pyvis qna +quadrotor qubit qubits ragas @@ -652,6 +714,7 @@ reranking reranks ribeye ringspun +roboto rpet rrf rsc @@ -675,6 +738,7 @@ srlimit ssd ssh ssn +ssr stdcall strdupv streamlit @@ -696,6 +760,7 @@ tfidf tfvars tgz thelook +throug tiktoken timechart titlebar @@ -705,6 +770,7 @@ toset tqdm traceloop tritan +tseslint tsv ubuntu undst @@ -722,6 +788,7 @@ vectordb vertexai vesselin vtotal +waterjet wcontext wcslen websites @@ -743,6 +810,7 @@ xcodeproj xcscheme xctest xlabel +xmltodict xsi xticks xxxxxxxx diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 92df958d94..0000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,3 +0,0 @@ -"owlbot:run": - - all: - - base-branch: ["main"] diff --git a/.github/linters/.gitleaks.toml b/.github/linters/.gitleaks.toml index c104171a82..614aaeb00b 100644 --- a/.github/linters/.gitleaks.toml +++ b/.github/linters/.gitleaks.toml @@ -4,3 +4,12 @@ title = "gitleaks config" # useDefault will extend the base configuration with the default gitleaks config: # https://github.com/zricethezav/gitleaks/blob/master/config/gitleaks.toml useDefault = true + +[[rules]] + id = "aws-access-token" + description = "AWS Access Token" + regex = '''AKIA[0-9A-Z]{16}''' + [rules.allowlist] + paths = [ + "gemini/use-cases/education/ai_quick_build_experience_backend.ipynb" + ] diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml deleted file mode 100644 index 9267efb87e..0000000000 --- a/.github/workflows/labeler.yaml +++ /dev/null @@ -1,14 +0,0 @@ -name: "Pull Request Labeler" -on: - # Do not use pull_request_target with actions/cache or actions/checkout. - pull_request_target: - -permissions: {} - -jobs: - labeler: - permissions: - pull-requests: write - runs-on: ubuntu-latest - steps: - - uses: actions/labeler@v5 diff --git a/.github/workflows/linter.yaml b/.github/workflows/linter.yaml index eddd527e88..040c8360c2 100644 --- a/.github/workflows/linter.yaml +++ b/.github/workflows/linter.yaml @@ -1,4 +1,3 @@ ---- ################################# ################################# ## Super Linter GitHub Actions ## @@ -53,12 +52,11 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} FILTER_REGEX_EXCLUDE: 'gemini/sample-apps/finance-advisor-spanner/.*\.sql' - JAVASCRIPT_DEFAULT_STYLE: prettier LOG_LEVEL: WARN SHELLCHECK_OPTS: -e SC1091 -e 2086 VALIDATE_ALL_CODEBASE: false VALIDATE_PYTHON_PYINK: false VALIDATE_PYTHON_ISORT: false - VALIDATE_TYPESCRIPT_STANDARD: false # super-linter/super-linter#4445 VALIDATE_CHECKOV: false VALIDATE_JAVASCRIPT_STANDARD: false + VALIDATE_TYPESCRIPT_STANDARD: false diff --git a/conversation/chat-app/package-lock.json b/conversation/chat-app/package-lock.json index 8a572105d5..4afb053662 100644 --- a/conversation/chat-app/package-lock.json +++ b/conversation/chat-app/package-lock.json @@ -23,7 +23,7 @@ "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.0.0", "prettier-plugin-tailwindcss": "^0.6.0", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-check": "^4.0.0", "tailwindcss": "^3.3.2", "tslib": "^2.4.1", @@ -44,12 +44,13 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -449,13 +450,14 @@ "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -470,17 +472,19 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "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", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "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", @@ -924,9 +928,10 @@ "license": "MIT" }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -934,6 +939,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -975,11 +989,12 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" } }, "node_modules/autoprefixer": { @@ -1180,18 +1195,6 @@ "node": ">= 6" } }, - "node_modules/code-red": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.3.tgz", - "integrity": "sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "@types/estree": "^1.0.0", - "acorn": "^8.8.2", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1216,18 +1219,6 @@ "node": ">= 0.6" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1266,14 +1257,6 @@ "node": ">=0.10.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, "node_modules/devalue": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", @@ -1351,15 +1334,16 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" } }, "node_modules/fast-glob": { @@ -1627,9 +1611,10 @@ } }, "node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -1673,21 +1658,14 @@ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1850,16 +1828,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -2322,6 +2290,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2381,28 +2350,27 @@ } }, "node_modules/svelte": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", - "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0.tgz", + "integrity": "sha512-jv2IvTtakG58DqZMo6fY3T6HFmGV4iDQH2lSUyfmCEYaoa+aCNcF+9rERbdDvT4XDF0nQBg6TEoJn0dirED8VQ==", "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-check": { @@ -2899,6 +2867,12 @@ "engines": { "node": ">= 14" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "license": "MIT" } } } diff --git a/conversation/chat-app/package.json b/conversation/chat-app/package.json index ec55a3b6b2..b02aee7237 100644 --- a/conversation/chat-app/package.json +++ b/conversation/chat-app/package.json @@ -21,7 +21,7 @@ "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.0.0", "prettier-plugin-tailwindcss": "^0.6.0", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-check": "^4.0.0", "tailwindcss": "^3.3.2", "tslib": "^2.4.1", diff --git a/embeddings/intro-textemb-vectorsearch.ipynb b/embeddings/intro-textemb-vectorsearch.ipynb index 4f35efa54e..52df832e62 100644 --- a/embeddings/intro-textemb-vectorsearch.ipynb +++ b/embeddings/intro-textemb-vectorsearch.ipynb @@ -592,7 +592,7 @@ "# Load the text embeddings model\n", "from vertexai.language_models import TextEmbeddingModel\n", "\n", - "model = TextEmbeddingModel.from_pretrained(\"textembedding-gecko@001\")" + "model = TextEmbeddingModel.from_pretrained(\"text-embedding-004\")" ] }, { @@ -601,7 +601,7 @@ "id": "FqdVsgZDb_hc" }, "source": [ - "In this tutorial we will use `textembedding-gecko@001` model for getting text embeddings. Please take a look at [Supported models](https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings#supported_models) on the doc to see the list of supported models.\n", + "In this tutorial we will use `text-embedding-004` model for getting text embeddings. Please take a look at [Supported models](https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings#supported_models) on the doc to see the list of supported models.\n", "\n", "Once you get the model, you can call its [get_embeddings](https://cloud.google.com/python/docs/reference/aiplatform/latest/vertexai.language_models.TextEmbeddingModel#vertexai_language_models_TextEmbeddingModel_get_embeddings) function to get embeddings. You can pass up to 5 texts at once in a call. But there is a caveat. By default, the text embeddings API has a \"request per minute\" quota set to 60 for new Cloud projects and 600 for projects with usage history (see [Quotas and limits](https://cloud.google.com/vertex-ai/docs/quotas#request_quotas) to check the latest quota value for `base_model:textembedding-gecko`). So, rather than using the function directly, you may want to define a wrapper like below to limit under 10 calls per second, and pass 5 texts each time." ] @@ -667,7 +667,7 @@ "\n", "![](https://storage.googleapis.com/github-repo/img/embeddings/textemb-vs-notebook/8.png)\n", "\n", - "Which metric should we use? Usually it depends on how each model is trained. In case of the model `textembedding-gecko@001`, we need to use inner product (dot product).\n", + "Which metric should we use? Usually it depends on how each model is trained. In case of the model `text-embedding-004`, we need to use inner product (dot product).\n", "\n", "In the following code, it picks up one question randomly and uses the numpy `np.dot` function to calculate the similarities between the question and other questions." ] @@ -1133,7 +1133,7 @@ "| UI | Text search UI | Text chat UI |\n", "| Summarization of result | No | Yes |\n", "| Multi-turn (Context aware) | No | Yes |\n", - "| Latency | millisecs | seconds |\n", + "| Latency | milliseconds | seconds |\n", "| Cost | lower | higher |\n", "| Hallucinations | No risk | Some risk |\n", "\n", diff --git a/gemini/evaluation/evaluate_models_in_vertex_ai_studio_and_model_garden.ipynb b/gemini/evaluation/evaluate_models_in_vertex_ai_studio_and_model_garden.ipynb index e34bbcdc18..a482c30eeb 100644 --- a/gemini/evaluation/evaluate_models_in_vertex_ai_studio_and_model_garden.ipynb +++ b/gemini/evaluation/evaluate_models_in_vertex_ai_studio_and_model_garden.ipynb @@ -258,7 +258,6 @@ "source": [ "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\"}\n", "LOCATION = \"us-central1\" # @param {type:\"string\"}\n", - "EXPERIMENT_NAME = \"gen-ai-eval-experiment\" # @param {type:\"string\"}\n", "\n", "if not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", " raise ValueError(\"Please set your PROJECT_ID\")\n", @@ -316,6 +315,8 @@ }, "outputs": [], "source": [ + "# @title\n", + "\n", "import logging\n", "import warnings\n", "\n", @@ -344,6 +345,8 @@ }, "outputs": [], "source": [ + "# @title\n", + "\n", "import random\n", "import string\n", "\n", @@ -479,7 +482,7 @@ "source": [ "## Load an evaluation dataset\n", "\n", - "Load a subset of the `OpenOrca` dataset using the `huggingface/datasets` library.\n", + "Load a subset of the `OpenOrca` dataset using the `huggingface/datasets` library. We will use 10 samples from the first 100 rows of the \"train\" split of `OpenOrca` dataset to demonstrate evaluating prompts and model responses in this Colab.\n", "\n", "### Dataset Summary\n", "\n", @@ -559,15 +562,17 @@ "\n", "The `EvalTask` class is a core component of the *Gen AI Evaluation Service SDK* framework. It allows you to define and run evaluation jobs against your Gen AI models/applications, providing a structured way to measure their performance on specific tasks. Think of an `EvalTask` as a blueprint for your evaluation process.\n", "\n", - "`EvalTask` class requires an evaluation dataset and a list of metrics. Supported metrics are documented on the Generative AI on Vertex AI [Define your evaluation metrics](https://cloud.google.com/vertex-ai/generative-ai/docs/models/determine-eval) page. The dataset can be an `pandas.DataFrame`, Python dictionary or a file path URI and uses default column names such as \"prompt\", \"reference\", \"response\", and \"baseline_model_response\". \n", + "`EvalTask` class requires an evaluation dataset and a list of metrics. Supported metrics are documented on the Generative AI on Vertex AI [Define your evaluation metrics](https://cloud.google.com/vertex-ai/generative-ai/docs/models/determine-eval) page. The dataset can be an `pandas.DataFrame`, Python dictionary or a file path URI and can contain default column names such as `prompt`, `reference`, `response`, and `baseline_model_response`. \n", "\n", - "* For bring-your-own-response (BYOR), the \"response\" column in the dataset is mandatory, and \"baseline_model_response\" is needed for pairwise metrics without a provided baseline model.\n", + "* **Bring-your-own-response (BYOR):** You already have the data that you want to evaluate stored in the dataset. You can customize the response column names for both your model and the baseline model using parameters like `response_column_name` and `baseline_model_response_column_name` or through the `metric_column_mapping`.\n", "\n", - "* When a model is specified for generation, the \"prompt\" column in the dataset is required. Alternatively, when using a prompt template, the dataset needs columns matching the template's variables, and a \"prompt\" column can be assembled from those columns. \n", + "* **Perform model inference without a prompt template:** You have a dataset containing the input prompts to the model and want to perform model inference before evaluation. A column named `prompt` is required in the evaluation dataset and is used directly as input to the model.\n", "\n", + "* **Perform model inference with a prompt template:** You have a dataset containing the input variables to the prompt template and want to assemble the prompts for model inference. Evaluation dataset must contain column names corresponding to the variable names in the prompt template. For example, if prompt template is \"Instruction: {instruction}, context: {context}\", the dataset must contain `instruction` and `context` columns.\n", "\n", "\n", - "`EvalTask` supports extensive evaluation scenarios including BYOR, model inference with Gemini models, 3P models endpoints/SDK clients, or custom generation functions, using prompt templates, custom-defined model-based metrics and pairwise metric side-by-side(SxS) comparisons. The .evaluate() method triggers the evaluation process, optionally taking a model, prompt template, experiment run name, and other evaluation run configurations. You can view the SDK reference documentation for [Gen AI Evaluation package](https://cloud.google.com/vertex-ai/generative-ai/docs/reference/python/latest/vertexai.evaluation) for more details." + "\n", + "`EvalTask` supports extensive evaluation scenarios including BYOR, model inference with Gemini models, 3P models endpoints/SDK clients, or custom model generation functions, using computation-based metrics, model-based pointwise and pairwise metrics. The `evaluate()` method triggers the evaluation process, optionally taking a model, prompt template, experiment logging configuartions, and other evaluation run configurations. You can view the SDK reference documentation for [Gen AI Evaluation package](https://cloud.google.com/vertex-ai/generative-ai/docs/reference/python/latest/vertexai.evaluation) for more details." ] }, { @@ -615,7 +620,6 @@ "rouge_eval_task = EvalTask(\n", " dataset=dataset,\n", " metrics=[\"rouge_l_sum\"],\n", - " experiment=EXPERIMENT_NAME,\n", ")\n", "rouge_result = rouge_eval_task.evaluate(\n", " model=model,\n", @@ -716,7 +720,6 @@ "pointwise_eval_task = EvalTask(\n", " dataset=dataset,\n", " metrics=[POINTWISE_METRIC],\n", - " experiment=EXPERIMENT_NAME,\n", ")\n", "\n", "pointwise_result = pointwise_eval_task.evaluate(\n", @@ -798,7 +801,6 @@ "pointwise_eval_task = EvalTask(\n", " dataset=dataset,\n", " metrics=[linguistic_acceptability],\n", - " experiment=EXPERIMENT_NAME,\n", ")\n", "\n", "pointwise_result = pointwise_eval_task.evaluate(\n", @@ -934,7 +936,6 @@ "pairwise_eval_task = EvalTask(\n", " dataset=dataset,\n", " metrics=[PAIRWISE_METRIC],\n", - " experiment=EXPERIMENT_NAME,\n", ")\n", "# Specify a candidate model for pairwise comparison\n", "pairwise_result = pairwise_eval_task.evaluate(\n", @@ -984,8 +985,6 @@ }, "outputs": [], "source": [ - "EXPERIMENT_NAME = \"gen-ai-eval-3p-experiment\" # @param {type:\"string\"}\n", - "\n", "# Define an EvalTask with a list of metrics\n", "pointwise_eval_task = EvalTask(\n", " dataset=dataset,\n", @@ -995,9 +994,7 @@ " \"instruction_following\",\n", " \"text_quality\",\n", " \"rouge_l_sum\",\n", - " linguistic_acceptability,\n", " ],\n", - " experiment=EXPERIMENT_NAME,\n", ")" ] }, @@ -1171,35 +1168,6 @@ "#### Run evaluation on Llama 3.1 API Service" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "zEe6nnKNTZT2" - }, - "outputs": [], - "source": [ - "# Create a unique model-based metric for your own use cases\n", - "linguistic_acceptability = PointwiseMetric(\n", - " metric=\"linguistic_acceptability\",\n", - " metric_prompt_template=PointwiseMetricPromptTemplate(\n", - " criteria={\n", - " \"Proper Grammar\": \"The language's grammar rules are correctly followed, including but not limited to sentence structures, verb tenses, subject-verb agreement, proper punctuation, and capitalization.\",\n", - " \"Appropriate word choice\": \"Words chosen are appropriate and purposeful given their relative context and positioning in the text. Vocabulary demonstrates prompt understanding.\",\n", - " \"Reference Alignment\": \"The response is consistent and aligned with the reference.\",\n", - " },\n", - " rating_rubric={\n", - " \"5\": \"Excellent: The writing is grammatically correct, uses appropriate vocabulary and aligns perfectly with the reference.\",\n", - " \"4\": \"Good: The writing is generally grammatically correct, uses appropriate vocabulary and aligns well with the reference.\",\n", - " \"3\": \"Satisfactory: The writing may have minor grammatical errors or use less-appropriate vocabulary, but it aligns reasonably well with the reference.\",\n", - " \"2\": \"Unsatisfactory: The writing has significant grammatical errors, uses inappropriate vocabulary, deviates significantly from the reference.\",\n", - " \"1\": \"Poor: The writing is riddled with grammatical errors, uses highly inappropriate vocabulary, is completely unrelated to the reference.\",\n", - " },\n", - " input_variables=[\"prompt\", \"reference\"],\n", - " ),\n", - ")" - ] - }, { "cell_type": "code", "execution_count": null, @@ -1211,7 +1179,6 @@ "llama_result = pointwise_eval_task.evaluate(\n", " model=llama_model_fn,\n", " prompt_template=\"# System_prompt\\n{system_prompt} # Question\\n{question}\",\n", - " experiment_run_name=f\"eval-llama-3-1-{generate_uuid()}\",\n", ")" ] }, @@ -1335,13 +1302,9 @@ }, "outputs": [], "source": [ - "run_id = generate_uuid()\n", - "experiment_run_name = f\"eval-claude-3-{run_id}\"\n", - "\n", "claude_result = pointwise_eval_task.evaluate(\n", " model=anthropic_claude_model_fn,\n", " prompt_template=\"# System_prompt\\n{system_prompt} # Question\\n{question}\",\n", - " experiment_run_name=experiment_run_name,\n", ")" ] }, @@ -1367,502 +1330,6 @@ "display_explanations(claude_result, n=1)" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "Y_7R1QLdgoCp" - }, - "source": [ - "### Visualize Results" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3rE3n7E9gyEo" - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "
\n", - "
\n", - "\n", - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "eval_results = [(\"Llama 3.1\", llama_result), (\"Claude 3.5 Sonnet\", claude_result)]\n", - "display_bar_plot(\n", - " eval_results,\n", - " metrics=[\n", - " \"coherence\",\n", - " \"fluency\",\n", - " \"instruction_following\",\n", - " \"text_quality\",\n", - " \"rouge_l_sum\",\n", - " linguistic_acceptability,\n", - " ],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "5llc8RGSjIId" - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "
\n", - "
\n", - "\n", - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_radar_plot(\n", - " eval_results,\n", - " metrics=[\n", - " \"coherence\",\n", - " \"fluency\",\n", - " \"instruction_following\",\n", - " \"text_quality\",\n", - " \"linguistic_acceptability\",\n", - " ],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "knLMyJJZTJqk" - }, - "source": [ - "### View Experiment log for evaluation runs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "O48Hn7brTJYa" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "summary": "{\n \"name\": \"pointwise_eval_task\",\n \"rows\": 2,\n \"fields\": [\n {\n \"column\": \"experiment_name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"gen-ai-eval-3p-experiment\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"run_name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"eval-llama-3-1-kq13qu77\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"run_type\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"system.ExperimentRun\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"state\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"COMPLETE\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"param.prompt_template\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"# System_prompt\\n{system_prompt} # Question\\n{question}\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.rouge_l_sum/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.055117194889343274,\n \"min\": 0.07833343275693971,\n \"max\": 0.15628091728941002,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.07833343275693971\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.text_quality/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.14907119849998596,\n \"min\": 0.6324555320336759,\n \"max\": 0.8432740427115678,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.6324555320336759\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.instruction_following/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.2020815280171309,\n \"min\": 1.9,\n \"max\": 3.6,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.9\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.fluency/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22798464466519278,\n \"min\": 0.5208550662132413,\n \"max\": 0.8432740427115678,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.5208550662132413\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.coherence/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.6484162815045169,\n \"min\": 0.49721446300587663,\n \"max\": 1.4142135623730951,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.49721446300587663\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.linguistic_acceptability/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9192388155425117,\n \"min\": 1.7,\n \"max\": 3.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.7\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.fluency/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.610082140761769,\n \"min\": 2.123,\n \"max\": 4.4,\n \"num_unique_values\": 2,\n \"samples\": [\n 2.123\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.coherence/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.8031222920256962,\n \"min\": 1.45,\n \"max\": 4.0,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.45\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.instruction_following/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.4286068205728391,\n \"min\": 0.5676462121975466,\n \"max\": 1.1737877907772674,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.5676462121975466\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.rouge_l_sum/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.13354934150332623,\n \"min\": 0.19088731799999997,\n \"max\": 0.379754608,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.19088731799999997\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.linguistic_acceptability/std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.3392358788185142,\n \"min\": 0.674948557710553,\n \"max\": 1.1547005383792515,\n \"num_unique_values\": 2,\n \"samples\": [\n 0.674948557710553\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.text_quality/mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.131370849898476,\n \"min\": 1.8,\n \"max\": 3.4,\n \"num_unique_values\": 2,\n \"samples\": [\n 1.8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"metric.row_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 10.0,\n \"max\": 10.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 10.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", - "type": "dataframe" - }, - "text/html": [ - "\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
experiment_namerun_namerun_typestateparam.prompt_templatemetric.rouge_l_sum/stdmetric.text_quality/stdmetric.instruction_following/meanmetric.fluency/stdmetric.coherence/stdmetric.linguistic_acceptability/meanmetric.fluency/meanmetric.coherence/meanmetric.instruction_following/stdmetric.rouge_l_sum/meanmetric.linguistic_acceptability/stdmetric.text_quality/meanmetric.row_count
0gen-ai-eval-3p-experimenteval-claude-3-80kv797zsystem.ExperimentRunCOMPLETE# System_prompt\\n{system_prompt} # Question\\n{question}0.1562810.8432743.60.8432741.4142143.04.4004.001.1737880.3797551.1547013.410.0
1gen-ai-eval-3p-experimenteval-llama-3-1-kq13qu77system.ExperimentRunCOMPLETE# System_prompt\\n{system_prompt} # Question\\n{question}0.0783330.6324561.90.5208550.4972141.72.1231.450.5676460.1908870.6749491.810.0
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
\n", - "\n", - "
\n", - "
\n" - ], - "text/plain": [ - " experiment_name run_name run_type \\\n", - "0 gen-ai-eval-3p-experiment eval-claude-3-80kv797z system.ExperimentRun \n", - "1 gen-ai-eval-3p-experiment eval-llama-3-1-kq13qu77 system.ExperimentRun \n", - "\n", - " state param.prompt_template \\\n", - "0 COMPLETE # System_prompt\\n{system_prompt} # Question\\n{question} \n", - "1 COMPLETE # System_prompt\\n{system_prompt} # Question\\n{question} \n", - "\n", - " metric.rouge_l_sum/std metric.text_quality/std \\\n", - "0 0.156281 0.843274 \n", - "1 0.078333 0.632456 \n", - "\n", - " metric.instruction_following/mean metric.fluency/std \\\n", - "0 3.6 0.843274 \n", - "1 1.9 0.520855 \n", - "\n", - " metric.coherence/std metric.linguistic_acceptability/mean \\\n", - "0 1.414214 3.0 \n", - "1 0.497214 1.7 \n", - "\n", - " metric.fluency/mean metric.coherence/mean \\\n", - "0 4.400 4.00 \n", - "1 2.123 1.45 \n", - "\n", - " metric.instruction_following/std metric.rouge_l_sum/mean \\\n", - "0 1.173788 0.379755 \n", - "1 0.567646 0.190887 \n", - "\n", - " metric.linguistic_acceptability/std metric.text_quality/mean \\\n", - "0 1.154701 3.4 \n", - "1 0.674949 1.8 \n", - "\n", - " metric.row_count \n", - "0 10.0 \n", - "1 10.0 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pointwise_eval_task.display_runs()" - ] - }, { "cell_type": "markdown", "metadata": { @@ -2081,12 +1548,12 @@ }, "outputs": [], "source": [ - "experiment_name = \"eval-sdk-prompt-engineering\" # @param {type:\"string\"}\n", + "EXPERIMENT_NAME = \"eval-sdk-prompt-engineering\" # @param {type:\"string\"}\n", "\n", "summarization_eval_task = EvalTask(\n", " dataset=eval_dataset,\n", " metrics=metrics,\n", - " experiment=experiment_name,\n", + " experiment=EXPERIMENT_NAME,\n", ")" ] }, @@ -2168,47 +1635,7 @@ "metadata": { "id": "SSDyxE2aoYMH" }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "
\n", - "
\n", - "\n", - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_radar_plot(\n", " eval_results,\n", @@ -2222,47 +1649,7 @@ "metadata": { "id": "Id5sjYHboZHh" }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "
\n", - "
\n", - "\n", - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_bar_plot(\n", " eval_results,\n", @@ -2289,6 +1676,37 @@ "source": [ "summarization_eval_task.display_runs()" ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d7cce28cc97e" + }, + "source": [ + "## Cleaning up" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ef73672573e1" + }, + "outputs": [], + "source": [ + "delete_experiment = True\n", + "\n", + "# Please set your LOCATION to the same one used during Vertex AI SDK initialization.\n", + "LOCATION = \"us-central1\" # @param {type:\"string\"}\n", + "\n", + "if delete_experiment:\n", + "\n", + " from google.cloud import aiplatform\n", + "\n", + " aiplatform.init(project=PROJECT_ID, location=LOCATION)\n", + " experiment = aiplatform.Experiment(EXPERIMENT_NAME)\n", + " experiment.delete()" + ] } ], "metadata": { diff --git a/gemini/evaluation/evaluate_multimodal_task_image.ipynb b/gemini/evaluation/evaluate_multimodal_task_image.ipynb new file mode 100644 index 0000000000..f2923eadf8 --- /dev/null +++ b/gemini/evaluation/evaluate_multimodal_task_image.ipynb @@ -0,0 +1,745 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2024 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JAPoU8Sm5E6e" + }, + "source": [ + "# Evaluating multimodal task\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Google
Open in Colab\n", + "
\n", + "
\n", + " \n", + " \"Google
Open in Colab Enterprise\n", + "
\n", + "
\n", + " \n", + " \"Vertex
Open in Vertex AI Workbench\n", + "
\n", + "
\n", + " \n", + " \"GitHub
View on GitHub\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "84f0f73a0f76" + }, + "source": [ + "| | |\n", + "|-|-|\n", + "| Author(s) |[Ivan Nardini](https://github.com/inardini) |" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook shows how to use Vertex AI Python SDK for Gen AI Evaluation Service for evaluating multimodal task with your locally-defined `CustomMetric`, and use your own autorater model to perform model-based metric evaluation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7fRop-TJ5iZW" + }, + "source": [ + "
\n", + "⚠️ This notebook shows an experiment approach to evaluate multimodal task using Vertex AI Python SDK for Gen AI Evaluation Service. The result of the evaluation depends on the autorater's capabilities of handling multimodal inputs with evaluation criteria. ⚠️\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3XZf_4VEOvFo" + }, + "source": [ + "## Getting Started" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kE20na1OOvFo" + }, + "source": [ + "### Install Vertex AI SDK for Gen AI Evaluation Service" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "abLuRgBzOvFp" + }, + "outputs": [], + "source": [ + "%pip install -U -q google-cloud-aiplatform[evaluation]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R5Xep4W9lq-Z" + }, + "source": [ + "### Restart runtime\n", + "\n", + "To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n", + "\n", + "The restart might take a minute or longer. After it's restarted, continue to the next step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XRvKdaPDTznN" + }, + "outputs": [], + "source": [ + "import IPython\n", + "\n", + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SbmM4z7FOBpM" + }, + "source": [ + "
\n", + "⚠️ The kernel is going to restart. Wait until it's finished before continuing to the next step. ⚠️\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dmWOrTJ3gx13" + }, + "source": [ + "### Authenticate your notebook environment (Colab only)\n", + "\n", + "If you're running this notebook on Google Colab, run the cell below to authenticate your environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NyKGtVQjgx13" + }, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "if \"google.colab\" in sys.modules:\n", + " from google.colab import auth\n", + "\n", + " auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DF4l8DTdWgPY" + }, + "source": [ + "### Set Google Cloud project information and initialize Vertex AI SDK\n", + "\n", + "To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "Learn more about [setting up a project and a development environment](https://cloud.google.com/vertex-ai/docs/start/cloud-environment)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GTL_YzF9OvFq" + }, + "outputs": [], + "source": [ + "# Use the environment variable if the user doesn't provide Project ID.\n", + "import os\n", + "\n", + "import vertexai\n", + "\n", + "PROJECT_ID = \"[your-project-id]\" # @param {type: \"string\", placeholder: \"[your-project-id]\", isTemplate: true}\n", + "\n", + "if not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = str(os.environ.get(\"GOOGLE_CLOUD_PROJECT\"))\n", + "\n", + "LOCATION = os.environ.get(\"GOOGLE_CLOUD_REGION\", \"us-central1\")\n", + "\n", + "vertexai.init(project=PROJECT_ID, location=LOCATION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EdvJRUWRNGHE" + }, + "source": [ + "## Evaluate your multimodal use case with custom metric\n", + "\n", + "Imagine you have a customer insurance app which provides several services including live incident support using an LLM. Given a conversation about a car accident and an image of the damaged car, you want to evaluate the coherence of the generated responses.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5303c05f7aa6" + }, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6fc324893334" + }, + "outputs": [], + "source": [ + "# General\n", + "from IPython.display import HTML, Markdown, display\n", + "from vertexai.evaluation import CustomMetric, EvalTask\n", + "from vertexai.generative_models import (\n", + " GenerationConfig,\n", + " GenerativeModel,\n", + " HarmBlockThreshold,\n", + " HarmCategory,\n", + " Part,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tfQ7sPtOjZOw" + }, + "source": [ + "### Library settings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "RjWUgU1TjZOw" + }, + "outputs": [], + "source": [ + "# @title\n", + "import json\n", + "import logging\n", + "import warnings\n", + "\n", + "import pandas as pd\n", + "\n", + "logging.getLogger(\"urllib3.connectionpool\").setLevel(logging.ERROR)\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "# pd.set_option('display.max_colwidth', None)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QfaFPmm7gC2V" + }, + "source": [ + "### Helpers" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "2kyy7mGhgEj9" + }, + "outputs": [], + "source": [ + "def display_eval_result(\n", + " eval_result: dict | object,\n", + " title: str | None = None,\n", + " metrics: list[str] | None = None,\n", + ") -> None:\n", + " \"\"\"Display the evaluation results.\"\"\"\n", + " summary_metrics, metrics_table = (\n", + " eval_result.summary_metrics,\n", + " eval_result.metrics_table,\n", + " )\n", + "\n", + " metrics_df = pd.DataFrame.from_dict(summary_metrics, orient=\"index\").T\n", + " if metrics:\n", + " metrics_df = metrics_df.filter(\n", + " [\n", + " metric\n", + " for metric in metrics_df.columns\n", + " if any(selected_metric in metric for selected_metric in metrics)\n", + " ]\n", + " )\n", + " metrics_table = metrics_table.filter(\n", + " [\n", + " metric\n", + " for metric in metrics_table.columns\n", + " if any(selected_metric in metric for selected_metric in metrics)\n", + " ]\n", + " )\n", + "\n", + " if title:\n", + " # Display the title with Markdown for emphasis\n", + " display(Markdown(f\"## {title}\"))\n", + " # Display the summary metrics DataFrame\n", + " display(Markdown(\"### Summary Metrics\"))\n", + " display(metrics_df)\n", + " # Display the metrics table DataFrame\n", + " display(Markdown(\"### Row-based Metrics\"))\n", + " display(metrics_table)\n", + "\n", + "\n", + "def display_explanations(\n", + " eval_result: dict | object, metrics: list[str] | None = None, n: int = 1\n", + ") -> None:\n", + " \"\"\"Display the explanations.\"\"\"\n", + " style = \"white-space: pre-wrap; width: 1500px; overflow-x: auto;\"\n", + " metrics_table = eval_result.metrics_table\n", + " df = metrics_table.sample(n=n)\n", + "\n", + " if metrics:\n", + " df = df.filter(\n", + " [\"response\", \"baseline_model_response\"]\n", + " + [\n", + " metric\n", + " for metric in df.columns\n", + " if any(selected_metric in metric for selected_metric in metrics)\n", + " ]\n", + " )\n", + " for index, row in df.iterrows():\n", + " for col in df.columns:\n", + " display(HTML(f\"

{col}:

{row[col]}
\"))\n", + " display(HTML(\"
\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "17XhFaeuQu31" + }, + "source": [ + "### Load your evaluation dataset\n", + "\n", + "Depending on your task and metrics you are planning to calculate, you need to collect your evaluation dataset.\n", + "\n", + "In this scenario, you have a `context` column which contains both the conversation and the location of the image for a specific car accident scenario.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_o2YjZvbQ1dH" + }, + "outputs": [], + "source": [ + "instruction = \"\"\"\n", + "You are an insurance agent specializing in car accident assessments.\n", + "You will be provided with a conversation about a car accident and an image of the damaged car.\n", + "Your task is to analyze the image and identify the primary type of damage visible.\n", + "Use the conversation for context, but prioritize the visual evidence from the image.\n", + "\n", + "Categorize the primary damage as one of the following:\n", + "\n", + "* bumper\n", + "* engine_compartment\n", + "* hood\n", + "* lateral\n", + "* windshield\n", + "\n", + "If the image is unclear or the damage is not visible, respond with \"Unable to determine damage type from the provided image.\"\n", + "If the primary damage is something other than the listed categories, respond with \"Damage type not listed in available categories.\"\n", + "\n", + "Conversation:\n", + "{conversation}\n", + "\n", + "Image:\n", + "{image_of_car_accident}\n", + "\n", + "Provide your assessment of the primary damage type based on the image.\n", + "\"\"\"\n", + "\n", + "context = [\n", + " {\n", + " \"conversation\": '''AI insurance app: \"Hello, I'm the AI assistant for your car insurance. It looks like you've been in an accident. Could you please tell me what happened?\" App user: \"Yeah, I was just rear-ended while waiting at a red light.\" AI insurance app: \"I'm sorry to hear that. Could you take some pictures of the damage to your vehicle, including the license plate of the other car if possible?\" App user: (uploads the provided image) \"Here's the damage to my bumper.\" AI insurance app: \"Thank you. Can you describe any injuries to yourself or any passengers?\" App user: \"No, thankfully everyone is okay. Just a bit shaken up.\" AI insurance app: \"That's good to hear. I've created a claim based on the information and photo you provided. A representative will be in touch with you shortly to gather further details and discuss the next steps.\" App user: \"Okay, thank you.\" AI insurance app: \"You're welcome. Please don't hesitate to contact us if you have any questions.\"''',\n", + " \"image_of_car_accident\": \"gs://cloud-samples-data/generative-ai/evaluation/use_cases/car_assessment/bumper.jpg\",\n", + " },\n", + " {\n", + " \"conversation\": '''AI insurance app: \"Hi there! I'm Amelia, your AI assistant for [Insurance company name]. I see you've been in an accident. I'm so sorry to hear that. Are you okay?\" Driver: \"I'm a little shaken up, but I'm okay. My car isn't so lucky, though.\" AI insurance app: \"Oh no, I'm so sorry to hear that. Can you tell me what happened?\" Driver: \"I was stopped at a red light when I was rear-ended by another car. The damage to my car is pretty bad.\" AI insurance app: \"I understand. Can you take some pictures of the damage to your car, including the license plate of the other car if possible?\" Driver: \"Sure, here you go.\" (uploads the provided image) AI insurance app: \"Thank you. Is there anyone else involved in the accident?\" Driver: \"No, just me and the driver of the other car.\" AI insurance app: \"Okay. Do you need medical attention?\" Driver: \"No, I'm fine.\" AI insurance app: \"I'm glad to hear that. I've created a claim based on the information and photo you provided. A representative will be in touch with you shortly to gather further details and discuss the next steps.\" Driver: \"Okay, thank you.\" AI insurance app: \"You're welcome. Please don't hesitate to contact us if you have any questions.\"''',\n", + " \"image_of_car_accident\": \"gs://cloud-samples-data/generative-ai/evaluation/use_cases/car_assessment/engine_compartment.jpg\",\n", + " },\n", + " {\n", + " \"conversation\": '''**AI insurance app:** \"Hello, it appears you've been in an accident. Are you alright?\" **App user:** \"Yes, I'm okay. Just a bit shaken up.\" **AI insurance app:** \"I'm glad to hear you're physically unharmed. Could you please describe what happened?\" **App user:** \"Someone ran a red light and hit the front of my car.\" **AI insurance app:** \"I understand. To help assess the damage, could you please take some photos of your vehicle, especially the impacted areas? If possible, include a photo of the other vehicle's license plate.\" **App user:** (uploads the provided image) \"Here's the damage to my car.\" **AI insurance app:** \"Thank you for providing that. Were there any other vehicles involved, or was it just the two cars?\" **App user:** \"No, it was just us.\" **AI insurance app:** \"Okay. And to confirm, you don't require any medical assistance at this time?\" **App user:** \"No, I don't think so. Thankfully.\" **AI insurance app:** \"Alright. I've created an accident claim with the information and photos you've provided. One of our representatives will contact you soon to gather more details and guide you through the next steps.\" **App user:** \"Thank you, I appreciate the help.\" **AI insurance app:** \"You're very welcome. Please don't hesitate to reach out through the app if you have any further questions.\"''',\n", + " \"image_of_car_accident\": \"gs://cloud-samples-data/generative-ai/evaluation/use_cases/car_assessment/hood.jpg\",\n", + " },\n", + " {\n", + " \"conversation\": '''AI insurance app: \"Hi there! I'm Amelia, your AI assistant for [Insurance company name]. I see you've been in an accident. I'm so sorry to hear that. Are you okay?\" Driver: \"I'm a little shaken up, but I'm okay. My car isn't so lucky, though.\" AI insurance app: \"Oh no, I'm so sorry to hear that. Can you tell me what happened?\" Driver: \"I was stopped at a red light when I was rear-ended by another car. The damage to my car is pretty bad.\" AI insurance app: \"I understand. Can you take some pictures of the damage to your car, including the license plate of the other car if possible?\" Driver: \"Sure, here you go.\" (uploads the provided image) AI insurance app: \"Thank you. Is there anyone else involved in the accident?\" Driver: \"No, just me and the driver of the other car.\" AI insurance app: \"Okay. Do you need medical attention?\" Driver: \"No, I'm fine.\" AI insurance app: \"I'm glad to hear that. I've created a claim based on the information and photo you provided. A representative will be in touch with you shortly to gather further details and discuss the next steps.\" Driver: \"Okay, thank you.\" AI insurance app: \"You're welcome. Please don't hesitate to contact us if you have any questions.\"\"''',\n", + " \"image_of_car_accident\": \"gs://cloud-samples-data/generative-ai/evaluation/use_cases/car_assessment/lateral.jpg\",\n", + " },\n", + " {\n", + " \"conversation\": '''AI insurance app: \"Hello. I've received an alert that you may have been involved in an accident. Can you confirm and tell me if you're okay?\" App user: \"Yes, I was just in an accident. I'm okay, just a little shaken.\" AI insurance app: \"I'm relieved to hear you're not hurt. Can you tell me what happened?\" App user: \"A rock flew up from a truck in front of me and cracked my windshield.\" AI insurance app: \"I understand. To assess the damage, could you please take a photo of the damage?\" App user: (uploads the provided image) \"Here's a photo of the crack.\" AI insurance app: \"Thank you for providing that. Were there any other vehicles involved?\" App user: \"No, just my car.\" AI insurance app: \"Okay. And you didn't sustain any injuries?\" App user: \"No, thankfully not.\" AI insurance app: \"That's good to hear. I've created a claim for you based on the information and photo you provided. A representative will be in touch shortly to gather more details and guide you through the next steps.\" App user: \"Okay, thank you.\" AI insurance app: \"You're welcome. Please don't hesitate to contact us if you have any questions.\"''',\n", + " \"image_of_car_accident\": \"gs://cloud-samples-data/generative-ai/evaluation/use_cases/car_assessment/windshield.jpg\",\n", + " },\n", + "]\n", + "\n", + "generated_response = [\n", + " \"bumper\",\n", + " \"engine_compartment\",\n", + " \"lateral\",\n", + " \"lateral\",\n", + " \"windshield\",\n", + "]\n", + "\n", + "reference = [\"bumper\", \"engine_compartment\", \"hood\", \"lateral\", \"windshield\"]\n", + "\n", + "eval_dataset = pd.DataFrame(\n", + " {\n", + " \"instruction\": instruction,\n", + " \"context\": context,\n", + " \"response\": generated_response,\n", + " \"reference\": reference,\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "icfOEQopmpky" + }, + "outputs": [], + "source": [ + "eval_dataset.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EFUFtKRIUpAe" + }, + "source": [ + "### Bring your own autorater\n", + "\n", + "Gen AI Evaluation Service allows you to bring any autorater you prefer. In this case, you use `gemini-1.5-pro` with a typical structured output to evaluate your task." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oV6ZI1E5Uu1c" + }, + "outputs": [], + "source": [ + "def get_autorater_response(metric_prompt: list) -> dict:\n", + " metric_response_schema = {\n", + " \"type\": \"OBJECT\",\n", + " \"properties\": {\n", + " \"score\": {\"type\": \"NUMBER\"},\n", + " \"explanation\": {\"type\": \"STRING\"},\n", + " },\n", + " \"required\": [\"score\", \"explanation\"],\n", + " }\n", + "\n", + " autorater = GenerativeModel(\n", + " \"gemini-1.5-pro\",\n", + " generation_config=GenerationConfig(\n", + " response_mime_type=\"application/json\",\n", + " response_schema=metric_response_schema,\n", + " ),\n", + " safety_settings={\n", + " HarmCategory.HARM_CATEGORY_UNSPECIFIED: HarmBlockThreshold.BLOCK_NONE,\n", + " HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,\n", + " HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE,\n", + " HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_NONE,\n", + " HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,\n", + " },\n", + " )\n", + "\n", + " response = autorater.generate_content(metric_prompt)\n", + "\n", + " response_json = {}\n", + "\n", + " if response.candidates and len(response.candidates) > 0:\n", + " candidate = response.candidates[0]\n", + " if (\n", + " candidate.content\n", + " and candidate.content.parts\n", + " and len(candidate.content.parts) > 0\n", + " ):\n", + " part = candidate.content.parts[0]\n", + " if part.text:\n", + " response_json = json.loads(part.text)\n", + "\n", + " return response_json" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "88_KslQFVKme" + }, + "source": [ + "### Build your custom metric\n", + "\n", + "To evaluate a multimodal task, you define a custom metric which takes any multimodal content (image, pdf, video and more) and returns a score and an explanation according to some criteria, rating rubric, and evaluation steps using the defined autorater.\n", + "\n", + "In this scenario, you provide define a coherence metric in this car accident assessment scenario." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ngpoc0KjVNF0" + }, + "outputs": [], + "source": [ + "def custom_coherence_fn(instance):\n", + "\n", + " conversation = instance[\"context\"][\"conversation\"]\n", + " image_of_car_accident = instance[\"context\"][\"image_of_car_accident\"]\n", + " response = instance[\"response\"]\n", + "\n", + " eval_instruction_template = \"\"\"\n", + "\n", + " # Instruction\n", + " You are an insurance agent specializing in evaluating car accident assessments.\n", + " You will be provided with a conversation about a car accident and an image of the damaged car.\n", + " You should first read the conversation and look at the image carefully, and then evaluate the coherence of the generated responses based on the Criteria provided in the Evaluation section below.\n", + " You will assign the response a rating following the Rating Rubric and Evaluation Steps. Give step-by-step explanations for your rating, and only choose ratings from the Rating Rubric.\n", + "\n", + " # Evaluation\n", + " ## Metric Definition\n", + " You will be assessing coherence, which measures the ability to provide a coherent response based on the conversation and car accident image.\n", + "\n", + " ## Criteria\n", + " Coherence: It is the quality of being logical and consistent.\n", + " In the context of conversation, it refers to the way that ideas and information are presented in a way that is easy to understand and follow.\n", + " A coherent conversation will have a clear flow and will not jump around from topic to topic.\n", + " The user will also use language that is appropriate for the audience and will avoid making claims that are not supported by evidence.\n", + "\n", + " ## Rating Rubric\n", + " 5: (Perfectly Aligned) The image precisely matches the damage described in the conversation, and the response accurately reflects the damaged car part.\n", + " 4: (Highly Aligned) The image generally supports the conversation's description of the damage, and the response is a suitable representation of the affected area.\n", + " 3: (Moderately Aligned) The image shows damage that is plausibly related to the accident described, but there might be minor inconsistencies, and the response is broadly relevant but not entirely specific.\n", + " 2: (Poorly Aligned) The image and/or the response have significant inconsistencies with the described accident in the conversation, raising doubts about the claim's validity.\n", + " 1: (Misaligned) The image, response, and conversation have major contradictions or are completely unrelated, making the claim appear illogical or fraudulent.\n", + "\n", + " ## Evaluation Steps\n", + " STEP 1: Assess Claim Consistency: Carefully read the conversation to understand the user's description of the accident and the claimed damage.\n", + " STEP 2: Analyze Image Relevance: Examine the image to determine if the depicted damage aligns with the user's account. Pay attention to the location and type of damage.\n", + " STEP 3: Evaluate Label Accuracy: Check if the generated label correctly identifies the damaged car part as described in the conversation and shown in the image.\n", + " STEP 4: Identify Inconsistencies: Look for any discrepancies between the conversation, image, and label. For example, does the image show damage not mentioned in the conversation, or is the label incorrect for the damaged part?\n", + " STEP 5: Determine Overall Coherence: Based on the previous steps, assign a coherence score using the 1-5 rubric. Consider the severity of any inconsistencies and their potential impact on the claim's validity.\n", + " \"\"\"\n", + "\n", + " # read image from uri\n", + " image_file = Part.from_uri(image_of_car_accident, \"image/jpeg\")\n", + "\n", + " # generate the eval\n", + " evaluation_prompt = [\n", + " eval_instruction_template,\n", + " \"CONVERSATION: \",\n", + " conversation,\n", + " \"IMAGE: \",\n", + " image_file,\n", + " \"GENERATED RESPONSE: \",\n", + " response,\n", + " ]\n", + "\n", + " evaluation_response = get_autorater_response(evaluation_prompt)\n", + " return {\n", + " \"custom_coherence\": evaluation_response.get(\"score\", \"\"),\n", + " \"explanation\": evaluation_response.get(\"explanation\", \"\"),\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_7Vhz16neast" + }, + "outputs": [], + "source": [ + "custom_coherence_metric = CustomMetric(\n", + " name=\"custom_coherence\",\n", + " metric_function=custom_coherence_fn,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A9-m7tmlb9mt" + }, + "source": [ + "### Run Evaluation\n", + "\n", + "With the autorater, and the custom metric, you run your evaluation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nkiqjPHhcWo6" + }, + "outputs": [], + "source": [ + "metrics = [\"exact_match\", custom_coherence_metric]\n", + "\n", + "experiment_name = \"eval-multimodal-metric\"\n", + "\n", + "eval_task = EvalTask(\n", + " dataset=eval_dataset,\n", + " metrics=metrics,\n", + " experiment=experiment_name,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Sp-TlIORdyFb" + }, + "outputs": [], + "source": [ + "eval_result = eval_task.evaluate()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vKFOB6y_yh3w" + }, + "source": [ + "### Visualize and validate your evaluation results.\n", + "\n", + "Using some helpers, you can both evaluation results (scores, and explanations)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oHEblJYvgSpU" + }, + "outputs": [], + "source": [ + "display_eval_result(eval_result, title=\"Evaluation Results\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kdTt7ETMgfhR" + }, + "outputs": [], + "source": [ + "display_explanations(eval_result, metrics=[\"custom_coherence\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2a4e033321ad" + }, + "source": [ + "## Cleaning up" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "35VcF-W5peq5" + }, + "outputs": [], + "source": [ + "delete_experiment = True\n", + "\n", + "if delete_experiment:\n", + "\n", + " from google.cloud import aiplatform\n", + "\n", + " aiplatform.init(project=PROJECT_ID, location=LOCATION)\n", + " experiment = aiplatform.Experiment(experiment_name)\n", + " experiment.delete()" + ] + } + ], + "metadata": { + "colab": { + "name": "evaluate_multimodal_task_image.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/gemini/evaluation/evaluating_prompts_at_scale_with_gemini_batch_prediction_api.ipynb b/gemini/evaluation/evaluating_prompts_at_scale_with_gemini_batch_prediction_api.ipynb index 3af4e1ec5c..387acfe5ef 100644 --- a/gemini/evaluation/evaluating_prompts_at_scale_with_gemini_batch_prediction_api.ipynb +++ b/gemini/evaluation/evaluating_prompts_at_scale_with_gemini_batch_prediction_api.ipynb @@ -119,7 +119,7 @@ }, "outputs": [], "source": [ - "%pip install google-cloud-aiplatform --upgrade -q" + "%pip install --upgrade -q google-cloud-aiplatform google-cloud-bigquery bigframes pandas pandas-gbq" ] }, { @@ -182,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "HDVVYzTISvGv" }, @@ -208,6 +208,7 @@ "# File containing ground truth data in GCS.\n", "BUCKET_NAME = \"github-repo\"\n", "FOLDER = \"generative-ai/gemini/evaluation/sports_files\"\n", + "GCS_PREFIX = f\"gs://{BUCKET_NAME}/{FOLDER}\"\n", "SPORTS_FILE = \"sports_files.csv\"" ] }, @@ -222,24 +223,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "mUxxhafP4KM9" }, "outputs": [], "source": [ - "import base64\n", "import datetime\n", "import json\n", "import time\n", - "from typing import Any\n", "\n", "import bigframes.pandas as bpd\n", "from google.cloud import bigquery, storage\n", + "import pandas as pd\n", "import vertexai\n", - "from vertexai.batch_prediction._batch_prediction import BatchPredictionJob\n", - "from vertexai.generative_models import GenerativeModel, Part\n", - "\n", + "from vertexai.generative_models import GenerationConfig, GenerativeModel, Part\n", + "from vertexai.preview.batch_prediction import BatchPredictionJob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fb983d347169" + }, + "outputs": [], + "source": [ "# BigQuery client.\n", "bq_client = bigquery.Client(project=PROJECT_ID)\n", "\n", @@ -310,9 +319,7 @@ "\n", "\n", "create_dataset(dataset_id=BQ_DATASET, location=LOCATION)\n", - "load_files_table_from_uri(\n", - " files_table=FILES_TABLE, uri=f\"gs://{BUCKET_NAME}/{FOLDER}/{SPORTS_FILE}\"\n", - ")" + "load_files_table_from_uri(files_table=FILES_TABLE, uri=f\"{GCS_PREFIX}/{SPORTS_FILE}\")" ] }, { @@ -333,8 +340,7 @@ "outputs": [], "source": [ "ground_truth_df = bpd.read_gbq(FILES_TABLE)\n", - "images_uri = [row[\"path\"] for _, row in ground_truth_df.iterrows()]\n", - "print(images_uri[:2])" + "ground_truth_df[\"path\"][:2]" ] }, { @@ -357,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "id": "bk-EpTp0uJR4" }, @@ -370,8 +376,10 @@ "* tennis\n", "* volleyball\n", "\n", - "- Provide an answer in JSON format. 3. Example response:\n", - "'{\"sport\": \"baseball\"}'\n", + "- Provide an answer in JSON format.\n", + "\n", + "Example response:\n", + "{\"sport\": \"baseball\"}\n", "\n", "- Image:\n", "\"\"\"" @@ -394,36 +402,28 @@ }, "outputs": [], "source": [ - "def download_blob_into_memory(bucket_name: str, blob_name: str) -> Any:\n", - " \"\"\"Downloads a blob from GCS into memory.\"\"\"\n", - " bucket = storage_client.bucket(bucket_name)\n", - "\n", - " blob = bucket.blob(blob_name)\n", - " contents = blob.download_as_bytes()\n", - " return contents\n", - "\n", - "\n", - "def classify_image(model_id: str, prompt: str, bucket_name: str, blob_name: str) -> str:\n", + "def classify_image(model_id: str, prompt: str, gcs_prefix: str, blob_name: str) -> str:\n", " \"\"\"Classifies an image.\"\"\"\n", - " model = GenerativeModel(model_id)\n", - " contents = download_blob_into_memory(bucket_name, blob_name)\n", - " encoded_image = base64.b64encode(contents).decode(\"utf-8\")\n", - " image_content = Part.from_data(\n", - " data=base64.b64decode(encoded_image), mime_type=\"image/jpeg\"\n", + " model = GenerativeModel(\n", + " model_id,\n", + " generation_config=GenerationConfig(response_mime_type=\"application/json\"),\n", + " )\n", + " image_content = Part.from_uri(\n", + " uri=f\"{gcs_prefix}/{blob_name}\", mime_type=\"image/jpeg\"\n", " )\n", " contents = [prompt, image_content]\n", - " return model.generate_content(contents)\n", + " return model.generate_content(contents).text\n", "\n", "\n", "blob_name = ground_truth_df.iloc[0][\"path\"]\n", "response = classify_image(\n", " model_id=MODEL_ID,\n", " prompt=prompt,\n", - " bucket_name=BUCKET_NAME,\n", - " blob_name=f\"{FOLDER}/{blob_name}\",\n", + " gcs_prefix=GCS_PREFIX,\n", + " blob_name=blob_name,\n", ")\n", "print(f\"blob_name: {blob_name}\")\n", - "print(f\"response: {response.text}\")" + "print(f\"response: {response}\")" ] }, { @@ -432,8 +432,9 @@ "id": "Q79hx4JINXZh" }, "source": [ - "### Create a New Line JSON file applying the prompt to each of the images and upload to a BigQuery table\n", - "In this section, also an `evaluation_id` variable is created to identify the execution run." + "### Create a BigQuery table applying the prompt to each of the images\n", + "\n", + "In this section, an `evaluation_id` variable is created to identify the execution run." ] }, { @@ -444,94 +445,57 @@ }, "outputs": [], "source": [ - "def create_newline_json_file(\n", - " prompt: str,\n", - " evaluation_ts: str,\n", - " evaluation_id: str,\n", - " file_name: str,\n", - " bucket_name: str,\n", - " folder: str,\n", - " images_uri: list[str],\n", - ") -> None:\n", - " \"\"\"Creates a newline delimited JSON file.\"\"\"\n", - " with open(file_name, \"w\") as outfile:\n", - " for image_uri in images_uri:\n", - " contents = download_blob_into_memory(bucket_name, f\"{folder}/{image_uri}\")\n", - " encoded_image = base64.b64encode(contents).decode(\"utf-8\")\n", - " request = {\n", - " \"contents\": [\n", - " {\n", - " \"role\": \"user\",\n", - " \"parts\": [\n", - " {\"text\": prompt},\n", - " {\n", - " \"inlineData\": {\n", - " \"mimeType\": \"image/jpeg\",\n", - " \"data\": encoded_image,\n", - " }\n", - " },\n", - " ],\n", - " }\n", - " ]\n", - " }\n", - " line = {\n", - " \"evaluation_ts\": evaluation_ts,\n", - " \"evaluation_id\": evaluation_id,\n", - " \"prompt_text\": prompt,\n", - " \"gcs_uri\": image_uri,\n", - " \"request\": request,\n", - " }\n", - "\n", - " outfile.write(json.dumps(line))\n", - " outfile.write(\"\\n\")\n", - "\n", - "\n", - "def upload_newline_json_file(json_file_name: str, prompts_table: str) -> None:\n", - " \"\"\"Uploads a newline delimited JSON file to BigQuery.\"\"\"\n", - " job_config = bigquery.LoadJobConfig(\n", - " schema=[\n", - " bigquery.SchemaField(\"evaluation_ts\", \"STRING\"),\n", - " bigquery.SchemaField(\"evaluation_id\", \"STRING\"),\n", - " bigquery.SchemaField(\"prompt_text\", \"STRING\"),\n", - " bigquery.SchemaField(\"gcs_uri\", \"STRING\"),\n", - " bigquery.SchemaField(\"request\", \"JSON\"),\n", - " ],\n", - " source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,\n", - " write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE,\n", - " )\n", - "\n", - " with open(json_file_name, \"rb\") as source_file:\n", - " job = bq_client.load_table_from_file(\n", - " source_file, PROMPTS_TABLE, job_config=job_config\n", - " )\n", - "\n", - " job.result()\n", - " table = bq_client.get_table(prompts_table)\n", - " print(\n", - " f\"Loaded {table.num_rows} rows and {len(table.schema)} columns to \"\n", - " f\"{prompts_table}\"\n", - " )\n", - "\n", - "\n", "# Use current time as identifier of the evaluation.\n", "now = datetime.datetime.now()\n", + "evaluation_ts = str(now)\n", "evaluation_id = f\"{now.year}_{now.month}_{now.day}_{now.hour}_{now.minute}\"\n", "json_file_name = f\"/tmp/{evaluation_id}.json\"\n", "\n", "# Get URIs of the images from the ground truth table in BigQuery.\n", "ground_truth_df = bpd.read_gbq(FILES_TABLE)\n", - "images_uri = [row[\"path\"] for _, row in ground_truth_df.iterrows()]\n", "\n", - "create_newline_json_file(\n", - " prompt=prompt,\n", - " evaluation_ts=str(now),\n", - " evaluation_id=evaluation_id,\n", - " file_name=json_file_name,\n", - " bucket_name=BUCKET_NAME,\n", - " folder=FOLDER,\n", - " images_uri=images_uri,\n", + "prompts_df = pd.DataFrame(\n", + " [\n", + " {\n", + " \"evaluation_ts\": evaluation_ts,\n", + " \"evaluation_id\": evaluation_id,\n", + " \"prompt_text\": prompt,\n", + " \"gcs_uri\": image_uri,\n", + " \"request\": json.dumps(\n", + " {\n", + " \"contents\": [\n", + " {\n", + " \"role\": \"user\",\n", + " \"parts\": [\n", + " {\"text\": prompt},\n", + " {\n", + " \"fileData\": {\n", + " \"mimeType\": \"image/jpeg\",\n", + " \"fileUri\": f\"{GCS_PREFIX}/{image_uri}\",\n", + " }\n", + " },\n", + " ],\n", + " }\n", + " ],\n", + " \"generationConfig\": {\"responseMimeType\": \"application/json\"},\n", + " }\n", + " ),\n", + " }\n", + " for image_uri in ground_truth_df[\"path\"].values\n", + " ]\n", ")\n", - "upload_newline_json_file(json_file_name=json_file_name, prompts_table=PROMPTS_TABLE)" + "\n", + "# Save JSONL file\n", + "prompts_df.to_json(json_file_name, lines=True)\n", + "\n", + "# Upload to BQ\n", + "prompts_df.to_gbq(PROMPTS_TABLE, PROJECT_ID)\n", + "\n", + "table = bq_client.get_table(PROMPTS_TABLE)\n", + "print(\n", + " f\"Loaded {table.num_rows} rows and {len(table.schema)} columns to \"\n", + " f\"{PROMPTS_TABLE}\"\n", + ")" ] }, { @@ -559,14 +523,39 @@ " source_model=MODEL_ID,\n", " input_dataset=f\"bq://{PROMPTS_TABLE}\",\n", " output_uri_prefix=f\"bq://{text_generation_table}\",\n", - ")\n", - "\n", - "# Poll until the batch prediction job completes.\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "acbe70fd175d" + }, + "source": [ + "To check the status of the job, run this cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "06982be54458" + }, + "outputs": [], + "source": [ + "# Refresh the job until complete\n", "while not batch_job.has_ended:\n", + " time.sleep(10)\n", " batch_job.refresh()\n", - " print(f\"Batch job state: {batch_job.state}\")\n", - " time.sleep(30)\n", - "print(f\"Batch job state: {batch_job.state}\")" + "\n", + "# Check if the job succeeds\n", + "if batch_job.has_succeeded:\n", + " print(\"Job succeeded!\")\n", + "else:\n", + " print(f\"Job failed: {batch_job.error}\")\n", + "\n", + "# Check the location of the output\n", + "print(f\"Job output location: {batch_job.output_location}\")" ] }, { @@ -588,7 +577,7 @@ "source": [ "text_generation_df = bpd.read_gbq(text_generation_table)\n", "for row in text_generation_df[\"response\"][:5]:\n", - " print(json.loads(row)[0][\"content\"][\"parts\"][0][\"text\"])" + " print(json.loads(row)[\"candidates\"][0][\"content\"][\"parts\"][0][\"text\"])" ] }, { @@ -597,7 +586,7 @@ "id": "q96WpoTw4Kr6" }, "source": [ - "##Create Views in BigQuery" + "## Create Views in BigQuery" ] }, { @@ -627,69 +616,14 @@ " view = bigquery.Table(results_view)\n", "\n", " view.view_query = rf\"\"\"\n", - " WITH t1 AS\n", - " (\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " JSON_EXTRACT(response, '$[0].content.parts[0].text') AS json_data\n", - " FROM `{text_generation_table_prefix}_*`\n", - " ),\n", - " t2 AS (\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " REGEXP_EXTRACT(json_data, r'```json(.*)```') AS f\n", - " FROM t1\n", - " ),\n", - " t3 AS(\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " REPLACE(f, '\\\\n', '') AS f\n", - " FROM t2\n", - " ),\n", - " t4 AS (\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " REPLACE(f, '\\\\\"', '\"') AS f\n", - " FROM t3\n", - " ),\n", - " t5 AS (\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " JSON_QUERY(f, '$.sport') AS f\n", - " FROM t4\n", - " ),\n", - " t6 AS (\n", - " SELECT\n", - " evaluation_id,\n", - " evaluation_ts,\n", - " prompt_text,\n", - " gcs_uri,\n", - " REPLACE(f, '\"', '') AS f\n", - " FROM t5\n", - " )\n", - "\n", - " SELECT\n", + " SELECT\n", " evaluation_id,\n", " evaluation_ts,\n", " prompt_text,\n", " gcs_uri,\n", - " f AS label\n", - " FROM t6\"\"\"\n", + " JSON_VALUE(JSON_VALUE(response, '$.candidates[0].content.parts[0].text'), \"$.sport\") AS label\n", + " FROM `{text_generation_table_prefix}_*`\n", + " \"\"\"\n", "\n", " # Make an API request to create the view.\n", " view = bq_client.create_table(view, exists_ok=False)\n", diff --git a/gemini/function-calling/forced_function_calling.ipynb b/gemini/function-calling/forced_function_calling.ipynb index a7ee6756af..1d3b83c1ac 100644 --- a/gemini/function-calling/forced_function_calling.ipynb +++ b/gemini/function-calling/forced_function_calling.ipynb @@ -280,7 +280,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", ")" ] diff --git a/gemini/function-calling/function_calling_data_structures.ipynb b/gemini/function-calling/function_calling_data_structures.ipynb index b1516d79b5..2c142944cb 100644 --- a/gemini/function-calling/function_calling_data_structures.ipynb +++ b/gemini/function-calling/function_calling_data_structures.ipynb @@ -254,7 +254,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", ")" ] diff --git a/gemini/function-calling/function_calling_service/main.py b/gemini/function-calling/function_calling_service/main.py index 9bdda047f8..7735b8dc8e 100644 --- a/gemini/function-calling/function_calling_service/main.py +++ b/gemini/function-calling/function_calling_service/main.py @@ -57,7 +57,7 @@ ) model = GenerativeModel( - "gemini-1.5-flash-001", + "gemini-1.5-flash", generation_config=GenerationConfig(temperature=0), tools=[location_tool], ) diff --git a/gemini/function-calling/intro_diy_react_agent.ipynb b/gemini/function-calling/intro_diy_react_agent.ipynb index bf1c46249f..b021bece36 100644 --- a/gemini/function-calling/intro_diy_react_agent.ipynb +++ b/gemini/function-calling/intro_diy_react_agent.ipynb @@ -3,7 +3,6 @@ { "cell_type": "code", "execution_count": null, - "id": "5C5UHf-cgV0h", "metadata": { "id": "5C5UHf-cgV0h" }, @@ -26,7 +25,6 @@ }, { "cell_type": "markdown", - "id": "jXgCZ0VqYfNM", "metadata": { "id": "jXgCZ0VqYfNM" }, @@ -60,7 +58,6 @@ }, { "cell_type": "markdown", - "id": "a221cf0c-119c-4fa3-9987-3b202a51583c", "metadata": { "id": "f92df1bde019" }, @@ -72,7 +69,6 @@ }, { "cell_type": "markdown", - "id": "tGULENpgf_Pz", "metadata": { "id": "tGULENpgf_Pz" }, @@ -103,7 +99,6 @@ }, { "cell_type": "markdown", - "id": "3781462d-8394-4308-b669-d2d475b274ca", "metadata": { "id": "d295151a7c9b" }, @@ -117,7 +112,6 @@ }, { "cell_type": "markdown", - "id": "0d87b108-ca63-4eab-b756-9d7680b8a3e0", "metadata": { "id": "6edffc043e41" }, @@ -139,7 +133,6 @@ }, { "cell_type": "markdown", - "id": "6e0c0345-b7dd-465a-b65c-4504b89e630c", "metadata": { "id": "d4d798879063" }, @@ -159,7 +152,6 @@ }, { "cell_type": "markdown", - "id": "62204b44-e3c6-4528-9172-3549aa0698d0", "metadata": { "id": "39992f621eb0" }, @@ -175,7 +167,6 @@ }, { "cell_type": "markdown", - "id": "f2a1da62-e8a9-43fe-aef7-051b132b11fe", "metadata": { "id": "39fb8cb87102" }, @@ -185,7 +176,6 @@ }, { "cell_type": "markdown", - "id": "6aa53e57-062a-47d9-8325-a0525dfc3449", "metadata": { "id": "996eae6d82d3" }, @@ -197,7 +187,6 @@ { "cell_type": "code", "execution_count": null, - "id": "e69dbf86-7de2-44b8-8a70-16ddb8f22e9a", "metadata": { "id": "2969acc84135" }, @@ -208,7 +197,6 @@ }, { "cell_type": "markdown", - "id": "c26e4ddd-2d61-481a-a7a6-fa274996160a", "metadata": { "id": "70b9a7f00179" }, @@ -221,7 +209,6 @@ { "cell_type": "code", "execution_count": null, - "id": "8f9a0ed1-b7e0-4a8e-9548-517326e83ab8", "metadata": { "id": "cf71cbda01f9" }, @@ -236,7 +223,6 @@ }, { "cell_type": "markdown", - "id": "449a49f5-d2a8-4a98-8575-76e07e1c5022", "metadata": { "id": "02d6dfc513c3" }, @@ -248,7 +234,6 @@ }, { "cell_type": "markdown", - "id": "92700fe3-fe5c-4654-b68f-dc8c63ad20f5", "metadata": { "id": "575d71266b5b" }, @@ -261,7 +246,6 @@ { "cell_type": "code", "execution_count": null, - "id": "ed72b998-17fb-4459-a868-79c0967dc3ed", "metadata": { "id": "b95a7aa9f3d8" }, @@ -279,7 +263,6 @@ }, { "cell_type": "markdown", - "id": "b68d461a-c16b-47ec-8e8e-75812fce086e", "metadata": { "id": "4ee80c5b9d54" }, @@ -294,7 +277,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "129d4be8-433d-4e15-8c48-5cb300f38d1e", "metadata": { "id": "a41550d555ea" }, @@ -310,7 +292,6 @@ }, { "cell_type": "markdown", - "id": "528cbd2e-4a43-4642-ab53-ab1235fd5cb5", "metadata": { "id": "71b40692ace5" }, @@ -321,7 +302,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "a9abdc7f-52e0-454a-8d65-28983e6e7792", "metadata": { "id": "a17e54f9eb9d" }, @@ -339,7 +319,6 @@ }, { "cell_type": "markdown", - "id": "Az-OexEYJ9_I", "metadata": { "id": "Az-OexEYJ9_I" }, @@ -350,14 +329,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "fY9wu9XUcxzy", "metadata": { "id": "fY9wu9XUcxzy" }, "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " system_instruction=[\n", " \"You are an assistant that helps me tidy my room.\"\n", " \"Your goal is to make sure all the books are on the shelf, all clothes are in the hamper, and the trash is empty.\",\n", @@ -376,7 +354,6 @@ }, { "cell_type": "markdown", - "id": "f8253601-29f8-408e-9fa8-c3e01f2f33d7", "metadata": { "id": "4d292a1ed394" }, @@ -387,7 +364,6 @@ { "cell_type": "code", "execution_count": 4, - "id": "95f75c8d-b7b7-4f6b-b3f5-80815dbf04a8", "metadata": { "id": "b724d6f5d271" }, @@ -399,7 +375,6 @@ { "cell_type": "code", "execution_count": 5, - "id": "dnk1DurbxspA", "metadata": { "id": "dnk1DurbxspA" }, @@ -444,7 +419,6 @@ }, { "cell_type": "markdown", - "id": "DyVd9-OALAKc", "metadata": { "id": "DyVd9-OALAKc" }, @@ -456,7 +430,6 @@ { "cell_type": "code", "execution_count": 6, - "id": "sho-9jxJW7Fe", "metadata": { "id": "sho-9jxJW7Fe" }, @@ -505,7 +478,6 @@ }, { "cell_type": "markdown", - "id": "4718fe78-b61f-4643-b746-c4361ce55ef5", "metadata": { "id": "cdca5fc7ee78" }, @@ -517,7 +489,6 @@ { "cell_type": "code", "execution_count": 7, - "id": "91212e66-54d1-401a-9bb8-d5520685ee74", "metadata": { "id": "163e0a64b8b1" }, @@ -540,7 +511,6 @@ }, { "cell_type": "markdown", - "id": "4e34ffb4-a2e5-405b-a028-49de82a57e78", "metadata": { "id": "da5935b90607" }, @@ -551,7 +521,6 @@ { "cell_type": "code", "execution_count": 8, - "id": "l5V0GIOASWm8", "metadata": { "id": "l5V0GIOASWm8" }, @@ -589,7 +558,6 @@ }, { "cell_type": "markdown", - "id": "L2Ytt0GjKfRv", "metadata": { "id": "L2Ytt0GjKfRv" }, @@ -599,7 +567,6 @@ }, { "cell_type": "markdown", - "id": "zbzqp2YJ3bfc", "metadata": { "id": "zbzqp2YJ3bfc" }, @@ -642,7 +609,6 @@ }, { "cell_type": "markdown", - "id": "Obyi7GxaUXjE", "metadata": { "id": "Obyi7GxaUXjE" }, @@ -659,7 +625,6 @@ { "cell_type": "code", "execution_count": 9, - "id": "MzlEFdXVKAFm", "metadata": { "id": "MzlEFdXVKAFm" }, @@ -721,7 +686,6 @@ { "cell_type": "code", "execution_count": 10, - "id": "4GGRQo8WQvV0", "metadata": { "id": "4GGRQo8WQvV0" }, @@ -791,7 +755,6 @@ }, { "cell_type": "markdown", - "id": "VY6cFvSvhAmt", "metadata": { "id": "VY6cFvSvhAmt" }, @@ -818,7 +781,6 @@ { "cell_type": "code", "execution_count": 11, - "id": "c7f1cf4c-b052-4c3b-9b39-fe9a81ba33f0", "metadata": { "id": "c69dbb409b30" }, @@ -887,7 +849,6 @@ }, { "cell_type": "markdown", - "id": "1g8wcyWLay_8", "metadata": { "id": "1g8wcyWLay_8" }, @@ -897,7 +858,6 @@ }, { "cell_type": "markdown", - "id": "bwpqqrqcfL6l", "metadata": { "id": "bwpqqrqcfL6l" }, @@ -911,7 +871,6 @@ { "cell_type": "code", "execution_count": 12, - "id": "Yk872z-Rax0l", "metadata": { "id": "Yk872z-Rax0l" }, @@ -987,7 +946,6 @@ { "cell_type": "code", "execution_count": 13, - "id": "I6dcLLuTduZY", "metadata": { "id": "I6dcLLuTduZY" }, @@ -1079,7 +1037,6 @@ }, { "cell_type": "markdown", - "id": "DUTSUNDHfHS6", "metadata": { "id": "DUTSUNDHfHS6" }, @@ -1090,7 +1047,6 @@ { "cell_type": "code", "execution_count": 14, - "id": "VjhvHk8wfGnc", "metadata": { "id": "VjhvHk8wfGnc" }, @@ -1157,7 +1113,6 @@ }, { "cell_type": "markdown", - "id": "Xylz5_c8foms", "metadata": { "id": "Xylz5_c8foms" }, @@ -1171,7 +1126,6 @@ }, { "cell_type": "markdown", - "id": "bIDKrkZ1-3ke", "metadata": { "id": "bIDKrkZ1-3ke" }, @@ -1183,7 +1137,6 @@ { "cell_type": "code", "execution_count": 15, - "id": "I8xgYekJ-_Ks", "metadata": { "id": "I8xgYekJ-_Ks" }, @@ -1238,7 +1191,6 @@ }, { "cell_type": "markdown", - "id": "Y9k3LX6fDlzB", "metadata": { "id": "Y9k3LX6fDlzB" }, @@ -1248,7 +1200,6 @@ }, { "cell_type": "markdown", - "id": "f6dce86a-956d-4744-ab41-b0acc01d3fee", "metadata": { "id": "1Rp8IV5XDla9" }, @@ -1257,7 +1208,7 @@ "\n", "```\n", "model_fc = GenerativeModel(\n", - " \"gemini-1.5-pro-001\", \n", + " \"gemini-1.5-pro\", \n", " system_instruction=[\n", " \"You are an assistant that helps me tidy my room.\"\n", " \"Your goal is to make sure all the books are on the shelf, all clothes are in the hamper, and the trash is empty.\",\n", @@ -1270,7 +1221,6 @@ }, { "cell_type": "markdown", - "id": "ZiqEr7OwCs4v", "metadata": { "id": "ZiqEr7OwCs4v" }, @@ -1322,7 +1272,6 @@ }, { "cell_type": "markdown", - "id": "598e828e-b569-4ac9-810c-cdd54b0911d4", "metadata": { "id": "e98c7c33c936" }, @@ -1342,7 +1291,6 @@ { "cell_type": "code", "execution_count": 16, - "id": "491c50c1-72e2-4593-88cb-0cc494fe2db4", "metadata": { "id": "f66655a3b3a7" }, @@ -1394,7 +1342,6 @@ { "cell_type": "code", "execution_count": 17, - "id": "f3166b71-583a-4ba9-9457-77f6f30978d3", "metadata": { "id": "da084bc71468" }, @@ -1418,7 +1365,6 @@ { "cell_type": "code", "execution_count": 18, - "id": "cf7a6151-cd48-4218-9996-7086c4e1bce2", "metadata": { "id": "6fb3f986f6e7" }, @@ -1465,7 +1411,6 @@ { "cell_type": "code", "execution_count": 19, - "id": "0ekJ1kScDNc1", "metadata": { "id": "0ekJ1kScDNc1" }, diff --git a/gemini/function-calling/intro_function_calling.ipynb b/gemini/function-calling/intro_function_calling.ipynb index 50b7eee8ee..30d4eb523a 100644 --- a/gemini/function-calling/intro_function_calling.ipynb +++ b/gemini/function-calling/intro_function_calling.ipynb @@ -392,7 +392,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", " tools=[retail_tool],\n", ")\n", diff --git a/gemini/function-calling/multimodal_function_calling.ipynb b/gemini/function-calling/multimodal_function_calling.ipynb index e6176d9ddb..6e4779725f 100644 --- a/gemini/function-calling/multimodal_function_calling.ipynb +++ b/gemini/function-calling/multimodal_function_calling.ipynb @@ -153,7 +153,7 @@ }, "outputs": [], "source": [ - "# %pip install --upgrade --user --quiet google-cloud-aiplatform wikipedia" + "%pip install --upgrade --user --quiet google-cloud-aiplatform wikipedia" ] }, { @@ -175,11 +175,11 @@ }, "outputs": [], "source": [ - "# # Restart kernel after installs so that your environment can access the new packages\n", - "# import IPython\n", + "# Restart kernel after installs so that your environment can access the new packages\n", + "import IPython\n", "\n", - "# app = IPython.Application.instance()\n", - "# app.kernel.do_shutdown(True)" + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" ] }, { @@ -382,7 +382,7 @@ } ], "source": [ - "model = GenerativeModel(\"gemini-1.5-pro-001\")\n", + "model = GenerativeModel(\"gemini-1.5-pro\")\n", "generation_config = GenerationConfig(temperature=0)\n", "\n", "response = model.generate_content(\n", @@ -703,7 +703,7 @@ } ], "source": [ - "model = GenerativeModel(\"gemini-1.5-pro-001\")\n", + "model = GenerativeModel(\"gemini-1.5-pro\")\n", "generation_config = GenerationConfig(temperature=0)\n", "\n", "response = model.generate_content(\n", @@ -926,7 +926,7 @@ } ], "source": [ - "model = GenerativeModel(\"gemini-1.5-pro-001\")\n", + "model = GenerativeModel(\"gemini-1.5-pro\")\n", "generation_config = GenerationConfig(temperature=0)\n", "\n", "response = model.generate_content(\n", @@ -1140,7 +1140,7 @@ } ], "source": [ - "model = GenerativeModel(\"gemini-1.5-pro-001\")\n", + "model = GenerativeModel(\"gemini-1.5-pro\")\n", "generation_config = GenerationConfig(temperature=0)\n", "\n", "response = model.generate_content(\n", @@ -1361,7 +1361,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", " tools=[chat_tool],\n", ")\n", diff --git a/gemini/function-calling/parallel_function_calling.ipynb b/gemini/function-calling/parallel_function_calling.ipynb index ad0d762b63..9272095d26 100644 --- a/gemini/function-calling/parallel_function_calling.ipynb +++ b/gemini/function-calling/parallel_function_calling.ipynb @@ -350,7 +350,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", " tools=[wikipedia_tool],\n", ")\n", @@ -634,7 +634,7 @@ "outputs": [], "source": [ "model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro\",\n", " generation_config=GenerationConfig(temperature=0),\n", " tools=[wikipedia_tool],\n", ")\n", diff --git a/gemini/function-calling/sql-talk-app/app.py b/gemini/function-calling/sql-talk-app/app.py index 4661a27b0e..da3d1f4df1 100644 --- a/gemini/function-calling/sql-talk-app/app.py +++ b/gemini/function-calling/sql-talk-app/app.py @@ -76,7 +76,7 @@ ) model = GenerativeModel( - "gemini-1.5-pro-001", + "gemini-1.5-pro", generation_config={"temperature": 0}, tools=[sql_query_tool], ) diff --git a/gemini/function-calling/use_case_company_news_and_insights.ipynb b/gemini/function-calling/use_case_company_news_and_insights.ipynb index cba08a327f..c32ef8a7e4 100644 --- a/gemini/function-calling/use_case_company_news_and_insights.ipynb +++ b/gemini/function-calling/use_case_company_news_and_insights.ipynb @@ -3,7 +3,6 @@ { "cell_type": "code", "execution_count": null, - "id": "7331ed20-4a7e-4ee3-8454-528ac48315f0", "metadata": { "id": "2eec5cc39a59" }, @@ -26,7 +25,6 @@ }, { "cell_type": "markdown", - "id": "e6aa9ed3-54c1-48e3-8c8f-e8f3cf152ec3", "metadata": { "id": "7c5e37584117" }, @@ -59,7 +57,6 @@ }, { "cell_type": "markdown", - "id": "e762db26-12ed-4287-b79f-37de312c6b59", "metadata": { "id": "3d8f91830324" }, @@ -71,7 +68,6 @@ }, { "cell_type": "markdown", - "id": "dbc3cc7d-5349-4f8f-8244-751cb51813eb", "metadata": { "id": "7102b39c47f0" }, @@ -89,7 +85,6 @@ }, { "cell_type": "markdown", - "id": "7e82832d-fb80-4b04-9905-79bc6008d42c", "metadata": { "id": "be7720612149" }, @@ -99,7 +94,6 @@ }, { "cell_type": "markdown", - "id": "5a0b9005-e629-4206-b7ee-635d36423760", "metadata": { "id": "25543ba572f7" }, @@ -109,7 +103,6 @@ }, { "cell_type": "markdown", - "id": "9eee6b6e-3dc0-4f6b-854d-1d6989b95931", "metadata": { "id": "308fb67d0e91" }, @@ -134,7 +127,6 @@ }, { "cell_type": "markdown", - "id": "e8c374a2-f30b-4a20-9643-489e11d6e4b4", "metadata": { "id": "0f07a65d6572" }, @@ -161,7 +153,6 @@ }, { "cell_type": "markdown", - "id": "56bad415-a400-42c3-800f-5c700a6c6cd7", "metadata": { "id": "fcd6fe2a7b6d" }, @@ -174,7 +165,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "ad3fc543-8dc7-43da-b095-0e4a965b7de4", "metadata": { "id": "cc681958b8f7" }, @@ -185,7 +175,6 @@ }, { "cell_type": "markdown", - "id": "5c810968-005f-4776-8d2b-99e04a49b550", "metadata": { "id": "8ed31279f009" }, @@ -200,7 +189,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "1e0edafe-5cf9-4979-87fa-79958402f9dc", "metadata": { "id": "567212ff53a6" }, @@ -214,7 +202,6 @@ }, { "cell_type": "markdown", - "id": "b27adccc-967a-469c-a05e-5a1eabaef1a3", "metadata": { "id": "972161a99004" }, @@ -226,7 +213,6 @@ }, { "cell_type": "markdown", - "id": "299649d4-7959-455a-8971-d0d3bb5cc474", "metadata": { "id": "4460fec7ce2e" }, @@ -239,7 +225,6 @@ { "cell_type": "code", "execution_count": 3, - "id": "e641fb7d-2ed9-492e-ba8e-fabc86721630", "metadata": { "id": "59c887aafd02" }, @@ -255,7 +240,6 @@ }, { "cell_type": "markdown", - "id": "95c810db-eeea-4475-8c03-9016429272f8", "metadata": { "id": "56e1e9ca7ddc" }, @@ -270,7 +254,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "529b3f2d-c270-4937-9b70-16651f260125", "metadata": { "id": "41c34a683156" }, @@ -286,7 +269,6 @@ }, { "cell_type": "markdown", - "id": "a0b04f91-62a4-48cf-8a84-50d41aaf5d79", "metadata": { "id": "26bcfc24e720" }, @@ -297,7 +279,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "51a1e99c-a72d-4f83-8c5c-f1e67592230d", "metadata": { "id": "6d249cfcaf52" }, @@ -316,7 +297,6 @@ }, { "cell_type": "markdown", - "id": "521aa76f", "metadata": { "id": "a8a3a9ff0f3d" }, @@ -330,7 +310,6 @@ }, { "cell_type": "markdown", - "id": "d93f45cd-3cbf-4b54-be6a-bbead953a712", "metadata": { "id": "1f968100a531" }, @@ -340,7 +319,6 @@ }, { "cell_type": "markdown", - "id": "194f894d", "metadata": { "id": "bf4ba70381cd" }, @@ -355,7 +333,6 @@ { "cell_type": "code", "execution_count": 3, - "id": "fd4dbed2-35f3-40b7-8bdf-abd598d948e7", "metadata": { "id": "82979452ed3f" }, @@ -426,7 +403,6 @@ }, { "cell_type": "markdown", - "id": "91bd0576", "metadata": { "id": "43373d59999e" }, @@ -439,7 +415,6 @@ { "cell_type": "code", "execution_count": 4, - "id": "6d5cd101-14d7-4562-8f5c-73a08fdc28b2", "metadata": { "id": "8f75dcb05e2f" }, @@ -457,7 +432,6 @@ }, { "cell_type": "markdown", - "id": "120c5732-68b4-42c8-8f11-2e89f52e8b33", "metadata": { "id": "7d4cc72d8e6c" }, @@ -472,7 +446,6 @@ { "cell_type": "code", "execution_count": 5, - "id": "bdbbab72-a7f1-4bad-9c5a-3e69431c6309", "metadata": { "id": "643a1ff45db9" }, @@ -484,7 +457,6 @@ }, { "cell_type": "markdown", - "id": "bf483769-25ac-40f2-bf17-7da437f2e68a", "metadata": { "id": "1e32e0694d45" }, @@ -494,7 +466,6 @@ }, { "cell_type": "markdown", - "id": "6930cc77-577d-4dd5-998e-af0db2ca9971", "metadata": { "id": "706839cf3dba" }, @@ -504,7 +475,6 @@ }, { "cell_type": "markdown", - "id": "6a2ad181", "metadata": { "id": "4ef2ec1e97eb" }, @@ -515,7 +485,6 @@ { "cell_type": "code", "execution_count": 6, - "id": "672ee652-a36f-4267-8e54-84bc3ad07bf7", "metadata": { "id": "81b9950967e1" }, @@ -547,7 +516,6 @@ }, { "cell_type": "markdown", - "id": "16bde708-dfbb-46e9-8070-d8ef687c9a06", "metadata": { "id": "a9f9c6b3fb4a" }, @@ -558,7 +526,6 @@ { "cell_type": "code", "execution_count": 7, - "id": "c2594766-4f93-4dbf-982b-c50131a9fbd9", "metadata": { "id": "900d2529a6ac" }, @@ -574,7 +541,6 @@ }, { "cell_type": "markdown", - "id": "25bf5867", "metadata": { "id": "87eb49d4fe0f" }, @@ -587,14 +553,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "9938f4ec-edd7-4738-85bd-ed125bdd54c4", "metadata": { "id": "11cb17ef1096" }, "outputs": [], "source": [ "gemini_model = GenerativeModel(\n", - " \"gemini-1.5-pro-001\",\n", + " \"gemini-1.5-pro-002\",\n", " generation_config=GenerationConfig(temperature=0),\n", " tools=[company_insights_tool],\n", ")" @@ -602,7 +567,6 @@ }, { "cell_type": "markdown", - "id": "f558dfaf-3b8b-4306-94e1-fe13f07361f7", "metadata": { "id": "7cdfddffe83b" }, @@ -613,7 +577,6 @@ { "cell_type": "code", "execution_count": 9, - "id": "1bd88a23-363e-4b8f-bb42-6cb0c841d8be", "metadata": { "id": "5be6ada7bb71" }, @@ -624,7 +587,6 @@ }, { "cell_type": "markdown", - "id": "71865ea8-7dd2-426a-b66e-eaa4df23e6d5", "metadata": { "id": "711af0ca6d5a" }, @@ -638,7 +600,6 @@ }, { "cell_type": "markdown", - "id": "7cdfa14f-dc76-464b-ba73-e7f22634b542", "metadata": { "id": "7f5389c4a114" }, @@ -648,7 +609,6 @@ }, { "cell_type": "markdown", - "id": "2b952425-29c4-4c81-b7ef-adf198ed2c20", "metadata": { "id": "0e00b8dd9c4b" }, @@ -659,7 +619,6 @@ { "cell_type": "code", "execution_count": 10, - "id": "87f92513-c96f-44f2-90f8-488bf700fd32", "metadata": { "id": "d9130fa4193a" }, @@ -718,7 +677,6 @@ }, { "cell_type": "markdown", - "id": "7eec74fa-14f9-4693-8c1a-cce19937eb9d", "metadata": { "id": "5ea534893263" }, @@ -737,7 +695,6 @@ { "cell_type": "code", "execution_count": 11, - "id": "11166e3d", "metadata": { "id": "daf9c088624e" }, @@ -866,7 +823,6 @@ }, { "cell_type": "markdown", - "id": "9a5a41a8", "metadata": { "id": "0fc0ec32b4fe" }, @@ -887,7 +843,6 @@ { "cell_type": "code", "execution_count": 12, - "id": "ea971e94-a838-4165-87f7-1b2d0833f92a", "metadata": { "id": "04f4c36f5bb5" }, @@ -1025,7 +980,6 @@ }, { "cell_type": "markdown", - "id": "95571d4d-8c19-45ba-beed-17d14ef4d0ad", "metadata": { "id": "12b76d95eb48" }, @@ -1042,7 +996,6 @@ { "cell_type": "code", "execution_count": 13, - "id": "86e6d97d-d282-4e8d-8f1e-c325f988cedf", "metadata": { "id": "c377e4b2d33b" }, @@ -1276,7 +1229,6 @@ }, { "cell_type": "markdown", - "id": "bd81f8c1-41d8-4de6-b83d-e5ccd34ba6c4", "metadata": { "id": "6989344d0365" }, @@ -1293,7 +1245,6 @@ { "cell_type": "code", "execution_count": 14, - "id": "af6681a8-7600-4492-87c6-a239725e9eae", "metadata": { "id": "50edfeabd1c4" }, @@ -1424,7 +1375,6 @@ }, { "cell_type": "markdown", - "id": "b0be49a0", "metadata": { "id": "8ed746e33ba0" }, @@ -1441,7 +1391,6 @@ { "cell_type": "code", "execution_count": 15, - "id": "c5e6d187-238c-41fd-91fb-6d2eacbdb457", "metadata": { "id": "f912100fcddc" }, @@ -1569,7 +1518,6 @@ }, { "cell_type": "markdown", - "id": "da28b7a9", "metadata": { "id": "a94de4cd2309" }, diff --git a/gemini/orchestration/intro_langgraph_gemini.ipynb b/gemini/orchestration/intro_langgraph_gemini.ipynb index 1bea27fc85..8520986fcd 100644 --- a/gemini/orchestration/intro_langgraph_gemini.ipynb +++ b/gemini/orchestration/intro_langgraph_gemini.ipynb @@ -330,7 +330,7 @@ }, "outputs": [], "source": [ - "model = ChatVertexAI(model=\"gemini-1.5-pro-002\", temperature=0)" + "model = ChatVertexAI(model=\"gemini-1.5-pro\", temperature=0)" ] }, { @@ -549,7 +549,7 @@ "outputs": [], "source": [ "# Define the system prompt instructing the agent on how to answer the user's question.\n", - "SYSTEM_PROMPT = \"\"\"Use the tools provided to answer the user's question. \n", + "SYSTEM_PROMPT = \"\"\"Use the tools provided to answer the user's question.\n", "Also look up the exchange rate for all currencies from three months prior\n", "and compare the values.\"\"\"\n", "\n", diff --git a/gemini/orchestration/langgraph_gemini_podcast.ipynb b/gemini/orchestration/langgraph_gemini_podcast.ipynb new file mode 100644 index 0000000000..dc4289441b --- /dev/null +++ b/gemini/orchestration/langgraph_gemini_podcast.ipynb @@ -0,0 +1,1430 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2024 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JAPoU8Sm5E6e" + }, + "source": [ + "# Build Your Own AI Podcasting Agent with LangGraph & Gemini\n", + "## AI-Powered Podcast Creation with Automated Research, Writing, and Refinement\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Google
Open in Colab\n", + "
\n", + "
\n", + " \n", + " \"Google
Open in Colab Enterprise\n", + "
\n", + "
\n", + " \n", + " \"Vertex
Open in Vertex AI Workbench\n", + "
\n", + "
\n", + " \n", + " \"GitHub
View on GitHub\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "84f0f73a0f76" + }, + "source": [ + "| | |\n", + "|-|-|\n", + "| Author(s) | [Kristopher Overholt](https://github.com/koverholt/) |" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "Creating a podcast can be a very involved process, requiring extensive research, writing, editing, and production. **What if there was a way to leverage the power of AI to streamline the creation of a podcast, automating many of the tasks traditionally performed by humans?** [NotebookLM](https://notebooklm.google.com/), for example, lets users easily generate [audio overviews based on documents](https://blog.google/technology/ai/notebooklm-audio-overviews/).\n", + "\n", + "

🔈🔈 Listen to a sample podcast generated by this notebook! 🔈🔈

\n", + "\n", + "But what if you want to customize the length of the podcast, the voices, or the conversation flow and augment it with additional research tools? In this notebook, **you'll recreate this kind of podcast generation functionality by building an AI agent to do the heavy lifting and then customize the entire flow yourself!**\n", + "\n", + "**This notebook demonstrates how to build a [LangGraph](https://langchain-ai.github.io/langgraph/)-powered AI agent to research, write, and refine a podcast script using the [Gemini API in in Vertex AI](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models).** You'll use LangGraph and LangChain to orchestrate calls to Gemini along with calls to different search tools, allowing the AI to learn about a given topic before writing about it. Then, the AI will critique its work and iterate on the podcast script, improving it with each revision.\n", + "\n", + "Here's how you'll build and use our AI podcasting agent:\n", + "\n", + "- **[User]** Define the podcast topic: Provide a clear and concise topic for the podcast.\n", + "- **[Agent]** Generate an outline: Use Gemini to create a high-level outline, structuring the podcast's flow.\n", + "- **[Agent]** Conduct research: The AI agent will use search tools like arXiv, PubMed, and Wikipedia to gather relevant information.\n", + "- **[Agent]** Write a script: Gemini will generate an engaging podcast script, incorporating the research findings.\n", + "- **[Agent]** Critique and iterate: The agent will analyze its script, provide a critique, then generate a revised draft.\n", + "- **[Agent]** Generate audio: You'll use text-to-speech to generate audio for each line of the podcast script.\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "61RBz8LLbxCR" + }, + "source": [ + "## Get started\n", + "\n", + "This section sets up the environment for the AI podcast agent. This includes:\n", + "\n", + "- **Installing Libraries:** Installing the required Python libraries\n", + "- **Restarting Runtime (Colab Only):** Restarting the Colab runtime\n", + "- **Authenticating Environment (Colab Only):** Authenticating to Google Cloud\n", + "- **Setting Project Information:** Setting up your Google Cloud project" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "No17Cw5hgx12" + }, + "source": [ + "### Install Vertex AI SDK and other required packages\n", + "\n", + "This code cell installs the necessary Python libraries for running the AI podcast agent." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "tFy3H3aPgx12" + }, + "outputs": [], + "source": [ + "%pip install -q -U \\\n", + " arxiv \\\n", + " google-cloud-texttospeech \\\n", + " langgraph \\\n", + " langchain-google-vertexai \\\n", + " langchain-community \\\n", + " pydub \\\n", + " pymupdf \\\n", + " wikipedia \\\n", + " xmltodict" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R5Xep4W9lq-Z" + }, + "source": [ + "### Restart runtime\n", + "\n", + "To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n", + "\n", + "The restart might take a minute or longer. After it's restarted, continue to the next step." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "XRvKdaPDTznN" + }, + "outputs": [], + "source": [ + "import IPython\n", + "\n", + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SbmM4z7FOBpM" + }, + "source": [ + "
\n", + "⚠️ The kernel is going to restart. Wait until it's finished before continuing to the next step. ⚠️\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dmWOrTJ3gx13" + }, + "source": [ + "### Authenticate your notebook environment (Colab only)\n", + "\n", + "If you're running this notebook on Google Colab, run the cell below to authenticate your environment." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "NyKGtVQjgx13" + }, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "if \"google.colab\" in sys.modules:\n", + " from google.colab import auth\n", + "\n", + " auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DF4l8DTdWgPY" + }, + "source": [ + "### Set Google Cloud project information and initialize Vertex AI SDK\n", + "\n", + "To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "Learn more about [setting up a project and a development environment](https://cloud.google.com/vertex-ai/docs/start/cloud-environment)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "Nqwi-5ufWp_B" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import vertexai\n", + "\n", + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\", isTemplate: true}\n", + "if PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = str(os.environ.get(\"GOOGLE_CLOUD_PROJECT\"))\n", + "\n", + "LOCATION = os.environ.get(\"GOOGLE_CLOUD_REGION\", \"us-central1\")\n", + "\n", + "vertexai.init(project=PROJECT_ID, location=LOCATION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EdvJRUWRNGHE" + }, + "source": [ + "## Building the AI podcasting agent\n", + "\n", + "This section constructs the AI agent. Key steps include:\n", + "\n", + "- **Initializing Agent Memory and State:** Setting up the agent's memory and defining its data structure\n", + "- **Initializing the Gemini Model:** Loading the Gemini language model from Vertex AI\n", + "- **Defining Search Tools:** Creating tools to access information sources like arXiv, PubMed, and Wikipedia\n", + "- **Defining Workflow Stages:** Defining each stage of the workflow, including prompts and functions\n", + "- **Compiling the Workflow:** Structuring the workflow as a graph using LangGraph" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5303c05f7aa6" + }, + "source": [ + "### Import libraries\n", + "\n", + "This section imports the necessary libraries for LangGraph, LangChain, Vertex AI, and other utilities needed for your agent's functionality.\n", + "\n", + "This includes tools for interacting with the Gemini API, defining custom tools, managing agent state, and displaying results." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "6fc324893334" + }, + "outputs": [], + "source": [ + "# Common libraries\n", + "import logging\n", + "import os\n", + "import re\n", + "\n", + "# Typing utilities for data validation and schema definitions\n", + "from typing import TypedDict\n", + "\n", + "from IPython.display import Audio, Image\n", + "\n", + "# Libraries for text-to-speech generation and audio processing\n", + "from google.cloud import texttospeech\n", + "from langchain.schema.document import Document\n", + "\n", + "# Tools\n", + "from langchain_community.retrievers import (\n", + " ArxivRetriever,\n", + " PubMedRetriever,\n", + " WikipediaRetriever,\n", + ")\n", + "\n", + "# LangChain and LangGraph components for message handling and tool integration\n", + "from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage\n", + "from langchain_core.tools import tool\n", + "\n", + "# LangChain integrations for Gemini API in Google AI Studio and Vertex AI\n", + "from langchain_google_vertexai import ChatVertexAI\n", + "from langgraph.checkpoint.memory import MemorySaver\n", + "from langgraph.graph import END, StateGraph\n", + "from langgraph.prebuilt import ToolNode\n", + "from pydub import AudioSegment\n", + "\n", + "# Set logging level to ERROR to filter warnings\n", + "logger = logging.getLogger()\n", + "logger.setLevel(logging.ERROR)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e43229f3ad4f" + }, + "source": [ + "### Initialize agent memory and agent state\n", + "\n", + "Here, you initialize your [agent's memory](https://langchain-ai.github.io/langgraph/how-tos/memory/manage-conversation-history/) to store information during the workflow.\n", + "\n", + "You also define the schema for your [agent's state](https://langchain-ai.github.io/langgraph/how-tos/state-model/), which includes the podcast outline, search queries, and drafts." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "cf93d5f0ce00" + }, + "outputs": [], + "source": [ + "# Initialize agent memory\n", + "memory = MemorySaver()\n", + "\n", + "\n", + "# Define the agent's state\n", + "class AgentState(TypedDict):\n", + " revision_number: int\n", + " max_revisions: int\n", + " search_count: int\n", + " max_searches: int\n", + " task: str\n", + " outline: str\n", + " queries: list\n", + " content: list\n", + " draft: str\n", + " critique: str\n", + " tool_calls: list" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "27b61a7e7ef6" + }, + "source": [ + "### Initialize Gemini model\n", + "\n", + "Initialize the Gemini model from Vertex AI, specifying the model version and temperature settings.\n", + "\n", + "This sets up the core language model that will power your agent's actions." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "06877aae6673" + }, + "outputs": [], + "source": [ + "model = ChatVertexAI(model=\"gemini-1.5-pro\", temperature=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d591fae74758" + }, + "source": [ + "### Define search tools\n", + "\n", + "This section defines custom tools that will be used by your AI podcast agent to gather information from various sources. These tools act as interfaces to external services and provide access to relevant data for the podcast topic.\n", + "\n", + "Each tool is implemented as a Python function decorated with the `@tool` decorator from LangChain. This decorator makes it easy to integrate these functions into LangGraph workflows.\n", + "\n", + "The following search tools are defined:\n", + "\n", + "- **search_arxiv:** Retrieves research papers from arXiv based on a keyword query.\n", + "- **search_pubmed:** Searches for information on PubMed, a database of biomedical literature.\n", + "- **search_wikipedia:** Fetches information from Wikipedia based on a keyword query.\n", + "\n", + "Your LangGraph application will use these tool nodes to call the corresponding search functions and obtain information from these external sources. This allows the AI agent to learn about the podcast topic before generating the script." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "0d27ed8a91c1" + }, + "outputs": [], + "source": [ + "@tool\n", + "def search_arxiv(query: str) -> list[Document]:\n", + " \"\"\"Search for relevant publications on arXiv\"\"\"\n", + " retriever = ArxivRetriever(\n", + " load_max_docs=2,\n", + " get_full_documents=True,\n", + " )\n", + " docs = retriever.invoke(query)\n", + " if docs:\n", + " return docs\n", + " else:\n", + " return [\"No results found on arXiv\"]\n", + "\n", + "\n", + "@tool\n", + "def search_pubmed(query: str) -> list[Document]:\n", + " \"\"\"Search for information on PubMed\"\"\"\n", + " retriever = PubMedRetriever()\n", + " docs = retriever.invoke(query)\n", + " if docs:\n", + " return docs\n", + " else:\n", + " return [\"No results found on PubMed\"]\n", + "\n", + "\n", + "@tool\n", + "def search_wikipedia(query: str) -> list[Document]:\n", + " \"\"\"Search for information on Wikipedia\"\"\"\n", + " retriever = WikipediaRetriever()\n", + " docs = retriever.invoke(query)\n", + " if docs:\n", + " return docs\n", + " else:\n", + " return [\"No results found on Wikipedia\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "95fbea6aaa20" + }, + "source": [ + "### Define workflow stages along with corresponding prompts and functions\n", + "\n", + "This section defines the different stages of the AI podcast agent's workflow and the corresponding prompt templates and node functions that drive each stage.\n", + "\n", + "Each stage represents a specific task in the podcast creation process, such as generating an outline, conducting research, writing the script, and providing a critique.\n", + "\n", + "For each stage, you'll define:\n", + "\n", + "- **Prompt Template:** A carefully crafted text prompt that instructs the Gemini language model on what to do at that stage. The prompt provides context, instructions, and any necessary input data.\n", + "- **Node Function:** A Python function that encapsulates the logic for executing that stage. The function typically involves:\n", + " - Constructing the prompt with relevant information from the agent's state.\n", + " - Invoking the Gemini API with the prompt.\n", + " - Processing the model's response and updating the agent's state.\n", + "\n", + "These prompt templates and node functions are the building blocks of the LangGraph workflow that orchestrates the entire podcast creation process.\n", + "\n", + "#### Podcast outline node\n", + "\n", + "This node generates a structured outline for the podcast based on the user-provided topic:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "4ce60bbc06e6" + }, + "outputs": [], + "source": [ + "OUTLINE_PROMPT = \"\"\"You are an expert writer tasked with writing a high level outline of an engaging 2-minute podcast.\n", + "Write such an outline for the user provided topic. Give an outline of the podcast along with any\n", + "relevant notes or instructions for the sections.\"\"\"\n", + "\n", + "\n", + "# Generate an outline for the podcast based on the user-provided topic\n", + "def podcast_outline_node(state: AgentState):\n", + " messages = [\n", + " SystemMessage(content=OUTLINE_PROMPT),\n", + " HumanMessage(content=state[\"task\"]),\n", + " ]\n", + " response = model.invoke(messages)\n", + " return {\"outline\": response.content}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5d7349c32d28" + }, + "source": [ + "#### Research plan node\n", + "\n", + "This node formulates a search query based on the podcast topic and previous queries:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "87df19f53b95" + }, + "outputs": [], + "source": [ + "RESEARCH_PLAN_PROMPT = \"\"\"You are a researcher tasked with providing information that can\n", + "be used when writing the following podcast. Generate one search query consisting of a few\n", + "keywords that will be used to gather any relevant information. Do not output any information\n", + "other than the query consisting of a few words.\n", + "\n", + "These were the past queries, do not repeat keywords from past queries in your newly generated query:\n", + "---\n", + "{queries}\"\"\"\n", + "\n", + "\n", + "# Generates a search query based on the outline\n", + "def research_plan_node(state: AgentState):\n", + " messages = [\n", + " SystemMessage(content=RESEARCH_PLAN_PROMPT.format(queries=state[\"queries\"])),\n", + " HumanMessage(content=state[\"task\"]),\n", + " ]\n", + " response = model.invoke(messages)\n", + " queries = state[\"queries\"]\n", + " if queries:\n", + " queries.append(response.content)\n", + " else:\n", + " queries = [response.content]\n", + " return {\"queries\": queries}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1719cf80233f" + }, + "source": [ + "#### Research task node\n", + "\n", + "This node executes a search using the selected tool and query, retrieving relevant information for the podcast:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "9bcbfe53b7d9" + }, + "outputs": [], + "source": [ + "RESEARCH_TASK_PROMPT = \"\"\"Use the available search tools and search queries to find information\n", + "relevant to the podcast. Try searching different sources to obtain different articles. Try using\n", + "different search tools than what was used previously so that you can obtain a broader range of\n", + "information.\n", + "\n", + "These are the previous tool calls, so you can choose a different tool:\n", + "---\n", + "{tool_calls}\n", + "---\n", + "These are the previous search results, so you can aim for different sources and content:\n", + "---\n", + "{content}\"\"\"\n", + "\n", + "\n", + "# Performs searches using tools\n", + "def research_agent_node(state: AgentState):\n", + " tool_calls = state[\"tool_calls\"]\n", + " content = state[\"content\"]\n", + " queries = state[\"queries\"]\n", + " query = queries[-1]\n", + " messages = [\n", + " SystemMessage(\n", + " content=RESEARCH_TASK_PROMPT.format(tool_calls=tool_calls, content=content)\n", + " ),\n", + " HumanMessage(content=query),\n", + " ]\n", + "\n", + " # Perform function calls\n", + " tools = [search_arxiv, search_pubmed, search_wikipedia]\n", + " model_with_tools = model.bind_tools(tools)\n", + " response_tool_calls = model_with_tools.invoke(messages)\n", + " if tool_calls:\n", + " tool_calls.append(response_tool_calls)\n", + " else:\n", + " tool_calls = [response_tool_calls]\n", + "\n", + " # Defines a tool node based on search functions\n", + " tool_node = ToolNode(tools)\n", + " response = tool_node.invoke({\"messages\": [response_tool_calls]})\n", + "\n", + " # Add the search results to the content list in the agent state\n", + " for message in response.get(\"messages\", []):\n", + " if isinstance(message, ToolMessage):\n", + " content.insert(0, message.content)\n", + "\n", + " return {\n", + " \"content\": content,\n", + " \"tool_calls\": tool_calls,\n", + " \"search_count\": state[\"search_count\"] + 1,\n", + " }\n", + "\n", + "\n", + "# Determine whether to continue research based on the number of searches performed\n", + "def should_continue_tools(state: AgentState):\n", + " if state[\"search_count\"] > state[\"max_searches\"]:\n", + " return \"generate_script\"\n", + " else:\n", + " return \"research_plan\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9eaa6d0bff8d" + }, + "source": [ + "#### Podcast writing node\n", + "\n", + "This node generates a draft podcast script using the outline and research results, aiming for an engaging and informative style:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "id": "1742523735e8" + }, + "outputs": [], + "source": [ + "WRITER_PROMPT = \"\"\"\n", + "You are a writing assistant tasked with writing engaging 2-minute podcast scripts.\n", + "\n", + "- Generate the best podcast script possible for the user's request and the initial outline.\n", + "- The script MUST strictly alternate lines between the two hosts, separating each host's line with a newline.\n", + "- Add an intro phrase and outro phrase to start and end the podcast, and use a fun, random name for the podcast show.\n", + "- Given a critique, respond with a revised version of your previous script.\n", + "- Include lively back-and-forth chatter, reflections, and expressions of amazement between the hosts.\n", + "- Cite at least THREE pieces of research throughout the script, choosing the most relevant research for each point.\n", + "- DO NOT include ANY of the following:\n", + " - Speaker labels (e.g., \"Host 1:\", \"Host 2:\")\n", + " - Sound effect descriptions (e.g., \"[Sound of waves]\")\n", + " - Formatting instructions (e.g., \"(Emphasis)\", \"[Music fades in]\")\n", + " - Any other non-dialogue text.\n", + "- Use this format for citations, including the month and year if available:\n", + " \"In [Month, Year], [Organization] found that...\"\n", + " \"Research from [Organization] in [Month, Year] showed that...\"\n", + " \"Back in [Month, Year], a study by [Organization] suggested that...\"\n", + "---\n", + "Utilize all of the following search results and context as needed:\n", + "{content}\n", + "---\n", + "If this is a revision, the critique will be provided below:\n", + "{critique}\"\"\"\n", + "\n", + "\n", + "# Generates a draft of the script based on the content and outline\n", + "def generate_script_node(state: AgentState):\n", + " messages = [\n", + " SystemMessage(\n", + " content=WRITER_PROMPT.format(\n", + " content=state[\"content\"], critique=state.get(\"critique\", \"\")\n", + " )\n", + " ),\n", + " HumanMessage(\n", + " content=f\"{state['task']}\\n\\nHere is my outline:\\n\\n{state['outline']}\"\n", + " ),\n", + " ]\n", + " response = model.invoke(messages)\n", + " return {\n", + " \"draft\": response.content,\n", + " \"search_count\": 0, # Reset the search count for the next revision\n", + " \"revision_number\": state.get(\"revision_number\", 1) + 1,\n", + " }" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d00163e72e16" + }, + "source": [ + "#### Podcast critique node\n", + "\n", + "This node provides feedback and suggestions for improvement on the generated podcast script:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "de70a68caa8d" + }, + "outputs": [], + "source": [ + "CRITIQUE_PROMPT = \"\"\"You are a producer grading a podcast script.\n", + "Generate critique and recommendations for the user's submission.\n", + "Provide detailed recommendations, including requests for conciceness, depth, style, etc.\"\"\"\n", + "\n", + "\n", + "# Generates a critique with feedback on the draft podcast script\n", + "def perform_critique_node(state: AgentState):\n", + " messages = [\n", + " SystemMessage(content=CRITIQUE_PROMPT),\n", + " HumanMessage(content=state[\"draft\"]),\n", + " ]\n", + " response = model.invoke(messages)\n", + " return {\"critique\": response.content}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "46aa739f9c1e" + }, + "source": [ + "#### Research critique node\n", + "\n", + "This node generates a new search query based on the critique of the script, aiming to address weaknesses and find additional information:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "48682bcbb177" + }, + "outputs": [], + "source": [ + "RESEARCH_CRITIQUE_PROMPT = \"\"\"You are a writing assistant tasked with providing information that can\n", + "be used when making any requested revisions (as outlined below).\n", + "Generate one search query consisting of a few keywords that will be used to gather any relevant\n", + "information. Do not output any information other than the query consisting of a few words.\n", + "\n", + "---\n", + "\n", + "These were the past queries, so you can vary the query that you generate:\n", + "\n", + "{queries}\n", + "\"\"\"\n", + "\n", + "\n", + "# Generates a new search query based on the critique\n", + "def research_critique_node(state: AgentState):\n", + " messages = [\n", + " SystemMessage(\n", + " content=RESEARCH_CRITIQUE_PROMPT.format(queries=state[\"queries\"])\n", + " ),\n", + " HumanMessage(content=state[\"critique\"]),\n", + " ]\n", + " response = model.invoke(messages)\n", + " queries = state.get(\"queries\", [])\n", + " if queries:\n", + " queries.append(response.content)\n", + " else:\n", + " queries = [response.content]\n", + " return {\"queries\": queries}\n", + "\n", + "\n", + "# Decide whether to continue to the next revision or end the process\n", + "def should_continue(state: AgentState):\n", + " if state[\"revision_number\"] > state[\"max_revisions\"]:\n", + " return END\n", + " return \"perform_critique\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aae38c0085e3" + }, + "source": [ + "## Define and compile the LangGraph workflow\n", + "\n", + "This section defines the structure and flow of the AI podcast agent using LangGraph.\n", + "\n", + "The workflow is constructed as a graph with nodes representing each stage in the process (e.g., outlining, research, script generation) and edges defining the transitions between these stages.\n", + "\n", + "The workflow includes two main loops:\n", + "\n", + "- **Research Loop:** This loop iteratively plans and executes searches until a specified number of searches are completed.\n", + "- **Critique and Revision Loop:** This loop handles the script critique, additional research based on the critique, and script revision, repeating for a set number of revisions.\n", + "\n", + "The `workflow.compile()` function transforms this graph definition into an executable workflow, incorporating memory management to maintain the agent's state throughout the process." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "f7d04cda5f36" + }, + "outputs": [], + "source": [ + "# Initialize the state graph\n", + "workflow = StateGraph(AgentState)\n", + "\n", + "# Define the nodes of the workflow, representing each stage of the process\n", + "workflow.add_node(\"podcast_outline\", podcast_outline_node)\n", + "workflow.add_node(\"research_plan\", research_plan_node)\n", + "workflow.add_node(\"research_agent\", research_agent_node)\n", + "workflow.add_node(\"generate_script\", generate_script_node)\n", + "workflow.add_node(\"perform_critique\", perform_critique_node)\n", + "workflow.add_node(\"research_critique\", research_critique_node)\n", + "\n", + "# Specify the starting node of the workflow\n", + "workflow.set_entry_point(\"podcast_outline\")\n", + "\n", + "# Define the flow between node and stages\n", + "workflow.add_edge(\"podcast_outline\", \"research_plan\")\n", + "workflow.add_edge(\"research_plan\", \"research_agent\")\n", + "workflow.add_edge(\"perform_critique\", \"research_critique\")\n", + "workflow.add_edge(\"research_critique\", \"research_agent\")\n", + "\n", + "# Define conditional edges for the research loop\n", + "workflow.add_conditional_edges(\n", + " \"research_agent\",\n", + " should_continue_tools,\n", + " {\"generate_script\": \"generate_script\", \"research_plan\": \"research_plan\"},\n", + ")\n", + "\n", + "# Define conditional edges for the critique and revision loop\n", + "workflow.add_conditional_edges(\n", + " \"generate_script\",\n", + " should_continue,\n", + " {END: END, \"perform_critique\": \"perform_critique\"},\n", + ")\n", + "\n", + "# Compile the workflow graph, enabling memory to track agent state\n", + "graph = workflow.compile(checkpointer=memory)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18154fa6d8b4" + }, + "source": [ + "### Visualize the workflow\n", + "\n", + "This cell visualizes the compiled LangGraph workflow as a [Mermaid diagram](https://mermaid.js.org/).\n", + "\n", + "The diagram provides a clear and intuitive representation of the workflow's structure, showing the nodes, edges, and the flow of execution.\n", + "\n", + "This visualization helps to understand the overall process and the interactions between different stages of the AI podcast agent." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "f97fe13cc0cf" + }, + "outputs": [ + { + "data": { + "image/jpeg": "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m32/2Cx+I7f/AF/2OgLPeIDd+JXC87E7ZK6dwN9v/L7Hf8iDQkREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQFnnEEgcS+Fu52PjO7t03/APx9j+paGs+1/wA3wk8MNi8Dxld35R0I8X2O/wDF/wB9kGgoiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiLgu3a+NqyWbdiKrWiHNJNM8MYwfKSegUxEzNoHOiqx4paOB299OI/oux/Wnwp6O9KcR67H9a76PjcE8pWyzuWlFVvhT0d6U4j12P60+FPR3pTiPXY/rTR8bgnlJlnctKKrfCno70pxHrsf1p8KejvSnEeux/Wmj43BPKTLO5aVinEjipoipxQ4fw2NYYCGbHZS6y3HJk4GuquFKwwiQF45DzHl6+c7d60L4U9HelOI9dj+tfz+8LbweMDxD8JLTWa01msb4j1RO1ucsQWYyyi+PbtJnbHYB7B03PV4PnITR8bgnlJlnc/pFQv1srRrXaVmK5TsxtmgsV3h8csbgC17XDo5pBBBHQgrsKk4TXegtO4WhisfqPD16FGvHVrxC7HsyNjQ1re/zAALu/Cno70pxHrsf1po+NwTykyzuWlFVvhT0d6U4j12P60+FPR3pTiPXY/rTR8bgnlJlnctKKrfCno70pxHrsf1p8KejvSnEeux/Wmj43BPKTLO5aUVW+FPR3pTiPXY/rUvhtSYnUTJHYvJ1Mi2Pbn9yztk5NxuN9j03HXqq1YOLRF6qZiPBFphJIiLigREQEREBERAREQEREBERAREQEREBERAREQEREBERAVJ1GRktc0qNgdrVq0jcZC7q0ymTlDyO4loB237uYnvV2VHyv4Sx+aB/jFbOi/jmflK0JVERd1RERAREQEREBERAREQEREBQOpy3HSYvKwgR3YL9Wu2Vo8p0c08cUkZ+VpD99juN2tdtu0bTyr+t/wDhFP8AO2N/z0C64WvEpjfK1O2GhoiLx1RERAREQEREBERAREQEREBERAREQEREBERAREQEREBUfK/hLH5oH+MVeFR8r+Esfmgf4xWzov4qvCVo7Uqs44ncVslojV+jtNYfTXviyWpfdgh5rwqxwGBjHkvcWO8khx3I6jl6NcSAtHVE1boPIZ7i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", + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display a Mermaid diagram of the workflow\n", + "Image(graph.get_graph().draw_mermaid_png())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3076e0cd0c4e" + }, + "source": [ + "### Define the podcast topic\n", + "\n", + "This cell defines the topic of the podcast that the AI agent will create.\n", + "\n", + "The topic is assigned to the variable `PODCAST_TOPIC`. Feel free to modify this variable to explore different podcast topics! " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "6627153c6715" + }, + "outputs": [], + "source": [ + "PODCAST_TOPIC = \"Explore the use of bio-inspired fluid dynamics in the design of underwater robots and vehicles\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a1df657ce053" + }, + "source": [ + "### Run the AI podcast agent\n", + "\n", + "This cell executes the compiled LangGraph workflow, running the AI podcast agent to generate the podcast script. \n", + "\n", + "The code performs these actions:\n", + "\n", + "- **Clean agent helper function:** This function prepares the agent's output for printing by removing unnecessary characters and formatting\n", + "- **Thread Configuration:** A thread configuration is defined to ensure a unique history for this workflow execution\n", + "- **Workflow Execution:** The `graph.stream()` method runs the workflow, iterating through each stage and updating the agent's state\n", + "- **Output Display:** The code prints the results of each stage, including the agent's actions and generated output" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "338377bc8c25" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Agent Node: podcast_outline\n", + "\n", + "Agent Result:\n", + "{'outline': '## Diving Deep: How Nature Inspires Underwater Robot Design **Podcast Outline:****I. Introduction (0:00 - 0:20):*** **Hook:** Start with an engaging sound effect (gentle waves, whale song) and a captivating question: \"What if we could design underwater robots as efficient and agile as a school of fish?\"* **Introduce topic:** Briefly explain bio-inspired design and its application in underwater robotics.* **Highlight the episode's focus:** Exploring specific examples of how nature inspires fluid dynamics in underwater robots.**II. Example 1: The Grace of Jellyfish (0:20 - 0:45):*** **Introduce the jellyfish:** Describe their unique propulsion mechanism (contracting bell).* **Connect to robotics:** Explain how scientists are mimicking this mechanism to create more efficient underwater robots.* **Specific example:** Mention a real-world robot inspired by jellyfish propulsion (e.g., the \"RoboJelly\").* **Benefits:** Highlight the advantages of this design (e.g\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 1, 'content': ['[Document(metadata={'Published': '2024-09-15', 'Title': 'A Novel Aerial-Aquatic Locomotion Robot with Variable Stiffness Propulsion Module', 'Authors': 'Junzhe Hu, Pengyu Chen, Tianxiang Feng, Yuxuan Wen, Ke Wu, Janet Dong', 'Summary': \"In recent years, the development of robots capable of operating in both\n", + "aerial and aquatic environments has gained significant attention. This study\n", + "presents the design and fabrication of a novel aerial-aquatic locomotion robot\n", + "(AALR). Inspired by the diving beetle, the AALR incorporates a biomimetic\n", + "propulsion mechanism with power and recovery strokes. The variable stiffness\n", + "propulsion module (VSPM) uses low melting point alloy (LMPA) and variable\n", + "stiffness joints (VSJ) to achieve efficient aquatic locomotion while reduce\n", + "harm to marine life. The AALR's innovative design integrates the VSPM into the\n", + "arms of a traditional quadrotor, allowing for effective aerial-aquatic\n", + "locomotion. The VSPM adjusts joint stiffness throug\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 2, 'content': ['[Document(metadata={'title': 'Bio-inspired robotics', 'summary': 'Bio-inspired robotic locomotion is a fairly new subcategory of bio-inspired design. It is about learning concepts from nature and applying them to the design of real-world engineered systems. More specifically, this field is about making robots that are inspired by biological systems, including Biomimicry. Biomimicry is copying from nature while bio-inspired design is learning from nature and making a mechanism that is simpler and more effective than the system observed in nature. Biomimicry has led to the development of a different branch of robotics called soft robotics. The biological systems have been optimized for specific tasks according to their habitat. However, they are multifunctional and are not designed for only one specific functionality. Bio-inspired robotics is about studying biological systems, and looking for the mechanisms that may solve a problem in the engineering fiel\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 3, 'content': ['[Document(metadata={'uid': '31466767', 'Title': \"Aquatic animal colors and skin temperature: Biology's selection for reducing oceanic dolphin's skin friction drag.\", 'Published': '2019-07-15', 'Copyright Information': 'Published by Elsevier Ltd.'}, page_content=\"There is currently a growing interest in the area of drag reduction. In this work, the thermal effects of body color of some species of aquatics like Orcas and Dusky dolphins are investigated with respect to their swimming routes and geometric and behavioral characteristics. Considering the marine and atmospheric characteristics of these aquatics' routes, a thermal analysis is performed. The surrounding fluxes including the water flux, sun irradiation, and core temperature are considered in an energy balance to determine the skin temperature of the top side of the animal/organism's body. To study the effects of color on the surface temperature of the aquatic species, an experiment is carried out\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ', 'bio-inspired underwater robotics fluid dynamics design ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 4, 'content': ['[Document(metadata={'Published': '2024-01-06', 'Title': 'Estimating the Lateral Motion States of an Underwater Robot by Propeller Wake Sensing Using an Artificial Lateral Line', 'Authors': 'Jun Wang, Dexin Zhao, Youxi Zhao, Feitian Zhang, Tongsheng Shen', 'Summary': 'An artificial lateral line (ALL) is a bioinspired flow sensing system of an\n", + "underwater robot that consists of distributed flow sensors. The ALL has\n", + "achieved great success in sensing the motion states of bioinspired underwater\n", + "robots, e.g., robotic fish, that are driven by body undulation and/or tail\n", + "flapping. However, the ALL has not been systematically tested and studied in\n", + "the sensing of underwater robots driven by rotating propellers due to the\n", + "highly dynamic and complex flow field therein. This paper makes a bold\n", + "hypothesis that the distributed flow measurements sampled from the propeller\n", + "wake flow, although infeasible to represent the entire flow dynamics, provides\n", + "sufficient informati\n", + "\n", + "====================\n", + "\n", + "Agent Node: generate_script\n", + "\n", + "Agent Result:\n", + "{'revision_number': 2, 'search_count': 0, 'draft': 'Welcome to **AquaTech Insights!**What if we could design underwater robots as efficient and agile as a school of fish?That's the incredible promise of bio-inspired fluid dynamics! We're diving deep into how nature inspires underwater robot design.Let's start with the jellyfish, those masters of effortless movement.Their secret? A mesmerizing dance of contracting bells.Researchers at Virginia Tech are mimicking this to create \"RoboJelly\" robots.These robots can navigate tight spaces with incredible efficiency.Imagine the possibilities for underwater exploration and research!Now, picture a school of fish gliding through the water.It's a symphony of synchronized movement, minimizing drag and maximizing efficiency.In 2024, a team from Peking University found that fish in formation conserve energy by riding each other's wake.Inspired by this, scientists are developing AUVs that can work together in similar formations.This could revolutioni\n", + "\n", + "====================\n", + "\n", + "Agent Node: perform_critique\n", + "\n", + "Agent Result:\n", + "{'critique': '## AquaTech Insights: Script Critique and Recommendations**Overall Impression:**This script is a solid start with a clear focus on bio-inspired underwater robotics. You effectively introduce the concept and provide interesting examples. However, it lacks depth and engagement in several areas. **Here's a detailed breakdown:****Strengths:*** **Clear Topic:** The script immediately establishes the focus on bio-inspired underwater robotics.* **Intriguing Examples:** The examples of jellyfish, fish schools, and shark skin are relevant and captivating.* **Enthusiastic Tone:** The script maintains an enthusiastic and engaging tone throughout.**Areas for Improvement:*** **Conciseness:** The script could be more concise and impactful. Avoid repetitive phrases like \"Imagine the possibilities\" and focus on delivering information more directly.* **Depth and Detail:** While the examples are interesting, they lack depth. * **Expand on the science:** Briefly explain *how* the bell \n", + "\n", + "====================\n", + "\n", + "Agent Node: research_critique\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ', 'bio-inspired underwater robotics fluid dynamics design ', 'bio-inspired robotics storytelling engagement ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 1, 'content': ['[Document(metadata={'title': 'Cynthia Breazeal', 'summary': 'Cynthia Breazeal is an American robotics scientist and entrepreneur. She is a former chief scientist and chief experience officer of Jibo, a company she co-founded in 2012 that developed personal assistant robots. Currently, she is a professor of media arts and sciences at the Massachusetts Institute of Technology and the director of the Personal Robots group at the MIT Media Lab. Her most recent work has focused on the theme of living everyday life in the presence of AI, and gradually gaining insight into the long-term impacts of social robots. \n", + "\n", + "', 'source': 'https://en.wikipedia.org/wiki/Cynthia_Breazeal'}, page_content='Cynthia Breazeal is an American robotics scientist and entrepreneur. She is a former chief scientist and chief experience officer of Jibo, a company she co-founded in 2012 that developed personal assistant robots. Currently, she is a professor of media arts and sciences at \n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ', 'bio-inspired underwater robotics fluid dynamics design ', 'bio-inspired robotics storytelling engagement ', 'biomimetic underwater robots fluid dynamics applications ']}\n", + "\n", + "====================\n", + "\n", + "Too Many Requests, waiting for 0.20 seconds...\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 2, 'content': ['[Document(metadata={'uid': '39078729', 'Title': 'Jellyfish-Inspired Soft Robot Driven by Pneumatic Bistable Actuators.', 'Published': '2024-07-30', 'Copyright Information': ''}, page_content=\"Soft actuators offer numerous potential applications; however, challenges persist in achieving a high driving force and fast response speed. In this work, we present the design, fabrication, and analysis of a soft pneumatic bistable actuator (PBA) mimicking jellyfish subumbrellar muscle motion for waterjet propulsion. Drawing inspiration from the jellyfish jet propulsion and the characteristics of bistable structure, we develop an elastic band stretch prebending PBA with a simple structure, low inflation cost, exceptional driving performance, and stable driving force output. Through a bionic analysis of jellyfish body structure and motion, we integrate the PBA into a jellyfish-like prototype, enabling it to achieve jet propulsion. To enhance the swimming performanc\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ', 'bio-inspired underwater robotics fluid dynamics design ', 'bio-inspired robotics storytelling engagement ', 'biomimetic underwater robots fluid dynamics applications ', 'biomimetic underwater vehicles design challenges ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 3, 'content': [\"[Document(metadata={'Published': '2024-10-03', 'Title': 'Coastal Underwater Evidence Search System with Surface-Underwater Collaboration', 'Authors': 'Hin Wang Lin, Pengyu Wang, Zhaohua Yang, Ka Chun Leung, Fangming Bao, Ka Yu Kui, Jian Xiang Erik Xu, Ling Shi', 'Summary': 'The Coastal underwater evidence search system with surface-underwater\n", + "collaboration is designed to revolutionize the search for artificial objects in\n", + "coastal underwater environments, overcoming limitations associated with\n", + "traditional methods such as divers and tethered remotely operated vehicles. Our\n", + "innovative multi-robot collaborative system consists of three parts, an\n", + "autonomous surface vehicle as a mission control center, a towed underwater\n", + "vehicle for wide-area search, and a biomimetic underwater robot inspired by\n", + "marine organisms for detailed inspections of identified areas. We conduct\n", + "extensive simulations and real-world experiments in pond environments and\n", + "coastal fields to d\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_plan\n", + "\n", + "Agent Result:\n", + "{'queries': ['biomimetics underwater propulsion optimization ', 'bio-inspired underwater robotics design ', 'aquatic animal locomotion drag reduction ', 'bio-inspired underwater robotics fluid dynamics design ', 'bio-inspired robotics storytelling engagement ', 'biomimetic underwater robots fluid dynamics applications ', 'biomimetic underwater vehicles design challenges ', 'biomimetic underwater robots maneuverability efficiency ']}\n", + "\n", + "====================\n", + "\n", + "Agent Node: research_agent\n", + "\n", + "Agent Result:\n", + "{'search_count': 4, 'content': ['[Document(metadata={'uid': '39078729', 'Title': 'Jellyfish-Inspired Soft Robot Driven by Pneumatic Bistable Actuators.', 'Published': '2024-07-30', 'Copyright Information': ''}, page_content=\"Soft actuators offer numerous potential applications; however, challenges persist in achieving a high driving force and fast response speed. In this work, we present the design, fabrication, and analysis of a soft pneumatic bistable actuator (PBA) mimicking jellyfish subumbrellar muscle motion for waterjet propulsion. Drawing inspiration from the jellyfish jet propulsion and the characteristics of bistable structure, we develop an elastic band stretch prebending PBA with a simple structure, low inflation cost, exceptional driving performance, and stable driving force output. Through a bionic analysis of jellyfish body structure and motion, we integrate the PBA into a jellyfish-like prototype, enabling it to achieve jet propulsion. To enhance the swimming performanc\n", + "\n", + "====================\n", + "\n", + "Agent Node: generate_script\n", + "\n", + "Agent Result:\n", + "{'revision_number': 3, 'search_count': 0, 'draft': 'Welcome to Water World Wonders! What if we told you the ocean's depths hold the secrets to building better robots? That's right, we're diving deep into the world of bio-inspired design, where engineers are turning to nature to create the next generation of underwater robots.Take the jellyfish, for example.These graceful creatures move with such ease, pulsating their bell-shaped bodies to glide through the water.In 2012, researchers at Virginia Tech drew inspiration from this to create \"RoboJelly,\" a robot that mimics the jellyfish's efficient propulsion.This design allows for incredible maneuverability in tight spaces, perfect for exploring delicate coral reefs or even shipwrecks.But nature's brilliance doesn't stop there!Have you ever wondered how fish swim in schools so effortlessly?It turns out, by swimming in formation, they create a slipstream that reduces drag and saves energy.In fact, a study by the University of Groningen in 2\n", + "\n", + "====================\n", + "\n" + ] + } + ], + "source": [ + "# Function to clean and format agent output for display\n", + "\n", + "\n", + "def clean_agent_result(data):\n", + " agent_result = str(data)\n", + " agent_result = re.sub(\n", + " r\"[^\\x00-\\x7F]+\", \" \", agent_result\n", + " ) # Remove non-ASCII characters\n", + " agent_result = re.sub(r\"\\\\\\\\n\", \"\\n\", agent_result) # Replace escaped newlines\n", + " agent_result = re.sub(r\"\\\\n\", \"\", agent_result) # Replace newlines\n", + " agent_result = re.sub(r\"\\\\'\", \"'\", agent_result) # Replace escaped single quotes\n", + " return agent_result\n", + "\n", + "\n", + "# Thread ID for unique history in workflow execution\n", + "thread = {\"configurable\": {\"thread_id\": \"1\"}}\n", + "\n", + "# Run the LangGraph workflow, passing the initial state and thread configuration\n", + "for state in graph.stream(\n", + " {\n", + " \"task\": PODCAST_TOPIC,\n", + " \"revision_number\": 1, # Current revision number\n", + " \"max_revisions\": 2, # Maximum number of revisions allowed\n", + " \"search_count\": 0, # Current search number\n", + " \"max_searches\": 3, # Maximum number of searches allowed per revision\n", + " \"content\": [],\n", + " \"queries\": [],\n", + " \"tool_calls\": [],\n", + " },\n", + " thread,\n", + "):\n", + " # Print a snippet of the results of each workflow stage\n", + " for k, v in state.items():\n", + " print(f\"Agent Node: {k}\\n\")\n", + " print(\"Agent Result:\")\n", + " print(clean_agent_result(v)[:1000])\n", + " print(\"\\n====================\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cd8d951762fb" + }, + "source": [ + "### Parse and display the final podcast script\n", + "\n", + "This section extracts and prepares the final podcast script generated by the AI agent.\n", + "\n", + "It displays the script for review, where each string in the list will be narrated by a different text-to-speech voice." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "599397cab03c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Welcome to Water World Wonders!',\n", + " \"What if we told you the ocean's depths hold the secrets to building better robots?\",\n", + " \"That's right, we're diving deep into the world of bio-inspired design, where engineers are turning to nature to create the next generation of underwater robots.\",\n", + " 'Take the jellyfish, for example.',\n", + " 'These graceful creatures move with such ease, pulsating their bell-shaped bodies to glide through the water.',\n", + " 'In 2012, researchers at Virginia Tech drew inspiration from this to create \"RoboJelly,\" a robot that mimics the jellyfish\\'s efficient propulsion.',\n", + " 'This design allows for incredible maneuverability in tight spaces, perfect for exploring delicate coral reefs or even shipwrecks.',\n", + " \"But nature's brilliance doesn't stop there!\",\n", + " 'Have you ever wondered how fish swim in schools so effortlessly?',\n", + " 'It turns out, by swimming in formation, they create a slipstream that reduces drag and saves energy.',\n", + " 'In fact, a study by the University of Groningen in 2010 found that fish in schools can reduce their energy expenditure by up to 20%!',\n", + " 'Researchers are now applying this principle to develop autonomous underwater vehicles, or AUVs, that can work together in similar formations.',\n", + " 'Imagine a fleet of these AUVs mapping the ocean floor, searching for missing objects, or monitoring underwater ecosystems with incredible efficiency.',\n", + " \"And that's just the tip of the iceberg!\",\n", + " 'Scientists are also exploring the use of shark skin, which has tiny scales that reduce drag, to design faster and more fuel-efficient underwater vehicles.',\n", + " 'The possibilities are truly endless!',\n", + " 'From the bioluminescence of deep-sea creatures to the powerful tentacles of an octopus, nature offers a treasure trove of inspiration for engineers.',\n", + " \"So, we've explored how the elegance of jellyfish and the teamwork of fish are shaping the future of underwater robotics.\",\n", + " 'The field of bio-inspired design is brimming with potential, promising to revolutionize how we explore, understand, and interact with the ocean depths.',\n", + " 'Be sure to check out the show notes for more information on this fascinating topic.',\n", + " 'Until next time, keep exploring Water World Wonders!']" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "podcast_script = state[\"generate_script\"][\"draft\"]\n", + "parsed_script = [\n", + " text for text in (line.strip() for line in podcast_script.splitlines()) if text\n", + "]\n", + "parsed_script" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e075edfe820d" + }, + "source": [ + "### Generate audio for the podcast\n", + "\n", + "This cell generates audio for each line of the parsed podcast script using Google Cloud's Text-to-Speech API.\n", + "\n", + "It creates separate audio files for each line, alternating between two different voices to simulate a conversation between two podcast hosts.\n", + "\n", + "The code:\n", + "\n", + "1. **Initializes the Text-to-Speech Client:** Sets up the connection to the API.\n", + "2. **Defines Audio Configuration:** Specifies the desired output audio format (MP3).\n", + "3. **Iterates through Script Lines:** Generates audio for each line, alternating voices.\n", + "4. **Saves Audio Files:** Writes the generated audio to separate MP3 files." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "c74e3badfd35" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Audio content written to file part-0.mp3\n", + "Audio content written to file part-1.mp3\n", + "Audio content written to file part-2.mp3\n", + "Audio content written to file part-3.mp3\n", + "Audio content written to file part-4.mp3\n", + "Audio content written to file part-5.mp3\n", + "Audio content written to file part-6.mp3\n", + "Audio content written to file part-7.mp3\n", + "Audio content written to file part-8.mp3\n", + "Audio content written to file part-9.mp3\n", + "Audio content written to file part-10.mp3\n", + "Audio content written to file part-11.mp3\n", + "Audio content written to file part-12.mp3\n", + "Audio content written to file part-13.mp3\n", + "Audio content written to file part-14.mp3\n", + "Audio content written to file part-15.mp3\n", + "Audio content written to file part-16.mp3\n", + "Audio content written to file part-17.mp3\n", + "Audio content written to file part-18.mp3\n", + "Audio content written to file part-19.mp3\n", + "Audio content written to file part-20.mp3\n" + ] + } + ], + "source": [ + "# Instantiates a client\n", + "client = texttospeech.TextToSpeechClient()\n", + "\n", + "# Select the type of audio file you want returned\n", + "audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)\n", + "\n", + "audio_files = []\n", + "for count, line in enumerate(parsed_script):\n", + " # Set the text input to be synthesized\n", + " synthesis_input = texttospeech.SynthesisInput(text=line)\n", + "\n", + " # Choose the voice for the current line, alternating between hosts\n", + " if count % 2 == 0:\n", + " voice_name = \"en-US-Journey-O\"\n", + " elif count % 2 == 1:\n", + " voice_name = \"en-US-Journey-D\"\n", + "\n", + " # Configure voice parameters: language and voice name\n", + " voice = texttospeech.VoiceSelectionParams(\n", + " language_code=\"en-US\",\n", + " name=voice_name,\n", + " )\n", + "\n", + " # Generate audio using the Text-to-Speech API\n", + " response = client.synthesize_speech(\n", + " input=synthesis_input, voice=voice, audio_config=audio_config\n", + " )\n", + "\n", + " # Save the generated audio to an MP3 file\n", + " filename = f\"part-{str(count)}.mp3\"\n", + " audio_files.append(filename)\n", + " with open(filename, \"wb\") as out:\n", + " out.write(response.audio_content)\n", + " print(f\"Audio content written to file {filename}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ea674bbf2628" + }, + "source": [ + "### Combine audio files and generate final podcast\n", + "\n", + "This cell combines the individual audio files generated in the previous step into a single podcast file.\n", + "\n", + "It also adds brief silences between each line for better listening experience.\n", + "\n", + "The final podcast is saved as `gemini-podcast.mp3`." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "id": "9a4e93adc415" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Podcast content written to file gemini-podcast.mp3\n" + ] + } + ], + "source": [ + "# Initialize audio segment\n", + "full_audio = AudioSegment.silent(duration=200)\n", + "\n", + "# Concatenate audio segments with silence in between\n", + "for file in audio_files:\n", + " sound = AudioSegment.from_mp3(file)\n", + " silence = AudioSegment.silent(duration=200)\n", + " full_audio += sound + silence\n", + " os.remove(file) # Remove the individual part files after combining\n", + "\n", + "# Save the final audio output to a file\n", + "podcast_filename = \"gemini-podcast.mp3\"\n", + "full_audio.export(podcast_filename)\n", + "print(f\"Podcast content written to file {podcast_filename}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2be9b47ae8a3" + }, + "source": [ + "### Listen to your AI-generated podcast!\n", + "\n", + "This cell plays the final podcast generated by the AI agent.\n", + "\n", + "The `Audio` object from `IPython.display` is used to embed the audio player directly into the notebook. The podcast will start playing automatically.\n", + "\n", + "Enjoy your AI-created podcast!" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "id": "2f50dcfe1651" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Audio(filename=podcast_filename, rate=32000, autoplay=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "df34f0351197" + }, + "source": [ + "## Conclusion: Building AI-powered podcast agents\n", + "\n", + "This notebook showcases the exciting potential of using AI to automate the podcast creation process. By combining the power of the Gemini API with the flexibility of LangGraph, you built an intelligent agent capable of:\n", + "\n", + "- **Generating Podcast Outlines:** Structuring the flow and content of the podcast.\n", + "- **Conducting Research:** Gathering information from various sources like arXiv, PubMed, and Wikipedia.\n", + "- **Writing Engaging Scripts:** Crafting podcast scripts with natural-sounding dialogue, citations, and a conversational style.\n", + "- **Critiquing and Revising:** Providing feedback on the script and iteratively refining it.\n", + "- **Generating Audio:** Using text-to-speech technology to create the final podcast audio.\n", + "\n", + "This is just a starting point! You can customize this workflow further by:\n", + "\n", + "- **Adding New Research Tools:** Integrate additional sources of information relevant to your podcast topics.\n", + "- **Experimenting with Prompts:** Refine the prompts to guide the AI agent towards your desired style and content.\n", + "- **Exploring Different Voices:** Use a wider range of voices for the podcast hosts to create unique and engaging listening experiences.\n", + "\n", + "The possibilities are endless! As AI technology continues to advance, you can expect even more creative and innovative applications in podcasting and other content creation domains.\n", + "\n", + "You can learn more about [LangGraph](https://langchain-ai.github.io/langgraph/), the [Gemini API in Vertex AI](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models), or the [chat model provider for Vertex AI in LangChain](https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm/) in their respective documentation pages." + ] + } + ], + "metadata": { + "colab": { + "name": "langgraph_gemini_podcast.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/gemini/rag-engine/rag_engine_vector_search.ipynb b/gemini/rag-engine/rag_engine_vector_search.ipynb new file mode 100644 index 0000000000..1147094284 --- /dev/null +++ b/gemini/rag-engine/rag_engine_vector_search.ipynb @@ -0,0 +1,643 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ur8xi4C7S06n" + }, + "outputs": [], + "source": [ + "# Copyright 2024 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JAPoU8Sm5E6e" + }, + "source": [ + "# Vertex AI RAG Engine with Vertex AI Vector Search\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Google
Open in Colab\n", + "
\n", + "
\n", + " \n", + " \"Google
Open in Colab Enterprise\n", + "
\n", + "
\n", + " \n", + " \"Vertex
Open in Vertex AI Workbench\n", + "
\n", + "
\n", + " \n", + " \"GitHub
View on GitHub\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "84f0f73a0f76" + }, + "source": [ + "| | |\n", + "|-|-|\n", + "| Author(s) | [Holt Skinner](https://github.com/holtskinner) |" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tvgnzT1CKxrO" + }, + "source": [ + "## Overview\n", + "\n", + "This notebook illustrates how to use [Vertex AI RAG Engine](https://cloud.google.com/vertex-ai/generative-ai/docs/rag-overview) with [Vertex AI Vector Search](https://cloud.google.com/vertex-ai/docs/vector-search/overview) as a vector database.\n", + "\n", + "For more information, refer to the [official documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/use-vertexai-vector-search).\n", + "\n", + "For more details on RAG corpus/file management and detailed support please visit [Vertex AI RAG Engine API](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/rag-api)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "61RBz8LLbxCR" + }, + "source": [ + "## Get started" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "No17Cw5hgx12" + }, + "source": [ + "### Install Vertex AI SDK and other required packages\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "tFy3H3aPgx12" + }, + "outputs": [], + "source": [ + "%pip install --upgrade --user --quiet google-cloud-aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R5Xep4W9lq-Z" + }, + "source": [ + "### Restart runtime\n", + "\n", + "To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n", + "\n", + "The restart might take a minute or longer. After it's restarted, continue to the next step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XRvKdaPDTznN" + }, + "outputs": [], + "source": [ + "import IPython\n", + "\n", + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SbmM4z7FOBpM" + }, + "source": [ + "
\n", + "⚠️ The kernel is going to restart. Wait until it's finished before continuing to the next step. ⚠️\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dmWOrTJ3gx13" + }, + "source": [ + "### Authenticate your notebook environment (Colab only)\n", + "\n", + "If you're running this notebook on Google Colab, run the cell below to authenticate your environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NyKGtVQjgx13" + }, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "if \"google.colab\" in sys.modules:\n", + " from google.colab import auth\n", + "\n", + " auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DF4l8DTdWgPY" + }, + "source": [ + "### Set Google Cloud project information and initialize Vertex AI SDK\n", + "\n", + "To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "Learn more about [setting up a project and a development environment](https://cloud.google.com/vertex-ai/docs/start/cloud-environment)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Nqwi-5ufWp_B" + }, + "outputs": [], + "source": [ + "# Use the environment variable if the user doesn't provide Project ID.\n", + "import os\n", + "\n", + "from google.cloud import aiplatform\n", + "\n", + "PROJECT_ID = \"[your-project-id]\" # @param {type:\"string\", isTemplate: true}\n", + "if PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = str(os.environ.get(\"GOOGLE_CLOUD_PROJECT\"))\n", + "\n", + "LOCATION = os.environ.get(\"GOOGLE_CLOUD_REGION\", \"us-central1\")\n", + "\n", + "aiplatform.init(project=PROJECT_ID, location=LOCATION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "adbe5c6b3549" + }, + "source": [ + "## (Optional) Setup Vertex AI Vector Search index and index endpoint\n", + "\n", + "In this section, we have some helper methods to help you setup your Vector Search index.\n", + "\n", + "This section is not required if you already have a Vector Search index ready to use.\n", + "\n", + "The index has to meet the following criteria:\n", + "\n", + "1. `IndexUpdateMethod` must be `STREAM_UPDATE`, see [Create stream index]({{docs_path}}vector-search/create-manage-index#create-stream-index).\n", + "\n", + "2. Distance measure type must be explicitly set to one of the following:\n", + "\n", + " * `DOT_PRODUCT_DISTANCE`\n", + " * `COSINE_DISTANCE`\n", + "\n", + "3. Dimension of the vector must be consistent with the embedding model you plan\n", + " to use in the RAG corpus. Other parameters can be tuned based on\n", + " your choices, which determine whether the additional parameters can be\n", + " tuned." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ee177c9bc175" + }, + "outputs": [], + "source": [ + "# create the index\n", + "my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index(\n", + " display_name=\"your-display-name\",\n", + " description=\"your-description\",\n", + " dimensions=768,\n", + " approximate_neighbors_count=10,\n", + " leaf_node_embedding_count=500,\n", + " leaf_nodes_to_search_percent=7,\n", + " distance_measure_type=\"DOT_PRODUCT_DISTANCE\",\n", + " feature_norm_type=\"UNIT_L2_NORM\",\n", + " index_update_method=\"STREAM_UPDATE\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "02e52d8dcda6" + }, + "source": [ + "RAG Engine supports [public endpoints](https://cloud.google.com/vertex-ai/docs/vector-search/deploy-index-public)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ce6e0e85adf1" + }, + "outputs": [], + "source": [ + "# create IndexEndpoint\n", + "my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(\n", + " display_name=\"your-display-name\", public_endpoint_enabled=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c4c3f91ab95f" + }, + "source": [ + "Deploy the index to the index endpoint.\n", + "\n", + "If it's the first time that you're deploying an index to an index endpoint, it\n", + "takes approximately 30 minutes to automatically build and initiate the backend\n", + "before the index can be stored. After the first deployment, the index is ready\n", + "in seconds. To see the status of the index deployment, open the\n", + "[**Vector Search Console**](https://console.cloud.google.com/vertex-ai/matching-engine/index-endpoints),\n", + "select the **Index endpoints** tab, and choose your index endpoint.\n", + "\n", + "Identify the resource name of your index and index endpoint, which have the\n", + "following the formats:\n", + "\n", + "* `projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexes/${INDEX_ID}`\n", + "* `projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexEndpoints/${INDEX_ENDPOINT_ID}`.\n", + "\n", + "If you aren't sure about the resource name, you can use the following command to\n", + "check:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "382010f08560" + }, + "outputs": [], + "source": [ + "print(my_index_endpoint.resource_name)\n", + "print(my_index.resource_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6dab214cd107" + }, + "outputs": [], + "source": [ + "# Deploy Index\n", + "my_index_endpoint.deploy_index(index=my_index, deployed_index_id=my_index.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EdvJRUWRNGHE" + }, + "source": [ + "## Use Vertex AI Vector Search in RAG Engine\n", + "\n", + "After the Vector Search instance is set up, follow the steps in this section to set the Vector Search instance as the vector database for the RAG application.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cd05469c3e71" + }, + "source": [ + "### Set the vector database to create a RAG corpus" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b9ad5442bd4e" + }, + "outputs": [], + "source": [ + "from vertexai.preview import rag\n", + "from vertexai.preview.generative_models import GenerativeModel, Tool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "53865b3ea33e" + }, + "outputs": [], + "source": [ + "vector_db = rag.VertexVectorSearch(\n", + " index=my_index.resource_name, index_endpoint=my_index_endpoint.resource_name\n", + ")\n", + "\n", + "# Name your corpus\n", + "DISPLAY_NAME = \"\" # @param {type:\"string\"}\n", + "\n", + "# Create RAG Corpus\n", + "rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)\n", + "print(f\"Created RAG Corpus resource: {rag_corpus.name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "93a3296647a2" + }, + "source": [ + "## Upload a file to the corpus" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7f31cc83fb04" + }, + "outputs": [], + "source": [ + "%%writefile test.txt\n", + "\n", + "Here's a demo for Vertex AI Vector Search RAG." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7bab0e824c3d" + }, + "outputs": [], + "source": [ + "rag_file = rag.upload_file(\n", + " corpus_name=rag_corpus.name,\n", + " path=\"test.txt\",\n", + " display_name=\"test.txt\",\n", + " description=\"my test\",\n", + ")\n", + "print(f\"Uploaded file to resource: {rag_file.name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e51b5bcd1739" + }, + "source": [ + "## Import files from Google Cloud Storage\n", + "\n", + "Remember to grant \"Viewer\" access to the \"Vertex RAG Data Service Agent\" (with the format of `service-{project_number}@gcp-sa-vertex-rag.iam.gserviceaccount.com`) for your Google Cloud Storage bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e0e53a05445e" + }, + "outputs": [], + "source": [ + "GCS_BUCKET = \"\" # @param {type:\"string\", \"placeholder\": \"your-gs-bucket\"}\n", + "\n", + "response = rag.import_files( # noqa: F704\n", + " corpus_name=rag_corpus.name,\n", + " paths=[GCS_BUCKET],\n", + " chunk_size=512,\n", + " chunk_overlap=50,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "48313a38ef52" + }, + "outputs": [], + "source": [ + "# Check the files just imported. It may take a few seconds to process the imported files.\n", + "rag.list_files(corpus_name=rag_corpus.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ceab91983444" + }, + "source": [ + "## Import files from Google Drive\n", + "\n", + "Eligible paths can be:\n", + "\n", + "- `https://drive.google.com/drive/folders/{folder_id}`\n", + "- `https://drive.google.com/file/d/{file_id}`\n", + "\n", + "Remember to grant \"Viewer\" access to the \"Vertex RAG Data Service Agent\" (with the format of `service-{project_number}@gcp-sa-vertex-rag.iam.gserviceaccount.com`) for your Drive folder/files.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ea8a5c97ad80" + }, + "outputs": [], + "source": [ + "FILE_ID = \"\" # @param {type:\"string\", \"placeholder\": \"your-file-id\"}\n", + "FILE_PATH = f\"https://drive.google.com/file/d/{FILE_ID}\"\n", + "\n", + "rag.import_files(\n", + " corpus_name=rag_corpus.name,\n", + " paths=[FILE_PATH],\n", + " chunk_size=1024,\n", + " chunk_overlap=100,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e71887752baa" + }, + "outputs": [], + "source": [ + "# Check the files just imported. It may take a few seconds to process the imported files.\n", + "rag.list_files(corpus_name=rag_corpus.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "346ceb446e7c" + }, + "source": [ + "## Use your RAG Corpus to add context to your Gemini queries\n", + "\n", + "When retrieved contexts similarity distance < `vector_distance_threshold`, the contexts (from `RagStore`) will be used for content generation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fec72ac982c3" + }, + "outputs": [], + "source": [ + "rag_resource = rag.RagResource(\n", + " rag_corpus=rag_corpus.name,\n", + ")\n", + "\n", + "rag_retrieval_tool = Tool.from_retrieval(\n", + " retrieval=rag.Retrieval(\n", + " source=rag.VertexRagStore(\n", + " rag_resources=[rag_resource], # Currently only 1 corpus is allowed.\n", + " similarity_top_k=10,\n", + " vector_distance_threshold=0.4,\n", + " ),\n", + " )\n", + ")\n", + "\n", + "rag_model = GenerativeModel(\"gemini-1.5-flash\", tools=[rag_retrieval_tool])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cc0ee39e50f6" + }, + "outputs": [], + "source": [ + "GENERATE_CONTENT_PROMPT = \"What is RAG and why it is helpful?\" # @param {type:\"string\"}\n", + "\n", + "response = rag_model.generate_content(GENERATE_CONTENT_PROMPT)\n", + "\n", + "response" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2899daa12fac" + }, + "source": [ + "## Using other generation API with Rag Retrieval Tool\n", + "\n", + "The retrieved contexts can be passed to any SDK or model generation API to generate final results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d549fb12733f" + }, + "outputs": [], + "source": [ + "RETRIEVAL_QUERY = \"What is RAG and why it is helpful?\" # @param {type:\"string\"}\n", + "\n", + "rag_resource = rag.RagResource(\n", + " rag_corpus=rag_corpus.name,\n", + " # Need to manually get the ids from rag.list_files.\n", + " # rag_file_ids=[],\n", + ")\n", + "\n", + "response = rag.retrieval_query(\n", + " rag_resources=[rag_resource], # Currently only 1 corpus is allowed.\n", + " text=RETRIEVAL_QUERY,\n", + " similarity_top_k=10,\n", + ")\n", + "\n", + "# The retrieved context can be passed to any SDK or model generation API to generate final results.\n", + "retrieved_context = \" \".join(\n", + " [context.text for context in response.contexts.contexts]\n", + ").replace(\"\\n\", \"\")\n", + "\n", + "retrieved_context" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2a4e033321ad" + }, + "source": [ + "## Cleaning up\n", + "\n", + "Clean up resources created in this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ea74a96756a3" + }, + "outputs": [], + "source": [ + "delete_rag_corpus = False # @param {type:\"boolean\"}\n", + "\n", + "if delete_rag_corpus:\n", + " rag.delete_corpus(name=rag_corpus.name)" + ] + } + ], + "metadata": { + "colab": { + "name": "rag_engine_vector_search.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/gemini/reasoning-engine/intro_reasoning_engine.ipynb b/gemini/reasoning-engine/intro_reasoning_engine.ipynb index 70ed0b61d3..ff622df702 100644 --- a/gemini/reasoning-engine/intro_reasoning_engine.ipynb +++ b/gemini/reasoning-engine/intro_reasoning_engine.ipynb @@ -315,7 +315,7 @@ }, "outputs": [], "source": [ - "model = \"gemini-1.5-pro-001\"" + "model = \"gemini-1.5-pro\"" ] }, { @@ -675,7 +675,7 @@ "outputs": [], "source": [ "## Model variant and version\n", - "model = \"gemini-1.0-pro-001\"\n", + "model = \"gemini-1.5-pro\"\n", "\n", "## Model safety settings\n", "from langchain_google_vertexai import HarmBlockThreshold, HarmCategory\n", diff --git a/gemini/reasoning-engine/tracing_agents_in_reasoning_engine.ipynb b/gemini/reasoning-engine/tracing_agents_in_reasoning_engine.ipynb index b23945f7f5..e148f0893c 100644 --- a/gemini/reasoning-engine/tracing_agents_in_reasoning_engine.ipynb +++ b/gemini/reasoning-engine/tracing_agents_in_reasoning_engine.ipynb @@ -412,7 +412,7 @@ "outputs": [], "source": [ "agent = reasoning_engines.LangchainAgent(\n", - " model=\"gemini-1.5-pro-001\",\n", + " model=\"gemini-1.5-pro\",\n", " model_kwargs={\"temperature\": 0},\n", " tools=[classify_ticket, search_knowledge_base, escalate_to_human],\n", " enable_tracing=True,\n", diff --git a/gemini/reasoning-engine/tutorial_alloydb_rag_agent.ipynb b/gemini/reasoning-engine/tutorial_alloydb_rag_agent.ipynb index f174b9eba8..02210f7e14 100644 --- a/gemini/reasoning-engine/tutorial_alloydb_rag_agent.ipynb +++ b/gemini/reasoning-engine/tutorial_alloydb_rag_agent.ipynb @@ -145,6 +145,7 @@ "from langchain_core.documents import Document\n", "from langchain_google_alloydb_pg import AlloyDBEngine, AlloyDBVectorStore\n", "from langchain_google_vertexai import VertexAIEmbeddings\n", + "from sqlalchemy import text # noqa: F401\n", "import vertexai\n", "from vertexai.preview import reasoning_engines" ] @@ -537,7 +538,7 @@ " --region={REGION} \\\n", " --cluster={CLUSTER} \\\n", " --project={PROJECT_ID} \\\n", - " --type=IAM_BASED \\\n", + " --type=IAM_BASED\n", "\n", "# Grant IAM Permissions for database-user authentication\n", "!gcloud projects add-iam-policy-binding {PROJECT_ID} \\\n", diff --git a/gemini/reasoning-engine/tutorial_cloud_sql_pg_rag_agent.ipynb b/gemini/reasoning-engine/tutorial_cloud_sql_pg_rag_agent.ipynb index c2f117dbaf..c22c5acd3e 100644 --- a/gemini/reasoning-engine/tutorial_cloud_sql_pg_rag_agent.ipynb +++ b/gemini/reasoning-engine/tutorial_cloud_sql_pg_rag_agent.ipynb @@ -145,6 +145,7 @@ "from langchain_core.documents import Document\n", "from langchain_google_cloud_sql_pg import PostgresEngine, PostgresVectorStore\n", "from langchain_google_vertexai import VertexAIEmbeddings\n", + "from sqlalchemy import text # noqa: F401\n", "import vertexai\n", "from vertexai.preview import reasoning_engines" ] diff --git a/gemini/reasoning-engine/tutorial_google_maps_agent.ipynb b/gemini/reasoning-engine/tutorial_google_maps_agent.ipynb index a126c3c6ee..3c194bcf96 100644 --- a/gemini/reasoning-engine/tutorial_google_maps_agent.ipynb +++ b/gemini/reasoning-engine/tutorial_google_maps_agent.ipynb @@ -333,7 +333,7 @@ }, "outputs": [], "source": [ - "model = \"gemini-1.5-pro-001\"" + "model = \"gemini-1.5-pro\"" ] }, { diff --git a/gemini/reasoning-engine/tutorial_vertex_ai_search_rag_agent.ipynb b/gemini/reasoning-engine/tutorial_vertex_ai_search_rag_agent.ipynb index 708e55c302..4f217130c6 100644 --- a/gemini/reasoning-engine/tutorial_vertex_ai_search_rag_agent.ipynb +++ b/gemini/reasoning-engine/tutorial_vertex_ai_search_rag_agent.ipynb @@ -311,7 +311,7 @@ }, "outputs": [], "source": [ - "model = \"gemini-1.5-pro-001\"" + "model = \"gemini-1.5-pro\"" ] }, { diff --git a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/app/utils/tracing.py b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/app/utils/tracing.py index 0f5ca84b80..53b23d722f 100644 --- a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/app/utils/tracing.py +++ b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/app/utils/tracing.py @@ -57,7 +57,6 @@ def __init__( self.logger = self.logging_client.logger(__name__) self.storage_client = storage_client or storage.Client(project=self.project_id) self.bucket_name = bucket_name or f"{self.project_id}-logs-data" - self._ensure_bucket_exists() self.bucket = self.storage_client.bucket(self.bucket_name) def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult: @@ -89,12 +88,6 @@ def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult: # Export spans to Google Cloud Trace using the parent class method return super().export(spans) - def _ensure_bucket_exists(self) -> None: - """Ensure that the GCS bucket exists, creating it if necessary.""" - if not self.storage_client.bucket(self.bucket_name).exists(): - logging.info(f"Bucket {self.bucket_name} not detected. Creating it now.") - self.storage_client.create_bucket(self.bucket_name) - def store_in_gcs(self, content: str, span_id: str) -> str: """ Initiate storing large content in Google Cloud Storage/ @@ -103,6 +96,13 @@ def store_in_gcs(self, content: str, span_id: str) -> str: :param span_id: The ID of the span :return: The GCS URI of the stored content """ + if not self.storage_client.bucket(self.bucket_name).exists(): + logging.warning( + f"Bucket {self.bucket_name} not found. " + "Unable to store span attributes in GCS." + ) + return "GCS bucket not found" + blob_name = f"spans/{span_id}.json" blob = self.bucket.blob(blob_name) diff --git a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/notebooks/getting_started.ipynb b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/notebooks/getting_started.ipynb index 2efd479b1c..79ee247b6e 100644 --- a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/notebooks/getting_started.ipynb +++ b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/notebooks/getting_started.ipynb @@ -790,7 +790,11 @@ " \n", "- Strong Integration with [Vertex AI Experiments](https://cloud.google.com/vertex-ai/docs/experiments/intro-vertex-ai-experiments): Vertex AI Evaluation seamlessly integrates with Vertex AI Experiments, creating a unified workflow for tracking experiments and managing evaluation results.\n", "\n", - "For a comprehensive list of samples on Vertex AI Evaluation, visit the [official documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-examples)" + "### Evaluation Samples\n", + "\n", + "**Note**: This notebook includes a section on evaluation, but it's a placeholder which should evolve based on the needs of your app. For a set of recommended samples on evaluation please visit the [official documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-examples).\n", + "\n", + "For a comprehensive solution to perform evaluation in Vertex AI, consider leveraging [Evals Playbook](https://github.com/GoogleCloudPlatform/applied-ai-engineering-samples/tree/main/genai-on-vertex-ai/gemini/evals_playbook), which provides recipes to streamline the experimentation and evaluation process. It showcases how you can define, track, compare, and iteratively refine experiments, customize evaluation runs and metrics and log prompts and responses.\n" ] }, { @@ -799,6 +803,8 @@ "id": "e214b9a02547" }, "source": [ + "## Evaluating a chain\n", + "\n", "Let's start by defining again a simple chain:" ] }, diff --git a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/tests/unit/test_utils/test_tracing_exporter.py b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/tests/unit/test_utils/test_tracing_exporter.py index f77d1d7a05..5c012a6c7b 100644 --- a/gemini/sample-apps/e2e-gen-ai-app-starter-pack/tests/unit/test_utils/test_tracing_exporter.py +++ b/gemini/sample-apps/e2e-gen-ai-app-starter-pack/tests/unit/test_utils/test_tracing_exporter.py @@ -75,7 +75,6 @@ def exporter( storage_client=mock_storage_client, bucket_name="test-bucket", ) - exporter._ensure_bucket_exists = Mock() # type: ignore[method-assign] return exporter diff --git a/gemini/sample-apps/genwealth/api/package-lock.json b/gemini/sample-apps/genwealth/api/package-lock.json index 56ef847841..6cc7460305 100644 --- a/gemini/sample-apps/genwealth/api/package-lock.json +++ b/gemini/sample-apps/genwealth/api/package-lock.json @@ -13,7 +13,7 @@ "@google-cloud/storage": "^7.9.0", "@google-cloud/vertexai": "^1.0.0", "cors": "^2.8.5", - "express": "^4.21.1", + "express": "^4.19.2", "lodash": "^4.17.21", "multer": "^1.4.5-lts.1", "pg": "^8.7.3", @@ -1517,9 +1517,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -1529,7 +1529,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.13.0", + "qs": "6.11.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -1900,9 +1900,9 @@ } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -2076,9 +2076,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -2202,36 +2202,36 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", + "finalhandler": "1.2.0", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", + "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -2295,12 +2295,12 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -3280,12 +3280,9 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", @@ -3737,12 +3734,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3971,9 +3965,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/pg": { "version": "8.12.0", @@ -4211,11 +4205,11 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" @@ -4382,9 +4376,9 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -4404,28 +4398,20 @@ "node": ">= 0.8.0" } }, - "node_modules/send/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==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" diff --git a/gemini/sample-apps/genwealth/api/package.json b/gemini/sample-apps/genwealth/api/package.json index 00f535fba8..e348a5e71c 100644 --- a/gemini/sample-apps/genwealth/api/package.json +++ b/gemini/sample-apps/genwealth/api/package.json @@ -15,7 +15,7 @@ "@google-cloud/storage": "^7.9.0", "@google-cloud/vertexai": "^1.0.0", "cors": "^2.8.5", - "express": "^4.21.1", + "express": "^4.19.2", "lodash": "^4.17.21", "multer": "^1.4.5-lts.1", "pg": "^8.7.3", diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/Dockerfile b/gemini/sample-apps/llamadeploy-on-cloud-run/Dockerfile new file mode 100644 index 0000000000..0436e038c6 --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.9 + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +ENV PROJECT_ID "[your-project-id]" +ENV LOCATION = "[your-project-location]" +ENV FIRESTORE_DATABASE_ID "[your-firestore-database-id]" +ENV DATA_DIRECTORY "/app/data" + +COPY interact.py . +COPY core.py . +COPY workflow.py . +COPY wrapper.sh . + +#Create a directory for data +RUN mkdir /app/data + +# Copy the data into the directory +COPY ./data /app/data + +# Make the wrapper script executable +RUN chmod +x wrapper.sh + +CMD ["./wrapper.sh"] \ No newline at end of file diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/README.md b/gemini/sample-apps/llamadeploy-on-cloud-run/README.md new file mode 100644 index 0000000000..5ae747bedc --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/README.md @@ -0,0 +1,140 @@ +# Llama Deploy on Cloud Run + +This repository contains a LlamaIndex Workflow application that demonstrates how to deploy and interact with Llama workflows using the `llama-deploy` library and deploying the service on Cloud Run. + +The Workflow deployed on Cloud Run is a complex Retrieval Augmented Generation (RAG) workflow using Gemini models and Firestore databases. + +## Authors + +- Noa Ben-Efraim (`noabe`) + +## Prerequisites + +Before running this application on Cloud Run, make sure you have the following: + +- **Google Cloud Project:** An active Google Cloud Project with billing enabled. +- **gcloud CLI:** The gcloud CLI installed and configured on your local machine. Authenticate to your Google Cloud project using `gcloud auth login`. +- **Docker:** Docker installed on your local machine to build and push the image. +- **Enabled APIs:** Enable the following APIs in your Google Cloud project: + - Cloud Run API + - Cloud Build API (if you want to build the image in Google Cloud) + - Artifact Registry API (or Container Registry API) +- **Service Account:** A service account with the necessary permissions to access other Google Cloud resources used by your workflow (e.g., Firestore, Cloud Storage, Vertex AI). You can use the default Compute Engine service account or create a custom one. + +### Download Data + +We will be using The Great Gatsby text by F. Scott Fitzgerald for this example. + +```bash +!mkdir data + +!gcloud storage cp gs://github-repo/generative-ai/sample-apps/llamadeploy-on-cloud-run/gatsby.txt data +``` + +## Files + +### 1. `core.py` + +- **Purpose:** Launches the core services required for the Llama workflow application. This includes: + - **Control Plane:** Manages workflow sessions and tasks. + - **Message Queue:** Handles communication between services. +- **Usage:** + - It uses the `llama-deploy` library to deploy the control plane and message queue. + +### 2. `workflow.py` + +- **Purpose:** Defines and deploys a Llama workflow. +- **Workflow Logic:** + - Contains the `RAGWorkflow` class, which defines the steps in the workflow. + - This workflow architects complex Retrieval Augmented Generation (RAG) workflow using Gemini models and Firestore databases. + - The steps of the workflow are as follow: + - Start Event triggered by providing a query to the workflow + - The QueryMultiStep Event that breaks down a complex query into sequential sub-questions using Gemini. Then proceeds to answer the sub-questions. + - The sub-questions results are passed to the RerankEvent where given the initial user query, Gemini reranks the returned answers to the sub-questions. + - The reranked chunks are passed to the CreateCitationEvents where citations are added to the sub-questions used to generate the answer. + - An answer is synthesized for the original query and returned to the user. + - You can customize this class to implement your desired workflow logic. + - For more information regarding `RAGWorkflow`, refer to this [notebook](https://github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/orchestration/llamaindex_workflows.ipynb). +- **Usage:** + - It uses the `llama-deploy` library to register the workflow with the control plane. + +### 3. `interact.py` + +- **Purpose:** Provides a Flask application to interact with the deployed workflow. +- **Functionality:** + - Creates a Flask app with a POST endpoint (`/`) to receive workflow requests. + - Handles incoming requests, extracts the workflow name and arguments, and runs the workflow using the `llama-deploy` client. + - Returns the workflow result as a JSON response. +- **Usage:** + - Send POST requests to the `/` endpoint with the workflow name and arguments to execute the workflow. + +### 4. `Dockerfile` + +- **Purpose:** Builds a Docker image for the Llama workflow application. +- **Instructions:** + - Uses a Python base image. + - Installs the required dependencies. + - Copies the application code into the image. + - Sets environment variables. + - Creates a directory for data and copies the data into the image. + - Makes the wrapper script executable. + - Defines the command to run the application using the wrapper script. + +### 5. `wrapper.sh` + +- **Purpose:** A wrapper script to manage the application processes within the Docker container. +- **Functionality:** + - Starts `core.py` and `workflow.py` in the background. + - Waits for the services to start. + - Runs `interact.py` in the foreground to keep the container running. + - Handles signals (e.g., SIGTERM, SIGINT) to gracefully stop the processes. + +## Running the Application + +1. Create a repository that will be registered on Artifact Registry: + + ```bash + gcloud artifacts repositories create my-docker-repo \ + --repository-format=docker \ + --location=us-west2 \ + --description="Docker repository for Llama workflow app" + ``` + +2. Build the Docker image on Artifact Registry: + + ```bash + gcloud builds submit —region=us-west2 —tag us-west2-docker.pkg.dev/[YOUR_PROJECT_ID]]/my-docker-repo/llama-workflows-app:first + ``` + +3. Deploy the Docker Image to Cloud Run: + + ```bash + gcloud run deploy llama-workflow-service \ + --image us-west2-docker.pkg.dev/[YOUR_PROJECT_ID]/my-docker-repo/llama-workflow-app:latest \ + --platform managed \ + --region us-west2 \ + --allow-unauthenticated \ + --set-env-vars PROJECT_ID="[YOUR_PROJECT_ID]",FIRESTORE_DATABASE_ID="[YOUR_FIRESTORE_DATABASE_ID]",LOCATION="[YOUR_PROJECT_LOCATION] + ``` + +4. Interact with the service: + + ```bash + curl \ + --header "Content-Type: application/json" \ + --request POST \ + --data '{"workflow": "my_workflow", "args": {"query": "your_query", "num_steps": 2}}' \ + + ``` + +## Contributing + +Contributions to improve the system are welcome. Please follow the standard GitHub pull request process to submit your changes. + +## License + +This project is licensed under the standard Google Apache-2.0 license. + +## Get in Touch + +Please file any GitHub issues if you have any questions or suggestions. diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/core.py b/gemini/sample-apps/llamadeploy-on-cloud-run/core.py new file mode 100644 index 0000000000..bf47de3661 --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/core.py @@ -0,0 +1,15 @@ +from llama_deploy import ControlPlaneConfig, SimpleMessageQueueConfig, deploy_core + + +async def main() -> None: + """Launches the core services required for the Llama workflow application.""" + await deploy_core( + control_plane_config=ControlPlaneConfig(host="0.0.0.0", port=8000), + message_queue_config=SimpleMessageQueueConfig(host="0.0.0.0", port=8001), + ) + + +if __name__ == "__main__": + import asyncio + + asyncio.run(main()) diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/interact.py b/gemini/sample-apps/llamadeploy-on-cloud-run/interact.py new file mode 100644 index 0000000000..803ae53709 --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/interact.py @@ -0,0 +1,32 @@ +from flask import Flask, jsonify, request +from llama_deploy import ControlPlaneConfig, LlamaDeployClient + +app = Flask(__name__) + + +@app.route("/", methods=["POST"]) +async def run() -> jsonify: + """Provides a Flask application to interact with the deployed workflow.""" + + data = request.get_json() + workflow_name = data.get("workflow", "my_workflow") # Default to 'my_workflow' + print(workflow_name) + arguments = data.get("args", {}) + print(arguments) + + client = LlamaDeployClient(ControlPlaneConfig()) + print("Client success made") + print(client.control_plane_config) + session = client.create_session() + + result = session.run( + workflow_name, query=arguments["query"], num_steps=arguments["num_steps"] + ) + print(result) + + print("Completed workflow") + return jsonify({"status": 200, "answer": result}) + + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8080, debug=False, use_reloader=False) diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/requirements.txt b/gemini/sample-apps/llamadeploy-on-cloud-run/requirements.txt new file mode 100644 index 0000000000..bc637ca862 --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/requirements.txt @@ -0,0 +1,7 @@ +llama-index==0.11.8 +llama-index-embeddings-vertex==0.2.0 +llama-index-utils-workflow==0.2.1 +llama-index-llms-vertex==0.3.4 +llama-index-storage-docstore-firestore==0.2.0 +llama_deploy +flask[async] diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/workflow.py b/gemini/sample-apps/llamadeploy-on-cloud-run/workflow.py new file mode 100644 index 0000000000..faf9390344 --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/workflow.py @@ -0,0 +1,439 @@ +import os +from typing import Any, Dict, List, cast + +import google.auth +import google.auth.transport.requests +from llama_deploy import ControlPlaneConfig, WorkflowServiceConfig, deploy_workflow +from llama_index.core import ( + Settings, + SimpleDirectoryReader, + StorageContext, + VectorStoreIndex, +) +from llama_index.core.base.base_query_engine import BaseQueryEngine +from llama_index.core.indices.query.query_transform.base import ( + StepDecomposeQueryTransform, +) +from llama_index.core.llms import LLM +from llama_index.core.node_parser import SentenceSplitter +from llama_index.core.postprocessor.llm_rerank import LLMRerank +from llama_index.core.prompts import PromptTemplate +from llama_index.core.response_synthesizers import ( + ResponseMode, + get_response_synthesizer, +) +from llama_index.core.schema import MetadataMode, NodeWithScore, QueryBundle, TextNode +from llama_index.core.workflow import ( + Context, + Event, + StartEvent, + StopEvent, + Workflow, + step, +) +from llama_index.embeddings.vertex import VertexTextEmbedding +from llama_index.llms.vertex import Vertex +from llama_index.storage.docstore.firestore import FirestoreDocumentStore +import vertexai +from vertexai.generative_models import HarmBlockThreshold, HarmCategory, SafetySetting + +# credentials will now have an API token + +project_id = os.environ.get("PROJECT_ID") +location = os.environ.get("LOCATION") +vertexai.init(project=project_id, location=location) + +credentials = google.auth.default(quota_project_id=project_id)[0] +request = google.auth.transport.requests.Request() +credentials.refresh(request) + + +safety_config = [ + SafetySetting( + category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, + threshold=HarmBlockThreshold.BLOCK_NONE, + ), + SafetySetting( + category=HarmCategory.HARM_CATEGORY_HARASSMENT, + threshold=HarmBlockThreshold.BLOCK_NONE, + ), + SafetySetting( + category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, + threshold=HarmBlockThreshold.BLOCK_NONE, + ), +] +embedding_model = VertexTextEmbedding("text-embedding-004", credentials=credentials) +llm = Vertex( + model="gemini-pro", + temperature=0.2, + max_tokens=3000, + safety_settings=safety_config, + credentials=credentials, +) + +Settings.embed_model = embedding_model +Settings.llm = llm + + +class RetrieverEvent(Event): + """Result of running retrieval""" + + nodes: list[NodeWithScore] + + +class RerankEvent(Event): + """Result of running reranking on retrieved nodes""" + + nodes: List[NodeWithScore] + source_nodes: List[NodeWithScore] + final_response_metadata: Dict[str, Any] + + +class FirestoreIndexData(Event): + """Result of indexing documents in Firestore""" + + status: str + + +class QueryMultiStepEvent(Event): + """ + Event containing results of a multi-step query process. + + Attributes: + nodes (List[NodeWithScore]): List of nodes with their associated scores. + source_nodes (List[NodeWithScore]): List of source nodes with their scores. + final_response_metadata (Dict[str, Any]): Metadata associated with the final response. + """ + + nodes: List[NodeWithScore] + source_nodes: List[NodeWithScore] + final_response_metadata: Dict[str, Any] + + +class CreateCitationsEvent(Event): + """Add citations to the nodes.""" + + nodes: List[NodeWithScore] + source_nodes: List[NodeWithScore] + final_response_metadata: Dict[str, Any] + + +CITATION_QA_TEMPLATE = PromptTemplate( + "Your task is to answer the question based on the information given in the sources listed below." + "Use only the provided sources to answer." + "Cite the source number(s) for any information you use in your answer (e.g., [1])." + "Always include at least one source citation in your answer." + "Only cite a source if you directly use information from it." + "If the sources don't contain the information needed to answer the question, state that." + "For example:" + "Source 1: Apples are red, green, or yellow." + "Source 2: Bananas are yellow when ripe." + "Source 3: Strawberries are red when ripe." + "Query: Which fruits are red when ripe?" + "Answer: Apples [1] and strawberries [3] can be red when ripe." + "------" + "Below are several numbered sources of information:" + "------" + "{context_str}" + "------" + "Query: {query_str}" + "Answer: " +) + +CITATION_REFINE_TEMPLATE = PromptTemplate( + "You have an initial answer to a query." + "Your job is to improve this answer using the information provided in the numbered sources below. Here's how:" + " - Read the existing answer and the sources carefully." + " - Identify any information in the sources that can improve the answer by adding details, making it more accurate, or providing better support." + " - If the sources provide new information, incorporate it into the answer." + " - If the sources contradict the existing answer, correct the answer." + " - If the sources aren't helpful, keep the original answer." + "Cite the source number(s) for any information you use in your answer (e.g., [1])." + "We have provided an existing answer: {existing_answer}" + "Below are several numbered sources of information. " + "Use them to refine the existing answer. " + "If the provided sources are not helpful, you will repeat the existing answer." + "------" + "{context_msg}" + "------" + "Query: {query_str}" + "Answer: " +) + +DEFAULT_CITATION_CHUNK_SIZE = 512 +DEFAULT_CITATION_CHUNK_OVERLAP = 20 + + +class RAGWorkflow(Workflow): + """Defines Workflow class that architects complex Retrieval Augmented Generation (RAG) workflow using Gemini models and Firestore databases.""" + + def combine_queries( + self, + query_bundle: QueryBundle, + prev_reasoning: str, + llm_inner: LLM, + ) -> QueryBundle: + """Combine queries using StepDecomposeQueryTransform.""" + transform_metadata = {"prev_reasoning": prev_reasoning} + return StepDecomposeQueryTransform(llm=llm_inner)( + query_bundle, metadata=transform_metadata + ) + + def default_stop_fn(self, stop_dict: Dict) -> bool: + """Stop function for multi-step query combiner.""" + query_bundle = cast(QueryBundle, stop_dict.get("query_bundle")) + if query_bundle is None: + raise ValueError("Response must be provided to stop function.") + + return "none" in query_bundle.query_str.lower() + + def create_index(self, dirname: str | None) -> VectorStoreIndex: + """Create Vector Store Index from documents in Firestore Database""" + + if not dirname: + return None + + documents = SimpleDirectoryReader(dirname).load_data(show_progress=True) + print(len(documents)) + print("Data loaded into Documents.") + + # create (or load) docstore and add nodes + docstore = FirestoreDocumentStore.from_database( + project=os.environ.get("PROJECT_ID"), + database=os.environ.get("FIRESTORE_DATABASE_ID"), + ) + + docstore.add_documents(documents) + print("Firestore document store created with documents") + + # create storage context + storage_context = StorageContext.from_defaults(docstore=docstore) + + # setup index + index = VectorStoreIndex.from_documents( + documents=documents, storage_context=storage_context + ) + + print("Vector Store Index created") + return index + + async def multi_query_inner_loop( + self, query_engine: BaseQueryEngine, query: str, num_steps: int, cur_steps: int + ) -> tuple[list[str], list[NodeWithScore], Dict[str, Any]] | None: + """Helper function to execute the query loop.""" + + # pylint: disable=too-many-locals + prev_reasoning = "" + cur_response = None + should_stop = False + + final_response_metadata: Dict[str, Any] = {"sub_qa": []} + text_chunks: list[str] = [] + source_nodes: list[NodeWithScore] = [] + stop_fn = self.default_stop_fn + + while not should_stop: + if num_steps is not None and cur_steps >= num_steps: + should_stop = True + break + + print(llm) + updated_query_bundle = self.combine_queries( + QueryBundle(query_str=query), + prev_reasoning, + llm_inner=Settings.llm, + ) + + print( + f"Created query for the step - {cur_steps} is: {updated_query_bundle}" + ) + + stop_dict = {"query_bundle": updated_query_bundle} + if stop_fn(stop_dict): + should_stop = True + break + + cur_response = query_engine.query(updated_query_bundle) + + # append to response builder + cur_qa_text = ( + f"\nQuestion: {updated_query_bundle.query_str}\n" + f"Answer: {cur_response!s}" + ) + text_chunks.append(cur_qa_text) + for source_node in cur_response.source_nodes: + print(source_node) + source_nodes.append(source_node) + + # update metadata + final_response_metadata["sub_qa"].append( + (updated_query_bundle.query_str, cur_response) + ) + + prev_reasoning += ( + f"- {updated_query_bundle.query_str}\n" f"- {cur_response!s}\n" + ) + cur_steps += 1 + + return text_chunks, source_nodes, final_response_metadata + + @step(pass_context=True) + async def query_multistep( + self, ctx: Context, ev: StartEvent + ) -> QueryMultiStepEvent | None: + """Entry point for RAG, triggered by a StartEvent with `query`. Execute multi-step query process.""" + + query = ev.get("query") + dirname = os.environ.get("DATA_DIRECTORY") + + index = self.create_index(dirname) + + cur_steps = 0 + + if not query: + return None + + print(f"Query the database with: {query}") + + # store the query in the global context + await ctx.set("query", query) + + # get the index from the global context + if index is None: + print("Index is empty, load some documents before querying!") + return None + + num_steps = ev.get("num_steps") + print(num_steps) + query_engine = index.as_query_engine() + + result = await self.multi_query_inner_loop( + query_engine, query, num_steps, cur_steps + ) + if result is None: + return None + + text_chunks, source_nodes, final_response_metadata = result + + nodes = [ + NodeWithScore(node=TextNode(text=text_chunk)) for text_chunk in text_chunks + ] + return QueryMultiStepEvent( + nodes=nodes, + source_nodes=source_nodes, + final_response_metadata=final_response_metadata, + ) + + @step() + async def rerank(self, ctx: Context, ev: QueryMultiStepEvent) -> RerankEvent: + """Reranking the nodes based on the initial query.""" + + print("Entered the rerank event") + # Rerank the nodes + ranker = LLMRerank(choice_batch_size=5, top_n=10, llm=Settings.llm) + print(await ctx.get("query", default=None), flush=True) + try: + new_nodes = ranker.postprocess_nodes( + ev.nodes, query_str=await ctx.get("query", default=None) + ) + except IndexError as ex: + print(f"IndexError occurred during reranking: {ex}") + print("Using previous nodes instead.") + new_nodes = ev.nodes + + print(f"Reranked nodes to {len(new_nodes)}") + return RerankEvent( + nodes=new_nodes, + source_nodes=ev.source_nodes, + final_response_metadata=ev.final_response_metadata, + ) + + @step() + async def create_citation_nodes(self, ev: RerankEvent) -> CreateCitationsEvent: + """ + Modify retrieved nodes to create granular sources for citations. + + Takes a list of NodeWithScore objects and splits their content + into smaller chunks, creating new NodeWithScore objects for each chunk. + Each new node is labeled as a numbered source, allowing for more precise + citation in query results. + + Args: + nodes (List[NodeWithScore]): A list of NodeWithScore objects to be processed. + + Returns: + List[NodeWithScore]: A new list of NodeWithScore objects, where each object + represents a smaller chunk of the original nodes, labeled as a source. + """ + print("Entered create citation event") + nodes = ev.nodes + + new_nodes: List[NodeWithScore] = [] + + text_splitter = SentenceSplitter( + chunk_size=DEFAULT_CITATION_CHUNK_SIZE, + chunk_overlap=DEFAULT_CITATION_CHUNK_OVERLAP, + ) + + for node in nodes: + + print(node) + + text_chunks = text_splitter.split_text( + node.node.get_content(metadata_mode=MetadataMode.NONE) + ) + + for text_chunk in text_chunks: + text = f"Source {len(new_nodes)+1}:\n{text_chunk}\n" + + new_node = NodeWithScore( + node=TextNode.model_validate(node.node), score=node.score + ) + new_node.node.text = text + new_nodes.append(new_node) + return CreateCitationsEvent( + nodes=new_nodes, + source_nodes=ev.source_nodes, + final_response_metadata=ev.final_response_metadata, + ) + + @step() + async def synthesize(self, ctx: Context, ev: CreateCitationsEvent) -> StopEvent: + """Return a streaming response using reranked nodes.""" + + print("Synthesizing final result...") + + response_synthesizer = get_response_synthesizer( + llm=Vertex(model="gemini-1.0-pro", temperature=0.1, max_tokens=5000), + text_qa_template=CITATION_QA_TEMPLATE, + refine_template=CITATION_REFINE_TEMPLATE, + response_mode=ResponseMode.COMPACT, + use_async=True, + ) + query = await ctx.get("query", default=None) + response = await response_synthesizer.asynthesize( + query, nodes=ev.nodes, additional_source_nodes=ev.source_nodes + ) + return StopEvent(result=response) + + +async def main() -> None: + """Deploys Workflow service.""" + + print("starting deploy workflow creation") + await deploy_workflow( + workflow=RAGWorkflow(timeout=200), + workflow_config=WorkflowServiceConfig( + host="0.0.0.0", + port=8002, + service_name="my_workflow", # This will make it accessible to all interfaces on the host + ), + control_plane_config=ControlPlaneConfig(), + ) + print("Created workflow successfully") + + +if __name__ == "__main__": + import asyncio + + asyncio.run(main()) diff --git a/gemini/sample-apps/llamadeploy-on-cloud-run/wrapper.sh b/gemini/sample-apps/llamadeploy-on-cloud-run/wrapper.sh new file mode 100755 index 0000000000..93f72f9f8e --- /dev/null +++ b/gemini/sample-apps/llamadeploy-on-cloud-run/wrapper.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Set -e to exit immediately if a command exits with a non-zero status. +set -e + +# Start core.py in the background and log its PID +echo "Starting core.py..." +python3 core.py & +core_pid=$! +echo "core.py started with PID: $core_pid" + +# Wait for 15 seconds +echo "Waiting for 15 seconds..." +sleep 15 + +# Start workflow.py in the background and log its PID +echo "Starting workflow.py..." +python3 workflow.py & +workflow_pid=$! +echo "workflow.py started with PID: $workflow_pid" + +# Wait for 15 seconds +echo "Waiting for 15 seconds..." +sleep 15 + +# Start interact.py in the foreground and log its PID +echo "Starting interact.py..." +python3 interact.py & +interact_pid=$! +echo "interact.py started with PID: $interact_pid" diff --git a/gemini/use-cases/education/ai_quick_build_experience_backend.ipynb b/gemini/use-cases/education/ai_quick_build_experience_backend.ipynb new file mode 100644 index 0000000000..b8b306b3af --- /dev/null +++ b/gemini/use-cases/education/ai_quick_build_experience_backend.ipynb @@ -0,0 +1,1164 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "77d580c8", + "metadata": { + "id": "77d580c8" + }, + "outputs": [], + "source": [ + "# Copyright 2024 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "id": "d2a6d1bc", + "metadata": { + "id": "d2a6d1bc" + }, + "source": [ + "# AI Quick Build Experience Backend\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Google
Open in Colab\n", + "
\n", + "
\n", + " \n", + " \"Google
Open in Colab Enterprise\n", + "
\n", + "
\n", + " \n", + " \"Vertex
Open in Workbench\n", + "
\n", + "
\n", + " \n", + " \"GitHub
View on GitHub\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "2f4b6b36", + "metadata": { + "id": "2f4b6b36" + }, + "source": [ + "| | |\n", + "|-|-|\n", + "|Author(s) | [Zack Akil](https://github.com/zackail)|" + ] + }, + { + "cell_type": "markdown", + "id": "e65a3863", + "metadata": { + "id": "e65a3863" + }, + "source": [ + "## Overview\n", + "\n", + "The AI Quick Build experience is a Gemini and Imagen powered gameshow experience where contestants race against the clock to construct the best interpretation of a given object, e.g., a \"lighthouse.\" Gemini provides live commentary and performs the final judging of whose build is the best. Then, Imagen takes what has been built and brings it to life.\n", + "\n", + " This notebook provides an insight into how the AI Quick Build experience was built and how you can build similar features into your applications.\n", + "\n", + "The notebook is divided into three main sections:\n", + "\n", + "1. **Real-time commentary:** This section demonstrates how to generate live commentary using Gemini Flash and the Cloud Text-to-Speech API.\n", + "2. **Judging:** This section showcases how to use Gemini Pro for in-depth analysis and judgment of the builds, providing detailed reasoning and a winner announcement script.\n", + "3. **Image generation:** This section explores how to enhance the winner's creation by generating a dynamic background using Imagen, and then creating an animated GIF that transitions between the original and generated images.\n", + "\n", + "### Objective\n", + "\n", + "This notebook aims to:\n", + "\n", + "* Provide a clear understanding of how the AI Quick Build experience was developed.\n", + "* Enable users to build similar experiences by demonstrating the capabilities of Gemini and Imagen.\n", + "* Inspire users to explore new applications of these technologies in areas like education and entertainment.\n", + "\n", + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "\n", + "- Vertex AI\n", + "- Cloud Text-to-Speech\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Cloud Text-to-Speech pricing](https://cloud.google.com/text-to-speech/pricing), and use the [Pricing Calculator](https://cloud.google.com/products/calculator/) to generate a cost estimate based on your projected usage.\n" + ] + }, + { + "cell_type": "markdown", + "id": "951930c4", + "metadata": { + "id": "951930c4" + }, + "source": [ + "## Get Started" + ] + }, + { + "cell_type": "markdown", + "id": "e31deb12", + "metadata": { + "id": "e31deb12" + }, + "source": [ + "### Install Vertex AI SDK and other required packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "428311af", + "metadata": { + "id": "428311af" + }, + "outputs": [], + "source": [ + "!pip install --upgrade --quiet google-cloud-texttospeech \\\n", + " google-cloud-aiplatform" + ] + }, + { + "cell_type": "markdown", + "id": "9005c308", + "metadata": { + "id": "9005c308" + }, + "source": [ + "### Restart runtime\n", + "\n", + "To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n", + "\n", + "The restart might take a minute or longer. After it's restarted, continue to the next step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49b60539", + "metadata": { + "id": "49b60539" + }, + "outputs": [], + "source": [ + "import IPython\n", + "\n", + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "id": "b78c686d", + "metadata": { + "id": "b78c686d" + }, + "source": [ + "
\n", + "⚠️ The kernel is going to restart. Wait until it's finished before continuing to the next step. ⚠️\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "9f0de68e", + "metadata": { + "id": "9f0de68e" + }, + "source": [ + "### Authenticate your notebook environment (Colab only)\n", + "\n", + "If you're running this notebook on Google Colab, run the cell below to authenticate your environment." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "06a9699c", + "metadata": { + "id": "06a9699c" + }, + "outputs": [], + "source": [ + "PROJECT_ID = \"YOUR PROJECT ID\" # @param {type:\"string\"}\n", + "LOCATION = \"us-central1\" # @param {type:\"string\"}\n", + "import sys\n", + "\n", + "if \"google.colab\" in sys.modules:\n", + " from google.colab import auth\n", + "\n", + " auth.authenticate_user(project_id=PROJECT_ID)" + ] + }, + { + "cell_type": "markdown", + "id": "51ad2c80", + "metadata": { + "id": "51ad2c80" + }, + "source": [ + "### Set Google Cloud project information and initialize Vertex AI SDK\n", + "\n", + "To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "Learn more about [setting up a project and a development environment](https://cloud.google.com/vertex-ai/docs/start/cloud-environment)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "80af9f03", + "metadata": { + "id": "80af9f03" + }, + "outputs": [], + "source": [ + "import vertexai\n", + "\n", + "vertexai.init(project=PROJECT_ID, location=LOCATION)" + ] + }, + { + "cell_type": "markdown", + "id": "81a6e2f3", + "metadata": { + "id": "81a6e2f3" + }, + "source": [ + "# Part 1: Real-Time Commentary\n", + "\n", + "This section demonstrates how to use Gemini Flash and the Cloud Text-to-Speech API to generate real-time commentary on the builds as they are being constructed.\n", + "\n", + "Gemini Flash's low latency allows us to provide immediate feedback and analysis, enhancing the interactive nature of the experience.\n", + "\n", + "We will also showcase the power of using Google Cloud's new Casual voices for text-to-speech, which can create a more natural and engaging commentary experience." + ] + }, + { + "cell_type": "markdown", + "id": "87798176", + "metadata": { + "id": "87798176" + }, + "source": [ + "### Setting up the Commentator's Voice\n", + "\n", + "Here we define a helper function that utilizes the Cloud Text-to-Speech API to generate speech from a given text script. We will use this function to give our commentator a voice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc85c36f", + "metadata": { + "id": "cc85c36f" + }, + "outputs": [], + "source": [ + "import json\n", + "\n", + "import IPython\n", + "from IPython import display\n", + "from google.cloud import texttospeech\n", + "\n", + "texttospeech_client = texttospeech.TextToSpeechClient()\n", + "\n", + "\n", + "def speak(script: str, voice_name: str = \"en-US-Casual-K\") -> IPython.lib.display.Audio:\n", + " \"\"\"\n", + " Generates speech from the given script using the specified voice and plays it.\n", + "\n", + " Args:\n", + " script: The text script to convert to speech.\n", + " voice_name: The name of the voice to use (default: 'en-US-Casual-K').\n", + " \"\"\"\n", + " generate_speech(script, voice_name)\n", + " return display.Audio(\"output.wav\")\n", + "\n", + "\n", + "def generate_speech(\n", + " script: str,\n", + " voice_name: str = \"en-US-Casual-K\",\n", + " output_file_name: str = \"output.wav\",\n", + ") -> str:\n", + " \"\"\"Generates an wav audio file from the given script using Google Cloud Text-to-Speech.\n", + "\n", + " Args:\n", + " script: The text script to convert to speech.\n", + " voice_name: The name of the voice to use (e.g., 'en-US-Casual-K').\n", + " output_file_name: The name of the output MP3 file.\n", + " \"\"\"\n", + " synthesis_input = texttospeech.SynthesisInput(text=script)\n", + "\n", + " language_code = extract_language_code(voice_name)\n", + "\n", + " voice = texttospeech.VoiceSelectionParams(\n", + " language_code=language_code, name=voice_name\n", + " )\n", + "\n", + " # Select the type of audio file you want returned\n", + " audio_config = texttospeech.AudioConfig(\n", + " audio_encoding=texttospeech.AudioEncoding.LINEAR16\n", + " )\n", + "\n", + " # Perform the text-to-speech request on the text input with the selected\n", + " tts_response = texttospeech_client.synthesize_speech(\n", + " input=synthesis_input, voice=voice, audio_config=audio_config\n", + " )\n", + "\n", + " # The response's audio_content is binary.\n", + " with open(output_file_name, \"wb\") as out:\n", + " # Write the response to the output file.\n", + " out.write(tts_response.audio_content)\n", + " print(f\"Audio content written to file {output_file_name}\")\n", + " return output_file_name\n", + "\n", + "\n", + "def extract_language_code(voice_name: str) -> str | None:\n", + " \"\"\"Extracts the language code by splitting on the second hyphen.\"\"\"\n", + " parts = voice_name.split(\"-\", 2) # Split into max 3 parts\n", + " if len(parts) >= 2:\n", + " return \"-\".join(parts[:2]) # Join the first two parts\n", + " else:\n", + " return None\n", + "\n", + "\n", + "# Demonstrate the casual voice\n", + "speak(\"Hello, I'm ready to speak\")" + ] + }, + { + "cell_type": "markdown", + "id": "c692e79c", + "metadata": { + "id": "c692e79c" + }, + "source": [ + "### Generating Live Commentary with Gemini Flash and Cloud Text-to-Speech\n", + "\n", + "In this section, we'll use Gemini Flash to generate commentary based on images of the players' builds. We'll then use the `speak` function we defined earlier to convert this commentary into speech." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "oLEJ918-y6hE", + "metadata": { + "id": "oLEJ918-y6hE" + }, + "outputs": [], + "source": [ + "# Import vertex ai classes\n", + "from vertexai.generative_models import GenerationConfig, GenerativeModel, Image, Part" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d002764c", + "metadata": { + "id": "d002764c" + }, + "outputs": [], + "source": [ + "# Fetch images of players' builds from Google Cloud Storage\n", + "!gsutil cp gs://cloud-samples-data/generative-ai/image/quick_build_* ." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "5827c565", + "metadata": { + "id": "5827c565" + }, + "outputs": [], + "source": [ + "image_urls = [\n", + " \"quick_build_1.png\",\n", + " \"quick_build_2.png\",\n", + " \"quick_build_3.png\",\n", + " \"quick_build_4.png\",\n", + "]\n", + "\n", + "# Load the images using the Vertex AI SDK Image loader\n", + "all_images = [Image.load_from_file(url) for url in image_urls]\n", + "\n", + "# We could also load the images directly from Google Cloud Storage with Image.from_uri(url)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0fbf92f", + "metadata": { + "id": "f0fbf92f" + }, + "outputs": [], + "source": [ + "# Define the player names\n", + "player_names = [\"Elara\", \"Finn\", \"Juniper\", \"Rhys\"]\n", + "\n", + "# Display the player build images\n", + "for i, img in enumerate(all_images):\n", + " print(f\"Player {i+1}, {player_names[i]}:\")\n", + " display.display(img)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4d17e406", + "metadata": { + "id": "4d17e406" + }, + "outputs": [], + "source": [ + "# Define the design challenge\n", + "design = \"lighthouse\"\n", + "\n", + "# Initialize a list to store previous comments\n", + "previous_comments = []\n", + "\n", + "# Define the commentator's persona\n", + "commentator_persona = \"\"\"\n", + "whimsical, but can be quippy\n", + "\"\"\"\n", + "\n", + "# Define the prompt for generating commentary\n", + "commentary_prompt = f\"\"\"\n", + "You are a commentator at a high-stakes toy brick building contest where participants\n", + "have only 100 seconds to construct a {design}.\n", + "They will be judged on the following Creative\n", + "Use of Color\n", + "Structural Integrity:\n", + "Adherence to Brief:\n", + "Detail and Complexity:\n", + "Make a short comment about one of the players' builds so far.\n", + "Make it specific about something visual.\n", + "Make sure to call out the player by name.\n", + "\n", + "Your persona is {commentator_persona}.\n", + "\n", + "Here are the previous comments said:\n", + "--- Start of previous comments ---\n", + "{previous_comments}\n", + "--- End of previous comments ---\n", + "\n", + "Mix up who the comments are about so that everyone is included,\n", + "but only talk about the players mentioned below:\n", + "Here are the latest photos of all of the builds:\n", + "\"\"\"\n", + "\n", + "# Initialize the prompt parts with the base prompt\n", + "prompt_parts = [commentary_prompt]\n", + "\n", + "# Add player information and images to the prompt parts\n", + "for i, name in enumerate(player_names):\n", + " prompt_player_part = f\"Player {i+1}, {name}:\"\n", + " prompt_parts.append(prompt_player_part)\n", + "\n", + " players_photo = all_images[i]\n", + " prompt_photo_part = Part.from_image(players_photo)\n", + "\n", + " prompt_parts.append(prompt_photo_part)" + ] + }, + { + "cell_type": "markdown", + "id": "9d5105e1", + "metadata": { + "id": "9d5105e1" + }, + "source": [ + "### Leveraging Controlled Generation to Structure the Output\n", + "\n", + "Here, we will use **Controlled Generation** to ensure that Gemini Flash outputs the commentary in a specific JSON format. This will allow us to easily parse the response and extract the information we need, such as the commentary script, the player the commentary is about, and their number.\n", + "\n", + "Learn more about Controlled Generation: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/control-generated-output" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "777f2d82", + "metadata": { + "id": "777f2d82" + }, + "outputs": [], + "source": [ + "# Load the Gemini Flash model\n", + "gemini_flash = GenerativeModel(\"gemini-1.5-flash\")\n", + "\n", + "# Define the response schema for controlled generation\n", + "response_schema = {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"commentaryScript\": {\"type\": \"string\"},\n", + " \"playerNameCommentaryIsAbout\": {\"type\": \"string\"},\n", + " \"playerNumberCommentaryIsAbout\": {\"type\": \"integer\"},\n", + " },\n", + " \"required\": [\n", + " \"commentaryScript\",\n", + " \"playerNameCommentaryIsAbout\",\n", + " \"playerNumberCommentaryIsAbout\",\n", + " ],\n", + "}\n", + "\n", + "# Configure the generation settings, including the response MIME type and schema\n", + "generation_config = GenerationConfig(\n", + " response_mime_type=\"application/json\",\n", + " response_schema=response_schema,\n", + " temperature=0.7,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a8953fa9", + "metadata": { + "id": "a8953fa9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Oh, Elara, you're really going for that rainbow look, aren't you? I'm not sure if it's a lighthouse or a birthday cake, but it's certainly got my attention!\n", + "Elara\n", + "1\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Generate commentary using Gemini Flash and the defined prompt parts and configuration\n", + "commentary = gemini_flash.generate_content(\n", + " prompt_parts, generation_config=generation_config\n", + ")\n", + "\n", + "# Parse the JSON response\n", + "commentary_dict = json.loads(commentary.text)\n", + "commentary_script = commentary_dict.get(\"commentaryScript\")\n", + "player_name_commentary_is_about = commentary_dict.get(\"playerNameCommentaryIsAbout\")\n", + "player_number_commentary_is_about = commentary_dict.get(\"playerNumberCommentaryIsAbout\")\n", + "\n", + "# Print the extracted information\n", + "print(commentary_script)\n", + "print(player_name_commentary_is_about)\n", + "print(player_number_commentary_is_about)\n", + "\n", + "# Display the image of the player being commented on\n", + "all_images[player_number_commentary_is_about - 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "42a7fb17", + "metadata": { + "id": "42a7fb17" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Audio content written to file output.wav\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert the commentary script to speech and play it\n", + "speak(commentary_script)" + ] + }, + { + "cell_type": "markdown", + "id": "72130a81", + "metadata": { + "id": "72130a81" + }, + "source": [ + "# Part 2: Contest Judging with Gemini Pro\n", + "\n", + "This section demonstrates how to use Gemini Pro to judge the completed builds. Gemini Pro offers more complex and in-depth reasoning capabilities, making it ideal for evaluating the builds based on specific criteria and selecting an overall winner." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "4364dbff", + "metadata": { + "id": "4364dbff" + }, + "outputs": [], + "source": [ + "# Define the design challenge\n", + "design = \"lighthouse\"\n", + "\n", + "# Define the judging prompt\n", + "judging_prompt = f\"\"\"You are judging a high-stakes toy brick building contest where\n", + "participants have only 100 seconds to construct a {design}.\n", + "\n", + " Evaluate each entry on a scale of 1-10 based on 'Creativity' & 'Execution' the following criteria:\n", + " Creative Use of Color: Assess how intentionally and effectively different colored bricks have been used\n", + " to enhance the overall design and convey specific themes or emotions.\n", + " Structural Integrity: Consider the stability and durability of the build.\n", + " Does the structure hold together under scrutiny, and does it demonstrate a sound understanding of LEGO mechanics?\n", + " Adherence to Brief: Evaluate how closely the design aligns with the given prompt or theme.\n", + " Does it capture the essence of the concept and avoid unnecessary deviations?\n", + " Detail and Complexity: Assess the level of detail and complexity incorporated into the build.\n", + " Do the smaller elements contribute to the overall aesthetic and functionality?\n", + "\n", + " And choose an overall winner!\n", + " Output an \"annoucment script\" that builds up to announcing the winner. Keep it consice\n", + " And include a \"winner reasoning\" that goes into specific details about why that winner was choosen. Keep it consice\n", + " Here are the finished builds:\"\n", + " \"\"\"\n", + "\n", + "# Initialize the prompt parts with the judging prompt\n", + "judging_prompt_parts = [judging_prompt]\n", + "\n", + "# Define the player names\n", + "player_names = [\"Elara\", \"Finn\", \"Juniper\", \"Rhys\"]\n", + "\n", + "# Add player information and images to the judging prompt parts\n", + "for i, name in enumerate(player_names):\n", + " prompt_player_part = f\"Player {i+1}, {name}:\"\n", + " judging_prompt_parts.append(prompt_player_part)\n", + "\n", + " players_photo = all_images[i]\n", + " prompt_photo_part = Part.from_image(players_photo)\n", + "\n", + " judging_prompt_parts.append(prompt_photo_part)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "90f99ae0", + "metadata": { + "id": "90f99ae0" + }, + "outputs": [], + "source": [ + "# Define the base response schema for judging\n", + "judging_response_schema_base = {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"scores\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {},\n", + " },\n", + " \"overallWinner\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"playerName\": {\n", + " \"type\": \"string\",\n", + " },\n", + " \"playerNumber\": {\n", + " \"type\": \"number\",\n", + " },\n", + " \"winnerReasoning\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"specific details about why this winner was choosen.\",\n", + " },\n", + " },\n", + " },\n", + " \"winnerAnnouncementScript\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"This is what the announcer will read out verbatum, comment on some specific aspects of all of the contenstants builds, keeping the winner ambiguous to the very last word, e.g '... and that is why the winner is... [insert player name]!'\",\n", + " },\n", + " },\n", + "}\n", + "\n", + "# Define the response schema for individual players' scores\n", + "judging_response_schema_player = {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"playerName\": {\n", + " \"type\": \"string\",\n", + " },\n", + " \"playerNumber\": {\n", + " \"type\": \"number\",\n", + " },\n", + " \"score\": {\n", + " \"type\": \"number\",\n", + " \"description\": \"score between 1-10 for their overall build\",\n", + " },\n", + " \"scoringReasoning\": {\n", + " \"type\": \"string\",\n", + " },\n", + " },\n", + "}\n", + "\n", + "# Add player-specific schemas to the base schema dynamically\n", + "for i, name in enumerate(player_names):\n", + " judging_response_schema_base[\"properties\"][\"scores\"][\"properties\"][\n", + " f\"player_{i+1}\"\n", + " ] = judging_response_schema_player" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "3dfb907b", + "metadata": { + "id": "3dfb907b" + }, + "outputs": [], + "source": [ + "# Load the Gemini Pro model\n", + "gemini_pro = GenerativeModel(\"gemini-1.5-pro\")\n", + "\n", + "# Configure the generation settings for judging\n", + "generation_config = GenerationConfig(\n", + " response_mime_type=\"application/json\",\n", + " response_schema=judging_response_schema_base,\n", + " temperature=0.7,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "3a930b96", + "metadata": { + "id": "3a930b96" + }, + "outputs": [], + "source": [ + "# Generate judging results using Gemini Pro and the defined prompt parts and configuration\n", + "judging = gemini_pro.generate_content(\n", + " judging_prompt_parts, generation_config=generation_config\n", + ")\n", + "\n", + "# Parse the JSON response\n", + "judging_dict = json.loads(judging.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffac0121", + "metadata": { + "id": "ffac0121" + }, + "outputs": [], + "source": [ + "# Display the judging results\n", + "judging_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "db33a3f4", + "metadata": { + "id": "db33a3f4" + }, + "outputs": [], + "source": [ + "# Extract information about the winner and the announcement script\n", + "winning_player_name = judging_dict[\"overallWinner\"][\"playerName\"]\n", + "winning_player_number = judging_dict[\"overallWinner\"][\"playerNumber\"]\n", + "winning_player_reasoning = judging_dict[\"overallWinner\"][\"winnerReasoning\"]\n", + "winner_announcement_script = judging_dict[\"winnerAnnouncementScript\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "b930d0c7", + "metadata": { + "id": "b930d0c7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All of our contestants have crafted impressive lighthouses in just 100 seconds, demonstrating remarkable skill and creativity under pressure. Elara's vibrant design immediately catches the eye, while Finn's lighthouse stands as a beacon of classic simplicity. Juniper's build showcases a unique color palette, and Rhys's lighthouse impresses with its attention to detail and sturdy structure. And the winner is... Rhys!\n" + ] + } + ], + "source": [ + "# Print and speak the winner announcement script\n", + "print(winner_announcement_script)\n", + "# speak(winner_announcement_script)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "7b0924f2", + "metadata": { + "id": "7b0924f2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Winner is Rhys!\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Announce the winner and display their image\n", + "print(f\"Winner is {winning_player_name}!\")\n", + "all_images[winning_player_number - 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "eeb118c3", + "metadata": { + "id": "eeb118c3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rhys's lighthouse stands out with its well-defined base, classic lighthouse shape, and creative use of color to mimic a real lighthouse. The build is solid and well-executed, demonstrating a strong understanding of the prompt.\n", + "Audio content written to file output.wav\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Print and speak the winner reasoning\n", + "print(winning_player_reasoning)\n", + "speak(winning_player_reasoning)" + ] + }, + { + "cell_type": "markdown", + "id": "fccb7305", + "metadata": { + "id": "fccb7305" + }, + "source": [ + "# Part 3: Bringing the Creation to Life with Imagen\n", + "\n", + "In this section, we will use Imagen to enhance the winning build by generating a dynamic and engaging background. We will then create a fun animated GIF that transitions between the original build image and the Imagen-generated image.\n", + "\n", + "This showcases how Imagen can be used to create compelling visuals that complement and enhance user-generated content." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8ff8abf2", + "metadata": { + "id": "8ff8abf2" + }, + "outputs": [], + "source": [ + "from vertexai.preview.vision_models import Image as Imagen_Image\n", + "from vertexai.preview.vision_models import ImageGenerationModel" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "389668b0", + "metadata": { + "id": "389668b0" + }, + "outputs": [], + "source": [ + "# Load the Imagen model\n", + "imagen_model = ImageGenerationModel.from_pretrained(\"imagegeneration@006\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f8358a05", + "metadata": { + "id": "f8358a05" + }, + "outputs": [], + "source": [ + "# Load the winning build's image\n", + "selected_image = image_urls[winning_player_number - 1]\n", + "\n", + "base_img = Imagen_Image.load_from_file(location=selected_image)\n", + "base_img.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "21a1850a", + "metadata": { + "id": "21a1850a" + }, + "outputs": [], + "source": [ + "# Define the prompt for Imagen to generate a background\n", + "image_prompt = \"a macro lens photo of a toy brick lighthouse in a rocky stormy costal toy brick sea scene. The sea streches out into the distance\"\n", + "\n", + "# Generate images using Imagen's edit_image function with background masking\n", + "images = imagen_model.edit_image(\n", + " prompt=image_prompt,\n", + " base_image=base_img,\n", + " mask_mode=\"background\",\n", + " mask_dilation=0.003, # Use a small mask dilation to avoid erasing parts of the subject\n", + " number_of_images=3,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78552a40", + "metadata": { + "id": "78552a40" + }, + "outputs": [], + "source": [ + "# Display the generated images\n", + "for i, img in enumerate(images):\n", + " print(\"generated image \", i)\n", + " img.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "94c7a4b7", + "metadata": { + "id": "94c7a4b7" + }, + "outputs": [], + "source": [ + "# Select a favourite generated image\n", + "favourite_generated_image = 2\n", + "\n", + "# Save the favourite generated image\n", + "images[favourite_generated_image].save(\"favourite_generated_image.png\")" + ] + }, + { + "cell_type": "markdown", + "id": "b0b5c963", + "metadata": { + "id": "b0b5c963" + }, + "source": [ + "### Creating an Animated GIF\n", + "\n", + "Now, let's create a fun GIF that fades between the original build image and the Imagen-generated image." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "1e9f2bd2", + "metadata": { + "id": "1e9f2bd2" + }, + "outputs": [], + "source": [ + "# import Pillow package for gif building\n", + "import PIL" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "6065033a", + "metadata": { + "id": "6065033a" + }, + "outputs": [], + "source": [ + "# Load the start and end images for the GIF\n", + "start_image_url = image_urls[winning_player_number - 1]\n", + "end_image_url = \"favourite_generated_image.png\"\n", + "\n", + "start_image = PIL.Image.open(start_image_url).convert(\"RGB\")\n", + "end_image = PIL.Image.open(end_image_url).convert(\"RGB\")\n", + "\n", + "# Initialize a list to store the GIF frames\n", + "gif_frames = []\n", + "\n", + "# Define the number of steps for the fade transition\n", + "gif_steps = 3\n", + "\n", + "# Generate the frames for the fade-in\n", + "for i in range(gif_steps + 1):\n", + " gif_frame = PIL.Image.blend(start_image, end_image, i / gif_steps)\n", + " gif_frames.append(gif_frame)\n", + "\n", + "# Add the end frame again so that it pauses at the generated image.\n", + "gif_frames.append(end_image)\n", + "\n", + "# Add the frames for the fade-out (reverse of fade-in)\n", + "gif_frames += gif_frames[::-1]\n", + "\n", + "# Save the frames as a GIF\n", + "start_image.save(\n", + " \"generated.gif\",\n", + " format=\"GIF\",\n", + " append_images=gif_frames,\n", + " save_all=True,\n", + " duration=300,\n", + " loop=0,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "328c9afd", + "metadata": { + "id": "328c9afd" + }, + "outputs": [ + { + "data": { + "image/gif": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display the GIF\n", + "display.Image(filename=\"generated.gif\")" + ] + }, + { + "cell_type": "markdown", + "id": "25983d78", + "metadata": { + "id": "25983d78" + }, + "source": [ + "# Conclusion\n", + "\n", + "This notebook has demonstrated how to build the backend for a fun and interactive game show experience using Gemini and Imagen. We have explored various capabilities of these models, including:\n", + "\n", + "* **Real-time commentary generation with Gemini Flash:** Providing immediate feedback and analysis on player builds.\n", + "* **In-depth judging and winner selection with Gemini Pro:** Leveraging advanced reasoning capabilities for a more comprehensive evaluation.\n", + "* **Enhanced visuals with Imagen:** Bringing the winning build to life with a dynamically generated background and an animated GIF.\n", + "\n", + "### Potential Applications\n", + "\n", + "The techniques and concepts presented in this notebook can be applied to various applications beyond game shows, such as:\n", + "\n", + "* **Education:** Creating interactive learning experiences with personalized feedback and engaging visuals.\n", + "* **Content creation:** Generating dynamic content for social media, marketing campaigns, and more.\n", + "* **Entertainment:** Building interactive narratives and immersive experiences.\n", + "\n", + "### Learn More\n", + "\n", + "To further explore the capabilities of Gemini, Imagen, and other Generative AI technologies, check out the following resources:\n", + "\n", + "* [Gemini documentation](https://cloud.google.com/vertex-ai)\n", + "* [Imagen documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/image/overview)\n", + "* [Vertex AI Generative AI](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/overview)\n" + ] + } + ], + "metadata": { + "colab": { + "name": "ai_quick_build_experience_backend.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/genkit/README.md b/genkit/README.md index 973178c1d8..3119834ffe 100644 --- a/genkit/README.md +++ b/genkit/README.md @@ -5,3 +5,4 @@ This repository contains solutions using [Firebase Genkit](https://firebase.goog ## Directory Structure - **generate-synthetic-database/**: This directory contains the source code for a Google Cloud Function that generates a synthetic database. +- **postcard-generator/**: This directory contains the source code for a Next.js app that generates postcard images based on a journey diff --git a/genkit/postcard-generator/.env.example b/genkit/postcard-generator/.env.example new file mode 100644 index 0000000000..3daeee1d62 --- /dev/null +++ b/genkit/postcard-generator/.env.example @@ -0,0 +1,11 @@ +# This key should only allow Javascript and Places +NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY= + +# This key should only allow Routes and Static Maps +GOOGLE_MAPS_API_SERVER_KEY= + +# Genkit uses this to determine what Vertex AI project to use. If not set will use your ADC Default project +GOOGLE_CLOUD_PROJECT= + +# Only set to true if you have setup Firebase auth (see docs/deploy.md for details) +AUTH_ENABLED=false diff --git a/genkit/postcard-generator/.gitignore b/genkit/postcard-generator/.gitignore new file mode 100644 index 0000000000..c5501a1f7d --- /dev/null +++ b/genkit/postcard-generator/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +.env + +*.log \ No newline at end of file diff --git a/genkit/postcard-generator/README.md b/genkit/postcard-generator/README.md new file mode 100644 index 0000000000..1069847674 --- /dev/null +++ b/genkit/postcard-generator/README.md @@ -0,0 +1,32 @@ +# Postcard Generator + +| | | +| --------- | --------------------------------------- | +| Author(s) | [Matt Day](https://github.com/mattsday) | + +**Looking to get started?** Check out [the docs](docs/README.md) for setup, demo, and more! + +This demo showcases [Firebase Genkit](https://firebase.google.com/docs/genkit) running inside a [Next.js](https://nextjs.org) app that can be deployed onto [Firebase App Hosting](https://firebase.google.com/docs/app-hosting). It generates postcard images based on a start and destination, as well as a short script detailing the journey. + +![Example Postcard Image](images/example.jpg) + +## Overview + +This demo has two parts: a webapp and a Genkit development environment. Both use the same code, but have different aspects to demo. The most important thing is that it's the same codebase for both - just different tools to interact suitable for different personas and tasks. + +See [the documentation](docs/README.md) for more information on how to deploy this and also for an example demo script. + +## Using + +See [the docs](docs/README.md) to get started! + +### TL;DR + +```sh +export PROJECT_ID="my-project-id" +cd terraform +terraform init && terraform apply -var="project_id=${PROJECT_ID}" +cd .. +npm install +npx firebase-tools@latest apphosting:backends:create --project="${PROJECT_ID}" +``` diff --git a/genkit/postcard-generator/app/components/AuthContext.tsx b/genkit/postcard-generator/app/components/AuthContext.tsx new file mode 100644 index 0000000000..cbbb26a26f --- /dev/null +++ b/genkit/postcard-generator/app/components/AuthContext.tsx @@ -0,0 +1,92 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import { ReactNode, createContext, useState, useEffect, useContext } from "react"; +import { signInWithPopup, signOut, User, onAuthStateChanged, GoogleAuthProvider, onIdTokenChanged } from "firebase/auth"; +import { firebaseAuth } from "@/libs/firebase/clientApp"; + +interface AuthProviderProps { + children?: ReactNode; + enabled?: boolean; +} + +interface AuthContext { + user: User | null; + googleSignIn: () => Promise; + logOut: () => Promise; + enabled: boolean; +} + +export async function googleSignIn() { + const provider = new GoogleAuthProvider(); + await signInWithPopup(firebaseAuth, provider); +} + +export async function logOut() { + await signOut(firebaseAuth); +} + +const AuthContext = createContext({} as AuthContext); + +export const AuthContextProvider = ({ + children, enabled = false, +}: AuthProviderProps): JSX.Element => { + const [user, setUser] = useState(null); + + useEffect(() => { + if (!enabled) { + return; + } + const unsubscribe = onAuthStateChanged(firebaseAuth, (currentUser) => { + setUser(currentUser); + }); + return () => unsubscribe(); + }, [user, enabled]); + + useEffect(() => { + if (!enabled) { + return; + } + return onIdTokenChanged(firebaseAuth, async (currentUser) => { + if (!currentUser) { + setUser(null); + } + else { + setUser(currentUser); + } + }); + }, [enabled]); + + return ( + + {children} + + ); +}; + +export const UserAuth = () => { + return useContext(AuthContext); +}; diff --git a/genkit/postcard-generator/app/components/Navigation.tsx b/genkit/postcard-generator/app/components/Navigation.tsx new file mode 100644 index 0000000000..ac7ec550f4 --- /dev/null +++ b/genkit/postcard-generator/app/components/Navigation.tsx @@ -0,0 +1,40 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import * as React from "react"; +import AppBar from "@mui/material/AppBar"; +import Box from "@mui/material/Box"; +import Toolbar from "@mui/material/Toolbar"; +import Typography from "@mui/material/Typography"; +import TopLoginLogout from "./TopLoginLogout"; + +export default function Navigation() { + return ( + + + + + Postcard Generator + + + + + + ); +} diff --git a/genkit/postcard-generator/app/components/PlaceAutoComplete.tsx b/genkit/postcard-generator/app/components/PlaceAutoComplete.tsx new file mode 100644 index 0000000000..68e23a2018 --- /dev/null +++ b/genkit/postcard-generator/app/components/PlaceAutoComplete.tsx @@ -0,0 +1,40 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import { PlacePicker } from "@googlemaps/extended-component-library/react"; +import Stack from "@mui/material/Stack"; +import React from "react"; + +export interface PlaceAutoCompleteProps { + description: string; + value: string; + id: string; + handleChange: (e: Event) => void; +} + +export default function PlaceAutoComplete({ description, value: defaultValue, id, handleChange }: PlaceAutoCompleteProps) { + return ( + + + + + ); +} diff --git a/genkit/postcard-generator/app/components/Postcard.tsx b/genkit/postcard-generator/app/components/Postcard.tsx new file mode 100644 index 0000000000..5735307212 --- /dev/null +++ b/genkit/postcard-generator/app/components/Postcard.tsx @@ -0,0 +1,169 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +import LinearProgress from "@mui/material/LinearProgress"; +import Card from "@mui/material/Card"; +import CardMedia from "@mui/material/CardMedia"; +import CardContent from "@mui/material/CardContent"; +import Alert from "@mui/material/Alert"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import IconButton, { IconButtonProps } from "@mui/material/IconButton"; +import { styled } from "@mui/material/styles"; +import { useState } from "react"; +import Typography from "@mui/material/Typography"; +import Collapse from "@mui/material/Collapse"; +import CardActions from "@mui/material/CardActions"; +import Markdown from "react-markdown"; +import DownloadIcon from "@mui/icons-material/Download"; +import ShareIcon from "@mui/icons-material/Share"; + +export interface PostcardImageProps { + postcardImage: string | null; + generating: boolean; + description: string; + start: string | null; + end: string | null; + error: string | null; + mapImage: string | null; + story: string | null; +} +interface ExpandMoreProps extends IconButtonProps { + expand: boolean; +} + +const ExpandMore = styled((props: ExpandMoreProps) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { expand, ...other } = props; + return ; +})(({ theme }) => ({ + marginLeft: "auto", + transition: theme.transitions.create("transform", { + duration: theme.transitions.duration.shortest, + }), + variants: [ + { + props: ({ expand }) => !expand, + style: { + transform: "rotate(0deg)", + }, + }, + { + props: ({ expand }) => !!expand, + style: { + transform: "rotate(180deg)", + }, + }, + ], +})); + +export default function PostcardImage({ postcardImage, generating, error, mapImage, description, story }: PostcardImageProps) { + const [expanded, setExpanded] = useState(false); + + const handleExpandClick = () => { + setExpanded(!expanded); + }; + + async function download() { + if (postcardImage) { + // Use fetch to convert the image data URL into a blob + const response = await fetch(postcardImage); + // Create a download link + const url = window.URL.createObjectURL(await response.blob()); + const link = document.createElement("a"); + link.href = url; + link.setAttribute("download", "postcard.png"); + // Simulate a click on the link to trigger the download + document.body.appendChild(link); + link.click(); + link.parentNode?.removeChild(link); + } + } + + return ( +
+ + {generating && ( + + Generating Postcard + + + )} + {postcardImage && story && mapImage && !generating && ( + <> + + + + + {story} + + + + + + + + + + + + + + + + + + Map + + + + + + Prompt + + + + {description} + + + + + + )} + {error && !generating && ( + + {error} + + )} + +
+ ); +} diff --git a/genkit/postcard-generator/app/components/PostcardForm.tsx b/genkit/postcard-generator/app/components/PostcardForm.tsx new file mode 100644 index 0000000000..684559615e --- /dev/null +++ b/genkit/postcard-generator/app/components/PostcardForm.tsx @@ -0,0 +1,165 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import { APILoader } from "@googlemaps/extended-component-library/react"; +import PlaceAutoComplete from "./PlaceAutoComplete"; +import { PostcardFlow } from "@/libs/genkit/schema"; +import { useEffect, useState } from "react"; +import { callPostcardFlow } from "@/libs/genkit/flows"; +import PostcardImage from "./Postcard"; +import Stack from "@mui/material/Stack"; +import LoadingButton from "@mui/lab/LoadingButton"; +import Container from "@mui/material/Container"; +import { UserAuth } from "./AuthContext"; +import CircularProgress from "@mui/material/CircularProgress"; +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import AlertTitle from "@mui/material/AlertTitle"; +import TextField from "@mui/material/TextField"; +import { firebaseConfig } from "@/libs/firebase/config"; + +export default function PostcardForm() { + const [start, setStart] = useState(""); + const [end, setEnd] = useState(""); + const [sender, setSender] = useState(""); + const [recipient, setRecpient] = useState(""); + const [loading, setLoading] = useState(true); + const [postcardImage, setPostcardImage] = useState(null); + const [mapImage, setMapImage] = useState(null); + const [description, setDescription] = useState(""); + const [story, setStory] = useState(""); + const [error, setError] = useState(null); + const [loginError, setLoginError] = useState(null); + const [generating, setGenerating] = useState(false); + + function updateStartAddress(e: Event) { + if (e.target) { + const eventValue = (e.target as HTMLSelectElement).value; + const place = eventValue as unknown as google.maps.places.Place; + setStart(`${place.displayName}, ${place.formattedAddress}`); + } + } + + function updateEndAddress(e: Event) { + if (e.target) { + const eventValue = (e.target as HTMLSelectElement).value; + const place = eventValue as unknown as google.maps.places.Place; + setEnd(`${place.displayName}, ${place.formattedAddress}`); + } + } + + async function generatePostcard(event: React.FormEvent) { + try { + event.preventDefault(); + setGenerating(true); + const image = await callPostcardFlow(r); + setError(null); + setPostcardImage(image.image); + setDescription(image.description); + setStory(image.story); + setMapImage(image.map); + } + catch { + // TODO - show an error in the UI + setError("An error occurred generating your postcard. Please try again."); + } + finally { + setGenerating(false); + } + } + // This page requires authentication, check we have that + const { user, googleSignIn, enabled } = UserAuth(); + useEffect(() => { + const checkAuthentication = async () => { + await new Promise(resolve => setTimeout(resolve, 50)); + setLoading(false); + }; + checkAuthentication(); + }, [user]); + + const handleSignIn = async () => { + try { + await googleSignIn(); + setLoginError(null); + } + catch (error) { + setLoginError(`Login failed with error: ${error}`); + } + }; + + const r = { + start: start, + end: end, + stops: [], + sender: sender, + recipient: recipient, + } as PostcardFlow; + + if (loading) { + return ; + } + + if (!enabled) { + + Login is disabled in this project. + {loginError} + ; + } + + if ((!user) && (enabled)) { + // Install a proxying service worker if Firebase is configured + if (("serviceWorker" in navigator) && (firebaseConfig) && (firebaseConfig.apiKey) && (firebaseConfig.apiKey !== "")) { + navigator.serviceWorker.register("/auth-service-worker.js", { scope: "/" }); + } + return ( + <> + {loginError && !loading && ( + + An Error Occurred + {loginError} + + )} + Only logged-in users may view this page. + + + ); + } + + return ( + + +
+ + + setSender(e.target.value)} /> + setRecpient(e.target.value)} /> + + + + + + Generate Postcard + + + +
+ ); +} diff --git a/genkit/postcard-generator/app/components/TopLoginLogout.tsx b/genkit/postcard-generator/app/components/TopLoginLogout.tsx new file mode 100644 index 0000000000..75fb9dee15 --- /dev/null +++ b/genkit/postcard-generator/app/components/TopLoginLogout.tsx @@ -0,0 +1,74 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import * as React from "react"; +import Button from "@mui/material/Button"; +import { UserAuth } from "./AuthContext"; +import { useEffect, useState } from "react"; + +export default function TopLoginLogout() { + const { user, googleSignIn, logOut, enabled } = UserAuth(); + const [loading, setLoading] = useState(true); + + const handleSignIn = async () => { + try { + googleSignIn(); + } + catch (error) { + console.log(error); + } + }; + + const handleSignOut = async () => { + try { + logOut(); + } + catch (error) { + console.log(error); + } + }; + + useEffect(() => { + const checkAuthentication = async () => { + await new Promise(resolve => setTimeout(resolve, 50)); + setLoading(false); + }; + checkAuthentication(); + }, [user]); + + if (loading || !enabled) { + return null; + } + + if (user) { + return ( + + ); + } + + return ( + + ); +} diff --git a/genkit/postcard-generator/app/layout.tsx b/genkit/postcard-generator/app/layout.tsx new file mode 100644 index 0000000000..3e580d984a --- /dev/null +++ b/genkit/postcard-generator/app/layout.tsx @@ -0,0 +1,47 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +import type { Metadata } from "next"; +import { AppRouterCacheProvider } from "@mui/material-nextjs/v14-appRouter"; +import { ThemeProvider } from "@mui/material/styles"; +import CssBaseline from "@mui/material/CssBaseline/CssBaseline"; + +import theme from "./theme"; + +export const metadata: Metadata = { + title: "Postcard Generator", + description: "London Summit Demo", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + + + {children} + + + + + ); +} diff --git a/genkit/postcard-generator/app/page.tsx b/genkit/postcard-generator/app/page.tsx new file mode 100644 index 0000000000..fe0a010be3 --- /dev/null +++ b/genkit/postcard-generator/app/page.tsx @@ -0,0 +1,49 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +import dynamic from "next/dynamic"; +import Container from "@mui/material/Container"; +import Box from "@mui/material/Box"; +import Navigation from "./components/Navigation"; +import { AuthContextProvider } from "./components/AuthContext"; + +const enabled = (process.env.AUTH_ENABLED?.toLowerCase() !== "false"); + +const PostcardForm = dynamic(() => import("./components/PostcardForm"), { + ssr: false, // Prevent this component from rendering on the server +}); + +export default async function Home() { + return ( + + + + + + + + + ); +} diff --git a/genkit/postcard-generator/app/theme.ts b/genkit/postcard-generator/app/theme.ts new file mode 100644 index 0000000000..94fcc0b24e --- /dev/null +++ b/genkit/postcard-generator/app/theme.ts @@ -0,0 +1,49 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; +import { Roboto } from "next/font/google"; +import { createTheme } from "@mui/material/styles"; + +const roboto = Roboto({ + weight: ["300", "400", "500", "700"], + subsets: ["latin"], + display: "swap", +}); + +const theme = createTheme({ + colorSchemes: { + dark: true, + light: true, + }, + typography: { + fontFamily: roboto.style.fontFamily, + }, + components: { + MuiAlert: { + styleOverrides: { + root: ({ ownerState }) => ({ + ...(ownerState.severity === "info" && { + backgroundColor: "#60a5fa", + }), + }), + }, + }, + }, +}); + +export default theme; diff --git a/genkit/postcard-generator/apphosting.yaml b/genkit/postcard-generator/apphosting.yaml new file mode 100644 index 0000000000..5769fc44b7 --- /dev/null +++ b/genkit/postcard-generator/apphosting.yaml @@ -0,0 +1,18 @@ +runConfig: + minInstances: 1 +env: + - variable: NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY + secret: NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY + availability: + - RUNTIME + - BUILD + - variable: GOOGLE_MAPS_API_SERVER_KEY + secret: GOOGLE_MAPS_API_SERVER_KEY + availability: + - RUNTIME + - BUILD + - variable: AUTH_ENABLED + value: "true" + availability: + - RUNTIME + - BUILD diff --git a/genkit/postcard-generator/auth-serviceworker.ts b/genkit/postcard-generator/auth-serviceworker.ts new file mode 100644 index 0000000000..8afa737e32 --- /dev/null +++ b/genkit/postcard-generator/auth-serviceworker.ts @@ -0,0 +1,102 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auth Service Worker + * + * This file intercepts all requests to the same service and injects + * Firebase authentication headers. This is useful for Next.js server + * actions and rest requests without having to add additional + * boilerplate across the code base. + * + * After modification, this file needs to be rebuild: + * npm run build-service-worker + */ + +import { initializeApp } from "firebase/app"; +import { Auth, getAuth, getIdToken } from "firebase/auth"; +import { getInstallations, getToken } from "firebase/installations"; +import { firebaseConfig } from "./libs/firebase/config"; + +// Configure Service Worker +self.addEventListener("install", () => { + if ( + !firebaseConfig || + !firebaseConfig.apiKey || + firebaseConfig.apiKey === "" + ) { + console.warn( + "Warning - Firebase config not provided. Proxying will not be enabled", + ); + } + // extract firebase config from query string + console.log( + `Initialised service worker. Project: ${firebaseConfig.projectId}`, + ); +}); + +function getOriginFromUrl(url: string) { + // https://stackoverflow.com/questions/1420881/how-to-extract-base-url-from-a-string-in-javascript + const pathArray = url.split("/"); + const protocol = pathArray[0]; + const host = pathArray[2]; + return protocol + "//" + host; +} + +// Intercept fetch events to setup Firebase auth headers +self.addEventListener("fetch", (event) => { + // Damned typescript... + const e = event as FetchEvent; + // Only append if doing request the same service and using https + if ( + self.location.origin === getOriginFromUrl(e.request.url) && + (self.location.protocol === "https:" || + self.location.hostname === "localhost") + ) { + e.respondWith(fetchWithFirebaseHeaders(e.request)); + return; + } +}); + +// Inject both Firebase token and Authz headers +async function fetchWithFirebaseHeaders(request: Request) { + if (firebaseConfig) { + const app = initializeApp(firebaseConfig); + const auth = getAuth(app); + const installations = getInstallations(app); + const headers = new Headers(request.headers); + const [authIdToken, installationToken] = await Promise.all([ + getAuthIdToken(auth), + getToken(installations), + ]); + headers.append("Firebase-Instance-ID-Token", installationToken); + if (authIdToken) { + headers.append("Authorization", `Bearer ${authIdToken}`); + } + const newRequest = new Request(request, { headers }); + return await fetch(newRequest); + } + console.warn("No Firebase config found. Headers are not being injected."); + return await fetch(request); +} + +async function getAuthIdToken(auth: Auth) { + await auth.authStateReady(); + if (!auth.currentUser) { + return; + } + return await getIdToken(auth.currentUser); +} diff --git a/genkit/postcard-generator/docs/README.md b/genkit/postcard-generator/docs/README.md new file mode 100644 index 0000000000..6104fb817c --- /dev/null +++ b/genkit/postcard-generator/docs/README.md @@ -0,0 +1,79 @@ +# Postcard Generator Documentation + +This guide walks you through how to demonstrate this app and showcase the Google Cloud & Firebase features that power it. + +If you are not familiar with [Firebase Genkit](https://firebase.google.com/docs/genkit), [Firebase App Hosting](https://firebase.google.com/docs/app-hosting), and [Next.js](https://nextjs.org), I recommend you familiarise yourself before continuing this document. + +## Overview + +This demo has two parts: a webapp and a Genkit development environment. Both use the same code, but have different aspects to demo. The most important thing is that it's the same codebase for both - just different tools to interact suitable for different personas and tasks. + +## Instructions + +### TL;DR + +#### Setup + +Regardless of your use-case, you should run these steps: + +```sh +export PROJECT_ID="my-project-id" +cd terraform +terraform init && terraform apply -var="project_id=${PROJECT_ID}" +cd .. +npm install +``` + +#### Running in Genkit + +```sh +export PROJECT_ID="my-project-id" +npx genkit@latest start +``` + +Then navigate to [localhost:4000](http://localhost:4000). + +#### Running the App Locally + +```sh +export PROJECT_ID="my-project-id" +npm run dev +``` + +#### Deploying to Firebase App Hosting + +```sh +export PROJECT_ID="my-project-id" +cd terraform +terraform init && terraform apply -var="project_id=${PROJECT_ID}" +cd .. +npx firebase-tools@latest apphosting:backends:create --project="${PROJECT_ID}" +npx firebase-tools@latest apphosting:secrets:grantaccess NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY --project "${PROJECT_ID}" --backend postcards +npx firebase-tools@latest apphosting:secrets:grantaccess GOOGLE_MAPS_API_SERVER_KEY --project "${PROJECT_ID}" --backend postcards +``` + +### Step 1 - Setup + +Refer to the [Setup Documentation](setup.md) to configure your project including provisioning API keys and secrets. + +### (Optional) Step 2 - Deploy to Firebase App Hosting + +Refer to the [Deployment Documentation](deploy.md) to deploy the App to Firebase App Hosting + +### Step 3 - Demo + +Refer to the [Demo Guide](demo.md) for instructions on how to show this demo. + +## Target Audience + +Aimed at developers / practitioners who are looking to build and productionise AI apps. It can be expanded to showcase those looking for a modern app hosting platform (e.g. to compete with Vercel) or for those looking to understand Google Cloud's developer tools. + +PRs welcome to add extra features such as logging / monitoring / etc. + +### Features / Technologies Used + +1. [Firebase App Hosting](https://firebase.google.com/docs/app-hosting) +2. [Cloud Run](https://cloud.google.com/run) +3. [Vertex AI](https://cloud.google.com/vertex-ai) +4. [Google Maps API](https://developers.google.com/maps) +5. [Firebase Genkit](https://firebase.google.com/docs/genkit) diff --git a/genkit/postcard-generator/docs/demo.md b/genkit/postcard-generator/docs/demo.md new file mode 100644 index 0000000000..705962e618 --- /dev/null +++ b/genkit/postcard-generator/docs/demo.md @@ -0,0 +1,63 @@ +# Demo Flow + +You can optionally show [deploying this app to Firebase App Hosting](deploy.md) as well if you wish. This is otherwise not covered in this flow. + +## Overview + +1. Show the running app (either in Google Cloud or locally) +2. Talk through its flow and features used +3. Open the Genkit developer console and show the development loop +4. Show those changes being made in production + +### Step 1: Show the running App + +**Note:** If you have deployed to Firebase App Hosting, you don't need to run the demo locally and should show it running there. + +#### Start a Development Server + +Introduce the fact that this is a Next.js app using server and client-side rendering. It's an AI app that uses a combination of Vertex AI and Google Maps from a single codebase. + +Start up the development server: + +```sh +npm run dev +``` + +#### Create a Postcard + +You can then navigate to [localhost:3000](http://localhost:3000) and send a demo postcard. Pick major landmarks in a city near you. + +## AI Flow + +1. User inputs start and end addresses and the names of the recipient and sender for the postcard + - Addresses are autocompleted in the web app using the Maps API +2. A map between the addresses is created using the [Google Maps routes API](https://developers.google.com/maps/documentation/routes) and [Google Maps static API](https://developers.google.com/maps/documentation/maps-static/overview) +3. The map image is sent to Gemini alongside the rest of the data to generate highlights of a journey and a story for the back of the postcard + - The prompt can be seen in [prompts/postcard-map.prompt](prompts/postcard-map.prompt) + - This prompt requests Gemini returns the response in structured JSON, the schema of which can be seen in [libs/genkit/schema.ts](libs/genkit/schema.ts). + - An example [partial prompt](https://firebase.google.com/docs/genkit/dotprompt#partials) in [prompts/\_example-highlights.prompt](prompts/_example-highlights.prompt) +4. The highlights of the route alongside the start and end is sent to Imagen3 + - This prompt can be seen in [prompts/postcard-image.prompt](prompts/postcard-image.prompt) +5. The flow returns the generated image, the story created, and the map image + +### Web App + +This is a [Next.js](https://nextjs.org) app that uses both server and client-side rendering. It is protected with [Firebase Auth](https://firebase.google.com/docs/auth) to ensure only Googlers can access it. If you are deploying it yourself, I recommend using [a blocking function](https://firebase.google.com/docs/auth/extend-with-blocking-functions) to secure it. + +The web app can be deployed with [Firebase App Hosting](https://firebase.google.com/docs/app-hosting) and instructions to do so are further down in this document. + +Quickstart: + +```sh +npm run dev +``` + +### Genkit Demo + +There are prompts in the [prompts/](prompts/) folder that can be modified and the flow code lives in [libs/genkit/flows.ts](libs/genkit/flows.ts). + +Quickstart: + +```sh +npm run genkit:dev +``` diff --git a/genkit/postcard-generator/docs/deploy.md b/genkit/postcard-generator/docs/deploy.md new file mode 100644 index 0000000000..3ea136fb9f --- /dev/null +++ b/genkit/postcard-generator/docs/deploy.md @@ -0,0 +1,114 @@ +# Deploy to Firebase App Hosting + +**Note:** By default this app has authentication disabled. This means anyone with the URL can use it. If you intend to leave it running, you should [enable authentication](#authentication). + +## Step 1: Push this to GitHub + +As of 2024-09-27 App Hosting only supports GitHub, so you will need to create a repository on GitHub and push this code there. + +## Step 2: Configure your backend + +You can do this from the CLI: + +```sh +export PROJECT_ID="my-project-id" +npx firebase-tools@latest apphosting:backends:create --project="${PROJECT_ID}" +``` + +Run through the wizard - but don't run a deployment just yet as it will fail without appropriate IAM configuration. Remember the backend ID you created earlier + +## Step 3: Grant Secret Access + +App Hosting allows granular secret access and has a nifty way to manage this. Use the CLI to grant it access to our Maps API secret: + +```sh +export BACKEND_ID="my-backend-id" +npx firebase-tools@latest apphosting:secrets:grantaccess NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY --project "${PROJECT_ID}" --backend "${BACKEND_ID}" +npx firebase-tools@latest apphosting:secrets:grantaccess GOOGLE_MAPS_API_SERVER_KEY --project "${PROJECT_ID}" --backend "${BACKEND_ID}" +``` + +## Step 4: Configure IAM + +The Firebase App Hosting service account requires the following additional roles to work with this app: + +1. `roles/aiplatform.user` - to access Vertex AI + +This cannot be done at setup as this service account is not created until a Firebase App Hosting backend is created. It is not possible to automate App Hosting with Terraform today. + +You can either do this manually or with terraform. To do so with terraform: + +In the `terraform/` directory, edit your `terraform.tfvars` to add: + +```tf +firebase_app_hosting=true +``` + +Now redeploy: + +```sh +terraform apply +``` + +## Step 5: Rollout + +You can now create a new rollout in the console. Navigate to [console.firebase.google.com](https://console.firebase.google.com) and then create a new rollout in App Hosting. + +This should deploy your app ready for production! + +## Authentication + +### Step 1: Deploy Blocking Functions (Optional / Recommended) + +[Blocking functions](https://cloud.google.com/identity-platform/docs/blocking-functions) allow you to control who can login. In general, you only want people in your org to use this app. Deploying a blocking function makes this easy and simple. + +### Step 2: Configure Firebase Auth + +In [the Firebase Console](https://console.firebase.google.com) head to "Authentication" and create a Google sign-in. + +Under Settings, selected Authorized Domains and add your deployed App's URLs - e.g. `postcards--postcards-demo.europe-west4.hosted.app` + +### Step 3: Add Firebase App Config + +In the Project Settings area of [the Firebase Console](https://console.firebase.google.com), select your Web App, and copy the firebase config section. It should look something like this: + +```js +const firebaseConfig = { + apiKey: "xx", + authDomain: "postcards-demo.firebaseapp.com", + projectId: "postcards-demo", + storageBucket: "postcards-demo.appspot.com", + messagingSenderId: "1022638455307", + appId: "1:1022638455307:web:bc560683c150393541650e", +}; +``` + +Open [libs/firebase/config.ts](../libs/firebase/config.ts) and replace it with your config **ensuring** you prefix it with `export`. For example: + +```ts +export const firebaseConfig = { + apiKey: "xx", + authDomain: "postcards-demo.firebaseapp.com", + projectId: "postcards-demo", + storageBucket: "postcards-demo.appspot.com", + messagingSenderId: "1022638455307", + appId: "1:1022638455307:web:bc560683c150393541650e", +}; +``` + +### Step 4: Configure Deployment + +Edit `apphosting.yaml` and change the `AUTH_ENABLED` section to look like this: + +```yaml +- variable: AUTH_ENABLED + value: "true" + availability: + - RUNTIME + - BUILD +``` + +### Step 5: Push your changes + +## Maps Public API Key Security + +You should further lock your public API key down so it can only be accessed from your demo. You can modify its configuration to restrict use specifically to your deployed domain. diff --git a/genkit/postcard-generator/docs/local.md b/genkit/postcard-generator/docs/local.md new file mode 100644 index 0000000000..27266867d5 --- /dev/null +++ b/genkit/postcard-generator/docs/local.md @@ -0,0 +1,51 @@ +# Running Locally + +## Requirements + +### Environment Requirements + +1. Node.js 20+ + +### Dependencies + +Note: These dependencies can be automated by following the [deployment instructions](deploy.md). + +1. A Google Cloud Project with Billing, Vertex enabled +2. A [Google Maps API key](https://developers.google.com/maps/documentation/embed/get-api-key). This is required for autocomplete, routing, and static map generation +3. Vertex AI enabled in your project + +## Configuration + +### Environment Variables + +Copy `.env.example` to `.env` and populate it. The most important thing is a maps API key. + +### Node Dependency Installation + +Install genkit and Next.js dependencies: + +```sh +npm install +``` + +## Development Servers + +### Genkit + +To start a genkit server, run the following: + +```sh +npx genkit@latest start +``` + +You can now access the Genkit console on [localhost:4000](http://localhost:4000). + +### Next.js + +To start a Next.js development server, run the following: + +```sh +npm run dev +``` + +You can access this on [localhost:3000](http://localhost:3000) diff --git a/genkit/postcard-generator/docs/setup.md b/genkit/postcard-generator/docs/setup.md new file mode 100644 index 0000000000..ce0e71eafa --- /dev/null +++ b/genkit/postcard-generator/docs/setup.md @@ -0,0 +1,57 @@ +# Initial Setup + +To deploy this app successfully you will need to run some initial configuration. + +## Option 1: Automated Configuration (Recommended) + +This repository includes the required terraform to configure and setup your project to run this demo. + +### Terraform Config + +Copy `terraform.tfvars.example` to `terraform.tfvars` and populate it for your environment. + +Only set `firebase_app_hosting` to `true` if you have already setup a Firebase App Hosting backend manually, this cannot be done by terraform as of 2024-09-27. If in doubt, leave it set to `false`. + +### Deploy with Terraform + +Run the following commands + +```sh +terraform init +terraform apply +``` + +You may need to use [Service Account Impersonation](https://cloud.google.com/blog/topics/developers-practitioners/using-google-cloud-service-account-impersonation-your-terraform-code) to successfully deploy. + +### Configure App Environment + +You need a `.env` file. You can either copy `.env.example` to `.env` and populate it manually or run this command from your terraform directory: + +```sh +export PROJECT_ID="my-project-id" +echo "NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY=$(terraform output -raw maps_public_api_key)\nGOOGLE_MAPS_API_SERVER_KEY=$(terraform output -raw maps_server_api_key)\nGOOGLE_CLOUD_PROJECT=${PROJECT_ID}\nAUTH_ENABLED=false" | tee ../.env +``` + +Verify your [.env](../.env) file is correct with appropriate `PROJECT_ID` and `NEXT_PUBLIC_GOOGLE_MAPS_API_KEY` values. Ensure `AUTH_ENABLED` is set to `false` unless you have followed the instructions to enable authentication in [the deployment guide](deploy.md). + +You're done! Check out the [next steps](#post-setup) guide for what's next. + +## Option 2: Manual Configuration + +1. Create two API keys: + 1. Server Key + - Include the following restrictions: + - Routes + - Static Maps + - Store it in secrets manager with the name `GOOGLE_MAPS_API_SERVER_KEY` + 2. Client Key + - Include the following restrictions: + - JavaScript + - Places + - Store it in secrets manager with the name `NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY` +2. In [the Firebase Console](https://console.firebase.google.com) enable this project as a Firebase project +3. Copy `.env.example` to `.env` in the root directory and populate it with appropraite values + +## Post Setup + +You can now run through either the [Firebase App Hosting Deployment](deploy.md) or [Demo Guide](demo.md). diff --git a/genkit/postcard-generator/eslint.config.mjs b/genkit/postcard-generator/eslint.config.mjs new file mode 100644 index 0000000000..58adec60aa --- /dev/null +++ b/genkit/postcard-generator/eslint.config.mjs @@ -0,0 +1,33 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; +import { fixupConfigRules } from "@eslint/compat"; +import stylistic from "@stylistic/eslint-plugin"; +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +const patchedConfig = fixupConfigRules([...compat.extends("next/core-web-vitals")]); + +const config = [ + ...patchedConfig, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + stylistic.configs["recommended-flat"], + stylistic.configs.customize({ + quotes: "double", + semi: true, + indent: 2, + }), + { ignores: [".next/*"] }, +]; + +export default config; diff --git a/genkit/postcard-generator/genkit-tools.conf.js b/genkit/postcard-generator/genkit-tools.conf.js new file mode 100644 index 0000000000..0d15ac3d53 --- /dev/null +++ b/genkit/postcard-generator/genkit-tools.conf.js @@ -0,0 +1,6 @@ +module.exports = { + runner: { + mode: "harness", + files: ["./libs/genkit/*.ts"], + }, +}; diff --git a/genkit/postcard-generator/images/example.jpg b/genkit/postcard-generator/images/example.jpg new file mode 100644 index 0000000000..feb8a39ffe Binary files /dev/null and b/genkit/postcard-generator/images/example.jpg differ diff --git a/genkit/postcard-generator/libs/firebase/auth.ts b/genkit/postcard-generator/libs/firebase/auth.ts new file mode 100644 index 0000000000..7cc8053a1d --- /dev/null +++ b/genkit/postcard-generator/libs/firebase/auth.ts @@ -0,0 +1,48 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; + +import { + GoogleAuthProvider, + signInWithPopup, + onAuthStateChanged as _onAuthStateChanged, + NextOrObserver, + User, +} from "firebase/auth"; +import { firebaseAuth } from "./clientApp"; + +export function onAuthStateChanged(cb: NextOrObserver) { + return _onAuthStateChanged(firebaseAuth, cb); +} + +export async function signInWithGoogle() { + const provider = new GoogleAuthProvider(); + + try { + await signInWithPopup(firebaseAuth, provider); + } catch (error) { + console.error("Error signing in with Google", error); + } +} + +export async function signOut() { + try { + return firebaseAuth.signOut(); + } catch (error) { + console.error("Error signing out with Google", error); + } +} diff --git a/genkit/postcard-generator/libs/firebase/clientApp.ts b/genkit/postcard-generator/libs/firebase/clientApp.ts new file mode 100644 index 0000000000..5fffe3e810 --- /dev/null +++ b/genkit/postcard-generator/libs/firebase/clientApp.ts @@ -0,0 +1,27 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use client"; + +import { initializeApp, getApps } from "firebase/app"; +import { firebaseConfig } from "./config"; +import { getAuth } from "firebase/auth"; +import { getFirestore } from "firebase/firestore"; +export const firebaseApp = + getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]; +export const firebaseAuth = getAuth(firebaseApp); +export const firestore = getFirestore(firebaseApp); diff --git a/genkit/postcard-generator/libs/firebase/config.ts b/genkit/postcard-generator/libs/firebase/config.ts new file mode 100644 index 0000000000..47d97a1e1a --- /dev/null +++ b/genkit/postcard-generator/libs/firebase/config.ts @@ -0,0 +1,36 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +/* +IMPORTANT: Make sure your config starts with "export" + +Example: + +export const firebaseConfig = { + ... +}; +*/ + +export const firebaseConfig = { + apiKey: "x", + authDomain: "", + projectId: "", + storageBucket: "", + messagingSenderId: "", + appId: "", + measurementId: "", +}; diff --git a/genkit/postcard-generator/libs/firebase/serverApp.ts b/genkit/postcard-generator/libs/firebase/serverApp.ts new file mode 100644 index 0000000000..598133d913 --- /dev/null +++ b/genkit/postcard-generator/libs/firebase/serverApp.ts @@ -0,0 +1,45 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; + +import { headers } from "next/headers"; +import { initializeServerApp } from "firebase/app"; + +import { firebaseConfig } from "./config"; +import { getAuth } from "firebase/auth"; +import { getApps, initializeApp } from "firebase-admin/app"; + +export const firebaseServerApp = + getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]; + +export async function getAuthenticatedAppForUser() { + const idToken = headers().get("Authorization")?.split("Bearer ")[1]; + + const firebaseServerApp = initializeServerApp( + firebaseConfig, + idToken + ? { + authIdToken: idToken, + } + : {}, + ); + + const auth = getAuth(firebaseServerApp); + await auth.authStateReady(); + + return { firebaseServerApp, currentUser: auth.currentUser }; +} diff --git a/genkit/postcard-generator/libs/genkit/config.ts b/genkit/postcard-generator/libs/genkit/config.ts new file mode 100644 index 0000000000..b95180d7da --- /dev/null +++ b/genkit/postcard-generator/libs/genkit/config.ts @@ -0,0 +1,74 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +import { GoogleAuth } from "google-auth-library"; +import { dotprompt } from "@genkit-ai/dotprompt"; +import { vertexAI } from "@genkit-ai/vertexai"; +import { ollama } from "genkitx-ollama"; +import { ConfigOptions } from "@genkit-ai/core"; +import { googleCloud } from "@genkit-ai/google-cloud"; +import { AlwaysOnSampler } from "@opentelemetry/sdk-trace-base"; + +let auth: GoogleAuth; + +function getAuthClient() { + // Lazy load GoogleAuth client. + if (!auth) { + auth = new GoogleAuth(); + } + return auth; +} + +export async function getIdToken(url: string): Promise { + const auth = getAuthClient(); + const client = await auth.getIdTokenClient(url); + return client.idTokenProvider.fetchIdToken(url); +} + +export const genkitConfig = { + plugins: [ + vertexAI({ location: "europe-west2" }), + dotprompt(), + googleCloud({ + telemetryConfig: { + forceDevExport: true, // Set this to true to export telemetry for local runs + sampler: new AlwaysOnSampler(), + autoInstrumentation: true, + autoInstrumentationConfig: { + "@opentelemetry/instrumentation-fs": { enabled: false }, + "@opentelemetry/instrumentation-dns": { enabled: true }, + "@opentelemetry/instrumentation-net": { enabled: true }, + }, + }, + }), + ollama({ + models: [{ name: process.env.OLLAMA_MODEL_NAME || "gemma2:9b" }], + serverAddress: + process.env.OLLAMA_SERVER_ADDRESS || "http://127.0.0.1:8080", + requestHeaders: async (params) => ({ + Authorization: `Bearer ${await getIdToken(params.serverAddress)}`, + }), + }), + ], + // Log debug output to the console. + logLevel: "debug", + enableTracingAndMetrics: true, + telemetry: { + instrumentation: "googleCloud", + logger: "googleCloud", + }, +} as ConfigOptions; diff --git a/genkit/postcard-generator/libs/genkit/flows.ts b/genkit/postcard-generator/libs/genkit/flows.ts new file mode 100644 index 0000000000..7e08c62f83 --- /dev/null +++ b/genkit/postcard-generator/libs/genkit/flows.ts @@ -0,0 +1,148 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +"use server"; +import { renderMap } from "@/libs/maps/maps"; +import { configureGenkit } from "@genkit-ai/core"; +import { promptRef } from "@genkit-ai/dotprompt"; +import { defineFlow, runFlow } from "@genkit-ai/flow"; +import { + PostcardResult, + PostcardFlow, + PostcardFlowSchema, + PostcardResultSchema, + PostcardMapLLMRequest, + PostcardImageLLMRequest, + PostcardMapLLMResponseSchema, +} from "./schema"; +import { genkitConfig } from "./config"; +import { headers } from "next/headers"; +import { z } from "zod"; +import { getAuth, DecodedIdToken } from "firebase-admin/auth"; +import { firebaseServerApp } from "@/libs/firebase/serverApp"; + +// Configure Genkit with imported config +configureGenkit(genkitConfig); + +// Is auth enabled? +const authEnabled = process.env.AUTH_ENABLED?.toLowerCase() !== "false"; + +/** + * Create a postcard using Google Maps, Gemini, and Imagen3. Should not be called + * directly from clients, instead route through callPostcardFlow + * + * @see callPostcardFlow + * @see PostcardFlowSchema + * @see PostcardResultSchema + */ +const postcardFlow = defineFlow( + { + name: "Postcard Flow", + inputSchema: PostcardFlowSchema, + outputSchema: PostcardResultSchema, + }, + async (postcard: PostcardFlow) => { + // Get a map image of the whole journey and store it as a data URL + const mapImage = await renderMap( + postcard.start, + postcard.end, + postcard.stops, + ); + const mapUrl = `data:image/png;base64,${mapImage}`; + + // Load postcard map multi-modal prompt (for map image & text) + const mapPrompt = promptRef("postcard-map"); + + // Send the map image and address details to the model and generate a response in the desired schema + const readMapResponse = await mapPrompt.generate< + z.ZodTypeAny, + typeof PostcardMapLLMResponseSchema + >({ + input: { + start: postcard.start, + end: postcard.end, + mapImage: mapUrl, + sender: postcard.sender, + recipient: postcard.recipient, + }, + }); + + // Map response has a structured output + const mapResponse = readMapResponse.output()!; + + // Load the image generation prompt + const postcardPrompt = promptRef("postcard-image"); + // Generate an image - it should populate the media output + const imagenResponse = await postcardPrompt.generate({ + input: { + start: postcard.start, + end: postcard.end, + story: readMapResponse.text(), + }, + }); + + // Combine outputs from both LLM responses into an object to return + return { + description: mapResponse.description, + story: mapResponse.story, + image: imagenResponse.media()?.url || "", + map: mapUrl, + } as PostcardResult; + }, +); + +/** + * Provides a direct calling point from the client. Must verify auth headers if authentication is enabled. + * @see PostcardFlowSchema + * @see PostcardResultSchema + * @param args Configuration for the postcard. + * @returns The generated postcard image, story, and map + */ +export async function callPostcardFlow( + args: PostcardFlow, +): Promise { + // Check auth headers + if (authEnabled) { + // We don't care about the return value here, just if it throws an error or not. + await verifyToken(headers()); + } + // Call the flow once authorized + return await runFlow(postcardFlow, args); +} + +/** + * Check if an Authorization header is present and valid. + * @param authHeader The Authorization header passed + * @returns the DecodedIdToken for the valid user - or throws an error + */ +export async function verifyToken(headers: Headers): Promise { + // Verify the token - we don't care about the result - it will throw an error + // if the token is invalid + const authHeader = headers.get("Authorization"); + + if (!authHeader) { + throw new Error("Missing Authorization Header"); + } + + if (authHeader.length > 7) { + // Chop "Bearer " from the header + const token = authHeader.substring(7); + // This will throw an error if the token is not valid + return await getAuth(firebaseServerApp).verifyIdToken(token); + } + throw new Error("No token present"); +} diff --git a/genkit/postcard-generator/libs/genkit/schema.ts b/genkit/postcard-generator/libs/genkit/schema.ts new file mode 100644 index 0000000000..a1342745ce --- /dev/null +++ b/genkit/postcard-generator/libs/genkit/schema.ts @@ -0,0 +1,74 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; +import { z } from "zod"; + +/** + * Input for Genkit Flow + */ +export const PostcardFlowSchema = z.object({ + start: z.string(), + end: z.string(), + stops: z.array(z.string()).optional(), + keywords: z.string().optional(), + sender: z.string(), + recipient: z.string(), +}); +export type PostcardFlow = z.infer; + +export const PostcardMapLLMRequestSchema = z.object({ + start: z.string(), + end: z.string(), + mapImage: z.optional(z.string()), + sender: z.string(), + recipient: z.string(), +}); + +export type PostcardMapLLMRequest = z.infer; + +export const PostcardMapLLMResponseSchema = z.object({ + description: z.string(), + story: z.string(), +}); + +export type PostcardMapLLMResponse = z.infer< + typeof PostcardMapLLMResponseSchema +>; + +export const PostcardMapResult = z.object({ + description: z.string(), + story: z.string(), +}); + +export const PostcardImageLLMRequestSchema = z.object({ + start: z.string(), + end: z.string(), + story: z.string(), +}); + +export type PostcardImageLLMRequest = z.infer< + typeof PostcardImageLLMRequestSchema +>; + +export const PostcardResultSchema = z.object({ + description: z.string(), + image: z.string(), + map: z.string(), + story: z.string(), +}); + +export type PostcardResult = z.infer; diff --git a/genkit/postcard-generator/libs/maps/maps.ts b/genkit/postcard-generator/libs/maps/maps.ts new file mode 100644 index 0000000000..30dc86420c --- /dev/null +++ b/genkit/postcard-generator/libs/maps/maps.ts @@ -0,0 +1,194 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use strict"; + +import axios from "axios"; +import { config as dotenvConfig } from "dotenv"; +import simplify from "simplify-js"; +import { decode, encode, LatLngTuple } from "@googlemaps/polyline-codec"; + +const maxPolylineSize = 10000; + +// Init required environment variables, see .env.example for required entries +dotenvConfig({ + path: process.env.ENV_FILE_LOCATION ? process.env.ENV_FILE_LOCATION : ".env", +}); + +// This will be intialised by dotenv +const GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_SERVER_KEY!; + +if (!GOOGLE_MAPS_API_KEY) { + throw new Error("GOOGLE_MAPS_API_SERVER_KEY is not defined"); +} + +// Route request as sent to the maps routing API +interface RouteRequest { + origin: { + address: string; + }; + destination: { + address: string; + }; + intermediates: [ + { + address: string; + }, + ]; + travelMode: string; +} + +// Route response from the maps routing API +interface RouteReponse { + routes: [ + { + polyline: { + encodedPolyline: string; + }; + }, + ]; +} + +// Series of points for the simplification API +interface Point { + x: number; + y: number; +} + +/** + * Return an image showing a route between two addresses and optionally intermediate addresses + * @param start The start address (e.g. Battersea Power Station) + * @param stops An optional list of intermediate stops + * @param end The end address (e.g. Tobacco Docks) + */ +export async function renderMap( + start: string, + end: string, + stops?: string[], +): Promise { + // Obtain polyline for route between two points + let polyline = await route(start, end, stops); + + // Maps API cannot draw a polyline greater than a certain size, if that happens simplify it + if (polyline.length > maxPolylineSize) { + const points = polylineToPoints(polyline); + + // We don't know the precision ahead of time, so iterate until we find it + for (let i = 0.05; i <= 2; i += 0.05) { + const s = simplify(points, i, false); + // If we have fewer than 3000 points attempt an encoding + if (s.length < 3000) { + polyline = pointsToPolyline(s); + if (polyline.length <= maxPolylineSize) { + break; + } + } + } + // If we got this far then we cannot draw a polyline, even after simplification - error out + if (polyline.length > maxPolylineSize) { + throw new Error("Cannot render map between these two points"); + } + } + + // Construct Google Maps API request + const mapURL = new URL("https://maps.googleapis.com/maps/api/staticmap"); + mapURL.searchParams.set("size", "640x640"); + mapURL.searchParams.set("path", `enc:${polyline}`); + mapURL.searchParams.set("key", GOOGLE_MAPS_API_KEY!); + + // Render a static image from the polyline + try { + const response = await fetch(mapURL); + if (response.status != 200) { + throw new Error( + `Error fetching map image. Status code: ${response.status}`, + ); + } + const mapImageBuffer = await response.arrayBuffer(); + // Convert the buffer to a data URL + return Buffer.from(mapImageBuffer).toString("base64"); + } catch (error) { + console.error("Error fetching map image:", error); + throw error; + } +} +// Calculate distance between two points. Will ultimately return a polyline +async function route( + start: string, + end: string, + stops?: string[], +): Promise { + const intermediates: { address: string }[] = []; + // Populate intermediate stops + if (stops) { + stops.forEach((stop) => { + if (stop !== "") { + intermediates.push({ + address: stop, + }); + } + }); + } + const request = { + destination: { + address: end, + }, + origin: { + address: start, + }, + intermediates: intermediates, + travelMode: "TRAVEL_MODE_UNSPECIFIED", + } as RouteRequest; + + try { + const response = await axios.post( + "https://routes.googleapis.com/directions/v2:computeRoutes", + request, + { + headers: { + "Content-Type": "application/json", + "X-Goog-Api-Key": GOOGLE_MAPS_API_KEY, + "X-Goog-FieldMask": "routes.polyline", + }, + }, + ); + const mapsResponse = response.data as RouteReponse; + return mapsResponse.routes[0].polyline.encodedPolyline; + } catch (error) { + console.error("Error fetching route data:", error); + // console.error(error.response.data); + throw error; + } +} + +// Converts a polyline into a series of points that can be simplified +function polylineToPoints(polyline: string): Point[] { + const decodedPoints = decode(polyline, 5); + const newPoints: Point[] = []; + decodedPoints.forEach((p) => { + newPoints.push({ x: p[0], y: p[1] }); + }); + return newPoints; +} + +// Converts a series of points into a polyline +function pointsToPolyline(points: Point[]): string { + const tuple: LatLngTuple[] = []; + points.forEach((p) => { + tuple.push([p.x, p.y]); + }); + return encode(tuple); +} diff --git a/genkit/postcard-generator/next.config.mjs b/genkit/postcard-generator/next.config.mjs new file mode 100644 index 0000000000..9366ed7293 --- /dev/null +++ b/genkit/postcard-generator/next.config.mjs @@ -0,0 +1,21 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + // Workaround Handlebar import issues + // https://github.com/handlebars-lang/handlebars.js/issues/953 + webpack: (config) => { + config.resolve.alias["handlebars"] = "handlebars/dist/handlebars.js"; + return config; + }, + // Workaround dependency errors + // https://github.com/open-telemetry/opentelemetry-js/pull/4214 + experimental: { + instrumentationHook: true, + serverComponentsExternalPackages: [ + "@opentelemetry/auto-instrumentations-node", + "@opentelemetry/sdk-node", + ], + }, +}; + +export default nextConfig; diff --git a/genkit/postcard-generator/package-lock.json b/genkit/postcard-generator/package-lock.json new file mode 100644 index 0000000000..a499036f87 --- /dev/null +++ b/genkit/postcard-generator/package-lock.json @@ -0,0 +1,14865 @@ +{ + "name": "postcards", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "postcards", + "version": "0.1.0", + "dependencies": { + "@emotion/cache": "^11.13.1", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@genkit-ai/ai": "^0.5.13", + "@genkit-ai/core": "^0.5.13", + "@genkit-ai/dotprompt": "^0.5.13", + "@genkit-ai/flow": "^0.5.13", + "@genkit-ai/google-cloud": "^0.5.13", + "@genkit-ai/vertexai": "^0.5.13", + "@googlemaps/extended-component-library": "^0.6.11", + "@googlemaps/polyline-codec": "^1.0.28", + "@mui/icons-material": "^6.1.0", + "@mui/lab": "^6.0.0-beta.9", + "@mui/material": "^6.1.0", + "@mui/material-nextjs": "^6.1.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "axios": "^1.7.7", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "firebase": "^11.0.0", + "firebase-admin": "^12.4.0", + "genkitx-ollama": "^0.5.13", + "google-auth-library": "^9.14.1", + "next": "14.2.11", + "react": "^18", + "react-dom": "^18", + "react-markdown": "^9.0.1", + "simplify-js": "^1.2.4", + "zod": "^3.23.8" + }, + "devDependencies": { + "@eslint/compat": "^1.1.1", + "@stylistic/eslint-plugin": "^2.8.0", + "@types/dotenv-safe": "^8.1.6", + "@types/google.maps": "^3.58.0", + "@types/node": "^22.0.0", + "@types/react": "^18", + "@types/react-dom": "^18", + "esbuild": "^0.23.1", + "eslint": "^9.11.1", + "eslint-config-next": "15.0.1", + "eslint-define-config": "^2.1.0", + "eslint-plugin-react-hooks": "^5.0.0", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5.6.2", + "typescript-eslint": "^8.7.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.24.3.tgz", + "integrity": "sha512-916wJXO6T6k8R6BAAcLhLPv/pnLGy7YSEBZXZ1XTFbLcTZE8oTy3oDW9WJf9KKZwMvVcePIfoTSvzXHRcGxkQQ==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/@anthropic-ai/vertex-sdk": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/vertex-sdk/-/vertex-sdk-0.4.1.tgz", + "integrity": "sha512-RT/2CWzqyAcJDZWxnNc1mXa7XiiHDaQ9aknfW4mIDw6zE+Zj/R2vCKpTb0dIwrmHYNOyKQNaD7Z1ynDt9oXFWA==", + "dependencies": { + "@anthropic-ai/sdk": ">=0.14 <1", + "google-auth-library": "^9.4.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz", + "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz", + "integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", + "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.0.0.tgz", + "integrity": "sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w==", + "license": "MIT" + }, + "node_modules/@firebase/analytics": { + "version": "0.10.9", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.9.tgz", + "integrity": "sha512-FrvW6u6xDBKXUGYUy1WIUh0J9tvbppMsk90mig0JhHST8iLveKu/dIBVeVE/ZYZhmXy4fkI7SPSWvD1V0O4tXw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/installations": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.15.tgz", + "integrity": "sha512-C5to422Sr8FkL0MPwXcIecbMnF4o2Ll7MtoWvIm4Q/LPJvvM+tWa1DiU+LzsCdsd1/CYE9EIW9Ma3ko9XnAAYw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.9", + "@firebase/analytics-types": "0.8.2", + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/analytics-types": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.2.tgz", + "integrity": "sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/analytics/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app": { + "version": "0.10.15", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.15.tgz", + "integrity": "sha512-he6qlG3pmwL+LHdG/BrSMBQeJzzutciq4fpXN3lGa1uSwYSijJ24VtakS/bP2X9SiDf8jGywJ4u+OgXAenJsNg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.9.tgz", + "integrity": "sha512-YzVn1mMLzD2JboMPVVO0Pe20YOgWzrF+aXoAmmd0v3xec051n83YpxSUZbacL69uYvk0dHrEsbea44QtQ5WPDA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.16.tgz", + "integrity": "sha512-AxIGzLRXrTFNL+H6V+4BO0w/gERloROfRbWI/FoJUnQd0qPZIzyfdHZBbThFzFGLfDt/mVs2kdjYFx/l9I8NhQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check": "0.8.9", + "@firebase/app-check-types": "0.5.2", + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.2.tgz", + "integrity": "sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check-types": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.2.tgz", + "integrity": "sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-compat": { + "version": "0.2.45", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.45.tgz", + "integrity": "sha512-5rYbXq1ndtMTg+07oH4WrkYuP+NZq61uzVwW1hlmybp/gr4cXq2SfaP9fc6/9IzTKmu3dh3H0fjj++HG7Z7o/w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app": "0.10.15", + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.2.tgz", + "integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/auth": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.8.0.tgz", + "integrity": "sha512-/O7UDWE5S5ux456fzNHSLx/0YN/Kykw/WyAzgDQ6wvkddZhSEmPX19EzxgsFldzhuFjsl5uOZTz8kzlosCiJjg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-compat": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.15.tgz", + "integrity": "sha512-jz6k1ridPiecKI8CBRiqCM6IMOhwYp2MD+YvoxnMiK8nQLSTm57GvHETlPNX3WlbyQnCjMCOvrAhe27whyxAEg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth": "1.8.0", + "@firebase/auth-types": "0.12.2", + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz", + "integrity": "sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-types": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.2.tgz", + "integrity": "sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/component": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.9.tgz", + "integrity": "sha512-gm8EUEJE/fEac86AvHn8Z/QW8BvR56TBw3hMW0O838J/1mThYQXAIQBgUv75EqlCZfdawpWLrKt1uXvp9ciK3Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/data-connect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.1.1.tgz", + "integrity": "sha512-RBJ7XE/a3oXFv31Jlw8cbMRdsxQoI8F3L7xm4n93ab+bIr1NQUiYGgW9L7TTw7obdNev91ZnW0xfqJtXcPA5yA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.8.tgz", + "integrity": "sha512-dzXALZeBI1U5TXt6619cv0+tgEhJiwlUtQ55WNZY7vGAjv7Q1QioV969iYwt1AQQ0ovHnEW0YW9TiBfefLvErg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.9", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.10.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.8.tgz", + "integrity": "sha512-OpeWZoPE3sGIRPBKYnW9wLad25RaWbGyk7fFQe4xnJQKRzlynWeFBSRRAoLE2Old01WXwskUiucNqUUVlFsceg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.9", + "@firebase/database": "1.0.8", + "@firebase/database-types": "1.0.5", + "@firebase/logger": "0.4.2", + "@firebase/util": "1.10.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.5.tgz", + "integrity": "sha512-fTlqCNwFYyq/C6W7AJ5OCuq5CeZuBEsEwptnVxlNPkWCo5cTTyukzAHRSO/jaQcItz33FfYrrFk1SJofcu2AaQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.2", + "@firebase/util": "1.10.0" + } + }, + "node_modules/@firebase/firestore": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.4.tgz", + "integrity": "sha512-K2nq4w+NF8J1waGawY5OHLawP/Aw5CYxyDstVv1NZemGPcM3U+LZ9EPaXr1PatYIrPA7fS4DxZoWcbB0aGJ8Zg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "@firebase/webchannel-wrapper": "1.0.2", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.3.39", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.39.tgz", + "integrity": "sha512-CsK8g34jNeHx95LISDRTcArJLonW+zJCqHI1Ez9WNiLAK2X8FeQ4UiD+RwOwxAIR+t2a6xED/5Fe6ZIqx7MuoQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/firestore": "4.7.4", + "@firebase/firestore-types": "3.0.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.2.tgz", + "integrity": "sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@grpc/grpc-js": { + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", + "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@firebase/functions": { + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.9.tgz", + "integrity": "sha512-dhO5IUfQRCsrc20YD20nSOX+QCT+cH6N86HlZOLz2XgyEFgzOdBQnUot4EabBJQRkMBI7fZWUrbYfRcnov53ug==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.10", + "@firebase/messaging-interop-types": "0.2.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.15.tgz", + "integrity": "sha512-eiHpc6Sd9Y/SNhBsGi944SapiFbfTPKsiSUQ74QxNSs0yoxvABeIRolVMFk4TokP57NGmstGYpYte02XGNPcYw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/functions": "0.11.9", + "@firebase/functions-types": "0.6.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.2.tgz", + "integrity": "sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/functions/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/functions/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/installations": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.9.tgz", + "integrity": "sha512-hlT7AwCiKghOX3XizLxXOsTFiFCQnp/oj86zp1UxwDGmyzsyoxtX+UIZyVyH/oBF5+XtblFG9KZzZQ/h+dpy+Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.9", + "@firebase/util": "1.10.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.10.tgz", + "integrity": "sha512-YTonkcVz3AK7RF8xFhvs5CwDuJ0xbzzCJIwXoV14gnzdYbMgy6vWlUUbzkvbtEDXzPRHB0n7aGZl56oy9dLOFw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/installations": "0.6.10", + "@firebase/installations-types": "0.5.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.2.tgz", + "integrity": "sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/logger": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.2.tgz", + "integrity": "sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.9", + "@firebase/installations": "0.6.9", + "@firebase/messaging-interop-types": "0.2.2", + "@firebase/util": "1.10.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.13", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.13.tgz", + "integrity": "sha512-YLa8PWl+BgiOVR5WOyzl21fVJFJeBRfniNuN25d9DBrQzppSAahuN6yS+vt1OIjvZNPN4pZ/lcRLYupbGu4W0w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/installations": "0.6.10", + "@firebase/messaging-interop-types": "0.2.2", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.13.tgz", + "integrity": "sha512-9ootPClS6m2c2KIzo7AqSHaWzAw28zWcjQPjVv7WeQDu6wjufpbOg+7tuVzb+gqpF9Issa3lDoYOwlO0ZudO3g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/messaging": "0.12.13", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.2.tgz", + "integrity": "sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/messaging/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/messaging/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.10.tgz", + "integrity": "sha512-x/mNYKGxq7A+QV0EiEZeD2S+E+kw+UcZ8FXuE7qDJyGGt/0Wd+bIIL7RakG/VrFt7/UYc//nKygDc7/Ig7sOmQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/installations": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.10.tgz", + "integrity": "sha512-0h1qYkF6I79DSSpHfTQFvb91fo8shmmwiPzWFYAPdPK02bSWpKwVssNYlZX2iUnumxerDMbl7dWN+Im/W3bnXA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/performance": "0.6.10", + "@firebase/performance-types": "0.2.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.2.tgz", + "integrity": "sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/performance/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.10.tgz", + "integrity": "sha512-jTRjy3TdqzVna19m5a1HEHE5BG4Z3BQTxBgvQRTmMKlHacx4QS0CToAas7R9M9UkxpgFcVuAE7FpWIOWQGCEWw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/installations": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.10.tgz", + "integrity": "sha512-fIi5OB2zk0zpChMV/tTd0oEZcZI8TlwQDlLlcrDpMOV5l5dqd0JNlWKh6Fwmh4izmytk+rZIAIpnak/NjGVesQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/remote-config": "0.4.10", + "@firebase/remote-config-types": "0.3.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config-types": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.2.tgz", + "integrity": "sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/storage": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.3.tgz", + "integrity": "sha512-B5HiJ7isYKaT4dOEV43f2ySdhQxzq+SQEm7lqXebJ8AYCsebdHrgGzrPR0LR962xGjPzJHFKx63gA8Be/P2MCw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.13.tgz", + "integrity": "sha512-15kje7JALswRCBKsCSvKg5FbqUYykaIMqMbZRD7I6uVRWwdyTvez5MBQfMhBia2JcEmPiDpXhJTXH4PAWFiA8g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/storage": "0.13.3", + "@firebase/storage-types": "0.8.2", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/storage-types": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.2.tgz", + "integrity": "sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/storage/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/storage/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.0.tgz", + "integrity": "sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/vertexai": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.0.0.tgz", + "integrity": "sha512-48N3Lp/9GgiCCRfrSdHS+Y1IiMdYXvnHFO/f+HL1PgUtBq7WQ/fWmYOX3mzAN36zvytq13nb68ImF+GALopp+Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/vertexai/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/vertexai/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/vertexai/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.2.tgz", + "integrity": "sha512-3F4iA2E+NtdMbOU0XC1cHE8q6MqpGIKRj62oGOF38S6AAx5VHR9cXmoDUSj7ejvTAT7m6jxuEeQkHeq0F+mU2w==", + "license": "Apache-2.0" + }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" + }, + "node_modules/@genkit-ai/ai": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-0.5.13.tgz", + "integrity": "sha512-X2mIRjc5C65YrHrrlkpZlk3VTjU6yQ10XVy0E1RsOyBzbUFUQVoc0I2djPS1v4Z4sVVIWRuOGwfEicYL3jA3lw==", + "dependencies": { + "@genkit-ai/core": "0.5.13", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.11.19", + "colorette": "^2.0.20", + "json5": "^2.2.3", + "node-fetch": "^3.3.2", + "partial-json": "^0.1.7", + "zod": "^3.22.4" + } + }, + "node_modules/@genkit-ai/ai/node_modules/@types/node": { + "version": "20.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.0.tgz", + "integrity": "sha512-a7zRo0f0eLo9K5X9Wp5cAqTUNGzuFLDG2R7C4HY2BhcMAsxgSPuRvAC1ZB6QkuUQXf0YZAgfOX2ZyrBa2n4nHQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@genkit-ai/ai/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", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@genkit-ai/core": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-0.5.13.tgz", + "integrity": "sha512-KVXhZYNVjsQNK8j4BiJaK+JWsJ1lxWk9+kaUH5iEHE+I+fxTrOLidEsz+BL0gJLS9qim1j84+oYrd++9/hWBPw==", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.25.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "^1.25.0", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "async-mutex": "^0.5.0", + "express": "^4.19.2", + "json-schema": "^0.4.0", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" + } + }, + "node_modules/@genkit-ai/core/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@genkit-ai/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@genkit-ai/dotprompt": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/dotprompt/-/dotprompt-0.5.13.tgz", + "integrity": "sha512-/fPjQXaJDWLM1+H7xmSdhQqdA9xbioyzYrxZKmHHKgFjFBJNZ8iR0DZrEkr8rjHJMUXmbWW/wv1JcDrQQj0oKQ==", + "dependencies": { + "front-matter": "^4.0.2", + "handlebars": "^4.7.8", + "node-fetch": "^3.3.2", + "zod": "^3.22.4" + }, + "peerDependencies": { + "@genkit-ai/ai": "0.5.13", + "@genkit-ai/core": "0.5.13" + } + }, + "node_modules/@genkit-ai/flow": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/flow/-/flow-0.5.13.tgz", + "integrity": "sha512-0tUr9ZWRVCDJbpiEU+sZlVGTLtW/x8pcmexIWRoCPiA7ZEI2/ZCi95vYJK2xMwxDEMglsGqqYAKqAsreyL5Nqw==", + "dependencies": { + "@genkit-ai/core": "0.5.13", + "@google-cloud/firestore": "^7.6.0", + "@opentelemetry/api": "^1.9.0", + "@types/cors": "^2.8.17", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "express": "^4.19.2", + "firebase-admin": "^12.1.0", + "firebase-functions": "^4.8.0 || ^5.0.0", + "uuid": "^9.0.1", + "zod": "^3.22.4" + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-0.5.13.tgz", + "integrity": "sha512-/urGt8dKQfEcgkXbOm3NNNTzgSttgjmHM5jpYwdxoKPTEr5VgsZUE3W1Xtq9WDyxb/LYeoW6/KyITAEBDHpRoQ==", + "dependencies": { + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", + "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.1.0", + "@google-cloud/opentelemetry-resource-util": "^2.1.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.49.1", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resources": "^1.25.0", + "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "^1.25.0", + "google-auth-library": "^9.6.3", + "node-fetch": "^3.3.2", + "prettier-plugin-organize-imports": "^3.2.4", + "winston": "^3.12.0", + "zod": "^3.22.4" + }, + "peerDependencies": { + "@genkit-ai/ai": "0.5.13", + "@genkit-ai/core": "0.5.13" + } + }, + "node_modules/@genkit-ai/vertexai": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@genkit-ai/vertexai/-/vertexai-0.5.13.tgz", + "integrity": "sha512-tHtjiV2/1bbMeGqZDJK0eCy/9O75FY037NtFn3k1as5+sVBoTmj0xEOX+B4ZnmARy5pgvMqxPRD4Q0m76+vOjw==", + "dependencies": { + "@anthropic-ai/sdk": "^0.24.3", + "@anthropic-ai/vertex-sdk": "^0.4.0", + "@google-cloud/aiplatform": "^3.23.0", + "@google-cloud/vertexai": "^1.1.0", + "google-auth-library": "^9.6.3", + "googleapis": "^140.0.1", + "node-fetch": "^3.3.2", + "openai": "^4.52.7", + "zod": "^3.22.4" + }, + "optionalDependencies": { + "@google-cloud/bigquery": "^7.8.0", + "firebase-admin": "^12.1.0" + }, + "peerDependencies": { + "@genkit-ai/ai": "0.5.13", + "@genkit-ai/core": "0.5.13", + "@genkit-ai/flow": "0.5.13" + } + }, + "node_modules/@google-cloud/aiplatform": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@google-cloud/aiplatform/-/aiplatform-3.29.0.tgz", + "integrity": "sha512-zDHGQCR+FPaw6CWzK8qnI6MUazYRdEkH6NxKwqJVGbnLPn72ljumiUS8yoTvIDA78Z33mTR64urhmFI4YVfjsA==", + "dependencies": { + "google-gax": "^4.0.3", + "protobuf.js": "^1.1.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/bigquery": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.0.tgz", + "integrity": "sha512-KJTimGLDlAR1IfZ4Y8xhIVfoZ+XBXd0GGuJttLSXxtR0g+4vNsUt0xS33PRVa5TXey97374yU+uWNlCb5bHwBw==", + "optional": true, + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.2", + "@google-cloud/precise-date": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.1", + "big.js": "^6.0.0", + "duplexify": "^4.0.0", + "extend": "^3.0.2", + "is": "^3.3.0", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/common": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", + "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "dependencies": { + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "extend": "^3.0.2", + "google-auth-library": "^9.0.0", + "html-entities": "^2.5.2", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/firestore": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.10.0.tgz", + "integrity": "sha512-VFNhdHvfnmqcHHs6YhmSNHHxQqaaD64GwiL0c+e1qz85S8SWZPC2XFRf8p9yHRTF40Kow424s1KBU9f0fdQa+Q==", + "dependencies": { + "@opentelemetry/api": "^1.3.0", + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^4.3.3", + "protobufjs": "^7.2.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.0.tgz", + "integrity": "sha512-Ma94jvuoMpbgNniwtelOt8w82hxK62FuOXZonEv0Hyk3B+/YVuLG/SWNyY9yMso/RXnPEc1fP2qo9kDrjf/b2w==", + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "@opentelemetry/api": "^1.7.0", + "arrify": "^2.0.1", + "dot-prop": "^6.0.0", + "eventid": "^2.0.0", + "extend": "^3.0.2", + "gcp-metadata": "^6.0.0", + "google-auth-library": "^9.0.0", + "google-gax": "^4.0.3", + "on-finished": "^2.3.0", + "pumpify": "^2.0.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging-winston": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.0.tgz", + "integrity": "sha512-/lVp7CyT3nFOr+AjQlZnJhTIOf+kcNGB4JTziL0fkX6Ov/2qNKtRGS/NqE6cD+VSPiv5jLOty3LgkRsXMpYxQQ==", + "dependencies": { + "@google-cloud/logging": "^11.0.0", + "google-auth-library": "^9.0.0", + "lodash.mapvalues": "^4.6.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "winston": ">=3.2.1" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", + "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@google-cloud/precise-date": "^4.0.0", + "google-auth-library": "^9.0.0", + "googleapis": "^137.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-metrics": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter/node_modules/googleapis": { + "version": "137.1.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz", + "integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==", + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.3.0.tgz", + "integrity": "sha512-ynsfIezbwIvYLGMk3ich2V2ujjM07uMzuRSxoGtaOy7NW9gmvCz1HG+z3+XQcSqQawXjjTJvNoUOeSXWZeIdzg==", + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@grpc/grpc-js": "^1.1.8", + "@grpc/proto-loader": "^0.7.0", + "google-auth-library": "^9.0.0", + "google-proto-files": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-trace-base": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-resource-util": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.3.0.tgz", + "integrity": "sha512-3yyG2IiOWXy23IIGW4rRaqVf0efsgkUyXLvDpCxiZPPIgSAevYVdfcJ2cQSp4d1y+2NCpS2Wq0XLbTLzTw/j5Q==", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/resources": "^1.0.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/precise-date": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", + "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.12.1.tgz", + "integrity": "sha512-Z3ZzOnF3YKLuvpkvF+TjQ6lztxcAyTILp+FjKonmVpEwPa9vFvxpZjubLR4sB6bf19i/8HL2AXRjA0YFgHFRmQ==", + "optional": true, + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "duplexify": "^4.1.3", + "fast-xml-parser": "^4.4.1", + "gaxios": "^6.0.2", + "google-auth-library": "^9.6.3", + "html-entities": "^2.5.2", + "mime": "^3.0.0", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@google-cloud/vertexai": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/vertexai/-/vertexai-1.7.0.tgz", + "integrity": "sha512-N4YcVzFQ+sPN9c3SeMhbpLfWVbeaLxPbICKsJ6yKthcr4G7tdu9pCs3HUw+Mip0M2xgiKZ8/WWvq6FXbPnlrUA==", + "dependencies": { + "google-auth-library": "^9.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@googlemaps/extended-component-library": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/@googlemaps/extended-component-library/-/extended-component-library-0.6.11.tgz", + "integrity": "sha512-ZNioCXV0cqSZBGjwKP3V2risgGhYqSbbMu0LHpPS6owa8hi2EFhWWil65B6yGq2a7TLUZVx/hnEebTBitdoZkA==", + "license": "Apache-2.0", + "dependencies": { + "@lit/context": "^1.0.0", + "@lit/react": "^1.0.0", + "lit": "^3.0.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@googlemaps/polyline-codec": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@googlemaps/polyline-codec/-/polyline-codec-1.0.28.tgz", + "integrity": "sha512-m7rh8sbxlrHvebXEweBHX8r1uPtToPRYxWDD6p6k2YG8hyhBe0Wi6xRUVFpxpEseMNgF+OBotFQC5senj8K7TQ==", + "license": "Apache-2.0" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.3.tgz", + "integrity": "sha512-i9UraDzFHMR+Iz/MhFLljT+fCpgxZ3O6CxwGJ8YuNYHJItIHUzKJpW2LvoFZNnGPwqc9iWy9RAucxV0JoR9aUQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "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", + "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", + "engines": { + "node": ">=6.0.0" + } + }, + "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", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit/context/-/context-1.1.2.tgz", + "integrity": "sha512-S0nw2C6Tkm7fVX5TGYqeROGD+Z9Coa2iFpW+ysYBDH3YvCqOY3wVQvSgwbaliLJkjTnSEYCBe9qFqKV8WUFpVw==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.2 || ^2.0.0" + } + }, + "node_modules/@lit/react": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.5.tgz", + "integrity": "sha512-RSHhrcuSMa4vzhqiTenzXvtQ6QDq3hSPsnHHO3jaPmmvVFeoNNm4DHoQ0zLdKAUvY3wP3tTENSUf7xpyVfrDEA==", + "license": "BSD-3-Clause", + "peerDependencies": { + "@types/react": "17 || 18" + } + }, + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.58.tgz", + "integrity": "sha512-P0E7ZrxOuyYqBvVv9w8k7wm+Xzx/KRu+BGgFcR2htTsGCpJNQJCSUXNUZ50MUmSU9hzqhwbQWNXhV1MBTl6F7A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@floating-ui/react-dom": "^2.1.1", + "@mui/types": "^7.2.15", + "@mui/utils": "6.0.0-rc.0", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/node_modules/@mui/utils": { + "version": "6.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.0.0-rc.0.tgz", + "integrity": "sha512-tBp0ILEXDL0bbDDT8PnZOjCqSm5Dfk2N0Z45uzRw+wVl6fVvloC9zw8avl+OdX1Bg3ubs/ttKn8nRNv17bpM5A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@mui/types": "^7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/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" + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.0.tgz", + "integrity": "sha512-covEnIn/2er5YdtuukDRA52kmARhKrHjOvPsyTFMQApZdrTBI4h8jbEy2mxZqwMwcAFS9coonQXnEZKL1rUNdQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.0.tgz", + "integrity": "sha512-HxfB0jxwiMTYMN8gAnYn3avbF1aDrqBEuGIj6JDQ3YkLl650E1Wy8AIhwwyP47wdrv0at9aAR0iOO6VLb74A9w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^6.1.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/lab": { + "version": "6.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-beta.9.tgz", + "integrity": "sha512-rgwgf9mNUpXxPlI3tnM3i+HNAtDZ2amAollDqbe6RZ/3fltcir/o/0zBvnZRkJIBOAk6qIGmL59GCasuQQtPKA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@mui/base": "5.0.0-beta.58", + "@mui/system": "^6.0.2", + "@mui/types": "^7.2.16", + "@mui/utils": "^6.0.2", + "clsx": "^2.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": "^6.0.2", + "@mui/material-pigment-css": "^6.0.2", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.0.tgz", + "integrity": "sha512-4MJ46vmy1xbm8x+ZdRcWm8jEMMowdS8pYlhKQzg/qoKhOcLhImZvf2Jn6z9Dj6gl+lY+C/0MxaHF/avAAGys3Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/core-downloads-tracker": "^6.1.0", + "@mui/system": "^6.1.0", + "@mui/types": "^7.2.16", + "@mui/utils": "^6.1.0", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.3.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.1.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material-nextjs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-6.1.0.tgz", + "integrity": "sha512-sltDMnCm/AbLsuKEOTyMHXoHKSKCsr6miYc+izOX6LTfyyD1ahuJj4+bNM35+NJjAgCESMG8TOxiLOjirZ5rHg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.4", + "@emotion/server": "^11.11.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "next": "^13.0.0 || ^14.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/cache": { + "optional": true + }, + "@emotion/server": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/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" + }, + "node_modules/@mui/private-theming": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.0.tgz", + "integrity": "sha512-+L5qccs4gwsR0r1dgjqhN24QEQRkqIbfOdxILyMbMkuI50x6wNyt9XrV+J3WtjtZTMGJCrUa5VmZBE6OEPGPWA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^6.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.0.tgz", + "integrity": "sha512-MZ+vtaCkjamrT41+b0Er9OMenjAtP/32+L6fARL9/+BZKuV2QbR3q3TmavT2x0NhDu35IM03s4yKqj32Ziqnyg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@emotion/cache": "^11.13.1", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.0.tgz", + "integrity": "sha512-NumkGDqT6EdXfcoFLYQ+M4XlTW5hH3+aK48xAbRqKPXJfxl36CBt4DLduw/Voa5dcayGus9T6jm1AwU2hoJ5hQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/private-theming": "^6.1.0", + "@mui/styled-engine": "^6.1.0", + "@mui/types": "^7.2.16", + "@mui/utils": "^6.1.0", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.16.tgz", + "integrity": "sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.0.tgz", + "integrity": "sha512-oT8ZzMISRUhTVpdbYzY0CgrCBb3t/YEdcaM13tUnuTjZ15pdA6g5lx15ZJUdgYXV6PbJdw7tDQgMEr4uXK5TXQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/types": "^7.2.16", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/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" + }, + "node_modules/@next/env": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.11.tgz", + "integrity": "sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.1.tgz", + "integrity": "sha512-bKWsMaGPbiFAaGqrDJvbE8b4Z0uKicGVcgOI77YM2ui3UfjHMr4emFPrZTLeZVchi7fT1mooG2LxREfUUClIKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.11.tgz", + "integrity": "sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.11.tgz", + "integrity": "sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.11.tgz", + "integrity": "sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.11.tgz", + "integrity": "sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.11.tgz", + "integrity": "sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.11.tgz", + "integrity": "sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.11.tgz", + "integrity": "sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.11.tgz", + "integrity": "sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.11.tgz", + "integrity": "sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", + "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.41.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", + "@opentelemetry/instrumentation-bunyan": "^0.40.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", + "@opentelemetry/instrumentation-connect": "^0.38.0", + "@opentelemetry/instrumentation-cucumber": "^0.8.0", + "@opentelemetry/instrumentation-dataloader": "^0.11.0", + "@opentelemetry/instrumentation-dns": "^0.38.0", + "@opentelemetry/instrumentation-express": "^0.41.1", + "@opentelemetry/instrumentation-fastify": "^0.38.0", + "@opentelemetry/instrumentation-fs": "^0.14.0", + "@opentelemetry/instrumentation-generic-pool": "^0.38.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.42.0", + "@opentelemetry/instrumentation-kafkajs": "^0.2.0", + "@opentelemetry/instrumentation-knex": "^0.39.0", + "@opentelemetry/instrumentation-koa": "^0.42.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", + "@opentelemetry/instrumentation-memcached": "^0.38.0", + "@opentelemetry/instrumentation-mongodb": "^0.46.0", + "@opentelemetry/instrumentation-mongoose": "^0.41.0", + "@opentelemetry/instrumentation-mysql": "^0.40.0", + "@opentelemetry/instrumentation-mysql2": "^0.40.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", + "@opentelemetry/instrumentation-net": "^0.38.0", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-redis": "^0.41.0", + "@opentelemetry/instrumentation-redis-4": "^0.41.1", + "@opentelemetry/instrumentation-restify": "^0.40.0", + "@opentelemetry/instrumentation-router": "^0.39.0", + "@opentelemetry/instrumentation-socket.io": "^0.41.0", + "@opentelemetry/instrumentation-tedious": "^0.13.0", + "@opentelemetry/instrumentation-undici": "^0.5.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", + "@opentelemetry/resource-detector-aws": "^1.6.0", + "@opentelemetry/resource-detector-azure": "^0.2.10", + "@opentelemetry/resource-detector-container": "^0.4.0", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz", + "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", + "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", + "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", + "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", + "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", + "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", + "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", + "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", + "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", + "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", + "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", + "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", + "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", + "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.38.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", + "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", + "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "dependencies": { + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", + "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", + "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", + "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.24.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", + "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", + "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", + "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", + "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", + "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", + "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", + "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", + "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", + "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", + "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", + "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", + "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", + "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", + "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", + "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", + "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", + "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", + "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", + "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", + "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.11.tgz", + "integrity": "sha512-rY4L/2LWNk5p/22zdunpqVmgz6uN419DsRTw5KFMa6u21tWhXS8devlMy4h8m8nnS20wM7r6yYweCNNKjgLYJw==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.0.tgz", + "integrity": "sha512-Sex+JyEZ/xX328TArBqQjh1NZSfNyw5NdASUIi9hnPsnMBMSBaDe7B9JRnXv0swz7niNyAnXa6MY7yOCV76EvA==", + "dependencies": { + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.1.tgz", + "integrity": "sha512-Qshebw6azBuKUqGkVgambZlLS6Xh+LCoLXep1oqW1RSzSOHQxGYDsPs99v8NzO65eJHHOu8wc2yKsWZQAgYsSw==", + "dependencies": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.6.1.tgz", + "integrity": "sha512-A/3lqx9xoew7sFi+AVUUVr6VgB7UJ5qqddkKR3gQk9hWLm1R7HUXVJG09cLcZ7DMNpX13DohPRGmHE/vp1vafw==", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.11.tgz", + "integrity": "sha512-XepvQfTXWyHAoAziCfXGwYbSZL0LHtFk5iuKKN2VE2vzcoiw5Tepi0Qafuwb7CCtpQRReao4H7E29MFbCmh47g==", + "dependencies": { + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.1.tgz", + "integrity": "sha512-v0bvO6RxYtbxvY/HwqrPQnZ4UtP4nBq4AOyS30iqV2vEtiLTY1gNTbNvTF1lwN/gg/g5CY1tRSrHcYODDOv0vw==", + "dependencies": { + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.11.tgz", + "integrity": "sha512-07wJx4nyxD/c2z3n70OQOg8fmoO/baTsq8uU+f7tZaehRNQx76MPkRbV2L902N40Z21SPIG8biUZ30OXE9tOIg==", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz", + "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz", + "integrity": "sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz", + "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.8.0.tgz", + "integrity": "sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.4.0", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/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/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/dotenv-safe": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@types/dotenv-safe/-/dotenv-safe-8.1.6.tgz", + "integrity": "sha512-ftZXu3WGT6ALq+f98IX2gWriGMPds+0ku5h8kZewNpY47ua+Z+XNcin9apZ2kVd4B9LV1vMfUOyDf1/hhreR0Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "dotenv": "^8.2.0" + } + }, + "node_modules/@types/dotenv-safe/node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@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==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/google.maps": { + "version": "3.58.0", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.0.tgz", + "integrity": "sha512-rZPrbNHoGxeY70uuQYFLGQqcz5mLd3pZy0u286GSugvN7PLFsHNRF2wN2QXtUgNiC33IC0LX+MD3LGAC3wN7Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" + }, + "node_modules/@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.7.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz", + "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", + "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/@types/request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", + "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/type-utils": "8.11.0", + "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", + "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/typescript-estree": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", + "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", + "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.11.0", + "@typescript-eslint/utils": "8.11.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", + "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", + "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", + "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/typescript-estree": "8.11.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", + "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "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==", + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/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", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ansi-styles/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" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "optional": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "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/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "license": "MIT" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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" + }, + "node_modules/cliui/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", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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", + "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/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "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" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "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==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "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==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/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" + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "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" + }, + "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", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.1.tgz", + "integrity": "sha512-3cYCrgbH6GS/ufApza7XCKz92vtq4dAdYhx++rMFNlH2cAV+/GsAKkrr4+bohYOACmzG2nAOR+uWprKC1Uld6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.0.1", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-define-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-2.1.0.tgz", + "integrity": "sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/Shinigami92" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=L7GY729FBKTZY" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0", + "pnpm": ">=8.6.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", + "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.36.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", + "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eventid/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/farmhash-modern": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", + "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "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", + "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" + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/firebase": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.0.1.tgz", + "integrity": "sha512-qsFb8dMcQINEDhJteG7RP+GqwgSRvfyiexQqHd5JToDdm87i9I2rGC4XQsGawKGxzKwZ/ISdgwNWxXAFYdCC6A==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.9", + "@firebase/analytics-compat": "0.2.15", + "@firebase/app": "0.10.15", + "@firebase/app-check": "0.8.9", + "@firebase/app-check-compat": "0.3.16", + "@firebase/app-compat": "0.2.45", + "@firebase/app-types": "0.9.2", + "@firebase/auth": "1.8.0", + "@firebase/auth-compat": "0.5.15", + "@firebase/data-connect": "0.1.1", + "@firebase/database": "1.0.9", + "@firebase/database-compat": "2.0.0", + "@firebase/firestore": "4.7.4", + "@firebase/firestore-compat": "0.3.39", + "@firebase/functions": "0.11.9", + "@firebase/functions-compat": "0.3.15", + "@firebase/installations": "0.6.10", + "@firebase/installations-compat": "0.2.10", + "@firebase/messaging": "0.12.13", + "@firebase/messaging-compat": "0.2.13", + "@firebase/performance": "0.6.10", + "@firebase/performance-compat": "0.2.10", + "@firebase/remote-config": "0.4.10", + "@firebase/remote-config-compat": "0.2.10", + "@firebase/storage": "0.13.3", + "@firebase/storage-compat": "0.3.13", + "@firebase/util": "1.10.1", + "@firebase/vertexai": "1.0.0" + } + }, + "node_modules/firebase-admin": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-12.5.0.tgz", + "integrity": "sha512-ad8vnlPcuuZN9scSgY8UnAxPI4mzP2/Q+dsrVLTf+j3h7bIq0FOelDCDGz4StgKJdk244v2kpOxqJjPG3grBHg==", + "dependencies": { + "@fastify/busboy": "^3.0.0", + "@firebase/database-compat": "^1.0.2", + "@firebase/database-types": "^1.0.0", + "@types/node": "^22.0.1", + "farmhash-modern": "^1.1.0", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.1.0", + "node-forge": "^1.3.1", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^7.7.0", + "@google-cloud/storage": "^7.7.0" + } + }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/firebase-functions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-5.1.1.tgz", + "integrity": "sha512-KkyKZE98Leg/C73oRyuUYox04PQeeBThdygMfeX+7t1cmKWYKa/ZieYa89U8GHgED+0mF7m7wfNZOfbURYxIKg==", + "dependencies": { + "@types/cors": "^2.8.5", + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "protobufjs": "^7.2.2" + }, + "bin": { + "firebase-functions": "lib/bin/firebase-functions.js" + }, + "engines": { + "node": ">=14.10.0" + }, + "peerDependencies": { + "firebase-admin": "^11.10.0 || ^12.0.0" + } + }, + "node_modules/firebase/node_modules/@firebase/component": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.10.tgz", + "integrity": "sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.9.tgz", + "integrity": "sha512-EkiPSKSu2TJJGtOjyISASf3UFpFJDil1lMbfqnxilfbmIsilvC8DzgjuLoYD+eOitcug4wtU9Fh1tt2vgBhskA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.2", + "@firebase/auth-interop-types": "0.2.3", + "@firebase/component": "0.6.10", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database-compat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.0.tgz", + "integrity": "sha512-2xlODKWwf/vNAxCmou0GFhymx2pqZKkhXMN9B5aiTjZ6+81sOxGim53ELY2lj+qKG2IvgiCYFc4X+ZJA2Ad5vg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/database": "1.0.9", + "@firebase/database-types": "1.0.6", + "@firebase/logger": "0.4.3", + "@firebase/util": "1.10.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database-types": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.6.tgz", + "integrity": "sha512-sMI7IynSZBsyGbUugc8PKE1jwKbnvaieAz/RxuM57PZQNCi6Rteiviwcw/jqZOX6igqYJwXWZ3UzKOZo2nUDRA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.2", + "@firebase/util": "1.10.1" + } + }, + "node_modules/firebase/node_modules/@firebase/installations": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.10.tgz", + "integrity": "sha512-TuGSOMqkFrllxa0X/8VZIqBCRH4POndU/iWKWkRmkh12+/xKSpdp+y/kWaVbsySrelltan6LeYlcYPmLibWbwg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.10", + "@firebase/util": "1.10.1", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/firebase/node_modules/@firebase/logger": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.3.tgz", + "integrity": "sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/firebase/node_modules/@firebase/util": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.1.tgz", + "integrity": "sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/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", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/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", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "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/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/genkitx-ollama": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/genkitx-ollama/-/genkitx-ollama-0.5.13.tgz", + "integrity": "sha512-Ob2f/DKxcpiN1f8AuwEDfNdTcM9/AVa7RxWLme7CjfHDEsCVmdCaDVPnMa7uPl2ohG+eHwShoHndmheYb6DffQ==", + "peerDependencies": { + "@genkit-ai/ai": "0.5.13", + "@genkit-ai/core": "0.5.13" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-auth-library": { + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.1.tgz", + "integrity": "sha512-Rj+PMjoNFGFTmtItH7gHfbHpGVSb3vmnGK3nwNBqxQF9NoBpttSZI/rc0WiM63ma2uGDQtYEkMHkK9U6937NiA==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", + "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", + "dependencies": { + "@grpc/grpc-js": "^1.10.9", + "@grpc/proto-loader": "^0.7.13", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "google-auth-library": "^9.3.0", + "node-fetch": "^2.7.0", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^2.0.2", + "protobufjs": "^7.3.2", + "retry-request": "^7.0.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/google-proto-files": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-4.2.0.tgz", + "integrity": "sha512-Yl3ZtTSpkOLjHTqHn91NhDp2jMPzpHWowSGz3S30N6gkqOXrJwUu44alR9dX+NyHK3n165uR+jezOH365b1pPA==", + "dependencies": { + "protobufjs": "^7.0.0", + "walkdir": "^0.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis": { + "version": "140.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-140.0.1.tgz", + "integrity": "sha512-ZGvBX4mQcFXO9ACnVNg6Aqy3KtBPB5zTuue43YVLxwn8HSv8jB7w+uDKoIPSoWuxGROgnj2kbng6acXncOQRNA==", + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz", + "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.7.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-url-attributes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz", + "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "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-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz", + "integrity": "sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz", + "integrity": "sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==", + "dependencies": { + "@types/express": "^4.17.17", + "@types/jsonwebtoken": "^9.0.2", + "debug": "^4.3.4", + "jose": "^4.14.6", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jwks-rsa/node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lit": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.0.tgz", + "integrity": "sha512-s6tI33Lf6VpDu7u4YqsSX78D28bYQulM+VAzsGch4fx2H0eLZnJsUBsPWmGYSGoKDNbjtRv02rio1o+UdPVwvw==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.1.0", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-element": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.0.tgz", + "integrity": "sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-html": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.0.tgz", + "integrity": "sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 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==", + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "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" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "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==", + "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" + }, + "node_modules/next": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.11.tgz", + "integrity": "sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.11", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.11", + "@next/swc-darwin-x64": "14.2.11", + "@next/swc-linux-arm64-gnu": "14.2.11", + "@next/swc-linux-arm64-musl": "14.2.11", + "@next/swc-linux-x64-gnu": "14.2.11", + "@next/swc-linux-x64-musl": "14.2.11", + "@next/swc-win32-arm64-msvc": "14.2.11", + "@next/swc-win32-ia32-msvc": "14.2.11", + "@next/swc-win32-x64-msvc": "14.2.11" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "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==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/openai": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.62.0.tgz", + "integrity": "sha512-cPSsarEXoJENNwYMx/Xh/wuvnyYf8lPSR4zDVSnRvbcMHmKkDIzXhUVvPPfuI4M4T83x25gVnlW7huWEGKG+SA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-organize-imports": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz", + "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", + "peerDependencies": { + "@volar/vue-language-plugin-pug": "^1.0.4", + "@volar/vue-typescript": "^1.0.4", + "prettier": ">=2.0", + "typescript": ">=2.9" + }, + "peerDependenciesMeta": { + "@volar/vue-language-plugin-pug": { + "optional": true + }, + "@volar/vue-typescript": { + "optional": true + } + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto3-json-serializer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", + "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", + "dependencies": { + "protobufjs": "^7.2.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/protobuf.js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/protobuf.js/-/protobuf.js-1.1.2.tgz", + "integrity": "sha512-USO7Xus/pzPw549M1TguiyoOrKEhm9VMXv+CkDufcjMC8Rd7EPbxeRQPEjCV8ua1tm0k7z9xHkogcxovZogWdA==", + "dependencies": { + "long": "~1.1.2" + } + }, + "node_modules/protobuf.js/node_modules/long": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/long/-/long-1.1.5.tgz", + "integrity": "sha512-TU6nAF5SdasnTr28c7e74P4Crbn9o3/zwo1pM22Wvg2i2vlZ4Eelxwu4QT7j21z0sDBlJDEnEZjXTZg2J8WJrg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", + "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", + "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "dependencies": { + "@types/request": "^2.48.8", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "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==", + "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", + "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" + }, + "node_modules/send/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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simplify-js": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.4.tgz", + "integrity": "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg==", + "license": "BSD-2-Clause" + }, + "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", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", + "license": "MIT" + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz", + "integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/teeny-request/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/teeny-request/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/teeny-request/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.7.0.tgz", + "integrity": "sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.7.0", + "@typescript-eslint/parser": "8.7.0", + "@typescript-eslint/utils": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/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==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "dependencies": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "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/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-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==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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" + }, + "node_modules/yargs/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", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.3.tgz", + "integrity": "sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==", + "peerDependencies": { + "zod": "^3.23.3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/genkit/postcard-generator/package.json b/genkit/postcard-generator/package.json new file mode 100644 index 0000000000..f655e7d5e3 --- /dev/null +++ b/genkit/postcard-generator/package.json @@ -0,0 +1,68 @@ +{ + "main": "lib/index.js", + "scripts": { + "start": "next start", + "prebuild": "npm run build-service-worker", + "build": "next build", + "build:watch": "tsc --watch", + "dev": "next dev", + "genkit:dev": "npx genkit@latest start", + "build-service-worker": "esbuild auth-serviceworker.ts --minify --bundle --outfile=public/auth-service-worker.js", + "lint": "next lint" + }, + "name": "postcards", + "version": "0.1.0", + "private": true, + "dependencies": { + "@emotion/cache": "^11.13.1", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@genkit-ai/ai": "^0.5.13", + "@genkit-ai/core": "^0.5.13", + "@genkit-ai/dotprompt": "^0.5.13", + "@genkit-ai/flow": "^0.5.13", + "@genkit-ai/google-cloud": "^0.5.13", + "@genkit-ai/vertexai": "^0.5.13", + "@googlemaps/extended-component-library": "^0.6.11", + "@googlemaps/polyline-codec": "^1.0.28", + "@mui/icons-material": "^6.1.0", + "@mui/lab": "^6.0.0-beta.9", + "@mui/material": "^6.1.0", + "@mui/material-nextjs": "^6.1.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "axios": "^1.7.7", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "firebase": "^11.0.0", + "firebase-admin": "^12.4.0", + "genkitx-ollama": "^0.5.13", + "google-auth-library": "^9.14.1", + "next": "14.2.11", + "react": "^18", + "react-dom": "^18", + "react-markdown": "^9.0.1", + "simplify-js": "^1.2.4", + "zod": "^3.23.8" + }, + "devDependencies": { + "@eslint/compat": "^1.1.1", + "@stylistic/eslint-plugin": "^2.8.0", + "@types/dotenv-safe": "^8.1.6", + "@types/google.maps": "^3.58.0", + "@types/node": "^22.0.0", + "@types/react": "^18", + "@types/react-dom": "^18", + "esbuild": "^0.23.1", + "eslint": "^9.11.1", + "eslint-config-next": "15.0.1", + "eslint-define-config": "^2.1.0", + "eslint-plugin-react-hooks": "^5.0.0", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5.6.2", + "typescript-eslint": "^8.7.0" + }, + "overrides": { + "eslint": "$eslint" + } +} diff --git a/genkit/postcard-generator/postcss.config.mjs b/genkit/postcard-generator/postcss.config.mjs new file mode 100644 index 0000000000..1a69fd2a45 --- /dev/null +++ b/genkit/postcard-generator/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/genkit/postcard-generator/prompts/_example-highlights.prompt b/genkit/postcard-generator/prompts/_example-highlights.prompt new file mode 100644 index 0000000000..ac5d290bbc --- /dev/null +++ b/genkit/postcard-generator/prompts/_example-highlights.prompt @@ -0,0 +1,4 @@ +- Ben Ben's magnificent tower casting a shadow over Westminster bridge +- The Eiffel Tower standing magnificantly over Paris +- Children playing gleefully in the street +- A chic motor car parked on the cobbled stones \ No newline at end of file diff --git a/genkit/postcard-generator/prompts/postcard-image.prompt b/genkit/postcard-generator/prompts/postcard-image.prompt new file mode 100644 index 0000000000..dccc5ce55f --- /dev/null +++ b/genkit/postcard-generator/prompts/postcard-image.prompt @@ -0,0 +1,19 @@ +--- +model: vertexai/imagen3 +config: + temperature: 0.8 +input: + schema: + start: string + end: string + story: string +output: + format: media +--- + +Generate an image that captures the essence of my journey from {{start}} to {{end}}. + +Highlight the journey's interesting sights and scenes. Make it in an art-deco retro style with a 16:9 aspect ratio. Make it a joyful expression ensuring the major themes of my journey are covered. + +The following aspects may help provide more context from which to generate the image: +{{story}} diff --git a/genkit/postcard-generator/prompts/postcard-map.prompt b/genkit/postcard-generator/prompts/postcard-map.prompt new file mode 100644 index 0000000000..3e31c46d5a --- /dev/null +++ b/genkit/postcard-generator/prompts/postcard-map.prompt @@ -0,0 +1,29 @@ +--- +model: vertexai/gemini-1.5-flash +config: + temperature: 0.9 +input: + schema: + start: string + end: string + mapImage?: string + sender: string + recipient: string +output: + format: json + schema: + description: string + story: string +--- + +I have completed a journey from {{start}} to {{end}}. + +Here is a map of my journey: +{{media url=mapImage}} + +Use the context and geographical hints to extract highlights in bullet form that would be interesting to show on a postcard. Provide 5-6 hints highlighting local landmarks, things to do, and culture. + +In addition, create a message that would be suitable to write on the back of the postcard to my {{recipient}}. My name is {{sender}}. Write the message in Markdown format. Make the message funny and at least 3 sentences. + +Here are some examples: +{{>example-highlights}} \ No newline at end of file diff --git a/genkit/postcard-generator/tailwind.config.ts b/genkit/postcard-generator/tailwind.config.ts new file mode 100644 index 0000000000..b7d25c6174 --- /dev/null +++ b/genkit/postcard-generator/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + plugins: [], +}; +export default config; diff --git a/genkit/postcard-generator/terraform/.gitignore b/genkit/postcard-generator/terraform/.gitignore new file mode 100644 index 0000000000..2faf43d0a1 --- /dev/null +++ b/genkit/postcard-generator/terraform/.gitignore @@ -0,0 +1,37 @@ +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore transient lock info files created by terraform apply +.terraform.tfstate.lock.info + +# Include override files you do wish to add to version control using negated pattern +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc diff --git a/genkit/postcard-generator/terraform/backend.tf b/genkit/postcard-generator/terraform/backend.tf new file mode 100644 index 0000000000..9d6788beb2 --- /dev/null +++ b/genkit/postcard-generator/terraform/backend.tf @@ -0,0 +1,13 @@ +terraform { + required_version = ">= 1.0" + required_providers { + google = { + source = "hashicorp/google" + version = "~> 6.8.0" + } + google-beta = { + source = "hashicorp/google-beta" + version = "6.8.0" + } + } +} diff --git a/genkit/postcard-generator/terraform/locals.tf b/genkit/postcard-generator/terraform/locals.tf new file mode 100644 index 0000000000..a50dc2dd10 --- /dev/null +++ b/genkit/postcard-generator/terraform/locals.tf @@ -0,0 +1,34 @@ +locals { + apis = [ + # Cloud Build for App Hosting + "cloudbuild.googleapis.com", + # Secret Manager for App Hosting + "secretmanager.googleapis.com", + # To configure user policies + "iam.googleapis.com", + # Allow creation of API keys (for maps) + "apikeys.googleapis.com", + # For App Hosting + "firebase.googleapis.com", + # To configure Org policies + "orgpolicy.googleapis.com", + # To generate map images + "static-maps-backend.googleapis.com", + # To calculate routes between places + "routes.googleapis.com", + # To provide autocomplete suggestions + "maps-backend.googleapis.com", + "places-backend.googleapis.com", + # Vertex AI for Gemini & Imagen + "aiplatform.googleapis.com", + # App Hosting Repo Connect + "developerconnect.googleapis.com", + ] + + app_hosting_iam = [ + # Allow access to secret manager + "roles/secretmanager.secretAccessor", + # Allow access to Vertex AI + "roles/aiplatform.user" + ] +} diff --git a/genkit/postcard-generator/terraform/main.tf b/genkit/postcard-generator/terraform/main.tf new file mode 100644 index 0000000000..f8abc6016a --- /dev/null +++ b/genkit/postcard-generator/terraform/main.tf @@ -0,0 +1,100 @@ +## Project we're using + +# Project we're deploying to +data "google_project" "project" { + project_id = var.project_id +} + + +## Configure Project APIs +resource "google_project_service" "apis" { + for_each = toset(local.apis) + project = data.google_project.project.id + service = each.value + disable_on_destroy = false +} + +## Enable Firebase on the project +resource "google_firebase_project" "firebase" { + depends_on = [google_project_service.apis] + provider = google-beta + project = data.google_project.project.project_id +} + +## Create a public maps API key and store it in secrets manager +# The public key is put on the client and thus has a greater risk than the server key +resource "google_apikeys_key" "maps_public" { + depends_on = [google_project_service.apis] + name = "maps-public-api" + display_name = "Maps Public API Key" + project = data.google_project.project.project_id + + # Restrict API key to only what's needed + restrictions { + api_targets { + service = "maps-backend.googleapis.com" + } + api_targets { + service = "places-backend.googleapis.com" + } + } +} + +## Create a server maps API key and store it in secrets manager +# The server key is never put on the client +resource "google_apikeys_key" "maps_server" { + depends_on = [google_project_service.apis] + name = "maps-server-api" + display_name = "Maps Server API Key" + project = data.google_project.project.project_id + + # Restrict API key to only what's needed + restrictions { + api_targets { + service = "routes.googleapis.com" + } + api_targets { + service = "static-maps-backend.googleapis.com" + } + } +} + +## Store the API key in secret manager + +# Store the public key as a secret +resource "google_secret_manager_secret" "maps_public" { + secret_id = "NEXT_PUBLIC_GOOGLE_MAPS_PUBLIC_API_KEY" + project = data.google_project.project.project_id + + replication { + auto {} + } +} +resource "google_secret_manager_secret_version" "maps_public" { + secret = google_secret_manager_secret.maps_public.id + secret_data = google_apikeys_key.maps_public.key_string +} + +# Store the server key as a secret +resource "google_secret_manager_secret" "maps_server" { + secret_id = "GOOGLE_MAPS_API_SERVER_KEY" + project = data.google_project.project.project_id + + replication { + auto {} + } +} +resource "google_secret_manager_secret_version" "maps_server" { + secret = google_secret_manager_secret.maps_server.id + secret_data = google_apikeys_key.maps_server.key_string +} + + +## Grant Firebase App Hosting SA the right permissions +resource "google_project_iam_member" "app_hosting" { + # Only configure this if App Hosting has been setup before + for_each = toset(var.firebase_app_hosting ? local.app_hosting_iam : []) + project = data.google_project.project.project_id + role = each.key + member = "serviceAccount:firebase-app-hosting-compute@${data.google_project.project.project_id}.iam.gserviceaccount.com" +} diff --git a/genkit/postcard-generator/terraform/output.tf b/genkit/postcard-generator/terraform/output.tf new file mode 100644 index 0000000000..8af0911e51 --- /dev/null +++ b/genkit/postcard-generator/terraform/output.tf @@ -0,0 +1,11 @@ +output "maps_public_api_key" { + description = "Maps API key for local development" + value = google_secret_manager_secret_version.maps_public.secret_data + sensitive = true +} + +output "maps_server_api_key" { + description = "Maps API key for local development" + value = google_secret_manager_secret_version.maps_server.secret_data + sensitive = true +} diff --git a/genkit/postcard-generator/terraform/terraform.tfvars.example b/genkit/postcard-generator/terraform/terraform.tfvars.example new file mode 100644 index 0000000000..68466c4b9f --- /dev/null +++ b/genkit/postcard-generator/terraform/terraform.tfvars.example @@ -0,0 +1,4 @@ +# Replace this with your project ID +project_id="MY_PROJECT_ID" +# Set this to true AFTER you have configured App Hosting +firebase_app_hosting=false \ No newline at end of file diff --git a/genkit/postcard-generator/terraform/variables.tf b/genkit/postcard-generator/terraform/variables.tf new file mode 100644 index 0000000000..a595c62aea --- /dev/null +++ b/genkit/postcard-generator/terraform/variables.tf @@ -0,0 +1,10 @@ +variable "project_id" { + type = string + description = "Deployment Project ID" +} + +variable "firebase_app_hosting" { + type = bool + description = "Configure App Hosting Service Account - only do this after it's been initialised via the CLI" + default = false +} diff --git a/genkit/postcard-generator/tsconfig.json b/genkit/postcard-generator/tsconfig.json new file mode 100644 index 0000000000..cdcd92a58d --- /dev/null +++ b/genkit/postcard-generator/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compileOnSave": true, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "compilerOptions": { + "module": "esnext", + "noImplicitReturns": true, + "outDir": "libs", + "sourceMap": true, + "strict": true, + "target": "es2017", + "skipLibCheck": true, + "esModuleInterop": true, + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "noEmit": true, + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "exclude": ["node_modules", "auth-serviceworker.ts"] +} diff --git a/noxfile.py b/noxfile.py index 281d851670..d1ff61e829 100644 --- a/noxfile.py +++ b/noxfile.py @@ -23,6 +23,7 @@ import pathlib import re import shutil +import subprocess import warnings import nox @@ -110,63 +111,125 @@ def format(session): Run isort to sort imports. Then run black to format code to uniform standard. """ + target_branch = "main" + + unstaged_files = subprocess.run( + ["git", "diff", "--name-only", "--diff-filter=ACMRTUXB", target_branch], + stdout=subprocess.PIPE, + text=True, + ).stdout.splitlines() + + staged_files = subprocess.run( + [ + "git", + "diff", + "--cached", + "--name-only", + "--diff-filter=ACMRTUXB", + target_branch, + ], + stdout=subprocess.PIPE, + text=True, + ).stdout.splitlines() + + committed_files = subprocess.run( + [ + "git", + "diff", + "HEAD", + target_branch, + "--name-only", + "--diff-filter=ACMRTUXB", + ], + stdout=subprocess.PIPE, + text=True, + ).stdout.splitlines() + + changed_files = sorted(set(unstaged_files + staged_files + committed_files)) + + lint_paths_py = [ + f for f in changed_files if f.endswith(".py") and f != "noxfile.py" + ] + + lint_paths_nb = [f for f in changed_files if f.endswith(".ipynb")] + + if not lint_paths_py and not lint_paths_nb: + session.log("No changed Python or notebook files to lint.") + return + session.install( - "git+https://github.com/tensorflow/docs", - "ipython", - "jupyter", - "nbconvert", "types-requests", BLACK_VERSION, "blacken-docs", "pyupgrade", ISORT_VERSION, - "nbqa", - "autoflake", - "nbformat", - "ruff", - ) - session.run( "autoflake", - "-i", - "-r", - "--remove-all-unused-imports", - *LINT_PATHS, - ) - session.run( "ruff", - "check", - "--fix-only", - *LINT_PATHS, - ) - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run( - "isort", - "--fss", - *LINT_PATHS, - ) - session.run( - "black", - *LINT_PATHS, - ) - session.run("python3", ".github/workflows/update_notebook_links.py", ".") - session.run( - "nbqa", "pyupgrade", "--exit-zero-even-if-changed", "--py310-plus", *LINT_PATHS - ) - session.run( - "nbqa", "autoflake", "-i", "--remove-all-unused-imports", "-r", *LINT_PATHS ) - session.run( - "nbqa", - "isort", - "--fss", - *LINT_PATHS, - "--profile", - "black", - ) - session.run("nbqa", "black", *LINT_PATHS) - session.run("nbqa", "blacken-docs", "--nbqa-md", *LINT_PATHS) - session.run("python3", "-m", "tensorflow_docs.tools.nbfmt", *LINT_PATHS) + + if lint_paths_py: + session.run( + "autoflake", + "-i", + "-r", + "--remove-all-unused-imports", + *lint_paths_py, + ) + session.run( + "ruff", + "check", + "--fix-only", + *lint_paths_py, + ) + # Use the --fss option to sort imports using strict alphabetical order. + session.run( + "isort", + "--fss", + *lint_paths_py, + ) + session.run( + "black", + *lint_paths_py, + ) + + if lint_paths_nb: + session.install( + "git+https://github.com/tensorflow/docs", + "ipython", + "jupyter", + "nbconvert", + "nbqa", + "nbformat", + ) + + session.run("python3", ".github/workflows/update_notebook_links.py", ".") + + session.run( + "nbqa", + "pyupgrade", + "--exit-zero-even-if-changed", + "--py310-plus", + *lint_paths_nb, + ) + session.run( + "nbqa", + "autoflake", + "-i", + "--remove-all-unused-imports", + "-r", + *lint_paths_nb, + ) + session.run( + "nbqa", + "isort", + "--fss", + *lint_paths_nb, + "--profile", + "black", + ) + session.run("nbqa", "black", *lint_paths_nb) + session.run("nbqa", "blacken-docs", "--nbqa-md", *lint_paths_nb) + session.run("python3", "-m", "tensorflow_docs.tools.nbfmt", *lint_paths_nb) # Sort Spelling Allowlist spelling_allow_file = ".github/actions/spelling/allow.txt" diff --git a/search/grounded-generation-playground/package-lock.json b/search/grounded-generation-playground/package-lock.json index fc680b0c0e..10453b3df1 100644 --- a/search/grounded-generation-playground/package-lock.json +++ b/search/grounded-generation-playground/package-lock.json @@ -28,7 +28,7 @@ "jsonstream": "^1.0.3", "jsonstream-next": "^3.0.0", "lucide-react": "^0.439.0", - "next": "14.2.10", + "next": "15.0.0", "react": "^18", "react-dom": "^18", "react-markdown": "^9.0.1", @@ -46,8 +46,8 @@ "@types/react-dom": "^18", "@typescript-eslint/eslint-plugin": "^8.5.0", "@typescript-eslint/parser": "^8.5.0", - "eslint": "^8.0.0", - "eslint-config-next": "^14.2.14", + "eslint": "^9.0.0", + "eslint-config-next": "^15.0.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "jest": "^29.7.0", @@ -812,6 +812,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -838,17 +848,66 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -856,7 +915,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -881,16 +940,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -922,27 +978,37 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.1.tgz", + "integrity": "sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@floating-ui/core": { @@ -995,44 +1061,28 @@ "node": ">=18.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", + "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", + "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@humanfs/core": "^0.19.0", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "*" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1049,13 +1099,380 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -1569,67 +1986,55 @@ } }, "node_modules/@next/env": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.10.tgz", - "integrity": "sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.0.tgz", + "integrity": "sha512-Mcv8ZVmEgTO3bePiH/eJ7zHqQEs2gCqZ0UId2RxHmDDc7Pw6ngfSrOFlxG8XDpaex+n2G+TKPsQAf28MO+88Gw==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.14.tgz", - "integrity": "sha512-kV+OsZ56xhj0rnTn6HegyTGkoa16Mxjrpk7pjWumyB2P8JVQb8S9qtkjy/ye0GnTr4JWtWG4x/2qN40lKZ3iVQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.0.tgz", + "integrity": "sha512-UG/Gnsq6Sc4wRhO9qk+vc/2v4OfRXH7GEH6/TGlNF5eU/vI9PIO7q+kgd65X2DxJ+qIpHWpzWwlPLmqMi1FE9A==", "dev": true, "license": "MIT", "dependencies": { - "glob": "10.3.10" + "fast-glob": "3.3.1" } }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.6.0" } }, - "node_modules/@next/eslint-plugin-next/node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">= 6" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.10.tgz", - "integrity": "sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.0.tgz", + "integrity": "sha512-Gjgs3N7cFa40a9QT9AEHnuGKq69/bvIOn0SLGDV+ordq07QOP4k1GDOVedMHEjVeqy1HBLkL8rXnNTuMZIv79A==", "cpu": [ "arm64" ], @@ -1643,9 +2048,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.10.tgz", - "integrity": "sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.0.tgz", + "integrity": "sha512-BUtTvY5u9s5berAuOEydAUlVMjnl6ZjXS+xVrMt317mglYZ2XXjY8YRDCaz9vYMjBNPXH8Gh75Cew5CMdVbWTw==", "cpu": [ "x64" ], @@ -1659,9 +2064,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.10.tgz", - "integrity": "sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.0.tgz", + "integrity": "sha512-sbCoEpuWUBpYoLSgYrk0CkBv8RFv4ZlPxbwqRHr/BWDBJppTBtF53EvsntlfzQJ9fosYX12xnS6ltxYYwsMBjg==", "cpu": [ "arm64" ], @@ -1675,9 +2080,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.10.tgz", - "integrity": "sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.0.tgz", + "integrity": "sha512-JAw84qfL81aQCirXKP4VkgmhiDpXJupGjt8ITUkHrOVlBd+3h5kjfPva5M0tH2F9KKSgJQHEo3F5S5tDH9h2ww==", "cpu": [ "arm64" ], @@ -1691,9 +2096,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.10.tgz", - "integrity": "sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.0.tgz", + "integrity": "sha512-r5Smd03PfxrGKMewdRf2RVNA1CU5l2rRlvZLQYZSv7FUsXD5bKEcOZ/6/98aqRwL7diXOwD8TCWJk1NbhATQHg==", "cpu": [ "x64" ], @@ -1707,9 +2112,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.10.tgz", - "integrity": "sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.0.tgz", + "integrity": "sha512-fM6qocafz4Xjhh79CuoQNeGPhDHGBBUbdVtgNFJOUM8Ih5ZpaDZlTvqvqsh5IoO06CGomxurEGqGz/4eR/FaMQ==", "cpu": [ "x64" ], @@ -1723,9 +2128,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.10.tgz", - "integrity": "sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.0.tgz", + "integrity": "sha512-ZOd7c/Lz1lv7qP/KzR513XEa7QzW5/P0AH3A5eR1+Z/KmDOvMucht0AozccPc0TqhdV1xaXmC0Fdx0hoNzk6ng==", "cpu": [ "arm64" ], @@ -1738,26 +2143,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.10.tgz", - "integrity": "sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.10.tgz", - "integrity": "sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.0.tgz", + "integrity": "sha512-2RVWcLtsqg4LtaoJ3j7RoKpnWHgcrz5XvuUGE7vBYU2i6M2XeD9Y8RlLaF770LEIScrrl8MdWsp6odtC6sZccg==", "cpu": [ "x64" ], @@ -2748,12 +3137,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "license": "Apache-2.0", "dependencies": { - "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, @@ -3039,6 +3427,13 @@ "parse5": "^7.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -4402,6 +4797,20 @@ "dev": true, "license": "MIT" }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4420,6 +4829,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -4902,6 +5322,16 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4967,16 +5397,16 @@ "license": "MIT" }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -5331,81 +5761,86 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", + "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.13.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-next": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.14.tgz", - "integrity": "sha512-TXwyjGICAlWC9O0OufS3koTsBKQH8l1xt3SY/aDuvtKHIwjTHplJKWVb1WOEX0OsDaxGbFXmfD2EY1sNfG0Y/w==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.0.tgz", + "integrity": "sha512-HFeTwCR2lFEUWmdB00WZrzaak2CvMvxici38gQknA6Bu2HPizSE4PNFGaFzr5GupjBt+SBJ/E0GIP57ZptOD3g==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "14.2.14", - "@rushstack/eslint-patch": "^1.3.3", + "@next/eslint-plugin-next": "15.0.0", + "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { @@ -5414,6 +5849,19 @@ } } }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", @@ -5514,9 +5962,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -5528,7 +5976,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -5537,13 +5985,14 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { @@ -5567,19 +6016,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5723,16 +6159,16 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -5746,19 +6182,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5791,9 +6214,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5801,7 +6224,7 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5820,23 +6243,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5861,6 +6267,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5878,35 +6297,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5952,45 +6342,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ansi-regex": "^5.0.1" + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6222,16 +6599,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -6261,18 +6638,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -6676,6 +7052,7 @@ "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==", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -7410,16 +7787,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -10297,41 +10664,42 @@ "license": "MIT" }, "node_modules/next": { - "version": "14.2.10", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.10.tgz", - "integrity": "sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.0.tgz", + "integrity": "sha512-/ivqF6gCShXpKwY9hfrIQYh8YMge8L3W+w1oRLv/POmK4MOQnh+FscZ8a0fRFTSQWE+2z9ctNYvELD9vP2FV+A==", "license": "MIT", "dependencies": { - "@next/env": "14.2.10", - "@swc/helpers": "0.5.5", + "@next/env": "15.0.0", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1" + "styled-jsx": "5.1.6" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.18.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.10", - "@next/swc-darwin-x64": "14.2.10", - "@next/swc-linux-arm64-gnu": "14.2.10", - "@next/swc-linux-arm64-musl": "14.2.10", - "@next/swc-linux-x64-gnu": "14.2.10", - "@next/swc-linux-x64-musl": "14.2.10", - "@next/swc-win32-arm64-msvc": "14.2.10", - "@next/swc-win32-ia32-msvc": "14.2.10", - "@next/swc-win32-x64-msvc": "14.2.10" + "@next/swc-darwin-arm64": "15.0.0", + "@next/swc-darwin-x64": "15.0.0", + "@next/swc-linux-arm64-gnu": "15.0.0", + "@next/swc-linux-arm64-musl": "15.0.0", + "@next/swc-linux-x64-gnu": "15.0.0", + "@next/swc-linux-x64-musl": "15.0.0", + "@next/swc-win32-arm64-msvc": "15.0.0", + "@next/swc-win32-x64-msvc": "15.0.0", + "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-65a56d0e-20241020", + "react-dom": "^18.2.0 || 19.0.0-rc-65a56d0e-20241020", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -10341,6 +10709,9 @@ "@playwright/test": { "optional": true }, + "babel-plugin-react-compiler": { + "optional": true + }, "sass": { "optional": true } @@ -11639,69 +12010,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "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/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11855,6 +12163,59 @@ "node": ">= 0.4" } }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/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", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11907,6 +12268,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -12362,9 +12740,9 @@ } }, "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { "client-only": "0.0.1" @@ -12373,7 +12751,7 @@ "node": ">= 12.0.0" }, "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "peerDependenciesMeta": { "@babel/core": { diff --git a/search/grounded-generation-playground/package.json b/search/grounded-generation-playground/package.json index f2a10a26a2..7c884adcb0 100644 --- a/search/grounded-generation-playground/package.json +++ b/search/grounded-generation-playground/package.json @@ -34,7 +34,7 @@ "jsonstream": "^1.0.3", "jsonstream-next": "^3.0.0", "lucide-react": "^0.439.0", - "next": "14.2.10", + "next": "15.0.0", "react": "^18", "react-dom": "^18", "react-markdown": "^9.0.1", @@ -53,7 +53,7 @@ "@typescript-eslint/eslint-plugin": "^8.5.0", "@typescript-eslint/parser": "^8.5.0", "eslint": "^9.0.0", - "eslint-config-next": "^14.2.14", + "eslint-config-next": "^15.0.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "jest": "^29.7.0", diff --git a/search/web-app/README.md b/search/web-app/README.md index 345f46befa..339195c39c 100644 --- a/search/web-app/README.md +++ b/search/web-app/README.md @@ -1,4 +1,4 @@ -# Vertex AI Search Demo +# Vertex AI Search Web App Demo > NOTE: Some of the features in this demo require allowlist access. If you would like early access, apply to become a [Trusted Tester for Google Cloud Generative AI][trustedtester]. @@ -6,6 +6,10 @@ This demo illustrates how to search through a corpus of documents using [Vertex Additional features include how to search the public Cloud Knowledge Graph using the [Enterprise Knowledge Graph][enterpriseknowledgegraph] API. +## Video Walkthrough + +[![VAIS Web App Walkthrough](https://storage.googleapis.com/github-repo/search/web-app/vais_web_app_walkthrough.png)](https://storage.googleapis.com/github-repo/search/web-app/vais_web_app_walkthrough.mp4) + ## Architecture ### Google Cloud Products Used @@ -72,7 +76,7 @@ Additional features include how to search the public Cloud Knowledge Graph using - ![configId](img/configId.png) - Be sure to set authorization type as `Public Access` and add your web application url to the `Allowed Domains` once it's deployed. - Add the `configId` for your Search Engines to `WIDGET_CONFIGS` in `consts.py` - - To use the Custom UI, add the engine id for your search engine to `CUSTOM_UI_DATASTORE_IDS` in `consts.py` + - To use the Custom UI, add the engine id for your search engine to `CUSTOM_UI_ENGINE_IDS` in `consts.py` - This is the string after `/engines/` in the Cloud Console URL. - `https://console.cloud.google.com/gen-app-builder/engines/website-search-engine_1681248733152/...` - Engine ID is `website-search-engine_1681248733152` diff --git a/search/web-app/consts.py b/search/web-app/consts.py index c30c91308e..65618f4c71 100644 --- a/search/web-app/consts.py +++ b/search/web-app/consts.py @@ -19,18 +19,28 @@ WIDGET_CONFIGS = [ { - "name": "Contracts (Unstructured)", + "name": "Google Cloud Website", + "config_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "placeholder": "Vertex AI", + }, + { + "name": "Contracts", "config_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "placeholder": "What is the SLA?", }, { - "name": "Alphabet Earnings Reports (Unstructured)", + "name": "Alphabet Earnings Reports", "config_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "placeholder": "What was Google's revenue in 2021?", }, + { + "name": "Kaggle Movies", + "config_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "placeholder": "Harry Potter", + }, ] -CUSTOM_UI_DATASTORE_IDS = [ +CUSTOM_UI_ENGINE_IDS = [ { "name": "Google Cloud Website", "engine_id": "google-cloud-site-search", @@ -39,10 +49,14 @@ "name": "Google Merchandise Store (Advanced Indexing)", "engine_id": "google-merch-store", }, + { + "name": "Cymbal Bank", + "engine_id": "cymbal-bank-onboarding", + }, ] -IMAGE_SEARCH_DATASTORE_IDs = [ +IMAGE_SEARCH_ENGINE_IDs = [ { "name": "Google Merchandise Store", "engine_id": "google-merch-store", diff --git a/search/web-app/main.py b/search/web-app/main.py index df8ad8b505..e8f6810021 100644 --- a/search/web-app/main.py +++ b/search/web-app/main.py @@ -20,18 +20,18 @@ from urllib.parse import urlparse from consts import ( - CUSTOM_UI_DATASTORE_IDS, + CUSTOM_UI_ENGINE_IDS, LOCATION, PROJECT_ID, SUMMARY_MODELS, VALID_LANGUAGES, WIDGET_CONFIGS, - IMAGE_SEARCH_DATASTORE_IDs, + IMAGE_SEARCH_ENGINE_IDs, RECOMMENDATIONS_DATASTORE_IDs, ) from ekg_utils import search_public_kg from flask import Flask, render_template, request -from genappbuilder_utils import ( +from vais_utils import ( list_documents, recommend_personalize, search_enterprise_search, @@ -49,7 +49,7 @@ "default_language": VALID_LANGUAGES[0], } -CUSTOM_UI_SEARCH_ENGINES = [d["name"] for d in CUSTOM_UI_DATASTORE_IDS] +CUSTOM_UI_SEARCH_ENGINES = [d["name"] for d in CUSTOM_UI_ENGINE_IDS] NAV_LINKS = [ {"link": "/", "name": "Widgets", "icon": "widgets"}, @@ -119,8 +119,8 @@ def search() -> str: ) -@app.route("/search_genappbuilder", methods=["POST"]) -def search_genappbuilder() -> str: +@app.route("/search_vais", methods=["POST"]) +def search_vais() -> str: """ Handle Search Vertex AI Search Request """ @@ -155,7 +155,7 @@ def search_genappbuilder() -> str: results, summary, request_url, raw_request, raw_response = search_enterprise_search( project_id=PROJECT_ID, location=LOCATION, - engine_id=CUSTOM_UI_DATASTORE_IDS[int(search_engine)]["engine_id"], + engine_id=CUSTOM_UI_ENGINE_IDS[int(search_engine)]["engine_id"], search_query=search_query, summary_model=summary_model, summary_preamble=summary_preamble, @@ -188,8 +188,8 @@ def image_search() -> str: ) -@app.route("/imagesearch_genappbuilder", methods=["POST"]) -def imagesearch_genappbuilder() -> str: +@app.route("/imagesearch_vais", methods=["POST"]) +def imagesearch_vais() -> str: """ Handle Image Search Vertex AI Search Request """ @@ -232,7 +232,7 @@ def imagesearch_genappbuilder() -> str: results, _, request_url, raw_request, raw_response = search_enterprise_search( project_id=PROJECT_ID, location=LOCATION, - engine_id=IMAGE_SEARCH_DATASTORE_IDs[0]["engine_id"], + engine_id=IMAGE_SEARCH_ENGINE_IDs[0]["engine_id"], search_query=search_query, image_bytes=image_bytes, params={"search_type": 1}, @@ -270,8 +270,8 @@ def recommend() -> str: ) -@app.route("/recommend_genappbuilder", methods=["POST"]) -def recommend_genappbuilder() -> str: +@app.route("/recommend_vais", methods=["POST"]) +def recommend_vais() -> str: """ Handle Recommend Vertex AI Search Request """ diff --git a/search/web-app/static/index.css b/search/web-app/static/index.css index a1db872ba6..2b120316c1 100644 --- a/search/web-app/static/index.css +++ b/search/web-app/static/index.css @@ -231,6 +231,6 @@ a:active { } .search-form .mdc-radio { - margin-right: 3rem; + margin-right: 4rem; vertical-align: top; } diff --git a/search/web-app/templates/image-search.html b/search/web-app/templates/image-search.html index b8e54ccf7a..a84ef5c779 100644 --- a/search/web-app/templates/image-search.html +++ b/search/web-app/templates/image-search.html @@ -19,7 +19,7 @@ {% block content %}
diff --git a/search/web-app/templates/recommend.html b/search/web-app/templates/recommend.html index 8d904247f1..025cbbe6e0 100644 --- a/search/web-app/templates/recommend.html +++ b/search/web-app/templates/recommend.html @@ -13,7 +13,7 @@ {% block description %}Select a document from the list to view recommendations of similar documents in the dataset.{% endblock %} {% block content %} - + diff --git a/search/web-app/templates/search.html b/search/web-app/templates/search.html index ffe51eb3f4..b91468741e 100644 --- a/search/web-app/templates/search.html +++ b/search/web-app/templates/search.html @@ -11,7 +11,7 @@ {% block title %}Vertex AI Search Demo - {{title}}{% endblock %} {% block content %} - +
diff --git a/search/web-app/genappbuilder_utils.py b/search/web-app/vais_utils.py similarity index 94% rename from search/web-app/genappbuilder_utils.py rename to search/web-app/vais_utils.py index d43b89ba19..91ce7d4907 100644 --- a/search/web-app/genappbuilder_utils.py +++ b/search/web-app/vais_utils.py @@ -47,8 +47,7 @@ def list_documents( def search_enterprise_search( project_id: str, location: str, - data_store_id: str | None = None, - engine_id: str | None = None, + engine_id: str, page_size: int = 50, search_query: str | None = None, image_bytes: bytes | None = None, @@ -62,17 +61,7 @@ def search_enterprise_search( # Create a client client = discoveryengine.SearchServiceClient() - if data_store_id: - serving_config = client.serving_config_path( - project=project_id, - location=location, - data_store=data_store_id, - serving_config="default_config", - ) - elif engine_id: - serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config" - else: - raise ValueError("Either `data_store_id` or `engine_id` must be provided.") + serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config" # Configuration options for search content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec( diff --git a/vision/README.md b/vision/README.md index 267380be0b..d5840b415d 100644 --- a/vision/README.md +++ b/vision/README.md @@ -16,6 +16,7 @@ This directory contains examples and guides for using Google Cloud's Vision AI p - [Advanced Prompting for Imagen2](use-cases/advanced_prompting_for_imagen2.ipynb): Deep dive into advanced prompting techniques to enhance your Imagen2 image generation results. - [Creating High Quality Visual Assets with Gemini and Imagen](use-cases/creating_high_quality_visual_assets_with_gemini_and_imagen.ipynb): Learn to create high-quality visual assets by combining the power of Gemini and Imagen. - [Brochure Creation Using Imagen](use-cases/brochure-creation-using-imagen/brochure_creation_using_imagen.ipynb): Step-by-step guide on how to use Imagen for generating creative brochure designs. +- [HEY_LLM / IMAGEN](use-cases/hey_llm/README.md): Custom Google Sheets functions that bring the power of Gemini and Imagen right into your spreadsheets. ## Gradio diff --git a/vision/getting-started/prompt_generation_with_gemini.ipynb b/vision/getting-started/prompt_generation_with_gemini.ipynb new file mode 100644 index 0000000000..dbeb6e6f2e --- /dev/null +++ b/vision/getting-started/prompt_generation_with_gemini.ipynb @@ -0,0 +1,516 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ijGzTHJJUCPY" + }, + "outputs": [], + "source": [ + "# Copyright 2024 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VEqbX8OhE8y9" + }, + "source": [ + "# Enhance Imagen prompts with Gemini\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \"Google
Run in Colab\n", + "
\n", + "
\n", + " \n", + " \"Google
Run in Colab Enterprise\n", + "
\n", + "
\n", + " \n", + " \"Vertex
Open in Vertex AI Workbench\n", + "
\n", + "
\n", + " \n", + " \"GitHub
View on GitHub\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G1KDmM_PBAXz" + }, + "source": [ + "| | |\n", + "|-|-|\n", + "|Author(s) | [Katie Nguyen](https://github.com/katiemn) |" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CkHPv2myT2cx" + }, + "source": [ + "## Overview\n", + "\n", + "### Gemini 1.5 Pro\n", + "\n", + "Gemini 1.5 Pro is a new language model from the Gemini family. This model introduces a long context window of up to 2 million tokens that can seamlessly analyze large amounts of information. Additionally, it is multimodal with the ability to process text, images, audio, video, and code. Learn more about [Gemini 1.5](https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/).\n", + "\n", + "### Imagen 3\n", + "\n", + "Imagen 3 on Vertex AI brings Google's state of the art generative AI capabilities to application developers. Imagen 3 is Google's highest quality text-to-image model to date. It's capable of creating images with astonishing detail. Thus, developers have more control when building next-generation AI products that transform their imagination into high quality visual assets. Learn more about [Imagen on Vertex AI](https://cloud.google.com/vertex-ai/generative-ai/docs/image/overview).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DrkcqHrrwMAo" + }, + "source": [ + "In this tutorial, you will learn how to use the Vertex AI SDK for Python to interact with Gemini 1.5 Pro and Imagen 3 to:\n", + "\n", + "- Optimize your image generation prompts with Gemini based on a subject, action, scene, and style\n", + "- Rewrite your prompt based on good example prompts\n", + "- Generate enhanced prompts from an initial image" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r11Gu7qNgx1p" + }, + "source": [ + "## Get Started\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "No17Cw5hgx12" + }, + "source": [ + "### Install Vertex AI SDK for Python\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tFy3H3aPgx12" + }, + "outputs": [], + "source": [ + "%pip install --upgrade --user --quiet google-cloud-aiplatform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R5Xep4W9lq-Z" + }, + "source": [ + "### Restart runtime\n", + "\n", + "To use the newly installed packages in this Jupyter runtime, you must restart the runtime. You can do this by running the cell below, which restarts the current kernel.\n", + "\n", + "The restart might take a minute or longer. After it's restarted, continue to the next step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XRvKdaPDTznN" + }, + "outputs": [], + "source": [ + "import IPython\n", + "\n", + "app = IPython.Application.instance()\n", + "app.kernel.do_shutdown(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SbmM4z7FOBpM" + }, + "source": [ + "
\n", + "⚠️ The kernel is going to restart. Please wait until it is finished before continuing to the next step. ⚠️\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dmWOrTJ3gx13" + }, + "source": [ + "### Authenticate your notebook environment (Colab only)\n", + "\n", + "If you are running this notebook on Google Colab, run the following cell to authenticate your environment.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NyKGtVQjgx13" + }, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "if \"google.colab\" in sys.modules:\n", + " from google.colab import auth\n", + "\n", + " auth.authenticate_user()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DF4l8DTdWgPY" + }, + "source": [ + "### Set Google Cloud project information and initialize Vertex AI SDK\n", + "\n", + "To get started using Vertex AI, you must have an existing Google Cloud project and [enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).\n", + "\n", + "Learn more about [setting up a project and a development environment](https://cloud.google.com/vertex-ai/docs/start/cloud-environment)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Nqwi-5ufWp_B" + }, + "outputs": [], + "source": [ + "# Use the environment variable if the user doesn't provide Project ID.\n", + "import os\n", + "\n", + "import vertexai\n", + "\n", + "PROJECT_ID = \"[your-project-id]\" # @param {type: \"string\", placeholder: \"[your-project-id]\", isTemplate: true}\n", + "if not PROJECT_ID or PROJECT_ID == \"[your-project-id]\":\n", + " PROJECT_ID = str(os.environ.get(\"GOOGLE_CLOUD_PROJECT\"))\n", + "\n", + "LOCATION = os.environ.get(\"GOOGLE_CLOUD_REGION\", \"us-central1\")\n", + "\n", + "vertexai.init(project=PROJECT_ID, location=LOCATION)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jXHfaVS66_01" + }, + "source": [ + "### Import libraries\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lslYAvw37JGQ" + }, + "outputs": [], + "source": [ + "from vertexai.generative_models import GenerativeModel, Image, Part\n", + "from vertexai.preview.vision_models import ImageGenerationModel" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BY1nfXrqRxVX" + }, + "source": [ + "### Load the Gemini 1.5 Pro and Imagen 3 models\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2998506fe6d1" + }, + "outputs": [], + "source": [ + "model = GenerativeModel(\"gemini-1.5-pro\")\n", + "image_generation_model = ImageGenerationModel.from_pretrained(\"imagen-3.0-generate-001\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Sr2Y3lFwKW1M" + }, + "source": [ + "### Define helper functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "r_38e5rRKB6s" + }, + "outputs": [], + "source": [ + "import typing\n", + "\n", + "import IPython.display\n", + "from IPython.display import display\n", + "from PIL import Image as PIL_Image\n", + "from PIL import ImageOps as PIL_ImageOps\n", + "\n", + "\n", + "def display_image(\n", + " image: Image,\n", + " max_width: int = 600,\n", + " max_height: int = 350,\n", + ") -> None:\n", + " pil_image = typing.cast(PIL_Image.Image, image._pil_image)\n", + " if pil_image.mode != \"RGB\":\n", + " # RGB is supported by all Jupyter environments (e.g. RGBA is not yet)\n", + " pil_image = pil_image.convert(\"RGB\")\n", + " image_width, image_height = pil_image.size\n", + " if max_width < image_width or max_height < image_height:\n", + " # Resize to display a smaller notebook image\n", + " pil_image = PIL_ImageOps.contain(pil_image, (max_width, max_height))\n", + " IPython.display.display(pil_image)\n", + "\n", + "\n", + "def get_url_from_gcs(gcs_uri: str) -> str:\n", + " # Converts GCS uri to url for image display\n", + " url = \"https://storage.googleapis.com/\" + gcs_uri.replace(\"gs://\", \"\").replace(\n", + " \" \", \"%20\"\n", + " )\n", + " return url" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6ASy6PkRteoT" + }, + "source": [ + "### Optimize your prompt\n", + "\n", + "Input a subject, action, and scene you would like to generate. The Gemini prompt will expand these initial ideas, but provide as much detail as possible. Choose a style from the list for your image as well." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s2Vx2W91bl8n" + }, + "outputs": [], + "source": [ + "subject = \"\" # @param {type:\"string\"}\n", + "action = \"\" # @param {type:\"string\"}\n", + "scene = \"\" # @param {type:\"string\"}\n", + "style = \"photorealistic\" # @param [\"photorealistic\", \"illustration\", \"digital\", \"minimalist\", \"vintage photo\", \"abstract\", \"cinematic\"]\n", + "\n", + "prompt = \"\"\"\n", + "Use the provided subject, action, scene, and style\n", + "to produce a descriptive prompt that can be used to generate an image\n", + "with a text-to-image model.\n", + "\n", + "Specify where the subject is situated within the image.\n", + "\n", + "Indicate how the light plays a role in the image.\n", + "\n", + "Only return the prompt string.\n", + "\"\"\"\n", + "\n", + "contents = [subject, action, scene, style, prompt]\n", + "\n", + "responses = model.generate_content(contents)\n", + "display(IPython.display.Markdown(\"***Prompt:*** \" + responses.text))\n", + "\n", + "# generate image from Gemini written prompt\n", + "images = image_generation_model.generate_images(\n", + " prompt=responses.text,\n", + " number_of_images=1,\n", + " aspect_ratio=\"1:1\",\n", + " safety_filter_level=\"block_few\",\n", + " person_generation=\"allow_adult\",\n", + ")\n", + "\n", + "display_image(images[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WPJUbWsLjYt-" + }, + "source": [ + "### Rewrite your prompt\n", + "\n", + "You can also use Gemini to rewrite an entire prompt. Enter your prompt in ```user_prompt```. You can be as detailed or as simple as you would like. This prompt enhances your initial prompt based on some provided gold standard sample prompts. You can edit the 5 example prompts below to better match your own use cases for more tailored results. See the next section for more details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3pV8HnZqkly7" + }, + "outputs": [], + "source": [ + "user_prompt = \"\" # @param {type:\"string\"}\n", + "\n", + "prompt = \"\"\"\n", + "I will provide some example prompts for image generation.\n", + "\n", + "1. Science fiction spacesuit, white and green color scheme,\n", + "highly detailed, intricate, full body armor, futuristic, tactical,\n", + "dark gray background, front view, upper body, 3d render.\n", + "\n", + "2. A woman in profile view, gazing into the distance, against a backdrop of a vibrant,\n", + "swirling nebula of magenta and purple hues. Superimposed over the nebula\n", + "is a web of interconnected nodes, each housing a distinct social media icon. The centerpiece of this web is a\n", + "banner proclaiming \"FUTURE OF MESSAGING\" in bold, futuristic font.\n", + "\n", + "3. A large, round, modern coffee table made of light oak wood sits in a dimly\n", + "lit, minimalist room with dark gray walls. The table has four thick,\n", + "cylindrical legs that are evenly spaced. An open magazine with white pages\n", + "rests on the table's surface. In the background, a simple chair with a round,\n", + "wooden seat and a black metal frame is slightly out of focus. The floor is a\n", + "medium gray concrete with subtle light reflections.\n", + "\n", + "4. A stylish man stands before the New York City skyline, bathed in the golden\n", + "light of a late afternoon. He is wearing a green polo shirt with the top\n", + "button fastened. Over the polo, he wears a light brown, unzipped bomber jacket.\n", + "His dark brown hair is styled with a relaxed wave. He is looking down,\n", + "a contemplative expression on his face.\n", + "\n", + "5. A perfume bottle with a golden cap standing on a white surface,\n", + "hit by natural window light creating a sharp shadow on the right.\n", + "The bottle is rectangular, made of clear glass and contains a light\n", + "amber-colored fragrance. The background is a simple white wall.\n", + "\n", + "Consider these prompts. Based on these examples, rewrite the user provided\n", + "prompt in a similar format.\n", + "\"\"\"\n", + "\n", + "contents = [user_prompt, prompt]\n", + "\n", + "responses = model.generate_content(contents)\n", + "display(IPython.display.Markdown(\"***Prompt:*** \" + responses.text))\n", + "\n", + "# generate image from Gemini written prompt\n", + "images = image_generation_model.generate_images(\n", + " prompt=responses.text,\n", + " number_of_images=1,\n", + " aspect_ratio=\"1:1\",\n", + " safety_filter_level=\"block_few\",\n", + " person_generation=\"allow_adults\",\n", + ")\n", + "\n", + "display_image(images[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A9Lj7igLCTWa" + }, + "source": [ + "### Generate elaborate prompts from images\n", + "\n", + "To get more example prompts you can supply images that fit your use case and have Gemini write a prompt for the provided image. Modify ```gcs_uri``` to point to your image in Google Cloud Storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jMgA_aIjXZ7G" + }, + "outputs": [], + "source": [ + "# Load an image from Google Cloud Storage\n", + "gcs_uri = (\n", + " \"gs://cloud-samples-data/generative-ai/image/dog-ad-1.png\" # @param {type:\"string\"}\n", + ")\n", + "example_image = Part.from_uri(gcs_uri, mime_type=\"image/png\")\n", + "\n", + "# Display image\n", + "url = get_url_from_gcs(example_image.file_data.file_uri)\n", + "IPython.display.Image(url, width=350)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "db6r5wB4oMnu" + }, + "source": [ + "Run the following cell to generate a detailed prompt-like description of the previous image. This output can be copied and pasted into the Gemini prompt in the \"Rewrite your prompt\" section as a gold standard prompt. Each prompt that you add/replace in that section will help tailor the style of the rewritten prompts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "tX5kTqD6yNwl" + }, + "outputs": [], + "source": [ + "gemini_prompt = \"\"\"\n", + "Based on the provided image, create a highly detailed prompt for a text-to-image model.\n", + "Combine all attributes into a statement of the most important attributes.\n", + "Include extra details where necessary and make sure to include details and words in the image.\n", + "\"\"\"\n", + "\n", + "contents = [gemini_prompt, example_image]\n", + "\n", + "responses = model.generate_content(contents)\n", + "display(IPython.display.Markdown(\"***Prompt:*** \" + responses.text))" + ] + } + ], + "metadata": { + "colab": { + "name": "prompt_generation_with_gemini.ipynb", + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/vision/use-cases/hey_llm/.editorconfig b/vision/use-cases/hey_llm/.editorconfig new file mode 100644 index 0000000000..79fe802675 --- /dev/null +++ b/vision/use-cases/hey_llm/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true diff --git a/vision/use-cases/hey_llm/.eslintignore b/vision/use-cases/hey_llm/.eslintignore new file mode 100644 index 0000000000..567609b123 --- /dev/null +++ b/vision/use-cases/hey_llm/.eslintignore @@ -0,0 +1 @@ +build/ diff --git a/vision/use-cases/hey_llm/.eslintrc.json b/vision/use-cases/hey_llm/.eslintrc.json new file mode 100644 index 0000000000..f8c58a4c0a --- /dev/null +++ b/vision/use-cases/hey_llm/.eslintrc.json @@ -0,0 +1,57 @@ +{ + "extends": ["eslint:recommended", "plugin:n/recommended", "prettier"], + "plugins": ["n", "prettier"], + "rules": { + "prettier/prettier": "error", + "block-scoped-var": "error", + "eqeqeq": "error", + "no-var": "error", + "prefer-const": "error", + "eol-last": "error", + "prefer-arrow-callback": "error", + "no-trailing-spaces": "error", + "quotes": ["warn", "single", {"avoidEscape": true}], + "no-restricted-properties": [ + "error", + { + "object": "describe", + "property": "only" + }, + { + "object": "it", + "property": "only" + } + ] + }, + "overrides": [ + { + "files": ["**/*.ts", "**/*.tsx"], + "extends": ["plugin:@typescript-eslint/recommended"], + "rules": { + "@typescript-eslint/ban-ts-comment": "warn", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-warning-comments": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/camelcase": "off", + "n/no-missing-import": "off", + "n/no-empty-function": "off", + "n/no-unsupported-features/es-syntax": "off", + "n/no-missing-require": "off", + "n/shebang": "off", + "n/no-unpublished-import": [ + "error", + { + "allowModules": ["@google-cloud/vertexai"] + } + ], + "no-dupe-class-members": "off", + "require-atomic-updates": "off" + } + } + ] +} diff --git a/vision/use-cases/hey_llm/.gitignore b/vision/use-cases/hey_llm/.gitignore new file mode 100644 index 0000000000..37b6d4d693 --- /dev/null +++ b/vision/use-cases/hey_llm/.gitignore @@ -0,0 +1,3 @@ +node_modules +.clasp.json +.DS_Store diff --git a/vision/use-cases/hey_llm/.prettierrc.json b/vision/use-cases/hey_llm/.prettierrc.json new file mode 100644 index 0000000000..2399e7ec7d --- /dev/null +++ b/vision/use-cases/hey_llm/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "bracketSpacing": false, + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "avoid" +} diff --git a/vision/use-cases/hey_llm/README.md b/vision/use-cases/hey_llm/README.md new file mode 100644 index 0000000000..f9f94f835f --- /dev/null +++ b/vision/use-cases/hey_llm/README.md @@ -0,0 +1,138 @@ +# HEY_LLM / IMAGEN + +`HEY_LLM` and `IMAGEN` are custom Google Sheets functions that bring the power of large language models (LLMs) and image generation right into your spreadsheets. `HEY_LLM` connects your spreadsheet to Gemini and makes useful inferences over values in your spreadsheet. `IMAGEN` lets you generate images from text prompts directly within your cells, which you can render with Sheet's `IMAGE` function. + +![Example](example.gif) + +## Function usage + +### HEY_LLM + +```bash +=HEY_LLM(instruction, input, [context], [model]) +``` + +`instruction` is a text that describes the task you want the Large Language Model (LLM) to perform, for example, "Name of the highest mountain in each country." + +`input` is the input text you want to be processed according to the instruction, e.g. "Japan", "Canada". + +_Optional:_ `context` is an optional cell range you can provide as context. For example, if the instruction is "Write copy to sell," you can provide a list of ad copies you find inspiring to specify the desired style. + +_Optional:_ `model` is a Gemini model version to use. The default value is `gemini-1.5-flash`. See [Google models](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models) for available models. + +If you don't need to specify `context` but want to specify `model`, pass an empty string to the third argument. For example, to use Gemini 1.5 Pro, the function would look like this: + +```bash +=HEY_LLM(instruction, input, "", "gemini-1.5-pro") +``` + +### IMAGEN + +```bash +=IMAGEN(prompt, [seed], [model]) +``` + +`prompt` is a text that describes the image you want to generate. + +_Optional:_ `seed` is a random seed number. Try change this number if you want to get different images. + +_Optional:_ `model` is a Imagen model version to use. The default value is `imagen-3.0-fast-generate-001`. See [Generate images using text prompts](https://cloud.google.com/vertex-ai/generative-ai/docs/image/generate-images) for available models. + +Combine with `=IMAGE` to render the generated image in the spreadsheet. + +```bash +=IMAGE(IMAGEN("Mount Fuji", 2, "imagen-3.0-generate-001")) +``` + +## Prerequisites + +Before you begin, you'll need to set up a few things: + +### Install and set up [clasp](https://github.com/google/clasp): Clasp is a command-line tool that helps you manage Google Apps Script projects + +- Install clasp globally: `npm install -g @google/clasp` +- Enable the Google Apps Script API: Visit [https://script.google.com/home/usersettings](https://script.google.com/home/usersettings) and enable the API. +- Log in with clasp: Run `clasp login` and follow the instructions to authenticate. + +### Prepare a Google Cloud project and set up the OAuth2 consent screen + +- Create a new project in Google Cloud Console or select an existing one. +- Navigate to "APIs & Services" > "OAuth consent screen". +- Configure the consent screen with the necessary information and publish it. + +### Enable Google Drive API + +- Navigate to "APIs & Services" > "Library" +- Search "Google Drive API" and hit "Enable" + - Google Drive is used to store and host generated images. + +## Create a spreadsheet with HEY_LLM and IMAGEN + +### Create the spreadsheet and deploy the script + +Navigate to this directory and run the following command to create a spreadsheet with `HEY_LLM` and `IMAGEN` installed. Replace `"YOUR_SHEET_NAME"` with the name you want for your spreadsheet (e.g., "My Awesome LLM Sheet"). + +```bash +TITLE="YOUR_SHEET_NAME" npm run create +``` + +### Get the Spreadsheet ID and Script ID + +After running the command, you'll see URLs for the created spreadsheet and the GAS script: + +```bash +Created new Google Sheet: https://drive.google.com/open?id=XXXXXX +Created new Google Sheets Add-on script: https://script.google.com/d/YYYYYY/edit +``` + +`XXXXXX` is your **Spreadsheet ID**, and `YYYYYY` is your **Script ID**. + +You can also find these IDs in the `.clasp.json` file: + +- `scriptId` is the Script ID. +- `parentId` contains the Spreadsheet ID. + +### Set up OAuth2 Client ID and Secret + +- Open the created spreadsheet. +- Go to "Extensions" > "YOUR_SPRINT_NAME" > "Use in this spreadsheet". +- You'll see a side menu with input boxes for "OAuth Client ID" and "OAuth Client Secret". +- Open a new browser tab and go to Google Cloud Console. +- Navigate to "APIs & Services" > "Credentials". +- Create a new OAuth2 Client ID with the "Web Application" application type. + - You can skip this step if you reuse an existing OAuth2 Client. +- Select the generated Client ID and: + - Copy and paste the Client ID and Client Secret to the input boxes in the Sheet extension side menu. + - Add `https://script.google.com/macros/d/YYYYYY/usercallback` to "Authorized redirect URIs" in OAuth2 Client Settings. (replace `YYYYYY` with your Script ID). +- Go back to the spreadsheet menu and click "Authorize". +- You will see the success message if authorization is successful. + +### Start using the functions + +You can now use the `HEY_LLM` and `IMAGEN` functions in your spreadsheet! + +## Updating the script + +To update the existing spreadsheet and associated script file with the latest source code, create a `.clasp.json` file in the same directory as this readme file with the following content and run `npm run push`. + +```json +{"parentId": ["XXXXXX"], "scriptId": "YYYYYY", "rootDir": "./src"} +``` + +where `XXXXXX` is the **Spreadsheet ID**, and `YYYYYY` is its associated **Script ID**. + +## Disclaimer + +This is not an officially supported Google product. + +## Caveat + +_Be cautious about who you grant edit access to this spreadsheet!_ + +`HEY_LLM` and `IMAGEN` use Google's Vertex AI platform, and sharing your spreadsheet with others could result in unexpected charges on your account. + +This extension uses the [apps-script-oauth2](https://github.com/googleworkspace/apps-script-oauth2) library to manage OAuth2 tokens, and the tokens are stored as document properties following the recommendations of the library. Granting edit permissions to others lets them retrieve these tokens. + +## Author + +[@tushuhei](https://github.com/tushuhei) diff --git a/vision/use-cases/hey_llm/example.gif b/vision/use-cases/hey_llm/example.gif new file mode 100644 index 0000000000..983915f2fb Binary files /dev/null and b/vision/use-cases/hey_llm/example.gif differ diff --git a/vision/use-cases/hey_llm/package-lock.json b/vision/use-cases/hey_llm/package-lock.json new file mode 100644 index 0000000000..cc5200ab06 --- /dev/null +++ b/vision/use-cases/hey_llm/package-lock.json @@ -0,0 +1,3469 @@ +{ + "name": "hey_llm", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hey_llm", + "version": "0.0.1", + "license": "Apache-2.0", + "devDependencies": { + "@google-cloud/vertexai": "^1.9.0", + "@types/google-apps-script": "^1.0.84", + "@types/google-apps-script-oauth2": "^38.0.4", + "gts": "^6.0.0", + "typescript": "^5.6.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@google-cloud/vertexai": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@google-cloud/vertexai/-/vertexai-1.9.0.tgz", + "integrity": "sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==", + "dev": true, + "dependencies": { + "google-auth-library": "^9.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@types/google-apps-script": { + "version": "1.0.84", + "resolved": "https://registry.npmjs.org/@types/google-apps-script/-/google-apps-script-1.0.84.tgz", + "integrity": "sha512-qZBeCyk3vJBGEiWtBSRrV89KVovdo9qruw1rQH8OZAQUgXS8RNbMKnnPI5dW+PuJwM8rMiYZpvl6LeaW9IS+WA==", + "dev": true + }, + "node_modules/@types/google-apps-script-oauth2": { + "version": "38.0.4", + "resolved": "https://registry.npmjs.org/@types/google-apps-script-oauth2/-/google-apps-script-oauth2-38.0.4.tgz", + "integrity": "sha512-pPdR0dBDqMmqa3ryEyRt5wBwEkjwKrn4ZvoUnSD9mA+ljnh0oupLRb/jyhZ5ZXOlNuhS+TNBuOijwYL4ECZz/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/google-apps-script": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.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==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "dev": true, + "license": "ISC", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-auth-library": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.0.tgz", + "integrity": "sha512-Y/eq+RWVs55Io/anIsm24sDS8X79Tq948zVLGaa7+KlJYYqaGwp1YI37w48nzrNi12RgnzMrQD4NzdmCowT90g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/gts": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gts/-/gts-6.0.0.tgz", + "integrity": "sha512-wTZZYGwa67j88rEzW8nyshxHJKNk8ytGjYHu+Y1uC/B+oMTEqMNXikULzQfc5/BcmtVQ/FWurj84Q/WWS6Wd3g==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "5.62.0", + "@typescript-eslint/parser": "5.62.0", + "chalk": "^4.1.2", + "eslint": "8.57.1", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-n": "15.7.0", + "eslint-plugin-prettier": "5.2.1", + "execa": "^5.0.0", + "inquirer": "^7.3.3", + "json5": "^2.1.3", + "meow": "^9.0.0", + "ncp": "^2.0.0", + "prettier": "3.3.3", + "rimraf": "3.0.2", + "write-file-atomic": "^4.0.0" + }, + "bin": { + "gts": "build/src/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": ">=5.6.3" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "license": "MIT", + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=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==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-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==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/vision/use-cases/hey_llm/package.json b/vision/use-cases/hey_llm/package.json new file mode 100644 index 0000000000..312dc68a94 --- /dev/null +++ b/vision/use-cases/hey_llm/package.json @@ -0,0 +1,21 @@ +{ + "name": "hey_llm", + "version": "0.0.1", + "description": "Google Sheet custom functions that connect cells to Gemini", + "license": "Apache-2.0", + "keywords": [], + "scripts": { + "lint": "gts lint", + "clean": "gts clean", + "fix": "gts fix", + "create": "clasp create --type=sheets --rootDir=./src --title=\"${TITLE:-YOUR_SHEET_NAME}\" && mv ./src/.clasp.json . && clasp push -f", + "push": "clasp push -f" + }, + "devDependencies": { + "@google-cloud/vertexai": "^1.9.0", + "@types/google-apps-script": "^1.0.84", + "@types/google-apps-script-oauth2": "^38.0.4", + "gts": "^6.0.0", + "typescript": "^5.6.3" + } +} diff --git a/vision/use-cases/hey_llm/src/appsscript.json b/vision/use-cases/hey_llm/src/appsscript.json new file mode 100644 index 0000000000..95f78ae9b0 --- /dev/null +++ b/vision/use-cases/hey_llm/src/appsscript.json @@ -0,0 +1,14 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + "libraries": [ + { + "userSymbol": "OAuth2", + "version": "43", + "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF" + } + ] + }, + "exceptionLogging": "STACKDRIVER", + "runtimeVersion": "V8" +} diff --git a/vision/use-cases/hey_llm/src/main.ts b/vision/use-cases/hey_llm/src/main.ts new file mode 100644 index 0000000000..535f94d343 --- /dev/null +++ b/vision/use-cases/hey_llm/src/main.ts @@ -0,0 +1,558 @@ +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type {GenerateContentResponse} from '@google-cloud/vertexai'; + +/** + * Vertex AI location. Change this const if you want to use another location. + */ +const LOCATION = 'asia-northeast1'; + +/** + * Default Gemini model to use. + */ +const DEFAULT_GEMINI_MODEL = 'gemini-1.5-flash'; + +/** + * Default Imagen model to use. + */ +const DEFAULT_IMAGEN_MODEL = 'imagen-3.0-fast-generate-001'; + +const PROP_KEY = { + OAUTH_CLIENT_ID: 'client_id', + OAUTH_CLIENT_SECRET: 'client_secret', + DRIVE_FOLDER_ID: 'folder_id', +}; + +/** + * Gets Google Cloud Project Number from OAuth Client ID stored in Document Properties. + * @private + * @returns Google Cloud Project Number. + */ +function getProjectNumber_() { + return PropertiesService.getDocumentProperties() + .getProperty(PROP_KEY.OAUTH_CLIENT_ID) + ?.split('-')[0]; +} + +/** + * Generates a hash value for the given value. + * @param value Source value + * @returns Generated hash value + */ +function generateHashValue(value: string) { + const hash = Utilities.computeDigest( + Utilities.DigestAlgorithm.SHA_256, + value, + ); + return hash + .map(byte => ((byte & 0xff) + 0x100).toString(16).slice(1)) + .join(''); +} + +/** + * Runs when the document is opened, creating the add-on's menu. + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function onOpen() { + SpreadsheetApp.getUi() + .createAddonMenu() + .addItem('Use in this spreadsheet', 'use') + .addToUi(); +} + +/** + * Enables the add-on on for the current spreadsheet with authorization. + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function use() { + const template = HtmlService.createTemplateFromFile('sidebar.html'); + const page = template.evaluate(); + page.setTitle('HEY_LLM'); + return SpreadsheetApp.getUi().showSidebar(page); +} + +/** + * Gets authorization URL if OAuth Client ID / Secret is available in Script Properties. + * @returns Authorization URL + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function getAuthorizationUrl() { + const clientID = PropertiesService.getDocumentProperties().getProperty( + PROP_KEY.OAUTH_CLIENT_ID, + ); + const clientSecret = PropertiesService.getDocumentProperties().getProperty( + PROP_KEY.OAUTH_CLIENT_SECRET, + ); + if (clientID && clientSecret) { + return getGoogleService_().getAuthorizationUrl(); + } + return undefined; +} + +/** + * Callback function called after authorization. + * @param request Request object + * @returns HTML output for the new tab + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function authCallback(request: object) { + const isAuthorized = getGoogleService_().handleCallback(request); + if (isAuthorized) { + return HtmlService.createHtmlOutput('Success! You can close this tab.'); + } else { + return HtmlService.createHtmlOutput('Denied. You can close this tab'); + } +} +/** + * Sets OAuth Client ID to Document Properties. + * @param val OAuth Client ID + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function setClientID(val: string) { + PropertiesService.getDocumentProperties().setProperty( + PROP_KEY.OAUTH_CLIENT_ID, + val, + ); +} + +/** + * Sets OAuth Client Secret to Document Properties. + * @param val OAuth Client Secret + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function setClientSecret(val: string) { + PropertiesService.getDocumentProperties().setProperty( + PROP_KEY.OAUTH_CLIENT_SECRET, + val, + ); +} + +/** + * Asks Gemini for a response based on a provided context and input. + * @param {string} instruction An instruction that describes the task. + * @param {string} input The input data to process based on the instruction. + * @param {string[][]} context Optional context that LLM should be aware of. + * You can specify a cell range that includes examples, reference data, etc. + * @param {string} model The Gemini model version to use (default: gemini-1.5-flash). + * See https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models for available models. + * @return {string} The LLM's response, trimmed and ready for use in a spreadsheet cell. + * @customFunction + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function HEY_LLM( + instruction: string, + input: string, + context: string[][] = [], + model = DEFAULT_GEMINI_MODEL, +) { + const prompt = ` +## Instruction +${instruction} + +${context ? '## Context (CSV formatted)\n' + context.map(row => row.join(', ')).join('\n') : ''} + +## Task +Input: ${input} +Output:`; + + const cache = CacheService.getDocumentCache(); + const cacheKey = `hey_llm:${generateHashValue(prompt)}:${model}`; + const cached = cache?.get(cacheKey); + if (cached) return cached; + + const oauthService = getGoogleService_(); + const url = `https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${getProjectNumber_()}/locations/${LOCATION}/publishers/google/models/${model}:generateContent`; + + const payload = JSON.stringify({ + contents: [ + { + role: 'user', + parts: [ + { + text: prompt, + }, + ], + }, + ], + systemInstruction: { + parts: [ + { + text: 'The response is to be used in side a spreadsheet cell and needs to be concise. Just show the answer only.', + }, + ], + }, + }); + const res = UrlFetchApp.fetch(url, { + method: 'post', + headers: { + Authorization: 'Bearer ' + oauthService.getAccessToken(), + }, + contentType: 'application/json', + payload: payload, + muteHttpExceptions: true, + }); + const result: GenerateContentResponse = JSON.parse(res.getContentText()); + if (!(result.candidates && result.candidates[0].content.parts[0].text)) { + Logger.log(result); + throw new Error('Request to Gemini failed. ' + res.getContentText()); + } + const out = result.candidates[0].content.parts[0].text.trim(); + cache?.put(cacheKey, out); + return out; +} + +/** + * Removes invalid characters from the file name. + * @param filename Source file name + * @returns Sanitized file name + */ +function sanitizeFileName(filename: string) { + return filename.replace(/[/\\?%*:|'"<>]/g, '_'); +} + +/** + * Gets a thumbnail URL for the image file if available in the parent Drive folder. + * @private + * @param oauth OAuth2 Service + * @param filename Image file name to check + * @param parentFolderID Parent Drive folder to check + * @returns Thumbnail URL if available + */ +function checkDriveImage_( + oauth: GoogleAppsScriptOAuth2.OAuth2Service, + filename: string, + parentFolderID: string, +) { + const q = encodeURI( + `name = '${filename}' and '${parentFolderID}' in parents`, + ); + const url = `https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id,name,thumbnailLink)`; + const res = UrlFetchApp.fetch(url, { + method: 'get', + headers: { + Authorization: 'Bearer ' + oauth.getAccessToken(), + }, + muteHttpExceptions: true, + }); + const response: { + files?: {id: string; name: string; thumbnailLink: string}[]; + } = JSON.parse(res.getContentText()); + + if (!response.files) { + Logger.log(response); + throw new Error( + 'No files included in the response. ' + res.getContentText(), + ); + } + + if (response.files.length > 0) { + return response.files[0].thumbnailLink; + } + return undefined; +} + +/** + * Uploads image to Drive. + * @private + * @param oauth OAuth2 Service + * @param base64image Base 64 encoded image string + * @param filename Image file name + * @param mimeType Image MIME type + * @param parentFolderID Parent Drive folder to upload the image + * @returns Thumbnail URL for the uploaded image + */ +function uploadImageToDrive_( + oauth: GoogleAppsScriptOAuth2.OAuth2Service, + base64image: string, + filename: string, + mimeType: string, + parentFolderID: string, +) { + const metadata = { + name: filename, + mimeType: mimeType, + parents: [parentFolderID], + }; + const boundary = 'UploadImageRequestBoundary'; + const payload = `--${boundary} +Content-Type: application/json; charset=UTF-8 + +${JSON.stringify(metadata)} + +--${boundary} +Content-Type: ${mimeType} +Content-Transfer-Encoding: base64 + +${base64image} + +--${boundary}--`; + const res = UrlFetchApp.fetch( + 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=thumbnailLink', + { + method: 'post', + headers: { + Authorization: 'Bearer ' + oauth.getAccessToken(), + 'Content-Type': `multipart/related; boundary=${boundary}`, + }, + payload: payload, + muteHttpExceptions: true, + }, + ); + const result: {thumbnailLink?: string} = JSON.parse(res.getContentText()); + if (!result.thumbnailLink) { + Logger.log(payload, result); + throw new Error( + 'Uploading image to Drive failed. Is Drive API enabled? ' + + res.getContentText(), + ); + } + return result.thumbnailLink; +} + +/** + * Gets the current GAS script ID. + * @returns The script ID + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function getScriptId() { + return ScriptApp.getScriptId(); +} + +/** + * Gets the GAS project name which this script belongs to. + * @private + * @param oauth OAuth2 Service + * @returns The script name + */ +function getScriptName_(oauth: GoogleAppsScriptOAuth2.OAuth2Service) { + const scriptId = ScriptApp.getScriptId(); + const url = `https://www.googleapis.com/drive/v3/files/${scriptId}?fields=name`; + const res = UrlFetchApp.fetch(url, { + headers: { + Authorization: 'Bearer ' + oauth.getAccessToken(), + }, + }); + const result: {name?: string} = JSON.parse(res.getContentText()); + if (!result.name) { + Logger.log(result); + throw new Error( + 'Request to Drive failed. Is Drive API enabled? ' + res.getContentText(), + ); + } + return result.name; +} + +/** + * Creates a Drive folder for the GAS project. + * @private + * @param oauth OAuth2 Service + * @returns ID for the created Drive folder + */ +function createDriveFolder_(oauth: GoogleAppsScriptOAuth2.OAuth2Service) { + const metadata = { + name: `Generated images for: ${getScriptName_(oauth)}`, + mimeType: 'application/vnd.google-apps.folder', + parents: ['root'], + }; + const payload = JSON.stringify(metadata); + const res = UrlFetchApp.fetch('https://www.googleapis.com/drive/v3/files', { + method: 'post', + headers: { + Authorization: 'Bearer ' + oauth.getAccessToken(), + 'Content-Type': 'application/json', + }, + payload: payload, + muteHttpExceptions: true, + }); + const result: {id?: string} = JSON.parse(res.getContentText()); + if (!result.id) { + Logger.log(payload, result); + throw new Error( + 'Creating a Driver folder failed. Is Drive API enabled? ' + + res.getContentText(), + ); + } + return result.id; +} + +/** + * Requests Vertex AI's Imagen to generate an image. + * @private + * @param oauth OAuth2 Service + * @param prompt A prompt for image generation + * @param seed A seed number + * @param {string} model The Imagen model version to use + * @returns Generated result + */ +function requestImagen_( + oauth: GoogleAppsScriptOAuth2.OAuth2Service, + prompt: string, + seed: number, + model: string, +) { + const url = `https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${getProjectNumber_()}/locations/${LOCATION}/publishers/google/models/${model}:predict`; + + const payload = JSON.stringify({ + instances: [ + { + prompt: prompt, + }, + ], + parameters: { + seed, + sampleCount: 1, + addWatermark: false, + safetySetting: 'block_few', + language: 'auto', + }, + }); + const res = UrlFetchApp.fetch(url, { + method: 'post', + headers: { + Authorization: 'Bearer ' + oauth.getAccessToken(), + }, + contentType: 'application/json', + payload: payload, + muteHttpExceptions: true, + }); + const result: { + predictions?: { + bytesBase64Encoded: string; + mimeType: string; + }[]; + } = JSON.parse(res.getContentText()); + if (!result.predictions) { + Logger.log(payload, result); + throw new Error('Request to Vertex AI failed. ' + res.getContentText()); + } + return result.predictions[0]; +} + +/** + * Generates an image out of a prompt using Vertex AI's Imagen. + * @param {string} prompt A prompt for image generation + * @param {number} seed A seed number + * @param {string} model The Imagen model version to use (default: imagen-3.0-fast-generate-001). + * See https://cloud.google.com/vertex-ai/generative-ai/docs/image/generate-images for available models. + * @return {string} Generated image's URL + * @customFunction + */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function IMAGEN(prompt: string, seed = 1, model = DEFAULT_IMAGEN_MODEL) { + const cacheKey = generateHashValue(`imagen:${prompt}:${seed}:${model}`); + const cache = CacheService.getDocumentCache(); + const cached = cache?.get(cacheKey); + if (cached) { + return cached; + } + const oauthService = getGoogleService_(); + let parentFolderID = PropertiesService.getDocumentProperties().getProperty( + PROP_KEY.DRIVE_FOLDER_ID, + ); + if (!parentFolderID) { + parentFolderID = createDriveFolder_(oauthService); + PropertiesService.getDocumentProperties().setProperty( + PROP_KEY.DRIVE_FOLDER_ID, + parentFolderID, + ); + } + const filename = sanitizeFileName(`${cacheKey}:${prompt.slice(0, 64)}.png`); + const driveUrl = checkDriveImage_(oauthService, filename, parentFolderID); + if (driveUrl) { + return driveUrl; + } + const pred = requestImagen_(oauthService, prompt, seed, model); + const thumbnailLink = uploadImageToDrive_( + oauthService, + pred.bytesBase64Encoded, + filename, + pred.mimeType, + parentFolderID, + ); + + // Trim resize parameters that comes after the equal mark. + const url = + thumbnailLink.indexOf('=') > -1 + ? thumbnailLink.split('=').slice(0, -1).join('') + : thumbnailLink; + cache?.put(cacheKey, url); + return url; +} + +/** + * A utility function to generate OAuth2 service. + * Copied from https://github.com/googleworkspace/apps-script-oauth2#1-create-the-oauth2-service + * @private + * @returns OAuth2 service + */ +function getGoogleService_() { + const clientID = PropertiesService.getDocumentProperties().getProperty( + PROP_KEY.OAUTH_CLIENT_ID, + ); + const clientSecret = PropertiesService.getDocumentProperties().getProperty( + PROP_KEY.OAUTH_CLIENT_SECRET, + ); + if (!clientID || !clientSecret) { + throw new Error( + 'OAuth info is missing. Complete authorization from the "Extensions" menu', + ); + } + + // Create a new service with the given name. The name will be used when + // persisting the authorized token, so ensure it is unique within the + // scope of the property store. + return ( + OAuth2.createService('google') + + // Set the endpoint URLs, which are the same for all Google services. + .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') + .setTokenUrl('https://accounts.google.com/o/oauth2/token') + + // Set the client ID and secret, from the Google Developers Console. + .setClientId(clientID) + .setClientSecret(clientSecret) + + // Set the name of the callback function in the script referenced + // above that should be invoked to complete the OAuth flow. + .setCallbackFunction('authCallback') + + // Set the property store where authorized tokens should be persisted. + .setPropertyStore(PropertiesService.getDocumentProperties()) + .setCache(CacheService.getDocumentCache()!) + .setLock(LockService.getDocumentLock()) + + // Set the scopes to request (space-separated for Google services). + .setScope([ + 'https://www.googleapis.com/auth/drive', + 'https://www.googleapis.com/auth/cloud-platform', + ]) + + // Below are Google-specific OAuth2 parameters. + + // Sets the login hint, which will prevent the account chooser screen + // from being shown to users logged in with multiple accounts. + //.setParam('login_hint', Session.getEffectiveUser().getEmail()) + + // Requests offline access. + .setParam('access_type', 'offline') + + // Consent prompt is required to ensure a refresh token is always + // returned when requesting offline access. + .setParam('prompt', 'consent') + ); +} diff --git a/vision/use-cases/hey_llm/src/sidebar.html b/vision/use-cases/hey_llm/src/sidebar.html new file mode 100644 index 0000000000..dbc3275bb6 --- /dev/null +++ b/vision/use-cases/hey_llm/src/sidebar.html @@ -0,0 +1,170 @@ + + + + + + + + + +
+

HEY_LLM setup

+
    +
  1. + Visit + "API & Services" > "Credentials" + in Google Cloud Console. +
  2. +
  3. + Select the OAuth Client ID to use. The Application type should be "Web + Application". +
  4. +
  5. + Add (loading...) to Authorized + redirect URIs. +
  6. +
  7. + Copy and paste Client ID and Client secret to the input form below and + click "Authorize". +
  8. +
+
+ +
+
+ +
+
+ Authorize +
+
+ + + + diff --git a/vision/use-cases/hey_llm/tsconfig.json b/vision/use-cases/hey_llm/tsconfig.json new file mode 100644 index 0000000000..28c05d0085 --- /dev/null +++ b/vision/use-cases/hey_llm/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "composite": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2018"], + "module": "commonjs", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "pretty": true, + "sourceMap": true, + "stripInternal": true, + "strict": true, + "target": "es2018", + "rootDir": ".", + "outDir": "build" + }, + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"] +}