From b6e4b29a7ebcb05df8c2c9ab1589b15958a51f79 Mon Sep 17 00:00:00 2001 From: Reversean Date: Wed, 14 Jan 2026 23:31:26 +0300 Subject: [PATCH 1/5] chore(yarn): yarn version upgraded to 4.12.0 --- .gitignore | 3 +- .yarnrc.yml | 1 + package.json | 4 +- packages/javascript/package.json | 1 + packages/sveltekit/package.json | 4 + yarn.lock | 8421 +++++++++++++++++++----------- 6 files changed, 5310 insertions(+), 3124 deletions(-) create mode 100644 .yarnrc.yml diff --git a/.gitignore b/.gitignore index c4cd491..1ac1be5 100644 --- a/.gitignore +++ b/.gitignore @@ -51,8 +51,9 @@ typings/ # Output of 'npm pack' *.tgz -# Yarn Integrity file +# Yarn files .yarn-integrity +.yarn # dotenv environment variables file .env diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/package.json b/package.json index 1b7460f..cc5554f 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "name": "hawk.javascript", "type": "module", "version": "0.0.0", + "packageManager": "yarn@4.12.0", "workspaces": [ "packages/*" ], @@ -23,7 +24,6 @@ "eslint-config-codex": "^1.6.1", "rollup-plugin-license": "^3.5.3", "size-limit": "^11.1.6", - "typescript": "^5.6.3", - "vite": "^5.4.9" + "typescript": "^5.9.3" } } diff --git a/packages/javascript/package.json b/packages/javascript/package.json index 7f9c034..6db939c 100644 --- a/packages/javascript/package.json +++ b/packages/javascript/package.json @@ -40,6 +40,7 @@ }, "devDependencies": { "@hawk.so/types": "0.5.2", + "vite": "^7.3.1", "vite-plugin-dts": "^4.2.4", "vue": "^2" } diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json index 4c7586f..7c8e222 100644 --- a/packages/sveltekit/package.json +++ b/packages/sveltekit/package.json @@ -24,5 +24,9 @@ "homepage": "https://github.com/codex-team/hawk.javascript#readme", "dependencies": { "@hawk.so/javascript": "^3.0.0" + }, + "devDependencies": { + "vite": "^7.3.1", + "vite-plugin-dts": "^4.2.4" } } diff --git a/yarn.lock b/yarn.lock index 14a55e1..c94e73e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,3121 +1,5300 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-string-parser@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" - integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== - -"@babel/helper-validator-identifier@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" - integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== - -"@babel/highlight@^7.10.4": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" - integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== - dependencies: - "@babel/helper-validator-identifier" "^7.25.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.23.5", "@babel/parser@^7.25.3": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" - integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== - dependencies: - "@babel/types" "^7.25.8" - -"@babel/types@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" - integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== - dependencies: - "@babel/helper-string-parser" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - to-fast-properties "^2.0.0" - -"@es-joy/jsdoccomment@~0.41.0": - version "0.41.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz#4a2f7db42209c0425c71a1476ef1bdb6dcd836f6" - integrity sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw== - dependencies: - comment-parser "1.4.1" - esquery "^1.5.0" - jsdoc-type-pratt-parser "~4.0.0" - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/aix-ppc64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" - integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0" - integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-arm@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810" - integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/android-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705" - integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd" - integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/darwin-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107" - integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7" - integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/freebsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93" - integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75" - integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-arm@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d" - integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-ia32@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb" - integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-loong64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c" - integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-mips64el@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3" - integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-ppc64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e" - integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-riscv64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25" - integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-s390x@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319" - integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/linux-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef" - integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/netbsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c" - integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== - -"@esbuild/openbsd-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2" - integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/openbsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf" - integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/sunos-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4" - integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b" - integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-ia32@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103" - integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@esbuild/win32-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244" - integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== - -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.5.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" - integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@hawk.so/javascript@^3.0.0": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@hawk.so/javascript/-/javascript-3.2.12.tgz#9c654593d8166088dee992deb427621db2dfead1" - integrity sha512-1yeuIG47a3EG5QtwlOwF4TyOZZlU568qy6iOR9zlovAUkQTQBFa69UD2iuhnfmZFO96pXtOgu38uUMyGMw+QDw== - dependencies: - "@hawk.so/types" "^0.1.36" - error-stack-parser "^2.1.4" - vite-plugin-dts "^4.2.4" - -"@hawk.so/types@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@hawk.so/types/-/types-0.5.2.tgz#504eabed7d510431411a3e39d8af008e76bb4f41" - integrity sha512-+7gkelP6P5VMxOLHjcWUlX8hx8OR0k0ag9EyrqvJxMF+hNW49udARNM+PU5R0MFgyyq2L4ltCy0c2BsUi9yPww== - dependencies: - bson "^7.0.0" - -"@hawk.so/types@^0.1.36": - version "0.1.38" - resolved "https://registry.yarnpkg.com/@hawk.so/types/-/types-0.1.38.tgz#b287f6d22025f53b6de7858c7c2eba1d8c52a00a" - integrity sha512-IaAiM+T8sc+twZiZcAd90AwE7rEZfmfN1gvo8d+Ax53dhQCMBU+c/+6L+Z7XdCGe696mPGWqJGY26S8mRUg3BA== - dependencies: - "@types/mongodb" "^3.5.34" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@microsoft/api-extractor-model@7.29.6": - version "7.29.6" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.29.6.tgz#e5941514502049b06ca9af21e2096f8f1ad5a01b" - integrity sha512-gC0KGtrZvxzf/Rt9oMYD2dHvtN/1KPEYsrQPyMKhLHnlVuO/f4AFN3E4toqZzD2pt4LhkKoYmL2H9tX3yCOyRw== - dependencies: - "@microsoft/tsdoc" "~0.15.0" - "@microsoft/tsdoc-config" "~0.17.0" - "@rushstack/node-core-library" "5.7.0" - -"@microsoft/api-extractor@7.47.7": - version "7.47.7" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.47.7.tgz#3bc4450fe46c265bef857ab938aa15b9fc7a85de" - integrity sha512-fNiD3G55ZJGhPOBPMKD/enozj8yxJSYyVJWxRWdcUtw842rvthDHJgUWq9gXQTensFlMHv2wGuCjjivPv53j0A== - dependencies: - "@microsoft/api-extractor-model" "7.29.6" - "@microsoft/tsdoc" "~0.15.0" - "@microsoft/tsdoc-config" "~0.17.0" - "@rushstack/node-core-library" "5.7.0" - "@rushstack/rig-package" "0.5.3" - "@rushstack/terminal" "0.14.0" - "@rushstack/ts-command-line" "4.22.6" - lodash "~4.17.15" - minimatch "~3.0.3" - resolve "~1.22.1" - semver "~7.5.4" - source-map "~0.6.1" - typescript "5.4.2" - -"@microsoft/tsdoc-config@~0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz#82605152b3c1d3f5cd4a11697bc298437484d55d" - integrity sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg== - dependencies: - "@microsoft/tsdoc" "0.15.0" - ajv "~8.12.0" - jju "~1.4.0" - resolve "~1.22.2" - -"@microsoft/tsdoc@0.15.0", "@microsoft/tsdoc@~0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz#f29a55df17cb6e87cfbabce33ff6a14a9f85076d" - integrity sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== - -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - -"@rollup/pluginutils@^5.1.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.2.tgz#d3bc9f0fea4fd4086aaac6aa102f3fa587ce8bd9" - integrity sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rollup/rollup-android-arm-eabi@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54" - integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== - -"@rollup/rollup-android-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e" - integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== - -"@rollup/rollup-darwin-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f" - integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== - -"@rollup/rollup-darwin-x64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz#0605506142b9e796c370d59c5984ae95b9758724" - integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb" - integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== - -"@rollup/rollup-linux-arm-musleabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3" - integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== - -"@rollup/rollup-linux-arm64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496" - integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== - -"@rollup/rollup-linux-arm64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065" - integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d" - integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== - -"@rollup/rollup-linux-riscv64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983" - integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== - -"@rollup/rollup-linux-s390x-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58" - integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== - -"@rollup/rollup-linux-x64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b" - integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== - -"@rollup/rollup-linux-x64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127" - integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== - -"@rollup/rollup-win32-arm64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5" - integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== - -"@rollup/rollup-win32-ia32-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2" - integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== - -"@rollup/rollup-win32-x64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" - integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== - -"@rushstack/node-core-library@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.7.0.tgz#f28699c7d0b3de0120a207f8b9d5bd7c69806e18" - integrity sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ== - dependencies: - ajv "~8.13.0" - ajv-draft-04 "~1.0.0" - ajv-formats "~3.0.1" - fs-extra "~7.0.1" - import-lazy "~4.0.0" - jju "~1.4.0" - resolve "~1.22.1" - semver "~7.5.4" - -"@rushstack/rig-package@0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.5.3.tgz#ea4d8a3458540b1295500149c04e645f23134e5d" - integrity sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow== - dependencies: - resolve "~1.22.1" - strip-json-comments "~3.1.1" - -"@rushstack/terminal@0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.14.0.tgz#967ecc586d7172204353059f8fdb1760666e9381" - integrity sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw== - dependencies: - "@rushstack/node-core-library" "5.7.0" - supports-color "~8.1.1" - -"@rushstack/ts-command-line@4.22.6": - version "4.22.6" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.22.6.tgz#2aee4fc98c6043c026ce278880fbffb5227de5ca" - integrity sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg== - dependencies: - "@rushstack/terminal" "0.14.0" - "@types/argparse" "1.0.38" - argparse "~1.0.9" - string-argv "~0.3.1" - -"@size-limit/esbuild@11.1.6": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-11.1.6.tgz#1a9b39bdbc060ca55fea87f8f4a9d6205e40b4e6" - integrity sha512-0nBKYSxeRjUVCVoCkWZbmGkGBwpm0HdwHedWgxksBGxTKU0PjOMSHc3XTjKOrXBKXQzw90Ue0mgOd4n6zct9SA== - dependencies: - esbuild "^0.24.0" - nanoid "^5.0.7" - -"@size-limit/file@11.1.6": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@size-limit/file/-/file-11.1.6.tgz#de1244aef06081a93bd594ddc28ef14080ca5b01" - integrity sha512-ojzzJMrTfcSECRnaTjGy0wNIolTCRdyqZTSWG9sG5XEoXG6PNgHXDDS6gf6YNxnqb+rWfCfVe93u6aKi3wEocQ== - -"@size-limit/preset-small-lib@^11.1.6": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@size-limit/preset-small-lib/-/preset-small-lib-11.1.6.tgz#d5d2740b2cf7b4594eab9843c22d59aac7864c0b" - integrity sha512-hlmkBlOryJIsKlGpS61Ti7/EEZomygAzOabpo2htdxUbkCkvtVoUQpGWHUfWuxdhheDVF6rtZZ6lPGftMKlaQg== - dependencies: - "@size-limit/esbuild" "11.1.6" - "@size-limit/file" "11.1.6" - size-limit "11.1.6" - -"@types/argparse@1.0.38": - version "1.0.38" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== - -"@types/bson@*": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.2.4.tgz#3bb08ab0de5dd07103fba355361814019ba2ae88" - integrity sha512-SG23E3JDH6y8qF20a4G9txLuUl+TCV16gxsKyntmGiJez2V9VBJr1Y8WxTBBD6OgBVcvspQ7sxgdNMkXFVcaEA== - dependencies: - bson "*" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - -"@types/estree@1.0.6", "@types/estree@^1.0.0": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/json-schema@^7.0.12": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/mongodb@^3.5.34": - version "3.6.20" - resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.20.tgz#b7c5c580644f6364002b649af1c06c3c0454e1d2" - integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ== - dependencies: - "@types/bson" "*" - "@types/node" "*" - -"@types/node@*": - version "25.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.10.tgz#4864459c3c9459376b8b75fd051315071c8213e7" - integrity sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg== - dependencies: - undici-types "~7.16.0" - -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@typescript-eslint/eslint-plugin@^6.2.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.2.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== - dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - -"@volar/language-core@2.4.6", "@volar/language-core@~2.4.1": - version "2.4.6" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.6.tgz#159625a6e1263fe68d1afad524ae2bd40c4ee0dd" - integrity sha512-FxUfxaB8sCqvY46YjyAAV6c3mMIq/NWQMVvJ+uS4yxr1KzOvyg61gAuOnNvgCvO4TZ7HcLExBEsWcDu4+K4E8A== - dependencies: - "@volar/source-map" "2.4.6" - -"@volar/source-map@2.4.6": - version "2.4.6" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.6.tgz#b71ad241216f646812639f359262e6a84b46b6ed" - integrity sha512-Nsh7UW2ruK+uURIPzjJgF0YRGP5CX9nQHypA2OMqdM2FKy7rh+uv3XgPnWPw30JADbKvZ5HuBzG4gSbVDYVtiw== - -"@volar/typescript@^2.4.4": - version "2.4.6" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.6.tgz#6a4611b9fae793ad0d4c66d11d765f2731d93a12" - integrity sha512-NMIrA7y5OOqddL9VtngPWYmdQU03htNKFtAYidbYfWA0TOhyGVd9tfcP4TsLWQ+RBWDZCbBqsr8xzU0ZOxYTCQ== - dependencies: - "@volar/language-core" "2.4.6" - path-browserify "^1.0.1" - vscode-uri "^3.0.8" - -"@vue/compiler-core@3.5.12": - version "3.5.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.12.tgz#bd70b7dabd12b0b6f31bc53418ba3da77994c437" - integrity sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.12" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@^3.4.0": - version "3.5.12" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz#456d631d11102535b7ee6fd954cf2c93158d0354" - integrity sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg== - dependencies: - "@vue/compiler-core" "3.5.12" - "@vue/shared" "3.5.12" - -"@vue/compiler-sfc@2.7.16": - version "2.7.16" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz#ff81711a0fac9c68683d8bb00b63f857de77dc83" - integrity sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg== - dependencies: - "@babel/parser" "^7.23.5" - postcss "^8.4.14" - source-map "^0.6.1" - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - -"@vue/compiler-vue2@^2.7.16": - version "2.7.16" - resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" - integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -"@vue/language-core@2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.1.6.tgz#b48186bdb9b3ef2b83e1f76d5b1ac357b3a7ed94" - integrity sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg== - dependencies: - "@volar/language-core" "~2.4.1" - "@vue/compiler-dom" "^3.4.0" - "@vue/compiler-vue2" "^2.7.16" - "@vue/shared" "^3.4.0" - computeds "^0.0.1" - minimatch "^9.0.3" - muggle-string "^0.4.1" - path-browserify "^1.0.1" - -"@vue/shared@3.5.12", "@vue/shared@^3.4.0": - version "3.5.12" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.12.tgz#f9e45b7f63f2c3f40d84237b1194b7f67de192e3" - integrity sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg== - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.12.1: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== - -ajv-draft-04@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" - integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== - -ajv-formats@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" - integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== - dependencies: - ajv "^8.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.0.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ajv@~8.12.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@~8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" - integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== - dependencies: - fast-deep-equal "^3.1.3" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.4.1" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -are-docs-informative@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" - integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== - -argparse@^1.0.7, argparse@~1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-find-index@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - -array-includes@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - 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" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - -array.prototype.findlastindex@^1.2.2: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - 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" - -array.prototype.flat@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - 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" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -bson@*, bson@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/bson/-/bson-7.1.1.tgz#19965d9138e1c4d88e4690414d91c84f217c84e8" - integrity sha512-TtJgBB+QyOlWjrbM+8bRgH84VM/xrDjyBFgSgGrfZF4xvt6gbEDtcswm27Tn9F9TWsjQybxT8b8VpCP/oJK4Dw== - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" - integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== - dependencies: - semver "^7.0.0" - -bytes-iec@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" - integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - 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" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" - integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== - dependencies: - readdirp "^4.0.1" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - -comment-parser@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" - integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== - -commenting@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/commenting/-/commenting-1.1.0.tgz#fae14345c6437b8554f30bc6aa6c1e1633033590" - integrity sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA== - -compare-versions@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" - integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== - -computeds@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" - integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -confbox@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" - integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== - -cross-spawn@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -csstype@^3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.4, debug@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - 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" - -define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -error-stack-parser@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - 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" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -esbuild@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7" - integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== - optionalDependencies: - "@esbuild/aix-ppc64" "0.24.0" - "@esbuild/android-arm" "0.24.0" - "@esbuild/android-arm64" "0.24.0" - "@esbuild/android-x64" "0.24.0" - "@esbuild/darwin-arm64" "0.24.0" - "@esbuild/darwin-x64" "0.24.0" - "@esbuild/freebsd-arm64" "0.24.0" - "@esbuild/freebsd-x64" "0.24.0" - "@esbuild/linux-arm" "0.24.0" - "@esbuild/linux-arm64" "0.24.0" - "@esbuild/linux-ia32" "0.24.0" - "@esbuild/linux-loong64" "0.24.0" - "@esbuild/linux-mips64el" "0.24.0" - "@esbuild/linux-ppc64" "0.24.0" - "@esbuild/linux-riscv64" "0.24.0" - "@esbuild/linux-s390x" "0.24.0" - "@esbuild/linux-x64" "0.24.0" - "@esbuild/netbsd-x64" "0.24.0" - "@esbuild/openbsd-arm64" "0.24.0" - "@esbuild/openbsd-x64" "0.24.0" - "@esbuild/sunos-x64" "0.24.0" - "@esbuild/win32-arm64" "0.24.0" - "@esbuild/win32-ia32" "0.24.0" - "@esbuild/win32-x64" "0.24.0" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - -eslint-compat-utils@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4" - integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== - dependencies: - semver "^7.5.4" - -eslint-config-codex@^1.6.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/eslint-config-codex/-/eslint-config-codex-1.9.2.tgz#3ac44fc7c4377d886381f746e902c67245092e36" - integrity sha512-ORnbI7AKof5HpZCdjUFJhhGphZnSEAdG+b6sFlVp7QF41lrVepvU7FIfpevIvGIiz6BEkJkb4YzxpU7Ner+Fow== - dependencies: - "@typescript-eslint/eslint-plugin" "^6.2.0" - "@typescript-eslint/parser" "^6.2.0" - eslint-config-standard "17.1.0" - eslint-plugin-import "2.28.0" - eslint-plugin-jsdoc "^46.4.5" - eslint-plugin-n "^16.0.1" - eslint-plugin-promise "6.1.1" - eslint-plugin-standard "5.0.0" - -eslint-config-standard@17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" - integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== - -eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== - dependencies: - debug "^3.2.7" - -eslint-plugin-es-x@^7.5.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74" - integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.11.0" - eslint-compat-utils "^0.5.1" - -eslint-plugin-import@2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" - integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.12.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - resolve "^1.22.3" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-jsdoc@^46.4.5: - version "46.10.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz#77c871309c4ed93758a3b2fdf384dc6189cf8605" - integrity sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag== - dependencies: - "@es-joy/jsdoccomment" "~0.41.0" - are-docs-informative "^0.0.2" - comment-parser "1.4.1" - debug "^4.3.4" - escape-string-regexp "^4.0.0" - esquery "^1.5.0" - is-builtin-module "^3.2.1" - semver "^7.5.4" - spdx-expression-parse "^4.0.0" - -eslint-plugin-n@^16.0.1: - version "16.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" - integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.5.0" - get-tsconfig "^4.7.0" - globals "^13.24.0" - ignore "^5.2.4" - is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - -eslint-plugin-promise@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== - -eslint-plugin-standard@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4" - integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^7.24.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0, esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== - -fastq@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" - dependencies: - reusify "^1.0.4" - -fdir@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.3.0.tgz#fcca5a23ea20e767b15e081ee13b3e6488ee0bb0" - integrity sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ== - -fdir@^6.4.0: - version "6.4.2" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" - integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -fs-extra@~7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - 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" - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -get-tsconfig@^4.7.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" - integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== - dependencies: - resolve-pkg-maps "^1.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -globals@^13.24.0, globals@^13.6.0, globals@^13.9.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - 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" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-callable@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - -is-core-module@^2.12.1, is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - -is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - dependencies: - has-symbols "^1.0.1" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -jiti@^2.0.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.3.3.tgz#39c66fc77476b92a694e65dfe04b294070e2e096" - integrity sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ== - -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsdoc-type-pratt-parser@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" - integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kolorist@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" - integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== - -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@~4.17.15, lodash@~4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.30.11, magic-string@~0.30.0: - version "0.30.12" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.12.tgz#9eb11c9d072b9bcb4940a5b2c2e1a217e4ee1a60" - integrity sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -merge2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - -merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.3: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimatch@~3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mlly@^1.4.2, mlly@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.2.tgz#21c0d04543207495b8d867eff0ac29fac9a023c0" - integrity sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA== - dependencies: - acorn "^8.12.1" - pathe "^1.1.2" - pkg-types "^1.2.0" - ufo "^1.5.4" - -moment@~2.30.1: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -muggle-string@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" - integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -nanoid@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.7.tgz#6452e8c5a816861fd9d2b898399f7e5fd6944cc6" - integrity sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ== - -nanospinner@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-1.1.0.tgz#d17ff621cb1784b0a206b400da88a0ef6db39b97" - integrity sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA== - dependencies: - picocolors "^1.0.0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - 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" - -package-name-regex@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/package-name-regex/-/package-name-regex-2.0.6.tgz#b54bcb04d950e38082b7bb38fa558e01c1679334" - integrity sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - dependencies: - callsites "^3.0.0" - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - -pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -picocolors@^1.0.0, picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -pkg-types@^1.0.3, pkg-types@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.1.tgz#6ac4e455a5bb4b9a6185c1c79abd544c901db2e5" - integrity sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw== - dependencies: - confbox "^0.1.8" - mlly "^1.7.2" - pathe "^1.1.2" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss@^8.4.14, postcss@^8.4.43: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - -"prettier@^1.18.2 || ^2.0.0": - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -readdirp@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" - integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== - -regexp.prototype.flags@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" - integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.2" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.22.2, resolve@^1.22.3, resolve@^1.22.4, resolve@~1.22.1, resolve@~1.22.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-license@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-license/-/rollup-plugin-license-3.5.3.tgz#b02ffa4fd4c81464db450d06478e03e5605d9d5f" - integrity sha512-r3wImZSo2d6sEk9BRJtlzeI/upjyjnpthy06Fdl0EzqRrlg3ULb9KQR7xHJI0zuayW/8bchEXSF5dO6dha4OyA== - dependencies: - commenting "~1.1.0" - fdir "6.3.0" - lodash "~4.17.21" - magic-string "~0.30.0" - moment "~2.30.1" - package-name-regex "~2.0.6" - spdx-expression-validate "~2.0.0" - spdx-satisfies "~5.0.1" - -rollup@^4.20.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.0.tgz#c14a3576f20622ea6a5c9cad7caca5e6e9555d05" - integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.24.0" - "@rollup/rollup-android-arm64" "4.24.0" - "@rollup/rollup-darwin-arm64" "4.24.0" - "@rollup/rollup-darwin-x64" "4.24.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" - "@rollup/rollup-linux-arm-musleabihf" "4.24.0" - "@rollup/rollup-linux-arm64-gnu" "4.24.0" - "@rollup/rollup-linux-arm64-musl" "4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" - "@rollup/rollup-linux-riscv64-gnu" "4.24.0" - "@rollup/rollup-linux-s390x-gnu" "4.24.0" - "@rollup/rollup-linux-x64-gnu" "4.24.0" - "@rollup/rollup-linux-x64-musl" "4.24.0" - "@rollup/rollup-win32-arm64-msvc" "4.24.0" - "@rollup/rollup-win32-ia32-msvc" "4.24.0" - "@rollup/rollup-win32-x64-msvc" "4.24.0" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.2.1, semver@^7.5.3, semver@^7.5.4: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@~7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - 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" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - 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" - -size-limit@11.1.6, size-limit@^11.1.6: - version "11.1.6" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-11.1.6.tgz#75cd54f9326d1b065ebcb6ca9ec27294e7ccdfb1" - integrity sha512-S5ux2IB8rU26xwVgMskmknGMFkieaIAqDLuwgKiypk6oa4lFsie8yFPrzRFV+yrLDY2GddjXuCaVk5PveVOHiQ== - dependencies: - bytes-iec "^3.1.1" - chokidar "^4.0.1" - jiti "^2.0.0" - lilconfig "^3.1.2" - nanospinner "^1.1.0" - picocolors "^1.1.0" - tinyglobby "^0.2.7" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-js@^1.2.0, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spdx-compare/-/spdx-compare-1.0.0.tgz#2c55f117362078d7409e6d7b08ce70a857cd3ed7" - integrity sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A== - dependencies: - array-find-index "^1.0.2" - spdx-expression-parse "^3.0.0" - spdx-ranges "^2.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-validate@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz#25c9408e1c63fad94fff5517bb7101ffcd23350b" - integrity sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg== - dependencies: - spdx-expression-parse "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - -spdx-ranges@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/spdx-ranges/-/spdx-ranges-2.1.1.tgz#87573927ba51e92b3f4550ab60bfc83dd07bac20" - integrity sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA== - -spdx-satisfies@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz#9feeb2524686c08e5f7933c16248d4fdf07ed6a6" - integrity sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw== - dependencies: - spdx-compare "^1.0.0" - spdx-expression-parse "^3.0.0" - spdx-ranges "^2.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -string-argv@~0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - dependencies: - has-flag "^4.0.0" - -supports-color@~8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -table@^6.0.9: - version "6.8.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -tinyglobby@^0.2.7: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.9.tgz#6baddd1b0fe416403efb0dd40442c7d7c03c1c66" - integrity sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw== - dependencies: - fdir "^6.4.0" - picomatch "^4.0.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - dependencies: - is-number "^7.0.0" - -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -tsconfig-paths@^3.14.2: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - 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" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - 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" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - 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" - -typescript@5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== - -typescript@^5.6.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -ufo@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" - integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" - integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -uri-js@^4.2.2, uri-js@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - -vite-plugin-dts@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/vite-plugin-dts/-/vite-plugin-dts-4.2.4.tgz#5b8697e6abe9004e6d134a59a9bc08f2eacb9288" - integrity sha512-REcYoxO90Pi8c0P1J7XAa/nVwNVGkX2eYkBEIfFSfcKE4g1W8sB0R23a7SU3aLEMfdOdb0SVHq3JlJ+Qb6gjgA== - dependencies: - "@microsoft/api-extractor" "7.47.7" - "@rollup/pluginutils" "^5.1.0" - "@volar/typescript" "^2.4.4" - "@vue/language-core" "2.1.6" - compare-versions "^6.1.1" - debug "^4.3.6" - kolorist "^1.8.0" - local-pkg "^0.5.0" - magic-string "^0.30.11" - -vite@^5.4.9: - version "5.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.9.tgz#215c80cbebfd09ccbb9ceb8c0621391c9abdc19c" - integrity sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vscode-uri@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" - integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== - -vue@^2: - version "2.7.16" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.16.tgz#98c60de9def99c0e3da8dae59b304ead43b967c9" - integrity sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw== - dependencies: - "@vue/compiler-sfc" "2.7.16" - csstype "^3.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - 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" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@babel/code-frame@npm:7.12.11": + version: 7.12.11 + resolution: "@babel/code-frame@npm:7.12.11" + dependencies: + "@babel/highlight": "npm:^7.10.4" + checksum: 10c0/836ffd155506768e991d6dd8c51db37cad5958ed1c8e0a2329ccd9527165d5c752e943d66a5c3c92ffd45f343419f0742e7636629a529f4fbd5303e3637746b9 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9, @babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.10.4": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/ae0ed93c151b85a07df42936117fa593ce91563a22dfc8944a90ae7088c9679645c33e00dcd20b081c1979665d65f986241172dae1fc9e5922692fc3ff685a49 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.5, @babel/parser@npm:^7.28.5": + version: 7.29.0 + resolution: "@babel/parser@npm:7.29.0" + dependencies: + "@babel/types": "npm:^7.29.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 + languageName: node + linkType: hard + +"@babel/types@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/types@npm:7.29.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10c0/23cc3466e83bcbfab8b9bd0edaafdb5d4efdb88b82b3be6728bbade5ba2f0996f84f63b1c5f7a8c0d67efded28300898a5f930b171bb40b311bca2029c4e9b4f + languageName: node + linkType: hard + +"@es-joy/jsdoccomment@npm:~0.41.0": + version: 0.41.0 + resolution: "@es-joy/jsdoccomment@npm:0.41.0" + dependencies: + comment-parser: "npm:1.4.1" + esquery: "npm:^1.5.0" + jsdoc-type-pratt-parser: "npm:~4.0.0" + checksum: 10c0/1fa27531eba32e4699664da53a0865aeeda1f7e83ac156fe53b7a6b09d2f3816baa94a34845ff019c10289b09572bda5519ec917e3e241088975477fa880f72d + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/aix-ppc64@npm:0.25.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/aix-ppc64@npm:0.27.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm64@npm:0.25.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm64@npm:0.27.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm@npm:0.25.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm@npm:0.27.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-x64@npm:0.25.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-x64@npm:0.27.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-arm64@npm:0.25.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-arm64@npm:0.27.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-x64@npm:0.25.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-x64@npm:0.27.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-arm64@npm:0.25.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-arm64@npm:0.27.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-x64@npm:0.25.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-x64@npm:0.27.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm64@npm:0.25.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm64@npm:0.27.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm@npm:0.25.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm@npm:0.27.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ia32@npm:0.25.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ia32@npm:0.27.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-loong64@npm:0.25.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-loong64@npm:0.27.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-mips64el@npm:0.25.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-mips64el@npm:0.27.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ppc64@npm:0.25.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ppc64@npm:0.27.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-riscv64@npm:0.25.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-riscv64@npm:0.27.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-s390x@npm:0.25.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-s390x@npm:0.27.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-x64@npm:0.25.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-x64@npm:0.27.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-arm64@npm:0.25.12" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-arm64@npm:0.27.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-x64@npm:0.25.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-x64@npm:0.27.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-arm64@npm:0.25.12" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-arm64@npm:0.27.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-x64@npm:0.25.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-x64@npm:0.27.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openharmony-arm64@npm:0.25.12" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openharmony-arm64@npm:0.27.2" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/sunos-x64@npm:0.25.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/sunos-x64@npm:0.27.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-arm64@npm:0.25.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-arm64@npm:0.27.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-ia32@npm:0.25.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-ia32@npm:0.27.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-x64@npm:0.25.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-x64@npm:0.27.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/dc4ab5e3e364ef27e33666b11f4b86e1a6c1d7cbf16f0c6ff87b1619b3562335e9201a3d6ce806221887ff780ec9d828962a290bb910759fd40a674686503f02 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.5.1": + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^0.4.3": + version: 0.4.3 + resolution: "@eslint/eslintrc@npm:0.4.3" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.1.1" + espree: "npm:^7.3.0" + globals: "npm:^13.9.0" + ignore: "npm:^4.0.6" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^3.13.1" + minimatch: "npm:^3.0.4" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/0eed93369f72ef044686d07824742121f9b95153ff34f4614e4e69d64332ee68c84eb70da851a9005bb76b3d1d64ad76c2e6293a808edc0f7dfb883689ca136d + languageName: node + linkType: hard + +"@hawk.so/javascript@npm:^3.0.0, @hawk.so/javascript@workspace:packages/javascript": + version: 0.0.0-use.local + resolution: "@hawk.so/javascript@workspace:packages/javascript" + dependencies: + "@hawk.so/types": "npm:0.5.2" + error-stack-parser: "npm:^2.1.4" + vite: "npm:^7.3.1" + vite-plugin-dts: "npm:^4.2.4" + vue: "npm:^2" + languageName: unknown + linkType: soft + +"@hawk.so/sveltekit@workspace:packages/sveltekit": + version: 0.0.0-use.local + resolution: "@hawk.so/sveltekit@workspace:packages/sveltekit" + dependencies: + "@hawk.so/javascript": "npm:^3.0.0" + vite: "npm:^7.3.1" + vite-plugin-dts: "npm:^4.2.4" + languageName: unknown + linkType: soft + +"@hawk.so/types@npm:0.5.2": + version: 0.5.2 + resolution: "@hawk.so/types@npm:0.5.2" + dependencies: + bson: "npm:^7.0.0" + checksum: 10c0/4a76aebc3bc4c87649d4a9991f51c81fac2ad457896ba19261afa66d8979739bed6108db322122400e99b3ca81cb4fbc3be7dee9b7c334d3cbfef51c2ec57719 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.5.0": + version: 0.5.0 + resolution: "@humanwhocodes/config-array@npm:0.5.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^1.2.0" + debug: "npm:^4.1.1" + minimatch: "npm:^3.0.4" + checksum: 10c0/217fac9e03492361825a2bf761d4bb7ec6d10002a10f7314142245eb13ac9d123523d24d5619c3c4159af215c7b3e583ed386108e227014bef4efbf9caca8ccc + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: 10c0/c3c35fdb70c04a569278351c75553e293ae339684ed75895edc79facc7276e351115786946658d78133130c0cca80e57e2203bc07f8fa7fe7980300e8deef7db + languageName: node + linkType: hard + +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0": + version: 5.0.0 + resolution: "@isaacs/brace-expansion@npm:5.0.0" + dependencies: + "@isaacs/balanced-match": "npm:^4.0.1" + checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@microsoft/api-extractor-model@npm:7.32.2": + version: 7.32.2 + resolution: "@microsoft/api-extractor-model@npm:7.32.2" + dependencies: + "@microsoft/tsdoc": "npm:~0.16.0" + "@microsoft/tsdoc-config": "npm:~0.18.0" + "@rushstack/node-core-library": "npm:5.19.1" + checksum: 10c0/26c7cf56d8b74dbe20270a767ae365a9b93178cd378363c20c15823a68124d55af5c2b4aea5f30dc2b4a93194db3041b4861e39ace79e3d649f06b4b0a6bfb87 + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:^7.50.1": + version: 7.56.0 + resolution: "@microsoft/api-extractor@npm:7.56.0" + dependencies: + "@microsoft/api-extractor-model": "npm:7.32.2" + "@microsoft/tsdoc": "npm:~0.16.0" + "@microsoft/tsdoc-config": "npm:~0.18.0" + "@rushstack/node-core-library": "npm:5.19.1" + "@rushstack/rig-package": "npm:0.6.0" + "@rushstack/terminal": "npm:0.21.0" + "@rushstack/ts-command-line": "npm:5.1.7" + diff: "npm:~8.0.2" + lodash: "npm:~4.17.15" + minimatch: "npm:10.0.3" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + source-map: "npm:~0.6.1" + typescript: "npm:5.8.2" + bin: + api-extractor: bin/api-extractor + checksum: 10c0/18147cb9dd827377a8a7cbb4bc93b8d5984b5b746bb74f830d2fffe3d3a8ded3db313c423f679bba6fad7c32493aee6cdcf535dff0105f87e3fa336eb860cfc6 + languageName: node + linkType: hard + +"@microsoft/tsdoc-config@npm:~0.18.0": + version: 0.18.0 + resolution: "@microsoft/tsdoc-config@npm:0.18.0" + dependencies: + "@microsoft/tsdoc": "npm:0.16.0" + ajv: "npm:~8.12.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.2" + checksum: 10c0/6e2c3bfde3e5fa4c0360127c86fe016dcf1b09d0091d767c06ce916284d3f6aeea3617a33b855c5bb2615ab0f2840eeebd4c7f4a1f879f951828d213bf306cfd + languageName: node + linkType: hard + +"@microsoft/tsdoc@npm:0.16.0, @microsoft/tsdoc@npm:~0.16.0": + version: 0.16.0 + resolution: "@microsoft/tsdoc@npm:0.16.0" + checksum: 10c0/8883bb0ed22753af7360e9222687fda4eb448f0a574ea34b4596c11e320148b3ae0d24e00f8923df8ba7bc62a46a6f53b9343243a348640d923dfd55d52cd6bb + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/agent@npm:4.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^11.2.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/fs@npm:5.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.4": + version: 5.3.0 + resolution: "@rollup/pluginutils@npm:5.3.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/001834bf62d7cf5bac424d2617c113f7f7d3b2bf3c1778cbcccb72cdc957b68989f8e7747c782c2b911f1dde8257f56f8ac1e779e29e74e638e3f1e2cac2bcd0 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.57.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm64@npm:4.57.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.57.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.57.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.57.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.57.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.57.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.57.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.57.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.57.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rushstack/node-core-library@npm:5.19.1": + version: 5.19.1 + resolution: "@rushstack/node-core-library@npm:5.19.1" + dependencies: + ajv: "npm:~8.13.0" + ajv-draft-04: "npm:~1.0.0" + ajv-formats: "npm:~3.0.1" + fs-extra: "npm:~11.3.0" + import-lazy: "npm:~4.0.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/1c9174e1d38ce6d1cf5dfff394d800de6a5cb43666da67df7d07b93243a61b0479f5ef04e9c5f8c31759309203a0d7e174157c515c869bab26d23187202bff1c + languageName: node + linkType: hard + +"@rushstack/problem-matcher@npm:0.1.1": + version: 0.1.1 + resolution: "@rushstack/problem-matcher@npm:0.1.1" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/c847e721d3536ebb316fdd90b3e4033a7d24ff8c70e38e3eaeaadf167c4d14a7f16377ae4af8097532386bcfa81c15cfec7d2da517542c07882d273d56861d78 + languageName: node + linkType: hard + +"@rushstack/rig-package@npm:0.6.0": + version: 0.6.0 + resolution: "@rushstack/rig-package@npm:0.6.0" + dependencies: + resolve: "npm:~1.22.1" + strip-json-comments: "npm:~3.1.1" + checksum: 10c0/303c5c010a698343124036414dbeed44b24e67585307ffa6effd052624b0384cc08a12aeb153e8466b7abd6f516900ecf8629600230f0f2c33cd5c0c3dace65e + languageName: node + linkType: hard + +"@rushstack/terminal@npm:0.21.0": + version: 0.21.0 + resolution: "@rushstack/terminal@npm:0.21.0" + dependencies: + "@rushstack/node-core-library": "npm:5.19.1" + "@rushstack/problem-matcher": "npm:0.1.1" + supports-color: "npm:~8.1.1" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/47f5688674a10785b65a07760fdb4b010bd9dbad141ea2ae78c8c0c320daecd66363d1c4fad78137e87582cabd6432f2919f7f4eb7557c0f836ce24b58ca45ca + languageName: node + linkType: hard + +"@rushstack/ts-command-line@npm:5.1.7": + version: 5.1.7 + resolution: "@rushstack/ts-command-line@npm:5.1.7" + dependencies: + "@rushstack/terminal": "npm:0.21.0" + "@types/argparse": "npm:1.0.38" + argparse: "npm:~1.0.9" + string-argv: "npm:~0.3.1" + checksum: 10c0/5ec13fcde7fe66ea0af6dac78908c9887810044656269c296db0c4311b703aa73ee7b4d5ace00c51062598da936f94695ce0d5caec0d1c0c6022040d335b77ac + languageName: node + linkType: hard + +"@size-limit/esbuild@npm:11.2.0": + version: 11.2.0 + resolution: "@size-limit/esbuild@npm:11.2.0" + dependencies: + esbuild: "npm:^0.25.0" + nanoid: "npm:^5.1.0" + peerDependencies: + size-limit: 11.2.0 + checksum: 10c0/8740fd6f86d0be14bd7492781a9611f12fdbeafefa590ed485ce4f1768b521da8847c5ab314253bd0bb6decb50b5b5fe8f3cba7adc5cc9e55ebccbad6a161df3 + languageName: node + linkType: hard + +"@size-limit/file@npm:11.2.0": + version: 11.2.0 + resolution: "@size-limit/file@npm:11.2.0" + peerDependencies: + size-limit: 11.2.0 + checksum: 10c0/25fb431c2afa9293774842f3abb12ee0aaa988585a2be545f2a4f90ffd5c638a13bada10a0b71e376cefb426bd991793d0e1ffe970b94a4e0bb8b0a8b504f343 + languageName: node + linkType: hard + +"@size-limit/preset-small-lib@npm:^11.1.6": + version: 11.2.0 + resolution: "@size-limit/preset-small-lib@npm:11.2.0" + dependencies: + "@size-limit/esbuild": "npm:11.2.0" + "@size-limit/file": "npm:11.2.0" + size-limit: "npm:11.2.0" + peerDependencies: + size-limit: 11.2.0 + checksum: 10c0/3b1f55fde435794d83245687bc4e2e6996ddb178c774af62b57754e9b7d6ea1db3ef041f0706bd1ffb45da2fa52eba50594ce92ab312637e4198ee06274de673 + languageName: node + linkType: hard + +"@types/argparse@npm:1.0.38": + version: 1.0.38 + resolution: "@types/argparse@npm:1.0.38" + checksum: 10c0/4fc892da5df16923f48180da2d1f4562fa8b0507cf636b24780444fa0a1d7321d4dc0c0ecbee6152968823f5a2ae0d321b4f8c705a489bf1ae1245bdeb0868fd + languageName: node + linkType: hard + +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0": + version: 7.7.1 + resolution: "@types/semver@npm:7.7.1" + checksum: 10c0/c938aef3bf79a73f0f3f6037c16e2e759ff40c54122ddf0b2583703393d8d3127130823facb880e694caa324eb6845628186aac1997ee8b31dc2d18fafe26268 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.2.0": + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.5.1" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/type-utils": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.4" + natural-compare: "npm:^1.4.0" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/f911a79ee64d642f814a3b6cdb0d324b5f45d9ef955c5033e78903f626b7239b4aa773e464a38c3e667519066169d983538f2bf8e5d00228af587c9d438fb344 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.2.0": + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/a8f99820679decd0d115c0af61903fb1de3b1b5bec412dc72b67670bf636de77ab07f2a68ee65d6da7976039bbf636907f9d5ca546db3f0b98a31ffbc225bc7d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7409c97d1c4a4386b488962739c4f1b5b04dc60cf51f8cd88e6b12541f84d84c6b8b67e491a147a2c95f9ec486539bf4519fb9d418411aef6537b9c156468117 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@types/json-schema": "npm:^7.0.12" + "@types/semver": "npm:^7.5.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + semver: "npm:^7.5.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf + languageName: node + linkType: hard + +"@volar/language-core@npm:2.4.28, @volar/language-core@npm:~2.4.11": + version: 2.4.28 + resolution: "@volar/language-core@npm:2.4.28" + dependencies: + "@volar/source-map": "npm:2.4.28" + checksum: 10c0/d41f7327fed7fa5301fbf2d8f96753d645a976b21dbbeb869794a780aa6523d1e6bf258242bc3d8ccd37f8e8b98a04fea9574e6f63badc585a8a3c2e068c4a86 + languageName: node + linkType: hard + +"@volar/source-map@npm:2.4.28": + version: 2.4.28 + resolution: "@volar/source-map@npm:2.4.28" + checksum: 10c0/24b0b02c7f66febe47f0bfda4a5ed4beaf949041eddc6325c7478b900faeb071795b696d97a4f326dde47217d06e40b67129300bc544f054772c5cb84c2f254e + languageName: node + linkType: hard + +"@volar/typescript@npm:^2.4.11": + version: 2.4.28 + resolution: "@volar/typescript@npm:2.4.28" + dependencies: + "@volar/language-core": "npm:2.4.28" + path-browserify: "npm:^1.0.1" + vscode-uri: "npm:^3.0.8" + checksum: 10c0/075c890b9ec1cb17f17e38aaed035f8ee7d507439e87270d8e3c394356fc9387fd0bda9ec1069b36ea4c378d9375a08f5bc64c063a83427010ddd86d472124fc + languageName: node + linkType: hard + +"@vue/compiler-core@npm:3.5.27": + version: 3.5.27 + resolution: "@vue/compiler-core@npm:3.5.27" + dependencies: + "@babel/parser": "npm:^7.28.5" + "@vue/shared": "npm:3.5.27" + entities: "npm:^7.0.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.2.1" + checksum: 10c0/10ea10c0678d314f3f86c226b6f93f2b91e8e2dc6f6388b0e4b5792d5338d60c80e36430c86d007ee5fab629f3ef526af94e2fe2d550e1ae1ee1d389cfebf4e6 + languageName: node + linkType: hard + +"@vue/compiler-dom@npm:^3.5.0": + version: 3.5.27 + resolution: "@vue/compiler-dom@npm:3.5.27" + dependencies: + "@vue/compiler-core": "npm:3.5.27" + "@vue/shared": "npm:3.5.27" + checksum: 10c0/0a91a1b93a0f25936c83a2881da7222d22c6ad160f3405f9aed86668b66f4c7ff1611bcc769441fccd0fecb3c83607c0c1c78a43d8acf3aa106b87034de54e50 + languageName: node + linkType: hard + +"@vue/compiler-sfc@npm:2.7.16": + version: 2.7.16 + resolution: "@vue/compiler-sfc@npm:2.7.16" + dependencies: + "@babel/parser": "npm:^7.23.5" + postcss: "npm:^8.4.14" + prettier: "npm:^1.18.2 || ^2.0.0" + source-map: "npm:^0.6.1" + dependenciesMeta: + prettier: + optional: true + checksum: 10c0/eaeeef054c939e6cd7591199e2b998ae33d0afd65dc1b5675b54361f0c657c08ae82945791a1a8ca76762e1c1f8e69a00595daf280b854cbc3370ed5c5a34bcd + languageName: node + linkType: hard + +"@vue/compiler-vue2@npm:^2.7.16": + version: 2.7.16 + resolution: "@vue/compiler-vue2@npm:2.7.16" + dependencies: + de-indent: "npm:^1.0.2" + he: "npm:^1.2.0" + checksum: 10c0/c76c3fad770b9a7da40b314116cc9da173da20e5fd68785c8ed8dd8a87d02f239545fa296e16552e040ec86b47bfb18283b39447b250c2e76e479bd6ae475bb3 + languageName: node + linkType: hard + +"@vue/language-core@npm:2.2.0": + version: 2.2.0 + resolution: "@vue/language-core@npm:2.2.0" + dependencies: + "@volar/language-core": "npm:~2.4.11" + "@vue/compiler-dom": "npm:^3.5.0" + "@vue/compiler-vue2": "npm:^2.7.16" + "@vue/shared": "npm:^3.5.0" + alien-signals: "npm:^0.4.9" + minimatch: "npm:^9.0.3" + muggle-string: "npm:^0.4.1" + path-browserify: "npm:^1.0.1" + peerDependencies: + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c44cc4067266bbc825af358a867aed455963a08c160cd9df9a47571fd917a87d9de9bdea6149877e0c8309a6cf39f263e7cf2fbadeceba47a5a158f392151b2 + languageName: node + linkType: hard + +"@vue/shared@npm:3.5.27, @vue/shared@npm:^3.5.0": + version: 3.5.27 + resolution: "@vue/shared@npm:3.5.27" + checksum: 10c0/c80a84464530d51cf3d5fa1aab6c3e9717e5901fbc1b8a8eb9962edfc02985c1e03e6dc6d0d205d10cdff067c1c5f689d7156446d2a4c7686a8409a40e3a5f20 + languageName: node + linkType: hard + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.1": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^7.4.0": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 + languageName: node + linkType: hard + +"acorn@npm:^8.15.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + +"ajv-draft-04@npm:~1.0.0": + version: 1.0.0 + resolution: "ajv-draft-04@npm:1.0.0" + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/6044310bd38c17d77549fd326bd40ce1506fa10b0794540aa130180808bf94117fac8c9b448c621512bea60e4a947278f6a978e87f10d342950c15b33ddd9271 + languageName: node + linkType: hard + +"ajv-formats@npm:~3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/168d6bca1ea9f163b41c8147bae537e67bd963357a5488a1eaf3abe8baa8eec806d4e45f15b10767e6020679315c7e1e5e6803088dfb84efa2b4e9353b83dd0a + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.0.1": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ajv@npm:~8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + +"ajv@npm:~8.13.0": + version: 8.13.0 + resolution: "ajv@npm:8.13.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.4.1" + checksum: 10c0/14c6497b6f72843986d7344175a1aa0e2c35b1e7f7475e55bc582cddb765fca7e6bf950f465dc7846f817776d9541b706f4b5b3fbedd8dfdeb5fce6f22864264 + languageName: node + linkType: hard + +"alien-signals@npm:^0.4.9": + version: 0.4.14 + resolution: "alien-signals@npm:0.4.14" + checksum: 10c0/5abb3377bcaf6b3819e950084b3ebd022ad90210105afb450c89dc347e80e28da441bf34858a57ea122abe7603e552ddbad80dc597c8f02a0a5206c5fb9c20cb + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"are-docs-informative@npm:^0.0.2": + version: 0.0.2 + resolution: "are-docs-informative@npm:0.0.2" + checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7, argparse@npm:~1.0.9": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d + languageName: node + linkType: hard + +"array-find-index@npm:^1.0.2": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6": + version: 3.1.9 + resolution: "array-includes@npm:3.1.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.0" + es-object-atoms: "npm:^1.1.1" + get-intrinsic: "npm:^1.3.0" + is-string: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/0235fa69078abeac05ac4250699c44996bc6f774a9cbe45db48674ce6bd142f09b327d31482ff75cf03344db4ea03eae23edb862d59378b484b47ed842574856 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.2": + version: 1.2.6 + resolution: "array.prototype.findlastindex@npm:1.2.6" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-shim-unscopables: "npm:^1.1.0" + checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"bson@npm:^7.0.0": + version: 7.1.1 + resolution: "bson@npm:7.1.1" + checksum: 10c0/005d912cdeeca5c2b6e3543358ab707c9d61bc1db0e0c71ca1fe31ae991851e62101ac3c172d600eed4f860ff12ec68473295782c7781a7b215fc5e38e446923 + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"builtins@npm:^5.0.1": + version: 5.1.0 + resolution: "builtins@npm:5.1.0" + dependencies: + semver: "npm:^7.0.0" + checksum: 10c0/3c32fe5bd7ed4ff7dbd6fb14bcb9d7eaa7e967327f1899cd336f8625d3f46fceead0a53528f1e332aeaee757034ebb307cb2f1a37af2b86a3c5ad4845d01c0c8 + languageName: node + linkType: hard + +"bytes-iec@npm:^3.1.1": + version: 3.1.1 + resolution: "bytes-iec@npm:3.1.1" + checksum: 10c0/cb553a214d49afe2efb4f9f6f03c0a76dbf2b0db8fe176c1d9943f74b79fb36767938e5f0a60991d870309c96f21e440904dd4f92b54c9c316c88486e6eef025 + languageName: node + linkType: hard + +"cacache@npm:^20.0.1": + version: 20.0.3 + resolution: "cacache@npm:20.0.3" + dependencies: + "@npmcli/fs": "npm:^5.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^13.0.0" + lru-cache: "npm:^11.1.0" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^13.0.0" + unique-filename: "npm:^5.0.0" + checksum: 10c0/c7da1ca694d20e8f8aedabd21dc11518f809a7d2b59aa76a1fc655db5a9e62379e465c157ddd2afe34b19230808882288effa6911b2de26a088a6d5645123462 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chokidar@npm:^4.0.3": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"comment-parser@npm:1.4.1": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + +"commenting@npm:~1.1.0": + version: 1.1.0 + resolution: "commenting@npm:1.1.0" + checksum: 10c0/23f9ecb680b561bdd3dba6c9aada0636e42e8804073b623175e6e58bea77d12fcacc6979b009ac5c5a7c8b82590c64d87296827641bf5ac31dd900617b1b84e7 + languageName: node + linkType: hard + +"compare-versions@npm:^6.1.1": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 10c0/415205c7627f9e4f358f571266422980c9fe2d99086be0c9a48008ef7c771f32b0fbe8e97a441ffedc3910872f917a0675fe0fe3c3b6d331cda6d8690be06338 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 + languageName: node + linkType: hard + +"confbox@npm:^0.2.2": + version: 0.2.2 + resolution: "confbox@npm:0.2.2" + checksum: 10c0/7c246588d533d31e8cdf66cb4701dff6de60f9be77ab54c0d0338e7988750ac56863cc0aca1b3f2046f45ff223a765d3e5d4977a7674485afcd37b6edf3fd129 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"csstype@npm:^3.1.0": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 + languageName: node + linkType: hard + +"de-indent@npm:^1.0.2": + version: 1.0.2 + resolution: "de-indent@npm:1.0.2" + checksum: 10c0/7058ce58abd6dfc123dd204e36be3797abd419b59482a634605420f47ae97639d0c183ec5d1b904f308a01033f473673897afc2bd59bc620ebf1658763ef4291 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.4.0": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"diff@npm:~8.0.2": + version: 8.0.3 + resolution: "diff@npm:8.0.3" + checksum: 10c0/d29321c70d3545fdcb56c5fdd76028c3f04c012462779e062303d4c3c531af80d2c360c26b871e6e2b9a971d2422d47e1779a859106c4cac4b5d2d143df70e20 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.5": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: "npm:^4.1.1" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/43850479d7a51d36a9c924b518dcdc6373b5a8ae3401097d336b7b7e258324749d0ad37a1fcaa5706f04799baa05585cd7af19ebdf7667673e7694435fcea918 + languageName: node + linkType: hard + +"entities@npm:^7.0.0": + version: 7.0.1 + resolution: "entities@npm:7.0.1" + checksum: 10c0/b4fb9937bb47ecb00aaaceb9db9cdd1cc0b0fb649c0e843d05cf5dbbd2e9d2df8f98721d8b1b286445689c72af7b54a7242fc2d63ef7c9739037a8c73363e7ca + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.1.4": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + +"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": + version: 1.24.1 + resolution: "es-abstract@npm:1.24.1" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.2.1" + is-set: "npm:^2.0.3" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.4" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.4" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + stop-iteration-iterator: "npm:^1.1.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.19" + checksum: 10c0/fca062ef8b5daacf743732167d319a212d45cb655b0bb540821d38d715416ae15b04b84fc86da9e2c89135aa7b337337b6c867f84dcde698d75d55688d5d765c + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": + version: 1.1.0 + resolution: "es-shim-unscopables@npm:1.1.0" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/1b9702c8a1823fc3ef39035a4e958802cf294dd21e917397c561d0b3e195f383b978359816b1732d02b255ccf63e1e4815da0065b95db8d7c992037be3bbbcdb + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0": + version: 0.25.12 + resolution: "esbuild@npm:0.25.12" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.12" + "@esbuild/android-arm": "npm:0.25.12" + "@esbuild/android-arm64": "npm:0.25.12" + "@esbuild/android-x64": "npm:0.25.12" + "@esbuild/darwin-arm64": "npm:0.25.12" + "@esbuild/darwin-x64": "npm:0.25.12" + "@esbuild/freebsd-arm64": "npm:0.25.12" + "@esbuild/freebsd-x64": "npm:0.25.12" + "@esbuild/linux-arm": "npm:0.25.12" + "@esbuild/linux-arm64": "npm:0.25.12" + "@esbuild/linux-ia32": "npm:0.25.12" + "@esbuild/linux-loong64": "npm:0.25.12" + "@esbuild/linux-mips64el": "npm:0.25.12" + "@esbuild/linux-ppc64": "npm:0.25.12" + "@esbuild/linux-riscv64": "npm:0.25.12" + "@esbuild/linux-s390x": "npm:0.25.12" + "@esbuild/linux-x64": "npm:0.25.12" + "@esbuild/netbsd-arm64": "npm:0.25.12" + "@esbuild/netbsd-x64": "npm:0.25.12" + "@esbuild/openbsd-arm64": "npm:0.25.12" + "@esbuild/openbsd-x64": "npm:0.25.12" + "@esbuild/openharmony-arm64": "npm:0.25.12" + "@esbuild/sunos-x64": "npm:0.25.12" + "@esbuild/win32-arm64": "npm:0.25.12" + "@esbuild/win32-ia32": "npm:0.25.12" + "@esbuild/win32-x64": "npm:0.25.12" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0": + version: 0.27.2 + resolution: "esbuild@npm:0.27.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.2" + "@esbuild/android-arm": "npm:0.27.2" + "@esbuild/android-arm64": "npm:0.27.2" + "@esbuild/android-x64": "npm:0.27.2" + "@esbuild/darwin-arm64": "npm:0.27.2" + "@esbuild/darwin-x64": "npm:0.27.2" + "@esbuild/freebsd-arm64": "npm:0.27.2" + "@esbuild/freebsd-x64": "npm:0.27.2" + "@esbuild/linux-arm": "npm:0.27.2" + "@esbuild/linux-arm64": "npm:0.27.2" + "@esbuild/linux-ia32": "npm:0.27.2" + "@esbuild/linux-loong64": "npm:0.27.2" + "@esbuild/linux-mips64el": "npm:0.27.2" + "@esbuild/linux-ppc64": "npm:0.27.2" + "@esbuild/linux-riscv64": "npm:0.27.2" + "@esbuild/linux-s390x": "npm:0.27.2" + "@esbuild/linux-x64": "npm:0.27.2" + "@esbuild/netbsd-arm64": "npm:0.27.2" + "@esbuild/netbsd-x64": "npm:0.27.2" + "@esbuild/openbsd-arm64": "npm:0.27.2" + "@esbuild/openbsd-x64": "npm:0.27.2" + "@esbuild/openharmony-arm64": "npm:0.27.2" + "@esbuild/sunos-x64": "npm:0.27.2" + "@esbuild/win32-arm64": "npm:0.27.2" + "@esbuild/win32-ia32": "npm:0.27.2" + "@esbuild/win32-x64": "npm:0.27.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/cf83f626f55500f521d5fe7f4bc5871bec240d3deb2a01fbd379edc43b3664d1167428738a5aad8794b35d1cca985c44c375b1cd38a2ca613c77ced2c83aafcd + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.5.1": + version: 0.5.1 + resolution: "eslint-compat-utils@npm:0.5.1" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c + languageName: node + linkType: hard + +"eslint-config-codex@npm:^1.6.1": + version: 1.9.2 + resolution: "eslint-config-codex@npm:1.9.2" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:^6.2.0" + "@typescript-eslint/parser": "npm:^6.2.0" + eslint-config-standard: "npm:17.1.0" + eslint-plugin-import: "npm:2.28.0" + eslint-plugin-jsdoc: "npm:^46.4.5" + eslint-plugin-n: "npm:^16.0.1" + eslint-plugin-promise: "npm:6.1.1" + eslint-plugin-standard: "npm:5.0.0" + peerDependencies: + eslint: ">= 5.3.0" + checksum: 10c0/89f1ea8e1c1d4e5f5a7ea699d635ca0a017cc6f98872caf192d2b53f660fa0a6911efa7c92143007ebb28798e7927fb8cd82410f9d202c4787fc5a2e8431d484 + languageName: node + linkType: hard + +"eslint-config-standard@npm:17.1.0": + version: 17.1.0 + resolution: "eslint-config-standard@npm:17.1.0" + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: "^15.0.0 || ^16.0.0 " + eslint-plugin-promise: ^6.0.0 + checksum: 10c0/d32f37ec4bea541debd3a8c9e05227673a9b1a9977da078195ee55fb371813ddf1349c75f2c33d76699fe3412f1e303181795f146e8d0e546b94fa0dce2bfbf9 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.8.0": + version: 2.12.1 + resolution: "eslint-module-utils@npm:2.12.1" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40 + languageName: node + linkType: hard + +"eslint-plugin-es-x@npm:^7.5.0": + version: 7.8.0 + resolution: "eslint-plugin-es-x@npm:7.8.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.1.2" + "@eslint-community/regexpp": "npm:^4.11.0" + eslint-compat-utils: "npm:^0.5.1" + peerDependencies: + eslint: ">=8" + checksum: 10c0/002fda8c029bc5da41e24e7ac11654062831d675fc4f5f20d0de460e24bf1e05cd559000678ef3e46c48641190f4fc07ae3d57aa5e8b085ef5f67e5f63742614 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:2.28.0": + version: 2.28.0 + resolution: "eslint-plugin-import@npm:2.28.0" + dependencies: + array-includes: "npm:^3.1.6" + array.prototype.findlastindex: "npm:^1.2.2" + array.prototype.flat: "npm:^1.3.1" + array.prototype.flatmap: "npm:^1.3.1" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.7" + eslint-module-utils: "npm:^2.8.0" + has: "npm:^1.0.3" + is-core-module: "npm:^2.12.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.6" + object.groupby: "npm:^1.0.0" + object.values: "npm:^1.1.6" + resolve: "npm:^1.22.3" + semver: "npm:^6.3.1" + tsconfig-paths: "npm:^3.14.2" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: 10c0/0d7b978a3c4778b68bede2c8a14512e33581091bd8a508c4a424d2e8bff1f174549ffc3f2b7cfb28345cfb63061d3e43fdaa810ebfe9c96b5a4a1dc4047f6e9d + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^46.4.5": + version: 46.10.1 + resolution: "eslint-plugin-jsdoc@npm:46.10.1" + dependencies: + "@es-joy/jsdoccomment": "npm:~0.41.0" + are-docs-informative: "npm:^0.0.2" + comment-parser: "npm:1.4.1" + debug: "npm:^4.3.4" + escape-string-regexp: "npm:^4.0.0" + esquery: "npm:^1.5.0" + is-builtin-module: "npm:^3.2.1" + semver: "npm:^7.5.4" + spdx-expression-parse: "npm:^4.0.0" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/2c9db7e621e6393c4e22c312e8d729a1c5698a31a62b0985421bb64741eb737d95b65ea0523ea87df3456ff4b3452ed015e463cc5a3b98646f2e7a3f68dd6e1a + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^16.0.1": + version: 16.6.2 + resolution: "eslint-plugin-n@npm:16.6.2" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + builtins: "npm:^5.0.1" + eslint-plugin-es-x: "npm:^7.5.0" + get-tsconfig: "npm:^4.7.0" + globals: "npm:^13.24.0" + ignore: "npm:^5.2.4" + is-builtin-module: "npm:^3.2.1" + is-core-module: "npm:^2.12.1" + minimatch: "npm:^3.1.2" + resolve: "npm:^1.22.2" + semver: "npm:^7.5.3" + peerDependencies: + eslint: ">=7.0.0" + checksum: 10c0/6008493754b51c6b9ce18c17e7c3d455b69444d2c454dd399a5c2f1b833bb5a649992052f141a5dd695d22e3946a518063b2dd01e872c67dc0294eb143b80633 + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:6.1.1": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 10c0/ec705741c110cd1cb4d702776e1c7f7fe60b671b71f706c88054ab443cf2767aae5a663928fb426373ba1095eaeda312a740a4f880546631f0e0727f298b3393 + languageName: node + linkType: hard + +"eslint-plugin-standard@npm:5.0.0": + version: 5.0.0 + resolution: "eslint-plugin-standard@npm:5.0.0" + peerDependencies: + eslint: ">=5.0.0" + checksum: 10c0/563835504443b6f1feafca6a1f4b35a827bd9e36d9d358f6f8ce9d375951abdf45e4949b34e795da952a822919109420fc4a2c3cc339d2500b6c26789a0617ea + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: "npm:^1.1.0" + checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: 10c0/9f0e3a2db751d84067d15977ac4b4472efd6b303e369e6ff241a99feac04da758f46d5add022c33d06b53596038dbae4b4aceb27c7e68b8dfc1055b35e495787 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^7.24.0": + version: 7.32.0 + resolution: "eslint@npm:7.32.0" + dependencies: + "@babel/code-frame": "npm:7.12.11" + "@eslint/eslintrc": "npm:^0.4.3" + "@humanwhocodes/config-array": "npm:^0.5.0" + ajv: "npm:^6.10.0" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.0.1" + doctrine: "npm:^3.0.0" + enquirer: "npm:^2.3.5" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^5.1.1" + eslint-utils: "npm:^2.1.0" + eslint-visitor-keys: "npm:^2.0.0" + espree: "npm:^7.3.1" + esquery: "npm:^1.4.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + functional-red-black-tree: "npm:^1.0.1" + glob-parent: "npm:^5.1.2" + globals: "npm:^13.6.0" + ignore: "npm:^4.0.6" + import-fresh: "npm:^3.0.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + js-yaml: "npm:^3.13.1" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.0.4" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.1" + progress: "npm:^2.0.0" + regexpp: "npm:^3.1.0" + semver: "npm:^7.2.1" + strip-ansi: "npm:^6.0.0" + strip-json-comments: "npm:^3.1.0" + table: "npm:^6.0.9" + text-table: "npm:^0.2.0" + v8-compile-cache: "npm:^2.0.3" + bin: + eslint: bin/eslint.js + checksum: 10c0/84409f7767556179cb11529f1215f335c7dfccf90419df6147f949f14c347a960c7b569e80ed84011a0b6d10da1ef5046edbbb9b11c3e59aa6696d5217092e93 + languageName: node + linkType: hard + +"espree@npm:^7.3.0, espree@npm:^7.3.1": + version: 7.3.1 + resolution: "espree@npm:7.3.1" + dependencies: + acorn: "npm:^7.4.0" + acorn-jsx: "npm:^5.3.1" + eslint-visitor-keys: "npm:^1.3.0" + checksum: 10c0/f4e81b903f03eaf0e6925cea20571632da427deb6e14ca37e481f72c11f36d7bb4945fe8a2ff15ab22d078d3cd93ee65355fa94de9c27485c356481775f25d85 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esquery@npm:^1.4.0, esquery@npm:^1.5.0": + version: 1.7.0 + resolution: "esquery@npm:1.7.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"exsolve@npm:^1.0.7": + version: 1.0.8 + resolution: "exsolve@npm:1.0.8" + checksum: 10c0/65e44ae05bd4a4a5d87cfdbbd6b8f24389282cf9f85fa5feb17ca87ad3f354877e6af4cd99e02fc29044174891f82d1d68c77f69234410eb8f163530e6278c67 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.1.0 + resolution: "fast-uri@npm:3.1.0" + checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + +"fdir@npm:^6.4.3, fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" + dependencies: + is-callable: "npm:^1.2.7" + checksum: 10c0/0e0b50f6a843a282637d43674d1fb278dda1dd85f4f99b640024cfb10b85058aac0cc781bf689d5fe50b4b7f638e91e548560723a4e76e04fe96ae35ef039cee + languageName: node + linkType: hard + +"fs-extra@npm:~11.3.0": + version: 11.3.3 + resolution: "fs-extra@npm:11.3.3" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/984924ff4104e3e9f351b658a864bf3b354b2c90429f57aec0acd12d92c4e6b762cbacacdffb4e745b280adce882e1f980c485d9f02c453f769ab4e7fc646ce3 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + functions-have-names: "npm:^1.2.3" + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: 10c0/5959eed0375803d9924f47688479bb017e0c6816a0e5ac151e22ba6bfe1d12c41de2f339188885e0aa8eeea2072dad509d8e4448467e816bde0a2ca86a0670d3 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.0": + version: 4.13.1 + resolution: "get-tsconfig@npm:4.13.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/75c8ccebc411073338d7b7154f18659480d4888d1b12a74a21507d14c6e3b092e260454efe6ce33b33eaf513d86491b8f16191358fe3e0a682a215febd1846cc + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^13.0.0": + version: 13.0.0 + resolution: "glob@npm:13.0.0" + dependencies: + minimatch: "npm:^10.1.1" + minipass: "npm:^7.1.2" + path-scurry: "npm:^2.0.0" + checksum: 10c0/8e2f5821f3f7c312dd102e23a15b80c79e0837a9872784293ba2e15ec73b3f3749a49a42a31bfcb4e52c84820a474e92331c2eebf18819d20308f5c33876630a + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^13.24.0, globals@npm:^13.6.0, globals@npm:^13.9.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 10c0/82c1220573dc1f0a014a5d6189ae52a1f820f99dfdc00323c3a725b5002dcb7f04e44f460fea7af068474b2dd7c88cbe1846925c84017be9e31e1708936d305b + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hawk.javascript@workspace:.": + version: 0.0.0-use.local + resolution: "hawk.javascript@workspace:." + dependencies: + "@size-limit/preset-small-lib": "npm:^11.1.6" + eslint: "npm:^7.24.0" + eslint-config-codex: "npm:^1.6.1" + rollup-plugin-license: "npm:^3.5.3" + size-limit: "npm:^11.1.6" + typescript: "npm:^5.9.3" + languageName: unknown + linkType: soft + +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ignore@npm:^4.0.6": + version: 4.0.6 + resolution: "ignore@npm:4.0.6" + checksum: 10c0/836ee7dc7fd9436096e2dba429359dbb9fa0e33d309e2b2d81692f375f6ca82024fc00567f798613d50c6b989e9cd2ad2b065acf116325cde177f02c86b7d4e0 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + +"import-lazy@npm:~4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 10c0/a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 + languageName: node + linkType: hard + +"ip-address@npm:^10.0.1": + version: 10.1.0 + resolution: "ip-address@npm:10.1.0" + checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" + dependencies: + async-function: "npm:^1.0.0" + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/d70c236a5e82de6fc4d44368ffd0c2fee2b088b893511ce21e679da275a5ecc6015ff59a7d7e1bdd7ca39f71a8dbdd253cf8cce5c6b3c91cdd5b42b5ce677298 + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/36ff6baf6bd18b3130186990026f5a95c709345c39cd368468e6c1b6ab52201e9fd26d8e1f4c066357b4938b0f0401e1a5000e08257787c1a02f3a719457001e + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.2.1": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-core-module@npm:^2.12.1, is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10": + version: 1.1.2 + resolution: "is-generator-function@npm:1.1.2" + dependencies: + call-bound: "npm:^1.0.4" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/83da102e89c3e3b71d67b51d47c9f9bc862bceb58f87201727e27f7fa19d1d90b0ab223644ecaee6fc6e3d2d622bb25c966fbdaf87c59158b01ce7c0fe2fa372 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db + languageName: node + linkType: hard + +"is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/8e0a9c07b0c780949a100e2cab2b5560a48ecd4c61726923c1a9b77b6ab0aa0046c9e7fb2206042296817045376dee2c8ab1dabe08c7c3dfbf195b01275a085b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jiti@npm:^2.4.2": + version: 2.6.1 + resolution: "jiti@npm:2.6.1" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/79b2e96a8e623f66c1b703b98ec1b8be4500e1d217e09b09e343471bbb9c105381b83edbb979d01cef18318cc45ce6e153571b6c83122170eefa531c64b6789b + languageName: node + linkType: hard + +"jju@npm:~1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: 10c0/f3f444557e4364cfc06b1abf8331bf3778b26c0c8552ca54429bc0092652172fdea26cbffe33e1017b303d5aa506f7ede8571857400efe459cb7439180e2acad + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/3261f25912f5dd76605e5993d0a126c2b6c346311885d3c483706cd722efe34f697ea0331f654ce27c00a42b426e524518ec89d65ed02ea47df8ad26dcc8ce69 + languageName: node + linkType: hard + +"jsdoc-type-pratt-parser@npm:~4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kolorist@npm:^1.8.0": + version: 1.8.0 + resolution: "kolorist@npm:1.8.0" + checksum: 10c0/73075db44a692bf6c34a649f3b4b3aea4993b84f6b754cbf7a8577e7c7db44c0bad87752bd23b0ce533f49de2244ce2ce03b7b1b667a85ae170a94782cc50f9b + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"lilconfig@npm:^3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc + languageName: node + linkType: hard + +"local-pkg@npm:^1.0.0": + version: 1.1.2 + resolution: "local-pkg@npm:1.1.2" + dependencies: + mlly: "npm:^1.7.4" + pkg-types: "npm:^2.3.0" + quansync: "npm:^0.2.11" + checksum: 10c0/1bcfcc5528dea95cba3caa478126a348d3985aad9f69ecf7802c13efef90897e1c5ff7851974332c5e6d4a4698efe610fef758a068c8bc3feb5322aeb35d5993 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: 10c0/4e870d54e8a6c86c8687e057cec4069d2e941446ccab7f40b4d9555fa5872d917d0b6aa73bece7765500a3123f1723bcdba9ae881b679ef120bba9e1a0b0ed70 + languageName: node + linkType: hard + +"lodash@npm:~4.17.15, lodash@npm:~4.17.21": + version: 4.17.23 + resolution: "lodash@npm:4.17.23" + checksum: 10c0/1264a90469f5bb95d4739c43eb6277d15b6d9e186df4ac68c3620443160fc669e2f14c11e7d8b2ccf078b81d06147c01a8ccced9aab9f9f63d50dcf8cace6bf6 + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": + version: 11.2.5 + resolution: "lru-cache@npm:11.2.5" + checksum: 10c0/cc98958d25dddf1c8a8cbdc49588bd3b24450e8dfa78f32168fd188a20d4a0331c7406d0f3250c86a46619ee288056fd7a1195e8df56dc8a9592397f4fbd8e1d + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.17, magic-string@npm:~0.30.0": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^15.0.0": + version: 15.0.3 + resolution: "make-fetch-happen@npm:15.0.3" + dependencies: + "@npmcli/agent": "npm:^4.0.0" + cacache: "npm:^20.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^5.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^6.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^13.0.0" + checksum: 10c0/525f74915660be60b616bcbd267c4a5b59481b073ba125e45c9c3a041bb1a47a2bd0ae79d028eb6f5f95bf9851a4158423f5068539c3093621abb64027e8e461 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"minimatch@npm:10.0.3": + version: 10.0.3 + resolution: "minimatch@npm:10.0.3" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimatch@npm:^10.1.1": + version: 10.1.1 + resolution: "minimatch@npm:10.1.1" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10c0/c85d44821c71973d636091fddbfbffe62370f5ee3caf0241c5b60c18cd289e916200acb2361b7e987558cd06896d153e25d505db9fc1e43e6b4b6752e2702902 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.3": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^5.0.0": + version: 5.0.1 + resolution: "minipass-fetch@npm:5.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^2.0.0" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/50bcf48c9841ebb25e29a2817468595219c72cfffc7c175a1d7327843c8bef9b72cb01778f46df7eca695dfe47ab98e6167af4cb026ddd80f660842919a5193c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^2.0.0": + version: 2.0.0 + resolution: "minipass-sized@npm:2.0.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"mlly@npm:^1.7.4": + version: 1.8.0 + resolution: "mlly@npm:1.8.0" + dependencies: + acorn: "npm:^8.15.0" + pathe: "npm:^2.0.3" + pkg-types: "npm:^1.3.1" + ufo: "npm:^1.6.1" + checksum: 10c0/f174b844ae066c71e9b128046677868e2e28694f0bbeeffbe760b2a9d8ff24de0748d0fde6fabe706700c1d2e11d3c0d7a53071b5ea99671592fac03364604ab + languageName: node + linkType: hard + +"moment@npm:~2.30.1": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"muggle-string@npm:^0.4.1": + version: 0.4.1 + resolution: "muggle-string@npm:0.4.1" + checksum: 10c0/e914b63e24cd23f97e18376ec47e4ba3aa24365e4776212b666add2e47bb158003212980d732c49abf3719568900af7861873844a6e2d3a7ca7e86952c0e99e9 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"nanoid@npm:^5.1.0": + version: 5.1.6 + resolution: "nanoid@npm:5.1.6" + bin: + nanoid: bin/nanoid.js + checksum: 10c0/27b5b055ad8332cf4f0f9f6e2a494aa7e5ded89df4cab8c8490d4eabefe72c4423971d2745d22002868b1d50576a5e42b7b05214733b19f576382323282dd26e + languageName: node + linkType: hard + +"nanospinner@npm:^1.2.2": + version: 1.2.2 + resolution: "nanospinner@npm:1.2.2" + dependencies: + picocolors: "npm:^1.1.1" + checksum: 10c0/07264f63816a8ec24d84ffe216a605cf11dffd8b098d4c5e6790437304b47e10ce4fc341de8dbcfc1b59aa42107f9949c89bcc201239eb61a80e14b6b1a20c90 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 12.2.0 + resolution: "node-gyp@npm:12.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^15.0.0" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/3ed046746a5a7d90950cd8b0547332b06598443f31fe213ef4332a7174c7b7d259e1704835feda79b87d3f02e59d7791842aac60642ede4396ab25fdf0f8f759 + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.6": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.0": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.1.6": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.2.6" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.4 + resolution: "p-map@npm:7.0.4" + checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd + languageName: node + linkType: hard + +"package-name-regex@npm:~2.0.6": + version: 2.0.6 + resolution: "package-name-regex@npm:2.0.6" + checksum: 10c0/f0d2446983d9e4fcd21e983a38b30d5d4728f7e3613392c455ba00e3b6ddfbde12b91955c8f4e15a7f72851bd619af4832313eae4b52aedb88cf84024a5224a3 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.0": + version: 2.0.1 + resolution: "path-scurry@npm:2.0.1" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/2a16ed0e81fbc43513e245aa5763354e25e787dab0d539581a6c3f0f967461a159ed6236b2559de23aa5b88e7dc32b469b6c47568833dd142a4b24b4f5cd2620 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pathe@npm:^2.0.1, pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 + languageName: node + linkType: hard + +"pkg-types@npm:^1.3.1": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.4" + pathe: "npm:^2.0.1" + checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea + languageName: node + linkType: hard + +"pkg-types@npm:^2.3.0": + version: 2.3.0 + resolution: "pkg-types@npm:2.3.0" + dependencies: + confbox: "npm:^0.2.2" + exsolve: "npm:^1.0.7" + pathe: "npm:^2.0.3" + checksum: 10c0/d2bbddc5b81bd4741e1529c08ef4c5f1542bbdcf63498b73b8e1d84cff71806d1b8b1577800549bb569cb7aa20056257677b979bff48c97967cba7e64f72ae12 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: 10c0/c810983414142071da1d644662ce4caebce890203eb2bc7bf119f37f3fe5796226e117e6cca146b521921fa6531072674174a3325066ac66fce089a53e1e5196 + languageName: node + linkType: hard + +"postcss@npm:^8.4.14, postcss@npm:^8.5.6": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier@npm:^1.18.2 || ^2.0.0": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"progress@npm:^2.0.0": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: 10c0/1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"quansync@npm:^0.2.11": + version: 0.2.11 + resolution: "quansync@npm:0.2.11" + checksum: 10c0/cb9a1f8ebce074069f2f6a78578873ffedd9de9f6aa212039b44c0870955c04a71c3b1311b5d97f8ac2f2ec476de202d0a5c01160cb12bc0a11b7ef36d22ef56 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.4": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 + languageName: node + linkType: hard + +"regexpp@npm:^3.1.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.22.2, resolve@npm:^1.22.3, resolve@npm:^1.22.4, resolve@npm:~1.22.1, resolve@npm:~1.22.2": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rollup-plugin-license@npm:^3.5.3": + version: 3.6.0 + resolution: "rollup-plugin-license@npm:3.6.0" + dependencies: + commenting: "npm:~1.1.0" + fdir: "npm:^6.4.3" + lodash: "npm:~4.17.21" + magic-string: "npm:~0.30.0" + moment: "npm:~2.30.1" + package-name-regex: "npm:~2.0.6" + spdx-expression-validate: "npm:~2.0.0" + spdx-satisfies: "npm:~5.0.1" + peerDependencies: + rollup: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 + checksum: 10c0/4f6966615093f330132092d245a20da58a25ee5094a2561251de1af9f5db1b3dbb9c7f1c315a40441047bcc1b21fb1971091066992299e0040b613540e53c7c2 + languageName: node + linkType: hard + +"rollup@npm:^4.43.0": + version: 4.57.1 + resolution: "rollup@npm:4.57.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.57.1" + "@rollup/rollup-android-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-x64": "npm:4.57.1" + "@rollup/rollup-freebsd-arm64": "npm:4.57.1" + "@rollup/rollup-freebsd-x64": "npm:4.57.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.57.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.57.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-musl": "npm:4.57.1" + "@rollup/rollup-openbsd-x64": "npm:4.57.1" + "@rollup/rollup-openharmony-arm64": "npm:4.57.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.57.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.57.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.57.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.57.1" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a90aaf1166fc495920e44e52dced0b12283aaceb0924abd6f863102128dd428bbcbf85970f792c06bc63d2a2168e7f073b73e05f6f8d76fdae17b7ac6cacba06 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + isarray: "npm:^2.0.5" + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d + languageName: node + linkType: hard + +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.2.1, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e + languageName: node + linkType: hard + +"semver@npm:~7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"size-limit@npm:11.2.0, size-limit@npm:^11.1.6": + version: 11.2.0 + resolution: "size-limit@npm:11.2.0" + dependencies: + bytes-iec: "npm:^3.1.1" + chokidar: "npm:^4.0.3" + jiti: "npm:^2.4.2" + lilconfig: "npm:^3.1.3" + nanospinner: "npm:^1.2.2" + picocolors: "npm:^1.1.1" + tinyglobby: "npm:^0.2.11" + bin: + size-limit: bin.js + checksum: 10c0/c3613e20dfc227074d73098bfdd6fe274aed980bf133ad61a380032425bfa8b7d749c876dea50e9648a64cd57fb768edac9ffc1927100bcadf814255e44236f1 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.7 + resolution: "socks@npm:2.8.7" + dependencies: + ip-address: "npm:^10.0.1" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spdx-compare@npm:^1.0.0": + version: 1.0.0 + resolution: "spdx-compare@npm:1.0.0" + dependencies: + array-find-index: "npm:^1.0.2" + spdx-expression-parse: "npm:^3.0.0" + spdx-ranges: "npm:^2.0.0" + checksum: 10c0/39d584129b00eaf0bb314984e5d662e511980c1fc6c4eb1d80677044a7b2b9cc3f84f6838695cf988807bf81ea0fce7438e33b0ee54fa87d302635bd143b7fc7 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-expression-validate@npm:~2.0.0": + version: 2.0.0 + resolution: "spdx-expression-validate@npm:2.0.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/fd1e8555e034be72c3a52bd306d04e6035e5d257bea6d39a77d391d236700d32a4647bd1391fc1eaa50c22a67aba6d1004a7569af02e499c8a3afda0bcdb6144 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.22 + resolution: "spdx-license-ids@npm:3.0.22" + checksum: 10c0/4a85e44c2ccfc06eebe63239193f526508ebec1abc7cf7bca8ee43923755636234395447c2c87f40fb672cf580a9c8e684513a676bfb2da3d38a4983684bbb38 + languageName: node + linkType: hard + +"spdx-ranges@npm:^2.0.0": + version: 2.1.1 + resolution: "spdx-ranges@npm:2.1.1" + checksum: 10c0/2d6bf9ec8e0f509c1a119361ff784f0bfa8ebbd8cfbc8e10f79579def54af060bb5058b36372f19770e659051082c451145c1284d2980419a720675accdb4a3d + languageName: node + linkType: hard + +"spdx-satisfies@npm:~5.0.1": + version: 5.0.1 + resolution: "spdx-satisfies@npm:5.0.1" + dependencies: + spdx-compare: "npm:^1.0.0" + spdx-expression-parse: "npm:^3.0.0" + spdx-ranges: "npm:^2.0.0" + checksum: 10c0/47bf163108e64fe4c179a5e2f8dc5fd4ece1665739fc61eae3157a9d4b9b2eb389df7f645223192557659155dda9071ceaa3dfd06ecab65cc3862032c20f2e61 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^13.0.0": + version: 13.0.0 + resolution: "ssri@npm:13.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/405f3a531cd98b013cecb355d63555dca42fd12c7bc6671738aaa9a82882ff41cdf0ef9a2b734ca4f9a760338f114c29d01d9238a65db3ccac27929bd6e6d4b2 + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"stop-iteration-iterator@npm:^1.1.0": + version: 1.1.0 + resolution: "stop-iteration-iterator@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + internal-slot: "npm:^1.1.0" + checksum: 10c0/de4e45706bb4c0354a4b1122a2b8cc45a639e86206807ce0baf390ee9218d3ef181923fa4d2b67443367c491aa255c5fbaa64bb74648e3c5b48299928af86c09 + languageName: node + linkType: hard + +"string-argv@npm:~0.3.1": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-object-atoms: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:~8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"table@npm:^6.0.9": + version: 6.9.0 + resolution: "table@npm:6.9.0" + dependencies: + ajv: "npm:^8.0.1" + lodash.truncate: "npm:^4.4.2" + slice-ansi: "npm:^4.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/35646185712bb65985fbae5975dda46696325844b78735f95faefae83e86df0a265277819a3e67d189de6e858c509b54e66ca3958ffd51bde56ef1118d455bf4 + languageName: node + linkType: hard + +"tar@npm:^7.5.4": + version: 7.5.7 + resolution: "tar@npm:7.5.7" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/51f261afc437e1112c3e7919478d6176ea83f7f7727864d8c2cce10f0b03a631d1911644a567348c3063c45abdae39718ba97abb073d22aa3538b9a53ae1e31c + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.3" + checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.14.2": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 + languageName: node + linkType: hard + +"typescript@npm:5.8.2": + version: 5.8.2 + resolution: "typescript@npm:5.8.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/5c4f6fbf1c6389b6928fe7b8fcd5dc73bb2d58cd4e3883f1d774ed5bd83b151cbac6b7ecf11723de56d4676daeba8713894b1e9af56174f2f9780ae7848ec3c6 + languageName: node + linkType: hard + +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.8.2#optional!builtin": + version: 5.8.2 + resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/5448a08e595cc558ab321e49d4cac64fb43d1fa106584f6ff9a8d8e592111b373a995a1d5c7f3046211c8a37201eb6d0f1566f15cdb7a62a5e3be01d087848e2 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"ufo@npm:^1.6.1": + version: 1.6.3 + resolution: "ufo@npm:1.6.3" + checksum: 10c0/bf0e4ebff99e54da1b9c7182ac2f40475988b41faa881d579bc97bc2a0509672107b0a0e94c4b8d31a0ab8c4bf07f4aa0b469ac6da8536d56bda5b085ea2e953 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 + languageName: node + linkType: hard + +"unique-filename@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-filename@npm:5.0.0" + dependencies: + unique-slug: "npm:^6.0.0" + checksum: 10c0/afb897e9cf4c2fb622ea716f7c2bb462001928fc5f437972213afdf1cc32101a230c0f1e9d96fc91ee5185eca0f2feb34127145874975f347be52eb91d6ccc2c + languageName: node + linkType: hard + +"unique-slug@npm:^6.0.0": + version: 6.0.0 + resolution: "unique-slug@npm:6.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/da7ade4cb04eb33ad0499861f82fe95ce9c7c878b7139dc54d140ecfb6a6541c18a5c8dac16188b8b379fe62c0c1f1b710814baac910cde5f4fec06212126c6a + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"v8-compile-cache@npm:^2.0.3": + version: 2.4.0 + resolution: "v8-compile-cache@npm:2.4.0" + checksum: 10c0/387851192545e7f4d691ba674de90890bba76c0f08ee4909ab862377f556221e75b3a361466490e201203401d64d7795f889882bdabc98b6f3c0bf1038a535be + languageName: node + linkType: hard + +"vite-plugin-dts@npm:^4.2.4": + version: 4.5.4 + resolution: "vite-plugin-dts@npm:4.5.4" + dependencies: + "@microsoft/api-extractor": "npm:^7.50.1" + "@rollup/pluginutils": "npm:^5.1.4" + "@volar/typescript": "npm:^2.4.11" + "@vue/language-core": "npm:2.2.0" + compare-versions: "npm:^6.1.1" + debug: "npm:^4.4.0" + kolorist: "npm:^1.8.0" + local-pkg: "npm:^1.0.0" + magic-string: "npm:^0.30.17" + peerDependencies: + typescript: "*" + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/5fcb7f3739d115f36195a692c0e9f9fca4e504bbbbabe29e71ee06630dd05ea2920169371e80e548eb4779d2eca14107277497838d7df588d53e1fadf84be861 + languageName: node + linkType: hard + +"vite@npm:^7.3.1": + version: 7.3.1 + resolution: "vite@npm:7.3.1" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.8": + version: 3.1.0 + resolution: "vscode-uri@npm:3.1.0" + checksum: 10c0/5f6c9c10fd9b1664d71fab4e9fbbae6be93c7f75bb3a1d9d74399a88ab8649e99691223fd7cef4644376cac6e94fa2c086d802521b9a8e31c5af3e60f0f35624 + languageName: node + linkType: hard + +"vue@npm:^2": + version: 2.7.16 + resolution: "vue@npm:2.7.16" + dependencies: + "@vue/compiler-sfc": "npm:2.7.16" + csstype: "npm:^3.1.0" + checksum: 10c0/15bf536c131a863d03c42386a4bbc82316262129421ef70e88d1758bcf951446ef51edeff42e3b27d026015330fe73d90155fca270eb5eadd30b0290735f2c3e + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.2.1" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": + version: 1.1.20 + resolution: "which-typed-array@npm:1.1.20" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + for-each: "npm:^0.3.5" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/16fcdada95c8afb821cd1117f0ab50b4d8551677ac08187f21d4e444530913c9ffd2dac634f0c1183345f96344b69280f40f9a8bc52164ef409e555567c2604b + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.0 + resolution: "which@npm:6.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/fe9d6463fe44a76232bb6e3b3181922c87510a5b250a98f1e43a69c99c079b3f42ddeca7e03d3e5f2241bf2d334f5a7657cfa868b97c109f3870625842f4cc15 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard From 5220d8c998696138ef23479c0f69f9c0414509eb Mon Sep 17 00:00:00 2001 From: Reversean Date: Thu, 15 Jan 2026 01:06:18 +0300 Subject: [PATCH 2/5] ci(workspaces): fix actions/setup-node to use correct versions of node and yarn --- .github/workflows/main.yml | 6 ++++-- .github/workflows/npm-publish.yml | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 70254fc..77f8fac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,9 +9,10 @@ jobs: steps: - uses: actions/checkout@v1 - name: Use Node.js from .nvmrc - uses: actions/setup-node@v3 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' + - run: corepack enable - run: yarn install - run: yarn lint-test @@ -22,8 +23,9 @@ jobs: steps: - uses: actions/checkout@v1 - name: Use Node.js from .nvmrc - uses: actions/setup-node@v3 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' + - run: corepack enable - run: yarn install - run: yarn build diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 73df7c8..ebc6d83 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -10,10 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' registry-url: https://registry.npmjs.org/ + - run: corepack enable - run: yarn - run: yarn lint-test - run: yarn build From 669e2800a9c511143455e6dca24697859651fdab Mon Sep 17 00:00:00 2001 From: Reversean Date: Tue, 3 Feb 2026 01:39:15 +0300 Subject: [PATCH 3/5] refactor(javascript): add core package --- packages/core/package.json | 40 ++++ packages/core/src/errors.ts | 12 + packages/core/src/index.ts | 12 + packages/core/src/modules/sanitizer.ts | 297 +++++++++++++++++++++++++ packages/core/src/utils/event.ts | 46 ++++ packages/core/src/utils/log.ts | 46 ++++ packages/core/src/utils/validation.ts | 40 ++++ packages/core/tsconfig.json | 11 + packages/core/vite.config.ts | 56 +++++ 9 files changed, 560 insertions(+) create mode 100644 packages/core/package.json create mode 100644 packages/core/src/errors.ts create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/src/modules/sanitizer.ts create mode 100644 packages/core/src/utils/event.ts create mode 100644 packages/core/src/utils/log.ts create mode 100644 packages/core/src/utils/validation.ts create mode 100644 packages/core/tsconfig.json create mode 100644 packages/core/vite.config.ts diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..dbf9bc9 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,40 @@ +{ + "name": "@hawk.so/core", + "version": "1.0.0", + "description": "Core utilities for Hawk.so error tracking SDKs", + "files": [ + "dist" + ], + "main": "./dist/hawk-core.umd.js", + "module": "./dist/hawk-core.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/hawk-core.mjs", + "require": "./dist/hawk-core.umd.js" + } + }, + "scripts": { + "build": "vite build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/codex-team/hawk.javascript.git", + "directory": "packages/core" + }, + "author": { + "name": "CodeX", + "email": "team@codex.so" + }, + "license": "AGPL-3.0-only", + "bugs": { + "url": "https://github.com/codex-team/hawk.javascript/issues" + }, + "homepage": "https://github.com/codex-team/hawk.javascript#readme", + "devDependencies": { + "@hawk.so/types": "0.5.2", + "vite": "^7.3.1", + "vite-plugin-dts": "^4.2.4" + } +} diff --git a/packages/core/src/errors.ts b/packages/core/src/errors.ts new file mode 100644 index 0000000..8fcc582 --- /dev/null +++ b/packages/core/src/errors.ts @@ -0,0 +1,12 @@ +/** + * Error triggered when event was rejected by beforeSend method + */ +export class EventRejectedError extends Error { + /** + * @param message - error message + */ + constructor(message: string) { + super(message); + this.name = 'EventRejectedError'; + } +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..1119161 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,12 @@ +/** + * @hawk.so/core + * + * Core utilities for Hawk.so error tracking SDKs + * Environment-agnostic code that can be used in browser and server environments + */ + +export { EventRejectedError } from './errors'; +export { default as Sanitizer } from './modules/sanitizer'; +export { isErrorProcessed, markErrorAsProcessed } from './utils/event'; +export { validateUser, validateContext } from './utils/validation'; +export { default as log } from './utils/log'; diff --git a/packages/core/src/modules/sanitizer.ts b/packages/core/src/modules/sanitizer.ts new file mode 100644 index 0000000..dd212c5 --- /dev/null +++ b/packages/core/src/modules/sanitizer.ts @@ -0,0 +1,297 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * This class provides methods for preparing data to sending to Hawk + * - trim long strings + * - represent html elements like
as "
" instead of "{}" + * - represent big objects as "" + * - represent class as or + */ +export default class Sanitizer { + /** + * Maximum string length + */ + private static readonly maxStringLen: number = 200; + + /** + * If object in stringified JSON has more keys than this value, + * it will be represented as "" + */ + private static readonly maxObjectKeysCount: number = 20; + + /** + * Maximum depth of context object + */ + private static readonly maxDepth: number = 5; + + /** + * Maximum length of context arrays + */ + private static readonly maxArrayLength: number = 10; + + /** + * Check if passed variable is an object + * + * @param target - variable to check + */ + public static isObject(target: any): boolean { + return Sanitizer.typeOf(target) === 'object'; + } + + /** + * Apply sanitizing for array/object/primitives + * + * @param data - any object to sanitize + * @param depth - current depth of recursion + * @param seen - Set of already seen objects to prevent circular references + */ + public static sanitize(data: any, depth = 0, seen = new WeakSet()): any { + /** + * Check for circular references on objects and arrays + */ + if (data !== null && typeof data === 'object') { + if (seen.has(data)) { + return ''; + } + seen.add(data); + } + + /** + * If value is an Array, apply sanitizing for each element + */ + if (Sanitizer.isArray(data)) { + return this.sanitizeArray(data, depth + 1, seen); + + /** + * If value is an Element, format it as string with outer HTML + * HTMLDivElement -> "
" + */ + } else if (Sanitizer.isElement(data)) { + return Sanitizer.formatElement(data); + + /** + * If values is a not-constructed class, it will be formatted as "" + * class Editor {...} -> + */ + } else if (Sanitizer.isClassPrototype(data)) { + return Sanitizer.formatClassPrototype(data); + + /** + * If values is a some class instance, it will be formatted as "" + * new Editor() -> + */ + } else if (Sanitizer.isClassInstance(data)) { + return Sanitizer.formatClassInstance(data); + + /** + * If values is an object, do recursive call + */ + } else if (Sanitizer.isObject(data)) { + return Sanitizer.sanitizeObject(data, depth + 1, seen); + + /** + * If values is a string, trim it for max-length + */ + } else if (Sanitizer.isString(data)) { + return Sanitizer.trimString(data); + } + + /** + * If values is a number, boolean and other primitive, leave as is + */ + return data; + } + + /** + * Apply sanitizing for each element of the array + * + * @param arr - array to sanitize + * @param depth - current depth of recursion + * @param seen - Set of already seen objects to prevent circular references + */ + private static sanitizeArray(arr: any[], depth: number, seen: WeakSet): any[] { + /** + * If the maximum length is reached, slice array to max length and add a placeholder + */ + const length = arr.length; + + if (length > Sanitizer.maxArrayLength) { + arr = arr.slice(0, Sanitizer.maxArrayLength); + arr.push(`<${length - Sanitizer.maxArrayLength} more items...>`); + } + + return arr.map((item: any) => { + return Sanitizer.sanitize(item, depth, seen); + }); + } + + /** + * Process object values recursive + * + * @param data - object to beautify + * @param depth - current depth of recursion + * @param seen - Set of already seen objects to prevent circular references + */ + private static sanitizeObject(data: { [key: string]: any }, depth: number, seen: WeakSet): Record | '' | '' { + /** + * If the maximum depth is reached, return a placeholder + */ + if (depth > Sanitizer.maxDepth) { + return ''; + } + + /** + * If the object has more keys than the limit, return a placeholder + */ + if (Object.keys(data).length > Sanitizer.maxObjectKeysCount) { + return ''; + } + + const result: any = {}; + + for (const key in data) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + result[key] = Sanitizer.sanitize(data[key], depth, seen); + } + } + + return result; + } + + /** + * Check if passed variable is an array + * + * @param target - variable to check + */ + private static isArray(target: any): boolean { + return Array.isArray(target); + } + + /** + * Check if passed variable is a not-constructed class + * + * @param target - variable to check + */ + private static isClassPrototype(target: any): boolean { + if (!target || !target.constructor) { + return false; + } + + /** + * like + * "function Function { + * [native code] + * }" + */ + const constructorStr = target.constructor.toString(); + + return constructorStr.includes('[native code]') && constructorStr.includes('Function'); + } + + /** + * Check if passed variable is a constructed class instance + * + * @param target - variable to check + */ + private static isClassInstance(target: any): boolean { + return target && target.constructor && (/^class \S+ {/).test(target.constructor.toString()); + } + + /** + * Check if passed variable is a string + * + * @param target - variable to check + */ + private static isString(target: any): boolean { + return typeof target === 'string'; + } + + /** + * Return string representation of the object type + * + * @param object - object to get type + */ + private static typeOf(object: any): string { + return Object.prototype.toString.call(object).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); + } + + /** + * Check if passed variable is an HTML Element (environment-agnostic) + * + * @param target - variable to check + */ + private static isElement(target: any): boolean { + return typeof Element !== 'undefined' && target instanceof Element; + } + + /** + * Return name of a passed class + * + * @param target - not-constructed class + */ + private static getClassNameByPrototype(target: any): string { + return target.name; + } + + /** + * Return name of a class by an instance + * + * @param target - instance of some class + */ + private static getClassNameByInstance(target: any): string { + return Sanitizer.getClassNameByPrototype(target.constructor); + } + + /** + * Trim string if it reaches max length + * + * @param target - string to check + */ + private static trimString(target: string): string { + if (target.length > Sanitizer.maxStringLen) { + return target.substr(0, Sanitizer.maxStringLen) + '…'; + } + + return target; + } + + /** + * Represent HTML Element as string with it outer-html + * HTMLDivElement -> "
" + * + * @param target - variable to format + */ + private static formatElement(target: Element): string { + /** + * Also, remove inner HTML because it can be BIG + */ + const innerHTML = target.innerHTML; + + if (innerHTML) { + return target.outerHTML.replace(target.innerHTML, '…'); + } + + return target.outerHTML; + } + + /** + * Represent not-constructed class as "" + * + * @param target - class to format + */ + private static formatClassPrototype(target: any): string { + const className = Sanitizer.getClassNameByPrototype(target); + + return ``; + } + + /** + * Represent a some class instance as a "" + * + * @param target - class instance to format + */ + private static formatClassInstance(target: any): string { + const className = Sanitizer.getClassNameByInstance(target); + + return ``; + } +} diff --git a/packages/core/src/utils/event.ts b/packages/core/src/utils/event.ts new file mode 100644 index 0000000..3882c27 --- /dev/null +++ b/packages/core/src/utils/event.ts @@ -0,0 +1,46 @@ +import log from './log'; + +/** + * Symbol to mark error as processed by Hawk + */ +const errorSentShadowProperty = Symbol('__hawk_processed__'); + +/** + * Check if the error has alrady been sent to Hawk. + * + * Motivation: + * Some integrations may catch errors on their own side and then normally re-throw them down. + * In this case, Hawk will catch the error again. + * We need to prevent this from happening. + * + * @param error - error object + */ +export function isErrorProcessed(error: unknown): boolean { + if (typeof error !== 'object' || error === null) { + return false; + } + + return error[errorSentShadowProperty] === true; +} + +/** + * Add non-enumerable property to the error object to mark it as processed. + * + * @param error - error object + */ +export function markErrorAsProcessed(error: unknown): void { + try { + if (typeof error !== 'object' || error === null) { + return; + } + + Object.defineProperty(error, errorSentShadowProperty, { + enumerable: false, // Prevent from beight collected by Hawk + value: true, + writable: true, + configurable: true, + }); + } catch (e) { + log('Failed to mark error as processed', 'error', e); + } +} diff --git a/packages/core/src/utils/log.ts b/packages/core/src/utils/log.ts new file mode 100644 index 0000000..4802317 --- /dev/null +++ b/packages/core/src/utils/log.ts @@ -0,0 +1,46 @@ +/** + * Logger module (environment-agnostic) + * + * @example + * log('We got an error', 'error') + */ + +/** + * Allow to use global VERSION, that will be overwritten by Vite + */ +declare const VERSION: string; + +/** + * Custom logger + * + * @param {string} msg - message + * @param {string} type - logging type 'log'|'warn'|'error'|'info' + * @param {*} [args] - argument to log with a message + * @param {string} style - additional styling to message + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default function log(msg: string, type = 'log', args?: any, style = 'color: inherit'): void { + if (typeof console === 'undefined' || typeof console[type] !== 'function') { + return; + } + + const editorLabelText = `Hawk (${VERSION})`; + const editorLabelStyle = `line-height: 1em; + color: #fff; + display: inline-block; + line-height: 1em; + background-color: rgba(0,0,0,.7); + padding: 3px 5px; + border-radius: 3px; + margin-right: 2px`; + + try { + if (['time', 'timeEnd'].includes(type)) { + console[type](`( ${editorLabelText} ) ${msg}`); + } else if (args) { + console[type](`%c${editorLabelText}%c ${msg} %o`, editorLabelStyle, style, args); + } else { + console[type](`%c${editorLabelText}%c ${msg}`, editorLabelStyle, style); + } + } catch (ignored) {} +} diff --git a/packages/core/src/utils/validation.ts b/packages/core/src/utils/validation.ts new file mode 100644 index 0000000..8db0e0b --- /dev/null +++ b/packages/core/src/utils/validation.ts @@ -0,0 +1,40 @@ +import log from './log'; +import type { AffectedUser, EventContext } from '@hawk.so/types'; +import Sanitizer from '../modules/sanitizer'; + +/** + * Validates user data - basic security checks + * + * @param user + */ +export function validateUser(user: AffectedUser): boolean { + if (!user || !Sanitizer.isObject(user)) { + log('validateUser: User must be an object', 'warn'); + + return false; + } + + // Validate required ID + if (!user.id || typeof user.id !== 'string' || user.id.trim() === '') { + log('validateUser: User ID is required and must be a non-empty string', 'warn'); + + return false; + } + + return true; +} + +/** + * Validates context data - basic security checks + * + * @param context + */ +export function validateContext(context: EventContext | undefined): boolean { + if (context && !Sanitizer.isObject(context)) { + log('validateContext: Context must be an object', 'warn'); + + return false; + } + + return true; +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..ec27090 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "baseUrl": "." + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/vite.config.ts b/packages/core/vite.config.ts new file mode 100644 index 0000000..1557d95 --- /dev/null +++ b/packages/core/vite.config.ts @@ -0,0 +1,56 @@ +import path from 'path'; +import dts from 'vite-plugin-dts'; +import { defineConfig } from 'vite'; + +import license from 'rollup-plugin-license'; + +import * as pkg from './package.json'; + +const NODE_ENV = process.argv.mode || 'development'; +const VERSION = pkg.version; + +export default defineConfig(() => { + return { + build: { + copyPublicDir: false, + lib: { + entry: path.resolve(__dirname, 'src', 'index.ts'), + name: 'HawkCore', + fileName: 'hawk-core', + }, + rollupOptions: { + plugins: [ + license({ + thirdParty: { + allow: { + test: (dependency) => { + // Return false for unlicensed dependencies. + if (!dependency.license) { + return false; + } + + // Allow MIT and Apache-2.0 licenses. + return ['MIT', 'Apache-2.0'].includes(dependency.license); + }, + failOnUnlicensed: true, + failOnViolation: true, + }, + output: path.resolve(__dirname, 'dist', 'vendor.LICENSE.txt'), + }, + }), + ], + }, + }, + + define: { + 'NODE_ENV': JSON.stringify(NODE_ENV), + 'VERSION': JSON.stringify(VERSION), + }, + + plugins: [ + dts({ + tsconfigPath: './tsconfig.json', + }), + ], + }; +}); From 980285c38034599a1e2063742cbfbca4ad972203 Mon Sep 17 00:00:00 2001 From: Reversean Date: Tue, 3 Feb 2026 01:39:31 +0300 Subject: [PATCH 4/5] refactor(javascript): add browser package --- packages/browser/README.md | 312 +++++++++ packages/browser/example/breadcrumbs-tests.js | 306 ++++++++ packages/browser/example/index.html | 323 +++++++++ packages/browser/example/sample-errors.js | 127 ++++ packages/browser/package.json | 48 ++ packages/browser/src/addons/breadcrumbs.ts | 621 ++++++++++++++++ packages/browser/src/addons/consoleCatcher.ts | 297 ++++++++ packages/browser/src/addons/userAgentInfo.ts | 17 + packages/browser/src/catcher.ts | 663 ++++++++++++++++++ packages/browser/src/index.ts | 5 + packages/browser/src/integrations/vue.ts | 253 +++++++ packages/browser/src/modules/fetchTimer.ts | 42 ++ packages/browser/src/modules/socket.ts | 212 ++++++ packages/browser/src/modules/stackParser.ts | 167 +++++ packages/browser/src/types/breadcrumbs-api.ts | 11 + packages/browser/src/types/catcher-message.ts | 21 + packages/browser/src/types/event.ts | 55 ++ .../src/types/hawk-initial-settings.ts | 93 +++ packages/browser/src/types/index.ts | 16 + packages/browser/src/types/integrations.ts | 42 ++ packages/browser/src/utils/id.ts | 14 + packages/browser/src/utils/selector.ts | 41 ++ packages/browser/tsconfig.json | 15 + packages/browser/vite.config.ts | 74 ++ 24 files changed, 3775 insertions(+) create mode 100644 packages/browser/README.md create mode 100644 packages/browser/example/breadcrumbs-tests.js create mode 100644 packages/browser/example/index.html create mode 100644 packages/browser/example/sample-errors.js create mode 100644 packages/browser/package.json create mode 100644 packages/browser/src/addons/breadcrumbs.ts create mode 100644 packages/browser/src/addons/consoleCatcher.ts create mode 100644 packages/browser/src/addons/userAgentInfo.ts create mode 100644 packages/browser/src/catcher.ts create mode 100644 packages/browser/src/index.ts create mode 100644 packages/browser/src/integrations/vue.ts create mode 100644 packages/browser/src/modules/fetchTimer.ts create mode 100644 packages/browser/src/modules/socket.ts create mode 100644 packages/browser/src/modules/stackParser.ts create mode 100644 packages/browser/src/types/breadcrumbs-api.ts create mode 100644 packages/browser/src/types/catcher-message.ts create mode 100644 packages/browser/src/types/event.ts create mode 100644 packages/browser/src/types/hawk-initial-settings.ts create mode 100644 packages/browser/src/types/index.ts create mode 100644 packages/browser/src/types/integrations.ts create mode 100644 packages/browser/src/utils/id.ts create mode 100644 packages/browser/src/utils/selector.ts create mode 100644 packages/browser/tsconfig.json create mode 100644 packages/browser/vite.config.ts diff --git a/packages/browser/README.md b/packages/browser/README.md new file mode 100644 index 0000000..5f91035 --- /dev/null +++ b/packages/browser/README.md @@ -0,0 +1,312 @@ +# Hawk JavaScript Catcher + +Error tracking for JavaScript/TypeScript applications. + +## Features + +- 🦅 Automatic error catching +- 💎 Manual error and logs sending +- 🙂 Attaching user information +- 📦 Attaching additional context +- 🛡️ Sensitive data filtering +- 🌟 Source maps consuming +- 💬 Console logs tracking +-  Vue support +-  React support + + +## Installation + +We recommend adding Hawk script to page above others to prevent missing any errors. + +### Install via NPM or Yarn + +Install package + +```shell +npm install @hawk.so/javascript --save +``` + +```shell +yarn add @hawk.so/javascript +``` + +Then import `@hawk.so/javascript` module to your code. + +```js +import HawkCatcher from '@hawk.so/javascript'; +``` + +### Load from CDN + +Get a specific version bundle path from [@hawk.so/javascript](https://www.jsdelivr.com/package/npm/@hawk.so/javascript) +— open the page and copy the link. Do not use @latest, as your setup may break in case of a major API update. + +Then require this script on your site. + +``` + +``` + +## Usage + +### Get an Integration Token + +First of all, you should register an account on +[hawk.so](https://hawk-tracker.ru/signup?utm_source=github&utm_medium=readme&utm_campaign=js_sdk&utm_content=signup_link). + +Then create a Workspace and a Project in there. You'll get an Integration Token. + +### Initialize Catcher + +Create `HawkCatcher` class instance when script will be ready and pass your Integration Token: + +```js +const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); + +// or + +const hawk = new HawkCatcher('INTEGRATION_TOKEN'); +``` + +Alternately, add `onload="const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'})"` attribute to the ` +``` + +Initialization settings: + +| name | type | required | description | +|-------------------------------|-----------------------------------------------------------|--------------|-------------------------------------------------------------------------------------| +| `token` | string | **required** | Your project's Integration Token | +| `release` | string/number | optional | Unique identifier of the release. Used for source map consuming (see below) | +| `user` | {id: string, name?: string, image?: string, url?: string} | optional | Current authenticated user | +| `context` | object | optional | Any data you want to pass with every message. Has limitation of length. | +| `vue` | Vue constructor | optional | Pass Vue constructor to set up the [Vue integration](#integrate-to-vue-application) | +| `disableGlobalErrorsHandling` | boolean | optional | Do not initialize global errors handling | +| `disableVueErrorHandler` | boolean | optional | Do not initialize Vue errors handling | +| `consoleTracking` | boolean | optional | Initialize console logs tracking | +| `breadcrumbs` | false or BreadcrumbsOptions object | optional | Configure breadcrumbs tracking (see below) | +| `beforeSend` | function(event) => event | optional | This Method allows you to filter any data you don't want sending to Hawk | + +Other available [initial settings](types/hawk-initial-settings.d.ts) are described at the type definition. + +## Manual sending + +You can send errors or other messages to the Hawk manually, for example at your `catch` blocks or any debug conditions. + +Use the `.send(message, context)` method for that. This method accepts the `message` of type `Error` or `string` +as the first parameter. The second parameter is optional, it allows passing any additional data with the event. +If you specify the `context` with the `HawkCatcher` constructor, it will be merged with the context passed to the `send` +method. + +```js +// init Hawk Catcher instance +const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); + +// somewhere in try-catch block or other custom place +hawk.send(new Error('Something went wrong'), { + myOwnDebugInfo: '1234', +}); +``` + +## User Management + +You can dynamically manage user information after the catcher is initialized: + +```js +const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); + +// Set user information +hawk.setUser({ + id: 'user123', + name: 'John Doe', + url: '/users/123', + image: 'https://example.com/avatar.jpg', +}); + +// Clear user (revert to generated user) +hawk.clearUser(); +``` + +## Context Management + +You can dynamically update context data that will be sent with all events: + +```js +const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); + +// Set context data +hawk.setContext({ + feature: 'user-dashboard', + version: '2.1.0', + environment: 'production', +}); +``` + +## Breadcrumbs + +Breadcrumbs track user interactions and events leading up to an error, providing context for debugging. + +### Default Configuration + +By default, breadcrumbs are enabled with tracking for fetch/XHR requests, navigation, and UI clicks: + +```js +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN' + // breadcrumbs enabled by default +}); +``` + +### Disabling Breadcrumbs + +To disable breadcrumbs entirely: + +```js +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN', + breadcrumbs: false +}); +``` + +### Custom Configuration + +Configure breadcrumbs tracking behavior: + +```js +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN', + breadcrumbs: { + maxBreadcrumbs: 20, // Maximum breadcrumbs to store (default: 15) + trackFetch: true, // Track fetch/XHR requests (default: true) + trackNavigation: true, // Track navigation events (default: true) + trackClicks: true, // Track UI clicks (default: true) + beforeBreadcrumb: (breadcrumb, hint) => { + // Filter or modify breadcrumbs before storing + if (breadcrumb.category === 'fetch' && breadcrumb.data?.url?.includes('/sensitive')) { + return null; // Discard this breadcrumb + } + return breadcrumb; + } + } +}); +``` + +### Breadcrumbs Options + +| Option | Type | Default | Description | +|--------------------|------------|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `maxBreadcrumbs` | `number` | `15` | Maximum number of breadcrumbs to store. When the limit is reached, oldest breadcrumbs are removed (FIFO). | +| `trackFetch` | `boolean` | `true` | Automatically track `fetch()` and `XMLHttpRequest` calls as breadcrumbs. Captures request URL, method, status code, and response time. | +| `trackNavigation` | `boolean` | `true` | Automatically track navigation events (History API: `pushState`, `replaceState`, `popstate`). Captures route changes. | +| `trackClicks` | `boolean` | `true` | Automatically track UI click events. Captures element selector, coordinates, and other click metadata. | +| `beforeBreadcrumb` | `function` | `undefined` | Hook called before each breadcrumb is stored. Receives `(breadcrumb, hint)` and can return modified breadcrumb, `null` to discard it, or the original breadcrumb. Useful for filtering sensitive data or PII. | + +### Manual Breadcrumbs + +Add custom breadcrumbs manually: + +```js +hawk.breadcrumbs.add({ + type: 'logic', + category: 'auth', + message: 'User logged in', + level: 'info', + data: { userId: '123' } +}); +``` + +### Breadcrumb Methods + +```js +// Add a breadcrumb +hawk.breadcrumbs.add(breadcrumb, hint); + +// Get current breadcrumbs +const breadcrumbs = hawk.breadcrumbs.get(); + +// Clear all breadcrumbs +hawk.breadcrumbs.clear(); +``` + +## Source maps consuming + +If your bundle is minified, it is useful to pass source-map files to the Hawk. After that you will see beautiful +original source code lines in Hawk Garage instead of minified code. + +To enable source map consuming you should do two things: + +- Send the source map and the release identifier to the Hawk after you build a new version of the script. For example + with the [Hawk Webpack Plugin](https://github.com/codex-team/hawk.webpack.plugin) or with cURL request. +- Pass the release identifier to the Hawk Catcher using `release` option. + +## Testing and server responses + +To make sure that Hawk is working right, call `test()` method from `HawkCatcher` class instance in browser's console. +`test()` method sends fake error to server. Then, open Hawk and find a test event at the Project's page. + +## Sensitive data filtering + +You can filter any data that you don't want to send to Hawk. Use the `beforeSend()` hook for that reason. + +```js +window.hawk = new HawkCatcher({ + token: 'INTEGRATION TOKEN', + beforeSend(event) { + if (event.user && event.user.name) { + delete event.user.name; + } + + return event; + } +}) +``` + +## Dismiss error + +You can use the `beforeSend()` hook to prevent sending a particular event. Return `false` for that. + +## Usage with    Vue.js + +Vue apps have their own error handler, so if you want to catcher errors thrown inside Vue components, you should set up +a Vue integration. + +Pass the Vue constructor with the initial settings: + +```js +import Vue from 'vue'; + +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN', + vue: Vue // the Vue constructor you tweak +}); +``` + +or pass it any moment after Hawk Catcher was instantiated: + +```js +import Vue from 'vue'; + +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN', +}); + +hawk.connectVue(Vue) +``` + +## Usage with    React + +React is suppported out of the box. No additional setup required. + +Create the Hawk Catcher instance in a `index.js` file of your project. + +```js +import HawkCatcher from '@hawk.so/javascript'; + +const hawk = new HawkCatcher({ + token: 'INTEGRATION_TOKEN' +}); +``` diff --git a/packages/browser/example/breadcrumbs-tests.js b/packages/browser/example/breadcrumbs-tests.js new file mode 100644 index 0000000..96124a7 --- /dev/null +++ b/packages/browser/example/breadcrumbs-tests.js @@ -0,0 +1,306 @@ +/** + * Breadcrumbs Management + */ +const buttonAddBreadcrumb = document.getElementById('btn-add-breadcrumb'); +const buttonGetBreadcrumbs = document.getElementById('btn-get-breadcrumbs'); +const buttonClearBreadcrumbs = document.getElementById('btn-clear-breadcrumbs'); +const breadcrumbsOutput = document.getElementById('breadcrumbs-output'); + +buttonAddBreadcrumb.addEventListener('click', () => { + const message = document.getElementById('breadcrumbMessage').value; + const type = document.getElementById('breadcrumbType').value; + const level = document.getElementById('breadcrumbLevel').value; + const category = document.getElementById('breadcrumbCategory').value; + + if (!message.trim()) { + alert('Breadcrumb message is required'); + + return; + } + + window.hawk.breadcrumbs.add({ + message, + type, + level, + ...(category.trim() && { category }), + data: { + timestamp: new Date().toISOString(), + custom: 'manual breadcrumb', + }, + }); + + breadcrumbsOutput.textContent = `✓ Breadcrumb added: ${message}`; +}); + +buttonGetBreadcrumbs.addEventListener('click', () => { + const breadcrumbs = window.hawk.breadcrumbs.get(); + + if (breadcrumbs.length === 0) { + breadcrumbsOutput.textContent = 'No breadcrumbs yet'; + + return; + } + + breadcrumbsOutput.textContent = JSON.stringify(breadcrumbs, null, 2); +}); + +buttonClearBreadcrumbs.addEventListener('click', () => { + window.hawk.breadcrumbs.clear(); + breadcrumbsOutput.textContent = '✓ Breadcrumbs cleared'; +}); + +/** + * Test All Breadcrumb Types + */ +const buttonTestDefault = document.getElementById('btn-test-default'); +const buttonTestRequest = document.getElementById('btn-test-request'); +const buttonTestUI = document.getElementById('btn-test-ui'); +const buttonTestNavigation = document.getElementById('btn-test-navigation'); +const buttonTestLogic = document.getElementById('btn-test-logic'); +const buttonTestError = document.getElementById('btn-test-error'); +const buttonTestAllTypes = document.getElementById('btn-test-all-types'); + +/** + * Test Default breadcrumb (manual) + */ +buttonTestDefault.addEventListener('click', () => { + /** + * Default breadcrumbs are always added manually via hawk.breadcrumbs.add() + */ + window.hawk.breadcrumbs.add({ + type: 'default', + level: 'info', + category: 'user.action', + message: 'User clicked on default event button', + data: { + action: 'button_click', + context: 'breadcrumb_testing', + }, + }); + breadcrumbsOutput.textContent = '✓ Default breadcrumb added manually'; +}); + +/** + * Test Request breadcrumb (automatic via fetch) + */ +buttonTestRequest.addEventListener('click', async () => { + breadcrumbsOutput.textContent = 'Testing request breadcrumb...'; + + try { + const response = await fetch('https://api.github.com/zen'); + const text = await response.text(); + + breadcrumbsOutput.textContent = `✓ Request breadcrumb added (${response.status}): "${text}"`; + } catch (error) { + breadcrumbsOutput.textContent = `✗ Request failed: ${error.message}`; + } +}); + +/** + * Test UI breadcrumb (automatic tracking) + */ +buttonTestUI.addEventListener('click', () => { + /** + * Create a test element and click it to trigger automatic UI breadcrumb + * BreadcrumbManager automatically captures click events when trackClicks: true + */ + const testElement = document.createElement('button'); + + testElement.id = 'auto-click-test'; + testElement.className = 'test-button'; + testElement.textContent = 'Auto Test'; + testElement.style.position = 'absolute'; + testElement.style.opacity = '0'; + testElement.style.pointerEvents = 'none'; + document.body.appendChild(testElement); + + /** + * Trigger a click event + */ + testElement.click(); + + /** + * Clean up + */ + setTimeout(() => { + document.body.removeChild(testElement); + }, 100); + + breadcrumbsOutput.textContent = '✓ UI Click breadcrumb added automatically'; +}); + +/** + * Test Navigation breadcrumb (automatic tracking) + */ +buttonTestNavigation.addEventListener('click', () => { + /** + * Change the hash to trigger automatic navigation breadcrumb + * BreadcrumbManager automatically captures this event + */ + window.location.hash = 'breadcrumb-test-' + Date.now(); + + breadcrumbsOutput.textContent = '✓ Navigation breadcrumb added automatically'; +}); + +/** + * Test Logic breadcrumb (manual) + */ +buttonTestLogic.addEventListener('click', () => { + /** + * Simulate some logic operations + */ + const startTime = performance.now(); + + /** + * Complex calculation for testing + * + * @param {number} n - Number of iterations + * @returns {number} Calculation result + */ + function complexCalculation(n) { + let result = 0; + + for (let i = 0; i < n; i++) { + result += Math.sqrt(i); + } + + return result; + } + + const result = complexCalculation(10000); + const duration = performance.now() - startTime; + + /** + * Logic breadcrumbs are always added manually to track application flow + */ + window.hawk.breadcrumbs.add({ + type: 'logic', + level: 'debug', + category: 'calculation.complex', + message: 'Performed complex calculation', + data: { + operation: 'complexCalculation', + iterations: 10000, + result: result, + durationMs: duration.toFixed(2), + }, + }); + + breadcrumbsOutput.textContent = `✓ Logic breadcrumb added manually (${duration.toFixed(2)}ms)`; +}); + +/** + * Test Error breadcrumb (manual) + */ +buttonTestError.addEventListener('click', () => { + try { + /** + * Intentionally cause an error but catch it + */ + JSON.parse('invalid json {{{'); + } catch (error) { + /** + * Caught errors can be manually added as breadcrumbs + * Uncaught errors are sent to Hawk automatically, not as breadcrumbs + */ + window.hawk.breadcrumbs.add({ + type: 'error', + level: 'error', + category: 'json.parse', + message: `JSON parse error: ${error.message}`, + data: { + error: error.name, + message: error.message, + input: 'invalid json {{{', + }, + }); + + breadcrumbsOutput.textContent = `✓ Error breadcrumb added manually: ${error.message}`; + } +}); + +/** + * Test All Types in sequence + */ +buttonTestAllTypes.addEventListener('click', async () => { + breadcrumbsOutput.textContent = 'Running all breadcrumb types...'; + + /** + * 1. Default + */ + window.hawk.breadcrumbs.add({ + type: 'default', + level: 'info', + message: 'Sequence started', + }); + + await new Promise(resolve => setTimeout(resolve, 200)); + + /** + * 2. Logic + */ + window.hawk.breadcrumbs.add({ + type: 'logic', + level: 'debug', + category: 'sequence.step', + message: 'Processing step 1', + data: { + step: 1, + }, + }); + + await new Promise(resolve => setTimeout(resolve, 200)); + + /** + * 3. UI (automatic) + */ + const autoClickElement = document.createElement('button'); + + autoClickElement.id = 'sequence-auto-click'; + autoClickElement.style.position = 'absolute'; + autoClickElement.style.opacity = '0'; + autoClickElement.style.pointerEvents = 'none'; + document.body.appendChild(autoClickElement); + autoClickElement.click(); + document.body.removeChild(autoClickElement); + + await new Promise(resolve => setTimeout(resolve, 200)); + + /** + * 4. Request (automatic) + */ + try { + await fetch('https://api.github.com/zen'); + } catch (error) { + /** + * Fetch will be captured automatically + */ + } + + await new Promise(resolve => setTimeout(resolve, 200)); + + /** + * 5. Navigation (automatic) + */ + window.location.hash = 'sequence-test-' + Date.now(); + + await new Promise(resolve => setTimeout(resolve, 200)); + + /** + * 6. Error + */ + try { + throw new Error('Test error in sequence'); + } catch (error) { + window.hawk.breadcrumbs.add({ + type: 'error', + level: 'warning', + message: `Caught error: ${error.message}`, + data: { + error: error.name, + }, + }); + } + + breadcrumbsOutput.textContent = '✓ All breadcrumb types added! Check "Get Breadcrumbs"'; +}); diff --git a/packages/browser/example/index.html b/packages/browser/example/index.html new file mode 100644 index 0000000..91f6185 --- /dev/null +++ b/packages/browser/example/index.html @@ -0,0 +1,323 @@ + + + + + Hawk JavaScript example + + + + +
+

Hawk JavaScript Catcher

+ https://github.com/codex-team/hawk.javascript +
+
+

Send test event

+ +
+
+

Send real error

+ +
+
+

Send Unhandled promise rejection error

+ +
+
+

+ Send event manually + Through the .send(error, context) method +

+ + +
+
+ +
+
+

Send the specified number of errors

+ + +

+ + +

+ +
+
+

Test console catcher

+ + +

+ + +

+ +
+
+

User Management

+ + +

+ + +

+ + +

+ + +
+
+

Context Management

+ + +

+ + +

+ +
+
+

Breadcrumbs Management

+ + +

+ + +

+ + +

+ + +

+ + + + +

Test All Breadcrumb Types Quick examples for each type

+
+ + + + + + +
+
+ +
+
+ +
+

Test Vue integration: $root

+
+ +
+ +
+
+

Test Vue integration: <test-component>

+
+ +
+ +
+ + + + + diff --git a/packages/browser/example/sample-errors.js b/packages/browser/example/sample-errors.js new file mode 100644 index 0000000..1f88c10 --- /dev/null +++ b/packages/browser/example/sample-errors.js @@ -0,0 +1,127 @@ +/** + * Real error sample + */ +function realErrorSample() { + /** + * Error wrapper used to fill stack + */ + function errorWrapperForStack(initialValue) { + const a = 1; + + a = initialValue; + } + + errorWrapperForStack(2); +} + +/** + * Calling function that has syntax error; + */ +const buttonRealError = document.getElementById('btn-real-error'); + +buttonRealError.addEventListener('click', realErrorSample); + +/** + * Unhandled promise rejection + */ +const buttonPromiseRejection = document.getElementById('btn-promise-rejection'); + +buttonPromiseRejection.addEventListener('click', function promiseRejectionSample() { + /** + * Promise.reject('This is a sample rejected promise'); + */ + Promise.resolve() + .then(realErrorSample) + .then(() => {}); +}); + +/** + * Send many errors + */ +const buttonSendMany = document.getElementById('btn-send-many'); + +buttonSendMany.addEventListener('click', function sendManyErrors() { + const inputElement = document.getElementById('errorsNumber'); + const errorType = document.getElementById('errorType').value; + const errorsNumber = inputElement.value; + + for (let i = 0; i < errorsNumber; i++) { + window.hawk.send(new window[errorType]('Test many error')); + } +}); + +/** + * Console watcher test + */ +const buttonConsoleTest = document.getElementById('btn-console-test'); + +buttonConsoleTest.addEventListener('click', function consoleLogPrint() { + const consoleMethod = document.getElementById('consoleMethod').value; + const text = document.getElementById('consoleCatcherTestTextInput').value; + + console[consoleMethod](text); +}); + +/** + * Button for the manual sending + */ +const buttonManualSending = document.getElementById('btn-manual-sending'); + +buttonManualSending.addEventListener('click', () => { + const contextSample = document.getElementById('errorContext').value; + + window.hawk.send( + new Error('Manual sending example'), + contextSample.trim().length ? { contextSample } : undefined + ); +}); + +/** + * User Management + */ +const buttonSetUser = document.getElementById('btn-set-user'); +const buttonClearUser = document.getElementById('btn-clear-user'); + +buttonSetUser.addEventListener('click', () => { + const userId = document.getElementById('userId').value; + const userName = document.getElementById('userName').value; + const userUrl = document.getElementById('userUrl').value; + + if (!userId.trim()) { + alert('User ID is required'); + return; + } + + const user = { + id: userId, + ...(userName.trim() && { name: userName }), + ...(userUrl.trim() && { url: userUrl }), + }; + + window.hawk.setUser(user); +}); + +buttonClearUser.addEventListener('click', () => { + window.hawk.clearUser(); +}); + +/** + * Context Management + */ +const buttonSetContext = document.getElementById('btn-set-context'); + +buttonSetContext.addEventListener('click', () => { + const contextKey = document.getElementById('contextKey').value; + const contextValue = document.getElementById('contextValue').value; + + if (!contextKey.trim()) { + alert('Context key is required'); + return; + } + + const context = { + [contextKey]: contextValue, + }; + + window.hawk.setContext(context); +}); diff --git a/packages/browser/package.json b/packages/browser/package.json new file mode 100644 index 0000000..a021ac7 --- /dev/null +++ b/packages/browser/package.json @@ -0,0 +1,48 @@ +{ + "name": "@hawk.so/browser", + "version": "1.0.0", + "description": "Browser JavaScript errors tracking for Hawk.so", + "files": [ + "dist" + ], + "main": "./dist/hawk-browser.umd.js", + "module": "./dist/hawk-browser.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/hawk-browser.mjs", + "require": "./dist/hawk-browser.umd.js" + } + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "stats": "size-limit > stats.txt", + "lint": "eslint --fix \"src/**/*.{js,ts}\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/codex-team/hawk.javascript.git", + "directory": "packages/browser" + }, + "author": { + "name": "CodeX", + "email": "team@codex.so" + }, + "license": "AGPL-3.0-only", + "bugs": { + "url": "https://github.com/codex-team/hawk.javascript/issues" + }, + "homepage": "https://github.com/codex-team/hawk.javascript#readme", + "dependencies": { + "@hawk.so/core": "^1.0.0", + "error-stack-parser": "^2.1.4" + }, + "devDependencies": { + "@hawk.so/types": "0.5.2", + "vite": "^7.3.1", + "vite-plugin-dts": "^4.2.4", + "vue": "^2" + } +} diff --git a/packages/browser/src/addons/breadcrumbs.ts b/packages/browser/src/addons/breadcrumbs.ts new file mode 100644 index 0000000..028c300 --- /dev/null +++ b/packages/browser/src/addons/breadcrumbs.ts @@ -0,0 +1,621 @@ +/** + * @file Breadcrumbs module - captures chronological trail of events before an error + */ +import type { Breadcrumb, BreadcrumbLevel, BreadcrumbType, Json, JsonNode } from '@hawk.so/types'; +import { Sanitizer, log } from '@hawk.so/core'; +import { buildElementSelector } from '../utils/selector'; + +/** + * Default maximum number of breadcrumbs to store + */ +const DEFAULT_MAX_BREADCRUMBS = 15; + +/** + * Hint object passed to beforeBreadcrumb callback + */ +export interface BreadcrumbHint { + /** + * Original event that triggered the breadcrumb (if any) + */ + event?: Event | Response | XMLHttpRequest; + + /** + * Request info for fetch/xhr breadcrumbs + */ + input?: RequestInfo | URL; + + /** + * Response data for fetch/xhr breadcrumbs + */ + response?: Response; + + /** + * XHR instance for xhr breadcrumbs + */ + xhr?: XMLHttpRequest; +} + +/** + * Configuration options for breadcrumbs + */ +export interface BreadcrumbsOptions { + /** + * Maximum number of breadcrumbs to store (FIFO) + * + * @default 15 + */ + maxBreadcrumbs?: number; + + /** + * Hook called before each breadcrumb is stored + * Return null to discard the breadcrumb + * Return modified breadcrumb to store it + */ + beforeBreadcrumb?: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => Breadcrumb | null; + + /** + * Enable automatic fetch/XHR breadcrumbs + * + * @default true + */ + trackFetch?: boolean; + + /** + * Enable automatic navigation breadcrumbs (history API) + * + * @default true + */ + trackNavigation?: boolean; + + /** + * Enable automatic UI click breadcrumbs + * + * @default true + */ + trackClicks?: boolean; +} + +/** + * Breadcrumb input type - breadcrumb data with optional timestamp + * (timestamp will be auto-generated if not provided) + */ +export type BreadcrumbInput = Omit & { timestamp?: Breadcrumb['timestamp'] }; + +/** + * Internal breadcrumbs options - all fields except 'beforeBreadcrumb' are required + * (they have default values and are always set during init) + */ +interface InternalBreadcrumbsOptions { + maxBreadcrumbs: number; + trackFetch: boolean; + trackNavigation: boolean; + trackClicks: boolean; + beforeBreadcrumb?: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => Breadcrumb | null; +} + +/** + * BreadcrumbManager - singleton that manages breadcrumb collection and storage + */ +export class BreadcrumbManager { + /** + * Singleton instance + */ + private static instance: BreadcrumbManager | null = null; + + /** + * Breadcrumbs buffer (FIFO) + */ + private readonly breadcrumbs: Breadcrumb[] = []; + + /** + * Configuration options - all fields are guaranteed to be set (except optional beforeBreadcrumb) + */ + private options: InternalBreadcrumbsOptions; + + /** + * Initialization flag + */ + private isInitialized = false; + + /** + * Original fetch function (for restoration) + */ + private originalFetch: typeof fetch | null = null; + + /** + * Original XMLHttpRequest.open (for restoration) + */ + private originalXHROpen: typeof XMLHttpRequest.prototype.open | null = null; + + /** + * Original XMLHttpRequest.send (for restoration) + */ + private originalXHRSend: typeof XMLHttpRequest.prototype.send | null = null; + + /** + * Original history.pushState (for restoration) + */ + private originalPushState: typeof history.pushState | null = null; + + /** + * Original history.replaceState (for restoration) + */ + private originalReplaceState: typeof history.replaceState | null = null; + + /** + * Click event handler reference (for removal) + */ + private clickHandler: ((event: MouseEvent) => void) | null = null; + + /** + * Popstate event handler reference (for removal) + */ + private popstateHandler: (() => void) | null = null; + + /** + * Private constructor to enforce singleton pattern + */ + private constructor() { + this.options = { + maxBreadcrumbs: DEFAULT_MAX_BREADCRUMBS, + trackFetch: true, + trackNavigation: true, + trackClicks: true, + }; + } + + /** + * Get singleton instance + */ + public static getInstance(): BreadcrumbManager { + BreadcrumbManager.instance ??= new BreadcrumbManager(); + + return BreadcrumbManager.instance; + } + + /** + * Initialize breadcrumbs with options and start auto-capture + * + * @param options - Configuration options for breadcrumbs + */ + public init(options: BreadcrumbsOptions = {}): void { + if (this.isInitialized) { + log('[BreadcrumbManager] init has already been called; breadcrumb configuration is global and subsequent init options are ignored.', 'warn'); + + return; + } + + this.options = { + maxBreadcrumbs: options.maxBreadcrumbs ?? DEFAULT_MAX_BREADCRUMBS, + beforeBreadcrumb: options.beforeBreadcrumb, + trackFetch: options.trackFetch ?? true, + trackNavigation: options.trackNavigation ?? true, + trackClicks: options.trackClicks ?? true, + }; + + this.isInitialized = true; + + /** + * Setup auto-capture handlers + */ + if (this.options.trackFetch) { + this.monkeypatchFetch(); + this.wrapXHR(); + } + + if (this.options.trackNavigation) { + this.wrapHistory(); + } + + if (this.options.trackClicks) { + this.setupClickTracking(); + } + } + + /** + * Add a breadcrumb to the buffer + * + * @param breadcrumb - The breadcrumb data to add + * @param hint - Optional hint object with original event data (Event, Response, XMLHttpRequest, etc.) + * Used by beforeBreadcrumb callback to access original event context + */ + public addBreadcrumb(breadcrumb: BreadcrumbInput, hint?: BreadcrumbHint): void { + /** + * Ensure timestamp + */ + const bc: Breadcrumb = { + ...breadcrumb, + timestamp: breadcrumb.timestamp ?? Date.now(), + }; + + /** + * Apply beforeBreadcrumb hook + */ + if (this.options.beforeBreadcrumb) { + const result = this.options.beforeBreadcrumb(bc, hint); + + if (result === null) { + /** + * Discard breadcrumb + */ + return; + } + + Object.assign(bc, result); + } + + /** + * Sanitize data and message + */ + if (bc.data) { + bc.data = Sanitizer.sanitize(bc.data) as Record; + } + + if (bc.message) { + bc.message = Sanitizer.sanitize(bc.message) as string; + } + + /** + * Add to buffer (FIFO) + */ + this.breadcrumbs.push(bc); + + if (this.breadcrumbs.length > this.options.maxBreadcrumbs) { + this.breadcrumbs.shift(); + } + } + + /** + * Get current breadcrumbs snapshot (oldest to newest) + */ + public getBreadcrumbs(): Breadcrumb[] { + return [ ...this.breadcrumbs ]; + } + + /** + * Clear all breadcrumbs + */ + public clearBreadcrumbs(): void { + this.breadcrumbs.length = 0; + } + + /** + * Destroy the manager and restore original functions + */ + public destroy(): void { + /** + * Restore fetch + */ + if (this.originalFetch) { + window.fetch = this.originalFetch; + this.originalFetch = null; + } + + /** + * Restore XHR + */ + if (this.originalXHROpen) { + XMLHttpRequest.prototype.open = this.originalXHROpen; + this.originalXHROpen = null; + } + + if (this.originalXHRSend) { + XMLHttpRequest.prototype.send = this.originalXHRSend; + this.originalXHRSend = null; + } + + /** + * Restore history + */ + if (this.originalPushState) { + history.pushState = this.originalPushState; + this.originalPushState = null; + } + + if (this.originalReplaceState) { + history.replaceState = this.originalReplaceState; + this.originalReplaceState = null; + } + + /** + * Remove click handler + */ + if (this.clickHandler) { + document.removeEventListener('click', this.clickHandler, { capture: true }); + this.clickHandler = null; + } + + /** + * Remove popstate handler + */ + if (this.popstateHandler) { + window.removeEventListener('popstate', this.popstateHandler); + this.popstateHandler = null; + } + + this.clearBreadcrumbs(); + this.isInitialized = false; + BreadcrumbManager.instance = null; + } + + + /** + * Monkeypatch fetch API to capture HTTP breadcrumbs + */ + private monkeypatchFetch(): void { + if (typeof fetch === 'undefined') { + return; + } + + const originalFetch = window.fetch.bind(window); + + this.originalFetch = originalFetch; + + // eslint-disable-next-line @typescript-eslint/no-this-alias + const manager = this; + + window.fetch = async function (input: RequestInfo | URL, init?: RequestInit): Promise { + const startTime = Date.now(); + const method = init?.method || 'GET'; + let url: string; + + if (typeof input === 'string') { + url = input; + } else if (input instanceof URL) { + url = input.href; + } else { + url = input.url; + } + + let response: Response; + + try { + response = await originalFetch(input, init); + + const duration = Date.now() - startTime; + + manager.addBreadcrumb({ + type: 'request', + category: 'fetch', + message: `${response.status} ${method} ${url}`, + level: response.ok ? 'info' : 'error', + data: { + url, + method, + statusCode: response.status, + durationMs: duration, + }, + }, { + input, + response, + }); + + return response; + } catch (error) { + const duration = Date.now() - startTime; + + manager.addBreadcrumb({ + type: 'request', + category: 'fetch', + message: `[FAIL] ${method} ${url}`, + level: 'error', + data: { + url, + method, + statusCode: 0, + durationMs: duration, + error: error instanceof Error ? error.message : String(error), + }, + }, { + input, + }); + + throw error; + } + }; + } + + /** + * Wrap XMLHttpRequest to capture XHR breadcrumbs + */ + private wrapXHR(): void { + if (typeof XMLHttpRequest === 'undefined') { + return; + } + + // eslint-disable-next-line @typescript-eslint/no-this-alias + const manager = this; + const originalOpen = XMLHttpRequest.prototype.open; + const originalSend = XMLHttpRequest.prototype.send; + + this.originalXHROpen = originalOpen; + this.originalXHRSend = originalSend; + + /** + * Store request info on the XHR instance + */ + interface XHRWithBreadcrumb extends XMLHttpRequest { + hawkMethod?: string; + hawkUrl?: string; + hawkStart?: number; + hawkListenerAdded?: boolean; + } + + XMLHttpRequest.prototype.open = function (this: XHRWithBreadcrumb, method: string, url: string | URL, ...args: unknown[]) { + this.hawkMethod = method; + this.hawkUrl = typeof url === 'string' ? url : url.href; + + return originalOpen.apply(this, [method, url, ...args] as Parameters); + }; + + XMLHttpRequest.prototype.send = function (this: XHRWithBreadcrumb, body?: Document | XMLHttpRequestBodyInit | null) { + this.hawkStart = Date.now(); + + const onReadyStateChange = (): void => { + if (this.readyState === XMLHttpRequest.DONE) { + const duration = Date.now() - (this.hawkStart || Date.now()); + const method = this.hawkMethod || 'GET'; + const url = this.hawkUrl || ''; + const status = this.status; + + manager.addBreadcrumb({ + type: 'request', + category: 'xhr', + message: `${status} ${method} ${url}`, + level: status >= 200 && status < 400 ? 'info' : 'error', + data: { + url, + method, + statusCode: status, + durationMs: duration, + }, + }, { + xhr: this, + }); + } + }; + + /** + * Add listener only once per XHR instance to prevent duplicates + */ + if (!this.hawkListenerAdded) { + this.addEventListener('readystatechange', onReadyStateChange); + this.hawkListenerAdded = true; + } + + return originalSend.call(this, body); + }; + } + + /** + * Wrap History API to capture navigation breadcrumbs + */ + private wrapHistory(): void { + if (typeof history === 'undefined') { + return; + } + + // eslint-disable-next-line @typescript-eslint/no-this-alias + const manager = this; + let lastUrl = window.location.href; + + const createNavigationBreadcrumb = (to: string): void => { + const from = lastUrl; + + lastUrl = to; + + manager.addBreadcrumb({ + type: 'navigation', + category: 'navigation', + message: `Navigated to ${to}`, + level: 'info', + data: { + from, + to, + }, + }); + }; + + /** + * Wrap pushState + */ + this.originalPushState = history.pushState; + history.pushState = function (...args) { + const result = manager.originalPushState!.apply(this, args); + + createNavigationBreadcrumb(window.location.href); + + return result; + }; + + /** + * Wrap replaceState + */ + this.originalReplaceState = history.replaceState; + history.replaceState = function (...args) { + const result = manager.originalReplaceState!.apply(this, args); + + createNavigationBreadcrumb(window.location.href); + + return result; + }; + + /** + * Listen for popstate (back/forward) + */ + this.popstateHandler = (): void => { + createNavigationBreadcrumb(window.location.href); + }; + + window.addEventListener('popstate', this.popstateHandler); + } + + /** + * Setup click event tracking for UI breadcrumbs + */ + private setupClickTracking(): void { + // eslint-disable-next-line @typescript-eslint/no-this-alias + const manager = this; + + this.clickHandler = (event: MouseEvent): void => { + const target = event.target as HTMLElement; + + if (!target) { + return; + } + + /** + * Build a simple selector + */ + const selector = buildElementSelector(target); + + /** + * Get text content (limited) + */ + const text = (target.textContent || target.innerText || '').trim().substring(0, 50); + + manager.addBreadcrumb({ + type: 'ui', + category: 'ui.click', + message: `Click on ${selector}`, + level: 'info', + data: { + selector, + text, + tagName: target.tagName, + }, + }, { + event, + }); + }; + + document.addEventListener('click', this.clickHandler, { + capture: true, + passive: true }); + } +} + +/** + * Helper function to create a breadcrumb object + * + * @param message - The breadcrumb message + * @param options - Optional breadcrumb configuration + */ +export function createBreadcrumb( + message: string, + options?: { + type?: BreadcrumbType; + category?: string; + level?: BreadcrumbLevel; + data?: Record; + } +): Breadcrumb { + return { + timestamp: Date.now(), + message, + type: options?.type ?? 'default', + category: options?.category, + level: options?.level ?? 'info', + data: options?.data, + }; +} diff --git a/packages/browser/src/addons/consoleCatcher.ts b/packages/browser/src/addons/consoleCatcher.ts new file mode 100644 index 0000000..7963b58 --- /dev/null +++ b/packages/browser/src/addons/consoleCatcher.ts @@ -0,0 +1,297 @@ +/** + * @file Module for intercepting console logs with stack trace capture + */ +import type { ConsoleLogEvent } from '@hawk.so/types'; +import { Sanitizer } from '@hawk.so/core'; + +/** + * Maximum number of console logs to store + */ +const MAX_LOGS = 20; + +/** + * Console methods to intercept + */ +const CONSOLE_METHODS: string[] = ['log', 'warn', 'error', 'info', 'debug']; + +/** + * Console catcher class for intercepting and capturing console logs. + * + * This singleton class wraps native console methods to capture all console output with accurate + * stack traces. When developers click on console messages in DevTools, they are taken to the + * original call site in their code, not to the interceptor's code. + */ +export class ConsoleCatcher { + /** + * Singleton instance + */ + private static instance: ConsoleCatcher | null = null; + + /** + * Console output buffer + */ + private readonly consoleOutput: ConsoleLogEvent[] = []; + + /** + * Initialization flag + */ + private isInitialized = false; + + /** + * Private constructor to enforce singleton pattern + */ + private constructor() {} + + /** + * Get singleton instance + */ + public static getInstance(): ConsoleCatcher { + ConsoleCatcher.instance ??= new ConsoleCatcher(); + + return ConsoleCatcher.instance; + } + + /** + * Converts any argument to its string representation + * + * @param arg - Value to convert to string + * @throws Error if the argument can not be stringified, for example by such reason: + * SecurityError: Failed to read a named property 'toJSON' from 'Window': Blocked a frame with origin "https://codex.so" from accessing a cross-origin frame. + */ + private stringifyArg(arg: unknown): string { + if (typeof arg === 'string') { + return arg; + } + if (typeof arg === 'number' || typeof arg === 'boolean') { + return String(arg); + } + + /** + * Sanitize the argument before stringifying to handle circular references, deep objects, etc + * And then it can be stringified safely + */ + const sanitized = Sanitizer.sanitize(arg); + + return JSON.stringify(sanitized); + } + + /** + * Formats console arguments handling %c directives + * + * @param args - Console arguments that may include style directives + */ + private formatConsoleArgs(args: unknown[]): { + message: string; + styles: string[]; + } { + if (args.length === 0) { + return { + message: '', + styles: [], + }; + } + + const firstArg = args[0]; + + if (typeof firstArg !== 'string' || !firstArg.includes('%c')) { + return { + message: args.map(arg => { + try { + return this.stringifyArg(arg); + } catch (error) { + return '[Error stringifying argument: ' + (error instanceof Error ? error.message : String(error)) + ']'; + } + }).join(' '), + styles: [], + }; + } + + // Handle %c formatting + const message = args[0] as string; + const styles: string[] = []; + + // Extract styles from arguments + let styleIndex = 0; + + for (let i = 1; i < args.length; i++) { + const arg = args[i]; + + if (typeof arg === 'string' && message.indexOf('%c', styleIndex) !== -1) { + styles.push(arg); + styleIndex = message.indexOf('%c', styleIndex) + 2; + } + } + + // Add remaining arguments that aren't styles + const remainingArgs = args + .slice(styles.length + 1) + .map(arg => { + try { + return this.stringifyArg(arg); + } catch (error) { + return '[Error stringifying argument: ' + (error instanceof Error ? error.message : String(error)) + ']'; + } + }) + .join(' '); + + return { + message: message + (remainingArgs ? ' ' + remainingArgs : ''), + styles, + }; + } + + /** + * Extracts user code stack trace from the full stack trace. + * + * Dynamic stack frame identification: + * - Problem: Fixed slice(2) doesn't work reliably because the number of internal frames + * varies based on code structure (arrow functions, class methods, TS→JS transforms, etc.). + * - Solution: Find the first stack frame that doesn't belong to consoleCatcher module. + * This ensures DevTools will navigate to the user's code, not the interceptor's code. + * + * @param errorStack - Full stack trace string from Error.stack + * @returns Object with userStack (full stack from user code) and fileLine (first frame for DevTools link) + */ + private extractUserStack(errorStack: string | undefined): { + userStack: string; + fileLine: string; + } { + const stackLines = errorStack?.split('\n') || []; + const consoleCatcherPattern = /consoleCatcher/i; + let userFrameIndex = 1; // Skip Error message line + + // Find first frame that doesn't belong to consoleCatcher module + for (let i = 1; i < stackLines.length; i++) { + if (!consoleCatcherPattern.test(stackLines[i])) { + userFrameIndex = i; + break; + } + } + + // Extract user code stack (everything from the first non-consoleCatcher frame) + const userStack = stackLines.slice(userFrameIndex).join('\n'); + // First frame is used as fileLine - this is what DevTools shows as clickable link + const fileLine = stackLines[userFrameIndex]?.trim() || ''; + + return { userStack, + fileLine }; + } + + /** + * Adds a console log event to the output buffer + * + * @param logEvent - The console log event to be added to the output buffer + */ + private addToConsoleOutput(logEvent: ConsoleLogEvent): void { + if (this.consoleOutput.length >= MAX_LOGS) { + this.consoleOutput.shift(); + } + this.consoleOutput.push(logEvent); + } + + /** + * Creates a console log event from an error or promise rejection + * + * @param event - The error event or promise rejection event to convert + */ + private createConsoleEventFromError(event: ErrorEvent | PromiseRejectionEvent): ConsoleLogEvent { + if (event instanceof ErrorEvent) { + return { + method: 'error', + timestamp: new Date(), + type: event.error?.name || 'Error', + message: event.error?.message || event.message, + stack: event.error?.stack || '', + fileLine: event.filename + ? `${event.filename}:${event.lineno}:${event.colno}` + : '', + }; + } + + return { + method: 'error', + timestamp: new Date(), + type: 'UnhandledRejection', + message: event.reason?.message || String(event.reason), + stack: event.reason?.stack || '', + fileLine: '', + }; + } + + /** + * Initializes the console interceptor by overriding default console methods. + * + * Wraps native console methods to intercept all calls, capture their context, and generate + * accurate stack traces that point to the original call site (not the interceptor). + */ + // eslint-disable-next-line @typescript-eslint/member-ordering + public init(): void { + if (this.isInitialized) { + return; + } + + this.isInitialized = true; + + CONSOLE_METHODS.forEach((method) => { + if (typeof window.console[method] !== 'function') { + return; + } + + // Store original function to forward calls after interception + const oldFunction = window.console[method].bind(window.console); + + /** + * Override console method to intercept all calls. + * + * For each intercepted call, we: + * 1. Generate a stack trace to find the original call site + * 2. Format the console arguments into a structured message + * 3. Create a ConsoleLogEvent with metadata + * 4. Store it in the buffer + * 5. Forward the call to the native console (so output still appears in DevTools) + * + * @param {...any} args + */ + window.console[method] = (...args: unknown[]): void => { + // Capture full stack trace and extract user code stack + const errorStack = new Error('Console log stack trace').stack; + const { userStack, fileLine } = this.extractUserStack(errorStack); + const { message, styles } = this.formatConsoleArgs(args); + + const logEvent: ConsoleLogEvent = { + method, + timestamp: new Date(), + type: method, + message, + stack: userStack, + fileLine, + styles, + }; + + this.addToConsoleOutput(logEvent); + // Forward to native console so output still appears in DevTools + oldFunction(...args); + }; + }); + } + + /** + * Handles error events by converting them to console log events + * + * @param event - The error or promise rejection event to handle + */ + // eslint-disable-next-line @typescript-eslint/member-ordering + public addErrorEvent(event: ErrorEvent | PromiseRejectionEvent): void { + const logEvent = this.createConsoleEventFromError(event); + + this.addToConsoleOutput(logEvent); + } + + /** + * Returns the current console output buffer + */ + // eslint-disable-next-line @typescript-eslint/member-ordering + public getConsoleLogStack(): ConsoleLogEvent[] { + return [ ...this.consoleOutput ]; + } +} diff --git a/packages/browser/src/addons/userAgentInfo.ts b/packages/browser/src/addons/userAgentInfo.ts new file mode 100644 index 0000000..ec7c370 --- /dev/null +++ b/packages/browser/src/addons/userAgentInfo.ts @@ -0,0 +1,17 @@ +/** + * @file Integration for adding User Agent info + */ + +/** + * @param event - event to modify + * @param data - event data + */ +export default function (event, data): void { + data.payload.userAgent = { + name: window.navigator.userAgent, + frame: { + width: window.innerWidth, + height: window.innerHeight, + }, + }; +} diff --git a/packages/browser/src/catcher.ts b/packages/browser/src/catcher.ts new file mode 100644 index 0000000..1c06733 --- /dev/null +++ b/packages/browser/src/catcher.ts @@ -0,0 +1,663 @@ +import Socket from './modules/socket'; +import { Sanitizer, isErrorProcessed, markErrorAsProcessed, validateUser, validateContext, log, EventRejectedError } from '@hawk.so/core'; +import StackParser from './modules/stackParser'; +import type { CatcherMessage, HawkInitialSettings, BreadcrumbsAPI } from './types'; +import { VueIntegration } from './integrations/vue'; +import { id } from './utils/id'; +import type { + AffectedUser, + EventContext, + JavaScriptAddons, + VueIntegrationAddons, + Json, EncodedIntegrationToken, DecodedIntegrationToken, +} from '@hawk.so/types'; +import type { JavaScriptCatcherIntegrations } from './types/integrations'; +import type { HawkJavaScriptEvent } from './types'; +import { ConsoleCatcher } from './addons/consoleCatcher'; +import { BreadcrumbManager } from './addons/breadcrumbs'; + +/** + * Allow to use global VERSION, that will be overwritten by Webpack + */ +declare const VERSION: string; + +/** + * Hawk JavaScript Catcher + * Module for errors and exceptions tracking + * + * @copyright CodeX + */ +export default class Catcher { + /** + * JS Catcher version + */ + public readonly version: string = VERSION; + + /** + * Vue.js integration instance + */ + public vue: VueIntegration | null = null; + + /** + * Catcher Type + */ + private readonly type: string = 'errors/javascript'; + + /** + * User project's Integration Token + */ + private readonly token: EncodedIntegrationToken; + + /** + * Enable debug mode + */ + private readonly debug: boolean; + + /** + * Current bundle version + */ + private readonly release: string | undefined; + + /** + * Current authenticated user + */ + private user: AffectedUser; + + /** + * Any additional data passed by user for sending with all messages + */ + private context: EventContext | undefined; + + /** + * This Method allows developer to filter any data you don't want sending to Hawk + * If method returns false, event will not be sent + */ + private readonly beforeSend: undefined | ((event: HawkJavaScriptEvent) => HawkJavaScriptEvent | false); + + /** + * Transport for dialog between Catcher and Collector + * (WebSocket decorator) + */ + private readonly transport: Socket; + + /** + * Module for parsing backtrace + */ + private readonly stackParser: StackParser = new StackParser(); + + /** + * Disable Vue.js error handler + */ + private readonly disableVueErrorHandler: boolean = false; + + /** + * Console log handler + */ + private readonly consoleTracking: boolean; + + /** + * Console catcher instance + */ + private readonly consoleCatcher: ConsoleCatcher | null = null; + + /** + * Breadcrumb manager instance + */ + private readonly breadcrumbManager: BreadcrumbManager | null; + + /** + * Catcher constructor + * + * @param {HawkInitialSettings|string} settings - If settings is a string, it means an Integration Token + */ + constructor(settings: HawkInitialSettings | string) { + if (typeof settings === 'string') { + settings = { + token: settings, + } as HawkInitialSettings; + } + + this.token = settings.token; + this.debug = settings.debug || false; + this.release = settings.release !== undefined ? String(settings.release) : undefined; + this.setUser(settings.user || Catcher.getGeneratedUser()); + this.setContext(settings.context || undefined); + this.beforeSend = settings.beforeSend; + this.disableVueErrorHandler = + settings.disableVueErrorHandler !== null && settings.disableVueErrorHandler !== undefined + ? settings.disableVueErrorHandler + : false; + this.consoleTracking = + settings.consoleTracking !== null && settings.consoleTracking !== undefined + ? settings.consoleTracking + : true; + + if (!this.token) { + log( + 'Integration Token is missed. You can get it on https://hawk.so at Project Settings.', + 'warn' + ); + + return; + } + + /** + * Init transport + */ + this.transport = new Socket({ + collectorEndpoint: settings.collectorEndpoint || `wss://${this.getIntegrationId()}.k1.hawk.so:443/ws`, + reconnectionAttempts: settings.reconnectionAttempts, + reconnectionTimeout: settings.reconnectionTimeout, + onClose(): void { + log( + 'Connection lost. Connection will be restored when new errors occurred', + 'info' + ); + }, + }); + + if (this.consoleTracking) { + this.consoleCatcher = ConsoleCatcher.getInstance(); + this.consoleCatcher.init(); + } + + /** + * Initialize breadcrumbs + */ + if (settings.breadcrumbs !== false) { + this.breadcrumbManager = BreadcrumbManager.getInstance(); + this.breadcrumbManager.init(settings.breadcrumbs ?? {}); + } else { + this.breadcrumbManager = null; + } + + /** + * Set global handlers + */ + if (!settings.disableGlobalErrorsHandling) { + this.initGlobalHandlers(); + } + + if (settings.vue) { + this.connectVue(settings.vue); + } + } + + /** + * Generates user if no one provided via HawkCatcher settings + * After generating, stores user for feature requests + */ + private static getGeneratedUser(): AffectedUser { + let userId: string; + const LOCAL_STORAGE_KEY = 'hawk-user-id'; + const storedId = localStorage.getItem(LOCAL_STORAGE_KEY); + + if (storedId) { + userId = storedId; + } else { + userId = id(); + localStorage.setItem(LOCAL_STORAGE_KEY, userId); + } + + return { + id: userId, + }; + } + + /** + * Send test event from client + */ + public test(): void { + const fakeEvent = new Error('Hawk JavaScript Catcher test message.'); + + this.send(fakeEvent); + } + + /** + * Public method for manual sending messages to the Hawk + * Can be called in user's try-catch blocks or by other custom logic + * + * @param message - what to send + * @param [context] - any additional data to send + */ + public send(message: Error | string, context?: EventContext): void { + void this.formatAndSend(message, undefined, context); + } + + /** + * Method for Frameworks SDK using own error handlers. + * Allows to send errors to Hawk with additional Frameworks data (addons) + * + * @param error - error to send + * @param [addons] - framework-specific data, can be undefined + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public captureError(error: Error | string, addons?: JavaScriptCatcherIntegrations): void { + void this.formatAndSend(error, addons); + } + + /** + * Add error handing to the passed Vue app + * + * @param vue - Vue app + */ + public connectVue(vue): void { + // eslint-disable-next-line no-new + this.vue = new VueIntegration( + vue, + (error: Error, addons: VueIntegrationAddons) => { + void this.formatAndSend(error, { + vue: addons, + }); + }, + { + disableVueErrorHandler: this.disableVueErrorHandler, + } + ); + } + + /** + * Update the current user information + * + * @param user - New user information + */ + public setUser(user: AffectedUser): void { + if (!validateUser(user)) { + return; + } + + this.user = user; + } + + /** + * Clear current user information (revert to generated user) + */ + public clearUser(): void { + this.user = Catcher.getGeneratedUser(); + } + + /** + * Breadcrumbs API - provides convenient access to breadcrumb methods + * + * @example + * hawk.breadcrumbs.add({ + * type: 'user', + * category: 'auth', + * message: 'User logged in', + * level: 'info', + * data: { userId: '123' } + * }); + */ + public get breadcrumbs(): BreadcrumbsAPI { + return { + add: (breadcrumb, hint) => this.breadcrumbManager?.addBreadcrumb(breadcrumb, hint), + get: () => this.breadcrumbManager?.getBreadcrumbs() ?? [], + clear: () => this.breadcrumbManager?.clearBreadcrumbs(), + }; + } + + /** + * Update the context data that will be sent with all events + * + * @param context - New context data + */ + public setContext(context: EventContext | undefined): void { + if (!validateContext(context)) { + return; + } + + this.context = context; + } + + /** + * Init global errors handler + */ + private initGlobalHandlers(): void { + window.addEventListener('error', (event: ErrorEvent) => this.handleEvent(event)); + window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => this.handleEvent(event)); + } + + /** + * Handles the event and sends it to the server + * + * @param {ErrorEvent|PromiseRejectionEvent} event — (!) both for Error and Promise Rejection + */ + private async handleEvent(event: ErrorEvent | PromiseRejectionEvent): Promise { + /** + * Add error to console logs + */ + + if (this.consoleTracking) { + this.consoleCatcher!.addErrorEvent(event); + } + + /** + * Promise rejection reason is recommended to be an Error, but it can be a string: + * - Promise.reject(new Error('Reason message')) ——— recommended + * - Promise.reject('Reason message') + */ + let error = (event as ErrorEvent).error || (event as PromiseRejectionEvent).reason; + + /** + * Case when error triggered in external script + * We can't access event error object because of CORS + * Event message will be 'Script error.' + */ + if (event instanceof ErrorEvent && error === undefined) { + error = (event as ErrorEvent).message; + } + + void this.formatAndSend(error); + } + + /** + * Format and send an error + * + * @param error - error to send + * @param integrationAddons - addons spoiled by Integration + * @param context - any additional data passed by user + */ + private async formatAndSend( + error: Error | string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + integrationAddons?: JavaScriptCatcherIntegrations, + context?: EventContext + ): Promise { + try { + const isAlreadySentError = isErrorProcessed(error); + + if (isAlreadySentError) { + /** + * @todo add debug build and log this case + */ + return; + } else { + markErrorAsProcessed(error); + } + + const errorFormatted = await this.prepareErrorFormatted(error, context); + + /** + * If this event caught by integration (Vue or other), it can pass extra addons + */ + if (integrationAddons) { + this.appendIntegrationAddons(errorFormatted, Sanitizer.sanitize(integrationAddons)); + } + + this.sendErrorFormatted(errorFormatted); + } catch (e) { + if (e instanceof EventRejectedError) { + /** + * Event was rejected by user using the beforeSend method + */ + return; + } + + log('Unable to send error. Seems like it is Hawk internal bug. Please, report it here: https://github.com/codex-team/hawk.javascript/issues/new', 'warn', e); + } + } + + /** + * Sends formatted HawkEvent to the Collector + * + * @param errorFormatted - formatted error to send + */ + private sendErrorFormatted(errorFormatted: CatcherMessage): void { + this.transport.send(errorFormatted) + .catch((sendingError) => { + log('WebSocket sending error', 'error', sendingError); + }); + } + + /** + * Formats the event + * + * @param error - error to format + * @param context - any additional data passed by user + */ + private async prepareErrorFormatted(error: Error | string, context?: EventContext): Promise { + let payload: HawkJavaScriptEvent = { + title: this.getTitle(error), + type: this.getType(error), + release: this.getRelease(), + breadcrumbs: this.getBreadcrumbsForEvent(), + context: this.getContext(context), + user: this.getUser(), + addons: this.getAddons(error), + backtrace: await this.getBacktrace(error), + catcherVersion: this.version, + }; + + /** + * Filter sensitive data + */ + if (typeof this.beforeSend === 'function') { + const beforeSendResult = this.beforeSend(payload); + + if (beforeSendResult === false) { + throw new EventRejectedError('Event rejected by beforeSend method.'); + } else { + payload = beforeSendResult; + } + } + + return { + token: this.token, + catcherType: this.type, + payload, + }; + } + + /** + * Return event title + * + * @param error - event from which to get the title + */ + private getTitle(error: Error | string): string { + const notAnError = !(error instanceof Error); + + /** + * Case when error is 'reason' of PromiseRejectionEvent + * and reject() provided with text reason instead of Error() + */ + if (notAnError) { + return error.toString() as string; + } + + return (error as Error).message; + } + + /** + * Return event type: TypeError, ReferenceError etc + * + * @param error - caught error + */ + private getType(error: Error | string): HawkJavaScriptEvent['type'] { + const notAnError = !(error instanceof Error); + + /** + * Case when error is 'reason' of PromiseRejectionEvent + * and reject() provided with text reason instead of Error() + */ + if (notAnError) { + return null; + } + + return (error as Error).name; + } + + /** + * Release version + */ + private getRelease(): HawkJavaScriptEvent['release'] { + return this.release !== undefined ? String(this.release) : null; + } + + /** + * Returns integration id from integration token + */ + private getIntegrationId(): string { + try { + const decodedIntegrationToken: DecodedIntegrationToken = JSON.parse(atob(this.token)); + const { integrationId } = decodedIntegrationToken; + + if (!integrationId || integrationId === '') { + throw new Error(); + } + + return integrationId; + } catch { + throw new Error('Invalid integration token.'); + } + } + + /** + * Collects additional information + * + * @param context - any additional data passed by user + */ + private getContext(context?: EventContext): HawkJavaScriptEvent['context'] { + const contextMerged = {}; + + if (this.context !== undefined) { + Object.assign(contextMerged, this.context); + } + + if (context !== undefined) { + Object.assign(contextMerged, context); + } + + return Sanitizer.sanitize(contextMerged); + } + + /** + * Current authenticated user + */ + private getUser(): HawkJavaScriptEvent['user'] { + return this.user || null; + } + + /** + * Get breadcrumbs for event payload + */ + private getBreadcrumbsForEvent(): HawkJavaScriptEvent['breadcrumbs'] { + const breadcrumbs = this.breadcrumbManager?.getBreadcrumbs(); + + return breadcrumbs && breadcrumbs.length > 0 ? breadcrumbs : null; + } + + /** + * Get parameters + */ + private getGetParams(): Json | null { + const searchString = window.location.search.substr(1); + + if (!searchString) { + return null; + } + + /** + * Create object from get-params string + */ + const pairs = searchString.split('&'); + + return pairs.reduce((accumulator, pair) => { + const [key, value] = pair.split('='); + + accumulator[key] = value; + + return accumulator; + }, {}); + } + + /** + * Return parsed backtrace information + * + * @param error - event from which to get backtrace + */ + private async getBacktrace(error: Error | string): Promise { + const notAnError = !(error instanceof Error); + + /** + * Case when error is 'reason' of PromiseRejectionEvent + * and reject() provided with text reason instead of Error() + */ + if (notAnError) { + return null; + } + + try { + return await this.stackParser.parse(error as Error); + } catch (e) { + log('Can not parse stack:', 'warn', e); + + return null; + } + } + + /** + * Return some details + * + * @param {Error|string} error — caught error + */ + private getAddons(error: Error | string): HawkJavaScriptEvent['addons'] { + const { innerWidth, innerHeight } = window; + const userAgent = window.navigator.userAgent; + const location = window.location.href; + const getParams = this.getGetParams(); + const consoleLogs = this.consoleTracking && this.consoleCatcher?.getConsoleLogStack(); + + const addons: JavaScriptAddons = { + window: { + innerWidth, + innerHeight, + }, + userAgent, + url: location, + }; + + if (getParams) { + addons.get = getParams; + } + + if (this.debug) { + addons.RAW_EVENT_DATA = this.getRawData(error); + } + + if (consoleLogs && consoleLogs.length > 0) { + addons.consoleOutput = consoleLogs; + } + + return addons; + } + + /** + * Compose raw data object + * + * @param {Error|string} error — caught error + */ + private getRawData(error: Error | string): Json | undefined { + if (!(error instanceof Error)) { + return; + } + + const stack = error.stack !== null && error.stack !== undefined ? error.stack : ''; + + return { + name: error.name, + message: error.message, + stack, + }; + } + + /** + * Extend addons object with addons spoiled by integration + * This method mutates original event + * + * @param errorFormatted - Hawk event prepared for sending + * @param integrationAddons - extra addons + */ + private appendIntegrationAddons(errorFormatted: CatcherMessage, integrationAddons: JavaScriptCatcherIntegrations): void { + Object.assign(errorFormatted.payload.addons, integrationAddons); + } +} diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts new file mode 100644 index 0000000..00e5dd4 --- /dev/null +++ b/packages/browser/src/index.ts @@ -0,0 +1,5 @@ +import Catcher from './catcher'; +export type { AffectedUser } from '@hawk.so/types'; +export * from './types'; + +export default Catcher; diff --git a/packages/browser/src/integrations/vue.ts b/packages/browser/src/integrations/vue.ts new file mode 100644 index 0000000..391070e --- /dev/null +++ b/packages/browser/src/integrations/vue.ts @@ -0,0 +1,253 @@ +import type { JsonNode, VueIntegrationAddons } from '@hawk.so/types'; + +interface VueIntegrationOptions { + /** + * Disable Vue.js error handler + * + * Used by @hawk.so/nuxt since Nuxt has own error hook. + * Otherwise, Nuxt will show 500 error + */ + disableVueErrorHandler?: boolean; +} + +/** + * Errors fired inside Vue components are not dispatched by global handlers. + * This integration allow us to set up own error handler + */ +export class VueIntegration { + /** + * Vue application to handle errors in it + */ + private readonly vue; + + /** + * User can set up own vue error handler, + * we should save and call it at the end + */ + private readonly existedHandler: () => void; + + /** + * Callback that should be triggered with caught error. + * This callback is used by parent class to format and send an event. + */ + private readonly callback: (error: Error, addons: VueIntegrationAddons) => void; + + /** + * Set up a new vue app + * + * @param vue - Vue app to handle + * @param callback - callback that accepts new error + * @param options - additional options + */ + constructor(vue, callback, options: VueIntegrationOptions) { + this.vue = vue; + this.existedHandler = vue.config.errorHandler; + this.callback = callback; + + if (options.disableVueErrorHandler !== true) { + this.setupHandler(); + } + } + + /** + * Extract additional useful information from the Vue app + * + * Can be used outside of this class, for example, by Nuxt integration + * + * @param vm - component instance + * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. + */ + public spoilAddons(vm: { [key: string]: unknown }, info: string): VueIntegrationAddons { + const isVue3 = vm.$ !== undefined; + + if (isVue3) { + return this.spoilAddonsFromVue3(vm, info); + } else { + return this.spoilAddonsFromVue2(vm, info); + } + } + + /** + * Setups event handlers for Vue.js instance + */ + private setupHandler(): void { + this.vue.config.errorHandler = + /** + * Vue app error handler + * + * @see https://vuejs.org/v2/api/#errorHandler + * @param err - error thrown + * @param vm - vue VM + * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. + */ + (err: Error, vm: {[key: string]: unknown}, info: string): void => { + if (typeof this.existedHandler === 'function') { + this.existedHandler.call(this.vue, err, vm, info); + } + + const addons: VueIntegrationAddons = this.spoilAddons(vm, info); + + this.callback(err, addons); + + this.printError(err, info, addons.component); + }; + } + + /** + * Extract additional useful information from the Vue 2 app + * + * @param vm - component instance + * @param info - which lifecycle hook the error was found in. + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private spoilAddonsFromVue2(vm: { [key: string]: any }, info: string): VueIntegrationAddons { + const addons: VueIntegrationAddons = { + lifecycle: info, + component: null, + }; + + /** + * Get component name + */ + if (vm.$root === vm) { + addons.component = vm.$el.outerHTML.replace(/>.*/, '>') + ' (root)'; + } else { + addons.component = '<' + (vm._isVue ? vm.$options.name || vm.$options._componentTag : vm.name) + '>'; + } + + /** + * Fill props + */ + if (vm.$options && vm.$options.propsData) { + addons.props = vm.$options.propsData; + } + + /** + * Fill component's data values + */ + if (vm._data) { + addons.data = {}; + + Object.entries(vm._data).forEach(([key, value]) => { + addons.data![key] = value as JsonNode; + }); + } + + /** + * Fill computed + */ + if (vm._computedWatchers) { + addons.computed = {}; + + Object.entries(vm._computedWatchers).forEach(([key, watcher]) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + addons.computed![key] = (watcher as {[key: string]: any}).value; + }); + } + + return addons; + } + + /** + * Extract additional useful information from the Vue 3 app + * + * @param vm - component instance + * @param info - which lifecycle hook the error was found in. + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private spoilAddonsFromVue3(vm: { [key: string]: any }, info: string): VueIntegrationAddons { + const addons: VueIntegrationAddons = { + lifecycle: this.getRuntimeErrorSourceByCode(info), + component: null, + }; + + /** + * Extract the component name + */ + if (vm.$options !== undefined) { + addons['component'] = `<${vm.$options.__name || vm.$options.name || vm.$options._componentTag || 'Anonymous'}>`; + } + + /** + * Fill props + */ + if (Object.keys(vm.$props).length) { + addons['props'] = vm.$props; + } + + return addons; + } + + /** + * In production, the error code is a link with reference to doc. + * This method returns the error message by the code extracted from the link + * + * @param code - Error source info (3rd argument of the vue:error hook) + * https://vuejs.org/api/composition-api-lifecycle.html#onerrorcaptured + */ + private getRuntimeErrorSourceByCode(code: string): string { + if (!code.includes('https://vuejs.org/error-reference/#runtime-')) { + return code; + } + + const codeParts = code.split('https://vuejs.org/error-reference/#runtime-'); + const errorCode = codeParts[codeParts.length - 1]; + + const errorCodeMap = new Map([ + ['0', 'setup function'], + ['1', 'render function'], + ['2', 'watcher getter'], + ['3', 'watcher callback'], + ['4', 'watcher cleanup function'], + ['5', 'native event handler'], + ['6', 'component event handler'], + ['7', 'vnode hook'], + ['8', 'directive hook'], + ['9', 'transition hook'], + ['10', 'app errorHandler'], + ['11', 'app warnHandler'], + ['12', 'ref function'], + ['13', 'async component loader'], + ['14', 'scheduler flush'], + ['15', 'component update'], + ['16', 'app unmount cleanup function'], + ['sp', 'serverPrefetch hook'], + ['bc', 'beforeCreate hook'], + ['c', 'created hook'], + ['bm', 'beforeMount hook'], + ['m', 'mounted hook'], + ['bu', 'beforeUpdate hook'], + ['u', 'updated'], + ['bum', 'beforeUnmount hook'], + ['um', 'unmounted hook'], + ['a', 'activated hook'], + ['da', 'deactivated hook'], + ['ec', 'errorCaptured hook'], + ['rtc', 'renderTracked hook'], + ['rtg', 'renderTriggered hook'], + ]); + + return errorCodeMap.get(errorCode) || code; + } + + + /** + * Write error to the console + * + * @param err - error to print + * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. + * @param component - where error was occurred + */ + private printError(err: Error, info: string, component: string | null): void { + const source = this.getRuntimeErrorSourceByCode(info); + + if (component === null) { + console.error(`${source}`, err); + + return; + } + + console.error(`${component} @ ${source}`, err); + } +} + diff --git a/packages/browser/src/modules/fetchTimer.ts b/packages/browser/src/modules/fetchTimer.ts new file mode 100644 index 0000000..a17c1d4 --- /dev/null +++ b/packages/browser/src/modules/fetchTimer.ts @@ -0,0 +1,42 @@ +import { log } from '@hawk.so/core'; + +/** + * Sends AJAX request and wait for some time. + * If time is exceeded, cancel the request. + * + * @param {string} url — request endpoint + * @param {number} ms — maximum request time allowed + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default function fetchTimer(url: string, ms: number): Promise { + /** + * Using AbortController to cancel fetch request + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController + */ + const controller = new AbortController(); + const signal = controller.signal; + const fetchPromise = fetch(url, { + signal, + }); + + const timeoutId = setTimeout(() => { + controller.abort(); + log('Request is too long, aborting...', 'log', url); + }, ms); + + return fetchPromise + .then((response) => { + clearTimeout(timeoutId); + + return response; + }) + .catch((error) => { + clearTimeout(timeoutId); + + /** + * Re-throw the error so it can be handled by the caller + */ + throw error; + }); +} diff --git a/packages/browser/src/modules/socket.ts b/packages/browser/src/modules/socket.ts new file mode 100644 index 0000000..ccd1fce --- /dev/null +++ b/packages/browser/src/modules/socket.ts @@ -0,0 +1,212 @@ +import { log } from '@hawk.so/core'; +import type { CatcherMessage } from '@/types'; + +/** + * Custom WebSocket wrapper class + * + * @copyright CodeX + */ +export default class Socket { + /** + * Socket connection endpoint + */ + private readonly url: string; + + /** + * External handler for socket message + */ + private readonly onMessage: (message: MessageEvent) => void; + + /** + * External handler for socket opening + */ + private readonly onOpen: (event: Event) => void; + + /** + * External handler for socket close + */ + private readonly onClose: (event: CloseEvent) => void; + + /** + * Queue of events collected while socket is not connected + * They will be sent when connection will be established + */ + private eventsQueue: CatcherMessage[]; + + /** + * Websocket instance + */ + private ws: WebSocket | null; + + /** + * Reconnection tryings Timeout + */ + private reconnectionTimer: unknown; + + /** + * Time between reconnection attempts + */ + private readonly reconnectionTimeout: number; + + /** + * How many time we should attempt reconnection + */ + private reconnectionAttempts: number; + + /** + * Creates new Socket instance. Setup initial socket params. + * + * @param options — constructor options for catcher initialization + */ + constructor({ + collectorEndpoint, + // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars + onMessage = (message: MessageEvent): void => {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + onClose = (): void => {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + onOpen = (): void => {}, + reconnectionAttempts = 5, + reconnectionTimeout = 10000, // 10 * 1000 ms = 10 sec + }) { + this.url = collectorEndpoint; + this.onMessage = onMessage; + this.onClose = onClose; + this.onOpen = onOpen; + this.reconnectionTimeout = reconnectionTimeout; + this.reconnectionAttempts = reconnectionAttempts; + + this.eventsQueue = []; + this.ws = null; + + this.init() + .then(() => { + /** + * Send queued events if exists + */ + this.sendQueue(); + }) + .catch((error) => { + log('WebSocket error', 'error', error); + }); + } + + /** + * Send an event to the Collector + * + * @param message - event data in Hawk Format + */ + public async send(message: CatcherMessage): Promise { + if (this.ws === null) { + this.eventsQueue.push(message); + + return this.init(); + } + + switch (this.ws.readyState) { + case WebSocket.OPEN: + return this.ws.send(JSON.stringify(message)); + + case WebSocket.CLOSED: + this.eventsQueue.push(message); + + return this.reconnect(); + + case WebSocket.CONNECTING: + case WebSocket.CLOSING: + this.eventsQueue.push(message); + } + } + + /** + * Create new WebSocket connection and setup event listeners + */ + private init(): Promise { + return new Promise((resolve, reject) => { + this.ws = new WebSocket(this.url); + + /** + * New message handler + */ + if (typeof this.onMessage === 'function') { + this.ws.onmessage = this.onMessage; + } + + /** + * Connection closing handler + * + * @param event - websocket event on closing + */ + this.ws.onclose = (event: CloseEvent): void => { + if (typeof this.onClose === 'function') { + this.onClose(event); + } + }; + + /** + * Error handler + * + * @param event - websocket event on error + */ + this.ws.onerror = (event: Event): void => { + reject(event); + }; + + this.ws.onopen = (event: Event): void => { + if (typeof this.onOpen === 'function') { + this.onOpen(event); + } + + resolve(); + }; + }); + } + + /** + * Tries to reconnect to the server for specified number of times with the interval + * + * @param {boolean} [isForcedCall] - call function despite on timer + * @returns {Promise} + */ + private async reconnect(isForcedCall = false): Promise { + if (this.reconnectionTimer && !isForcedCall) { + return; + } + + this.reconnectionTimer = null; + + try { + await this.init(); + + log('Successfully reconnected.', 'info'); + } catch (error) { + this.reconnectionAttempts--; + + if (this.reconnectionAttempts === 0) { + return; + } + + this.reconnectionTimer = setTimeout(() => { + void this.reconnect(true); + }, this.reconnectionTimeout); + } + } + + /** + * Sends all queued events one-by-one + */ + private sendQueue(): void { + while (this.eventsQueue.length) { + const event = this.eventsQueue.shift(); + + if (!event) { + continue; + } + + this.send(event) + .catch((sendingError) => { + log('WebSocket sending error', 'error', sendingError); + }); + } + } +} diff --git a/packages/browser/src/modules/stackParser.ts b/packages/browser/src/modules/stackParser.ts new file mode 100644 index 0000000..f7ee32f --- /dev/null +++ b/packages/browser/src/modules/stackParser.ts @@ -0,0 +1,167 @@ +import type { StackFrame } from 'error-stack-parser'; +import ErrorStackParser from 'error-stack-parser'; +import type { BacktraceFrame, SourceCodeLine } from '@hawk.so/types'; +import fetchTimer from './fetchTimer'; + +/** + * This module prepares parsed backtrace + */ +export default class StackParser { + /** + * Prevents loading one file several times + * name -> content + */ + private sourceFilesCache: {[fileName: string]: Promise} = {}; + + /** + * Parse Error stack string and return useful information about an Error + * + * @param error - event from which to get backtrace + */ + public async parse(error: Error): Promise { + const stackParsed = ErrorStackParser.parse(error) as StackFrame[]; + + return Promise.all(stackParsed.map(async (frame) => { + const sourceCode = await this.extractSourceCode(frame); + const file = frame.fileName !== null && frame.fileName !== undefined ? frame.fileName : ''; + const line = frame.lineNumber !== null && frame.lineNumber !== undefined ? frame.lineNumber : 0; + + return { + file, + line, + column: frame.columnNumber, + sourceCode: sourceCode !== null ? sourceCode : undefined, + function: frame.functionName, + arguments: frame.args, + }; + })); + } + + /** + * Extract 5 lines below and above the error's line + * + * @param {StackFrame} frame — information about backtrace item + */ + private async extractSourceCode(frame: StackFrame): Promise { + const minifiedSourceCodeThreshold = 200; + + try { + if (!frame.fileName) { + return null; + }; + + if (!this.isValidUrl(frame.fileName)) { + return null; + } + + /** + * If error occurred in large column number, the script probably minified + * Skip minified bundles — they will be processed if user enabled source-maps tracking + */ + if (frame.columnNumber && frame.columnNumber > minifiedSourceCodeThreshold) { + return null; + } + + const file = await this.loadSourceFile(frame.fileName); + + if (!file) { + return null; + } + + const lines = file.split('\n'); + const actualLineNumber = frame.lineNumber ? frame.lineNumber - 1 : 0; + const linesCollectCount = 5; + const lineFrom = Math.max(0, actualLineNumber - linesCollectCount); + const lineTo = Math.min(lines.length - 1, actualLineNumber + linesCollectCount + 1); + + const sourceCodeLines: SourceCodeLine[] = []; + let extractedLineIndex = 1; + + /** + * In some cases column number of the error stack trace frame would be less then 200, but source code is minified + * For this cases we need to check, that all of the lines to collect have length less than 200 too + */ + lines.slice(lineFrom, lineTo).forEach((lineToCheck) => { + if (lineToCheck.length > minifiedSourceCodeThreshold) { + return null; + } else { + sourceCodeLines.push({ + line: lineFrom + extractedLineIndex, + content: lineToCheck, + }); + + extractedLineIndex += 1; + } + }); + + return sourceCodeLines; + } catch (e) { + console.warn('Hawk JS SDK: Can not extract source code. Please, report this issue: https://github.com/codex-team/hawk.javascript/issues/new', e); + + return null; + } + } + + /** + * Check if string is a valid URL + * + * @param string - string with URL to check + */ + private isValidUrl(string: string): boolean { + try { + return !!new URL(string); + } catch (_) { + return false; + } + } + + /** + * Downloads source file + * + * @param {string} fileName - name of file to download + */ + private async loadSourceFile(fileName): Promise { + if (this.sourceFilesCache[fileName] !== undefined) { + return this.sourceFilesCache[fileName]; + } + + try { + /** + * Try to load source file. + * Wait for maximum 2 sec to skip loading big files. + */ + this.sourceFilesCache[fileName] = fetchTimer(fileName, 2000) + .then((response) => response.text()) + .catch((error) => { + /** + * Remove failed promise from cache to allow retry + */ + delete this.sourceFilesCache[fileName]; + + /** + * Re-throw error so it can be caught by try-catch + */ + throw error; + }); + + /** + * Dealloc cache when it collects more that 10 files + */ + if (Object.keys(this.sourceFilesCache).length > 10) { + const alone = this.sourceFilesCache[fileName]; + + this.sourceFilesCache = {}; + this.sourceFilesCache[fileName] = alone; + } + + return await this.sourceFilesCache[fileName]; + } catch (error) { + /** + * Ensure failed promise is removed from cache + */ + delete this.sourceFilesCache[fileName]; // log('Can not load source file. Skipping...'); + + return null; + } + } +} diff --git a/packages/browser/src/types/breadcrumbs-api.ts b/packages/browser/src/types/breadcrumbs-api.ts new file mode 100644 index 0000000..777dcdf --- /dev/null +++ b/packages/browser/src/types/breadcrumbs-api.ts @@ -0,0 +1,11 @@ +import type { Breadcrumb } from '@hawk.so/types'; +import type { BreadcrumbInput, BreadcrumbHint } from '../addons/breadcrumbs'; + +/** + * Breadcrumbs API interface + */ +export interface BreadcrumbsAPI { + add: (breadcrumb: BreadcrumbInput, hint?: BreadcrumbHint) => void; + get: () => Breadcrumb[]; + clear: () => void; +} diff --git a/packages/browser/src/types/catcher-message.ts b/packages/browser/src/types/catcher-message.ts new file mode 100644 index 0000000..d892e22 --- /dev/null +++ b/packages/browser/src/types/catcher-message.ts @@ -0,0 +1,21 @@ +import type { HawkJavaScriptEvent } from './event'; + +/** + * Structure describing a message sending by Catcher + */ +export interface CatcherMessage { + /** + * User project's Integration Token + */ + token: string; + + /** + * Hawk Catcher name + */ + catcherType: string; + + /** + * All information about the event + */ + payload: HawkJavaScriptEvent; +} diff --git a/packages/browser/src/types/event.ts b/packages/browser/src/types/event.ts new file mode 100644 index 0000000..82dec49 --- /dev/null +++ b/packages/browser/src/types/event.ts @@ -0,0 +1,55 @@ +import type { AffectedUser, BacktraceFrame, EventContext, EventData, JavaScriptAddons, Breadcrumb } from '@hawk.so/types'; + +/** + * Event data with JS specific addons + */ +type JSEventData = EventData; + +/** + * Event will be sent to Hawk by Hawk JavaScript SDK + * + * The listed EventData properties will always be sent, so we define them as required in the type + */ +export type HawkJavaScriptEvent = Omit & { + /** + * Event type: TypeError, ReferenceError etc + * null for non-error events + */ + type: string | null; + + /** + * Current release (aka version, revision) of an application + */ + release: string | null; + + /** + * Breadcrumbs - chronological trail of events before the error + */ + breadcrumbs: Breadcrumb[] | null; + + /** + * Current authenticated user + */ + user: AffectedUser | null; + + /** + * Any other information collected and passed by user + */ + context: EventContext; + + /** + * Catcher-specific information + */ + addons: JavaScriptAddons; + + /** + * Stack + * From the latest call to the earliest + */ + backtrace: BacktraceFrame[] | null; + + /** + * Catcher version + */ + catcherVersion: string; +}; diff --git a/packages/browser/src/types/hawk-initial-settings.ts b/packages/browser/src/types/hawk-initial-settings.ts new file mode 100644 index 0000000..51e80f0 --- /dev/null +++ b/packages/browser/src/types/hawk-initial-settings.ts @@ -0,0 +1,93 @@ +import type { EventContext, AffectedUser } from '@hawk.so/types'; +import type { HawkJavaScriptEvent } from './event'; +import type { BreadcrumbsOptions } from '../addons/breadcrumbs'; + +/** + * JS Catcher initial settings + */ +export interface HawkInitialSettings { + /** + * User project's Integration Token + */ + token: string; + + /** + * Enable debug mode + * Send raw event's data additionally in addons field by key 'RAW_EVENT_DATA' + */ + debug?: boolean; + + /** + * Current release and bundle version + */ + release?: string; + + /** + * Current user information + */ + user?: AffectedUser; + + /** + * Any additional data you want to send with every event + */ + context?: EventContext; + + /** + * How many time we should try to reconnect when connection lost. + */ + reconnectionAttempts?: number; + + /** + * How many time we should wait between reconnection attempts. + */ + reconnectionTimeout?: number; + + /** + * Hawk Collector endpoint. + * Can be overwritten for development purposes. + * + * @example ws://localhost:3000/ws + */ + collectorEndpoint?: string; + + /** + * Instance of a vue application + * to handle its errors + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + vue?: any; + + /** + * Do not initialize global errors handling + * This options still allow you send events manually + */ + disableGlobalErrorsHandling?: boolean; + + /** + * This Method allows you to filter any data you don't want sending to Hawk. + * + * Return `false` to prevent the event from being sent to Hawk. + */ + beforeSend?(event: HawkJavaScriptEvent): HawkJavaScriptEvent | false; + + /** + * Disable Vue.js error handler + * + * Used by @hawk.so/nuxt since Nuxt has own error hook. + */ + disableVueErrorHandler?: boolean; + + /** + * Console log handler + */ + consoleTracking?: boolean; + + /** + * Breadcrumbs configuration + * Pass false to disable breadcrumbs entirely + * Pass options object to configure breadcrumbs behavior + * + * @default enabled with default options + */ + breadcrumbs?: false | BreadcrumbsOptions; +} diff --git a/packages/browser/src/types/index.ts b/packages/browser/src/types/index.ts new file mode 100644 index 0000000..ef0556e --- /dev/null +++ b/packages/browser/src/types/index.ts @@ -0,0 +1,16 @@ +import type { CatcherMessage } from './catcher-message'; +import type { HawkInitialSettings } from './hawk-initial-settings'; +import type { HawkJavaScriptEvent } from './event'; +import type { VueIntegrationData, NuxtIntegrationData, NuxtIntegrationAddons, JavaScriptCatcherIntegrations } from './integrations'; +import type { BreadcrumbsAPI } from './breadcrumbs-api'; + +export type { + CatcherMessage, + HawkInitialSettings, + HawkJavaScriptEvent, + VueIntegrationData, + NuxtIntegrationData, + NuxtIntegrationAddons, + JavaScriptCatcherIntegrations, + BreadcrumbsAPI +}; diff --git a/packages/browser/src/types/integrations.ts b/packages/browser/src/types/integrations.ts new file mode 100644 index 0000000..ceb886d --- /dev/null +++ b/packages/browser/src/types/integrations.ts @@ -0,0 +1,42 @@ +import type { VueIntegrationAddons } from '@hawk.so/types'; + +/** + * The Vue integration will append this data to the addons + */ +export type VueIntegrationData = { + vue: VueIntegrationAddons; +}; + +/** + * Useful info extracted from Nuxt app + */ +export type NuxtIntegrationAddons = { + 'Component': string | null; + 'Route': { + path: string; + fullPath: string; + name?: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + redirectedFrom?: string | Record; + }, + 'Props': { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; + }, + 'Source': string; +}; + +/** + * The Nuxt integration will append this data to the addons + */ +export type NuxtIntegrationData = { + nuxt: NuxtIntegrationAddons; +}; + +/** + * Union Type for available integrations + */ +export type JavaScriptCatcherIntegrations = + | VueIntegrationData + | NuxtIntegrationData +; diff --git a/packages/browser/src/utils/id.ts b/packages/browser/src/utils/id.ts new file mode 100644 index 0000000..d55b42a --- /dev/null +++ b/packages/browser/src/utils/id.ts @@ -0,0 +1,14 @@ +/** + * Returns random string + */ +export function id(): string { + const validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + let array = new Uint8Array(40); + + window.crypto.getRandomValues(array); + + array = array.map(x => validChars.charCodeAt(x % validChars.length)); + + return String.fromCharCode.apply(null, array); +} diff --git a/packages/browser/src/utils/selector.ts b/packages/browser/src/utils/selector.ts new file mode 100644 index 0000000..d886884 --- /dev/null +++ b/packages/browser/src/utils/selector.ts @@ -0,0 +1,41 @@ +/** + * Build a simple CSS selector from an HTML element + * If element has no id or class, recursively builds selector from parent + * + * @param element - HTML element to build selector from + * @param maxDepth - Maximum recursion depth (default: 3) + * @returns CSS selector string (e.g., "div#myId.class1.class2" or ".some-parent button") + */ +export function buildElementSelector(element: HTMLElement, maxDepth: number = 3): string { + let selector = element.tagName.toLowerCase(); + + if (element.id) { + selector += `#${element.id}`; + return selector; + } + + if (element.className) { + /** + * className can be a string, DOMTokenList, or SVGAnimatedString (e.g., in SVG elements) + * Convert to string safely before calling split() + * String() works for all types: string, DOMTokenList, SVGAnimatedString, etc. + */ + const classNameStr = String(element.className); + + if (classNameStr) { + selector += `.${classNameStr.split(' ').filter(Boolean).join('.')}`; + return selector; + } + } + + /** + * If element has no id or class, try to build selector from parent + */ + if (maxDepth > 0 && element.parentElement) { + const parentSelector = buildElementSelector(element.parentElement as HTMLElement, maxDepth - 1); + + return `${parentSelector} ${selector}`; + } + + return selector; +} diff --git a/packages/browser/tsconfig.json b/packages/browser/tsconfig.json new file mode 100644 index 0000000..d57ffc8 --- /dev/null +++ b/packages/browser/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "baseUrl": ".", + "paths": { + "@/types": ["src/types"] + } + }, + "include": [ + "src/**/*", + "src/types/*" + ] +} diff --git a/packages/browser/vite.config.ts b/packages/browser/vite.config.ts new file mode 100644 index 0000000..fe14cae --- /dev/null +++ b/packages/browser/vite.config.ts @@ -0,0 +1,74 @@ +import path from 'path'; +import dts from 'vite-plugin-dts'; +import { defineConfig } from 'vite'; + +import license from 'rollup-plugin-license'; + +import * as pkg from './package.json'; + +const NODE_ENV = process.argv.mode || 'development'; +const VERSION = pkg.version; + +/** + * Trick to use Vite server.open option on macOS + * + * @see https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768 + */ +process.env.BROWSER = 'open'; + +export default defineConfig(() => { + return { + build: { + copyPublicDir: false, + lib: { + entry: path.resolve(__dirname, 'src', 'index.ts'), + name: 'HawkCatcher', + fileName: 'hawk-browser', + }, + rollupOptions: { + plugins: [ + license({ + thirdParty: { + allow: { + test: (dependency) => { + // Return false for unlicensed dependencies. + if (!dependency.license) { + return false; + } + + // Allow MIT, Apache-2.0, and AGPL-3.0-only (for @hawk.so/core) licenses. + return ['MIT', 'Apache-2.0', 'AGPL-3.0-only'].includes(dependency.license); + }, + failOnUnlicensed: true, + failOnViolation: true, + }, + output: path.resolve(__dirname, 'dist', 'vendor.LICENSE.txt'), + }, + }), + ], + }, + }, + + define: { + 'NODE_ENV': JSON.stringify(NODE_ENV), + 'VERSION': JSON.stringify(VERSION), + }, + + resolve: { + alias: { + '@/types': path.resolve(__dirname, './src/types'), + }, + }, + + server: { + port: 3303, + open: './example/index.html', + }, + + plugins: [ + dts({ + tsconfigPath: './tsconfig.json', + }), + ], + }; +}); From e8010d5dd682da013be16f5ef39ff1577d5d0c87 Mon Sep 17 00:00:00 2001 From: Reversean Date: Tue, 3 Feb 2026 01:40:10 +0300 Subject: [PATCH 5/5] refactor(javascript): remove javascript package --- package.json | 10 +- packages/javascript/.babelrc | 4 - packages/javascript/.size-limit.js | 6 - packages/javascript/README.md | 317 --------- .../javascript/example/breadcrumbs-tests.js | 306 -------- packages/javascript/example/index.html | 323 --------- packages/javascript/example/sample-errors.js | 127 ---- packages/javascript/package.json | 47 -- packages/javascript/src/addons/breadcrumbs.ts | 622 ---------------- .../javascript/src/addons/consoleCatcher.ts | 297 -------- .../javascript/src/addons/userAgentInfo.ts | 17 - packages/javascript/src/catcher.ts | 667 ------------------ packages/javascript/src/errors.ts | 12 - packages/javascript/src/index.ts | 5 - packages/javascript/src/integrations/vue.ts | 253 ------- packages/javascript/src/modules/fetchTimer.ts | 42 -- packages/javascript/src/modules/sanitizer.ts | 297 -------- packages/javascript/src/modules/socket.ts | 212 ------ .../javascript/src/modules/stackParser.ts | 167 ----- .../javascript/src/types/breadcrumbs-api.ts | 11 - .../javascript/src/types/catcher-message.ts | 21 - packages/javascript/src/types/event.ts | 55 -- .../src/types/hawk-initial-settings.ts | 93 --- packages/javascript/src/types/index.ts | 16 - packages/javascript/src/types/integrations.ts | 42 -- packages/javascript/src/utils/event.ts | 46 -- packages/javascript/src/utils/id.ts | 14 - packages/javascript/src/utils/log.ts | 46 -- packages/javascript/src/utils/selector.ts | 41 -- packages/javascript/src/utils/validation.ts | 40 -- packages/javascript/stats.txt | 3 - packages/javascript/tsconfig.json | 15 - packages/javascript/vite.config.ts | 74 -- packages/sveltekit/package.json | 2 +- packages/sveltekit/src/index.ts | 4 +- yarn.lock | 17 +- 36 files changed, 23 insertions(+), 4248 deletions(-) delete mode 100644 packages/javascript/.babelrc delete mode 100644 packages/javascript/.size-limit.js delete mode 100644 packages/javascript/README.md delete mode 100644 packages/javascript/example/breadcrumbs-tests.js delete mode 100644 packages/javascript/example/index.html delete mode 100644 packages/javascript/example/sample-errors.js delete mode 100644 packages/javascript/package.json delete mode 100644 packages/javascript/src/addons/breadcrumbs.ts delete mode 100644 packages/javascript/src/addons/consoleCatcher.ts delete mode 100644 packages/javascript/src/addons/userAgentInfo.ts delete mode 100644 packages/javascript/src/catcher.ts delete mode 100644 packages/javascript/src/errors.ts delete mode 100644 packages/javascript/src/index.ts delete mode 100644 packages/javascript/src/integrations/vue.ts delete mode 100644 packages/javascript/src/modules/fetchTimer.ts delete mode 100644 packages/javascript/src/modules/sanitizer.ts delete mode 100644 packages/javascript/src/modules/socket.ts delete mode 100644 packages/javascript/src/modules/stackParser.ts delete mode 100644 packages/javascript/src/types/breadcrumbs-api.ts delete mode 100644 packages/javascript/src/types/catcher-message.ts delete mode 100644 packages/javascript/src/types/event.ts delete mode 100644 packages/javascript/src/types/hawk-initial-settings.ts delete mode 100644 packages/javascript/src/types/index.ts delete mode 100644 packages/javascript/src/types/integrations.ts delete mode 100644 packages/javascript/src/utils/event.ts delete mode 100644 packages/javascript/src/utils/id.ts delete mode 100644 packages/javascript/src/utils/log.ts delete mode 100644 packages/javascript/src/utils/selector.ts delete mode 100644 packages/javascript/src/utils/validation.ts delete mode 100644 packages/javascript/stats.txt delete mode 100644 packages/javascript/tsconfig.json delete mode 100644 packages/javascript/vite.config.ts diff --git a/package.json b/package.json index cc5554f..4933600 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,14 @@ "version": "0.0.0", "packageManager": "yarn@4.12.0", "workspaces": [ - "packages/*" + "packages/core", + "packages/browser", + "packages/sveltekit" ], "scripts": { - "dev": "yarn workspace @hawk.so/javascript dev", - "build": "yarn workspace @hawk.so/javascript build", - "stats": "yarn workspace @hawk.so/javascript stats", + "dev": "yarn workspace @hawk.so/browser dev", + "build": "yarn workspace @hawk.so/browser build", + "stats": "yarn workspace @hawk.so/browser stats", "lint": "eslint -c ./.eslintrc.cjs packages/*/src --ext .ts,.js --fix", "lint-test": "eslint -c ./.eslintrc.cjs packages/*/src --ext .ts,.js" }, diff --git a/packages/javascript/.babelrc b/packages/javascript/.babelrc deleted file mode 100644 index 0f0a669..0000000 --- a/packages/javascript/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/preset-env"], - "plugins": ["@babel/plugin-transform-async-to-generator"] -} diff --git a/packages/javascript/.size-limit.js b/packages/javascript/.size-limit.js deleted file mode 100644 index 8a8e029..0000000 --- a/packages/javascript/.size-limit.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = [ - { - path: "dist/hawk.umd.js", - name: "hawk browser" - } -]; diff --git a/packages/javascript/README.md b/packages/javascript/README.md deleted file mode 100644 index c541694..0000000 --- a/packages/javascript/README.md +++ /dev/null @@ -1,317 +0,0 @@ -# Hawk JavaScript Catcher - -Error tracking for JavaScript/TypeScript applications. - -## Features - -- 🦅 Automatic error catching -- 💎 Manual error and logs sending -- 🙂 Attaching user information -- 📦 Attaching additional context -- 🛡️ Sensitive data filtering -- 🌟 Source maps consuming -- 💬 Console logs tracking --  Vue support --  React support - - -## Installation - -We recommend adding Hawk script to page above others to prevent missing any errors. - -### Install via NPM or Yarn - -Install package - -```shell -npm install @hawk.so/javascript --save -``` - -```shell -yarn add @hawk.so/javascript -``` - -Then import `@hawk.so/javascript` module to your code. - -```js -import HawkCatcher from '@hawk.so/javascript'; -``` - -### Load from CDN - -Get a specific version bundle path from [@hawk.so/javascript](https://www.jsdelivr.com/package/npm/@hawk.so/javascript) -— open the page and copy the link. Do not use @latest, as your setup may break in case of a major API update. - -Then require this script on your site. - -``` - -``` - -## Usage - -### Get an Integration Token - -First of all, you should register an account on -[hawk.so](https://hawk-tracker.ru/signup?utm_source=github&utm_medium=readme&utm_campaign=js_sdk&utm_content=signup_link). - -Then create a Workspace and a Project in there. You'll get an Integration Token. - -### Initialize Catcher - -Create `HawkCatcher` class instance when script will be ready and pass your Integration Token: - -```js -const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); - -// or - -const hawk = new HawkCatcher('INTEGRATION_TOKEN'); -``` - -Alternately, add `onload="const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'})"` attribute to the ` -``` - -Initialization settings: - -| name | type | required | description | -|-------------------------------|-----------------------------------------------------------|--------------|-------------------------------------------------------------------------------------| -| `token` | string | **required** | Your project's Integration Token | -| `release` | string/number | optional | Unique identifier of the release. Used for source map consuming (see below) | -| `user` | {id: string, name?: string, image?: string, url?: string} | optional | Current authenticated user | -| `context` | object | optional | Any data you want to pass with every message. Has limitation of length. | -| `vue` | Vue constructor | optional | Pass Vue constructor to set up the [Vue integration](#integrate-to-vue-application) | -| `disableGlobalErrorsHandling` | boolean | optional | Do not initialize global errors handling | -| `disableVueErrorHandler` | boolean | optional | Do not initialize Vue errors handling | -| `consoleTracking` | boolean | optional | Initialize console logs tracking | -| `breadcrumbs` | false or BreadcrumbsOptions object | optional | Configure breadcrumbs tracking (see below) | -| `beforeSend` | function(event) => event | optional | This Method allows you to filter any data you don't want sending to Hawk | - -Other available [initial settings](types/hawk-initial-settings.d.ts) are described at the type definition. - -## Manual sending - -You can send errors or other messages to the Hawk manually, for example at your `catch` blocks or any debug conditions. - -Use the `.send(message, context)` method for that. This method accepts the `message` of type `Error` or `string` -as the first parameter. The second parameter is optional, it allows passing any additional data with the event. -If you specify the `context` with the `HawkCatcher` constructor, it will be merged with the context passed to the `send` -method. - -```js -// init Hawk Catcher instance -const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); - -// somewhere in try-catch block or other custom place -hawk.send(new Error('Something went wrong'), { - myOwnDebugInfo: '1234', -}); -``` - -## User Management - -You can dynamically manage user information after the catcher is initialized: - -```js -const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); - -// Set user information -hawk.setUser({ - id: 'user123', - name: 'John Doe', - url: '/users/123', - image: 'https://example.com/avatar.jpg', -}); - -// Clear user (revert to generated user) -hawk.clearUser(); -``` - -## Context Management - -You can dynamically update context data that will be sent with all events: - -```js -const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'}); - -// Set context data -hawk.setContext({ - feature: 'user-dashboard', - version: '2.1.0', - environment: 'production', -}); -``` - -## Breadcrumbs - -Breadcrumbs track user interactions and events leading up to an error, providing context for debugging. - -### Default Configuration - -By default, breadcrumbs are enabled with tracking for fetch/XHR requests, navigation, and UI clicks: - -```js -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN' - // breadcrumbs enabled by default -}); -``` - -### Disabling Breadcrumbs - -To disable breadcrumbs entirely: - -```js -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN', - breadcrumbs: false -}); -``` - -### Custom Configuration - -Configure breadcrumbs tracking behavior: - -```js -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN', - breadcrumbs: { - maxBreadcrumbs: 20, // Maximum breadcrumbs to store (default: 15) - trackFetch: true, // Track fetch/XHR requests (default: true) - trackNavigation: true, // Track navigation events (default: true) - trackClicks: true, // Track UI clicks (default: true) - beforeBreadcrumb: (breadcrumb, hint) => { - // Filter or modify breadcrumbs before storing - if (breadcrumb.category === 'fetch' && breadcrumb.data?.url?.includes('/sensitive')) { - return null; // Discard this breadcrumb - } - return breadcrumb; - } - } -}); -``` - -### Breadcrumbs Options - -| Option | Type | Default | Description | -|--------|------|---------|-------------| -| `maxBreadcrumbs` | `number` | `15` | Maximum number of breadcrumbs to store. When the limit is reached, oldest breadcrumbs are removed (FIFO). | -| `trackFetch` | `boolean` | `true` | Automatically track `fetch()` and `XMLHttpRequest` calls as breadcrumbs. Captures request URL, method, status code, and response time. | -| `trackNavigation` | `boolean` | `true` | Automatically track navigation events (History API: `pushState`, `replaceState`, `popstate`). Captures route changes. | -| `trackClicks` | `boolean` | `true` | Automatically track UI click events. Captures element selector, coordinates, and other click metadata. | -| `beforeBreadcrumb` | `function` | `undefined` | Hook called before each breadcrumb is stored. Receives `(breadcrumb, hint)` and can return modified breadcrumb, `null` to discard it, or the original breadcrumb. Useful for filtering sensitive data or PII. | - -### Manual Breadcrumbs - -Add custom breadcrumbs manually: - -```js -hawk.breadcrumbs.add({ - type: 'logic', - category: 'auth', - message: 'User logged in', - level: 'info', - data: { userId: '123' } -}); -``` - -### Breadcrumb Methods - -```js -// Add a breadcrumb -hawk.breadcrumbs.add(breadcrumb, hint); - -// Get current breadcrumbs -const breadcrumbs = hawk.breadcrumbs.get(); - -// Clear all breadcrumbs -hawk.breadcrumbs.clear(); -``` - -## Source maps consuming - -If your bundle is minified, it is useful to pass source-map files to the Hawk. After that you will see beautiful -original source code lines in Hawk Garage instead of minified code. - -To enable source map consuming you should do two things: - -- Send the source map and the release identifier to the Hawk after you build a new version of the script. For example - with the [Hawk Webpack Plugin](https://github.com/codex-team/hawk.webpack.plugin) or with cURL request. -- Pass the release identifier to the Hawk Catcher using `release` option. - -## Testing and server responses - -To make sure that Hawk is working right, call `test()` method from `HawkCatcher` class instance in browser's console. -`test()` method sends fake error to server. Then, open Hawk and find a test event at the Project's page. - -## Sensitive data filtering - -You can filter any data that you don't want to send to Hawk. Use the `beforeSend()` hook for that reason. - -```js -window.hawk = new HawkCatcher({ - token: 'INTEGRATION TOKEN', - beforeSend(event) { - if (event.user && event.user.name) { - delete event.user.name; - } - - return event; - } -}) -``` - -## Dismiss error - -You can use the `beforeSend()` hook to prevent sending a particular event. Return `false` for that. - -## Usage with    Vue.js - -Vue apps have their own error handler, so if you want to catcher errors thrown inside Vue components, you should set up -a Vue integration. - -Pass the Vue constructor with the initial settings: - -```js -import Vue from 'vue'; - -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN', - vue: Vue // the Vue constructor you tweak -}); -``` - -or pass it any moment after Hawk Catcher was instantiated: - -```js -import Vue from 'vue'; - -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN', -}); - -hawk.connectVue(Vue) -``` - -## Usage with    React - -React is suppported out of the box. No additional setup required. - -Create the Hawk Catcher instance in a `index.js` file of your project. - -```js -import HawkCatcher from '@hawk.so/javascript'; - -const hawk = new HawkCatcher({ - token: 'INTEGRATION_TOKEN' -}); -``` - -## License - -This project is licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**. -See the [LICENSE](./LICENSE) file for the full text. diff --git a/packages/javascript/example/breadcrumbs-tests.js b/packages/javascript/example/breadcrumbs-tests.js deleted file mode 100644 index 96124a7..0000000 --- a/packages/javascript/example/breadcrumbs-tests.js +++ /dev/null @@ -1,306 +0,0 @@ -/** - * Breadcrumbs Management - */ -const buttonAddBreadcrumb = document.getElementById('btn-add-breadcrumb'); -const buttonGetBreadcrumbs = document.getElementById('btn-get-breadcrumbs'); -const buttonClearBreadcrumbs = document.getElementById('btn-clear-breadcrumbs'); -const breadcrumbsOutput = document.getElementById('breadcrumbs-output'); - -buttonAddBreadcrumb.addEventListener('click', () => { - const message = document.getElementById('breadcrumbMessage').value; - const type = document.getElementById('breadcrumbType').value; - const level = document.getElementById('breadcrumbLevel').value; - const category = document.getElementById('breadcrumbCategory').value; - - if (!message.trim()) { - alert('Breadcrumb message is required'); - - return; - } - - window.hawk.breadcrumbs.add({ - message, - type, - level, - ...(category.trim() && { category }), - data: { - timestamp: new Date().toISOString(), - custom: 'manual breadcrumb', - }, - }); - - breadcrumbsOutput.textContent = `✓ Breadcrumb added: ${message}`; -}); - -buttonGetBreadcrumbs.addEventListener('click', () => { - const breadcrumbs = window.hawk.breadcrumbs.get(); - - if (breadcrumbs.length === 0) { - breadcrumbsOutput.textContent = 'No breadcrumbs yet'; - - return; - } - - breadcrumbsOutput.textContent = JSON.stringify(breadcrumbs, null, 2); -}); - -buttonClearBreadcrumbs.addEventListener('click', () => { - window.hawk.breadcrumbs.clear(); - breadcrumbsOutput.textContent = '✓ Breadcrumbs cleared'; -}); - -/** - * Test All Breadcrumb Types - */ -const buttonTestDefault = document.getElementById('btn-test-default'); -const buttonTestRequest = document.getElementById('btn-test-request'); -const buttonTestUI = document.getElementById('btn-test-ui'); -const buttonTestNavigation = document.getElementById('btn-test-navigation'); -const buttonTestLogic = document.getElementById('btn-test-logic'); -const buttonTestError = document.getElementById('btn-test-error'); -const buttonTestAllTypes = document.getElementById('btn-test-all-types'); - -/** - * Test Default breadcrumb (manual) - */ -buttonTestDefault.addEventListener('click', () => { - /** - * Default breadcrumbs are always added manually via hawk.breadcrumbs.add() - */ - window.hawk.breadcrumbs.add({ - type: 'default', - level: 'info', - category: 'user.action', - message: 'User clicked on default event button', - data: { - action: 'button_click', - context: 'breadcrumb_testing', - }, - }); - breadcrumbsOutput.textContent = '✓ Default breadcrumb added manually'; -}); - -/** - * Test Request breadcrumb (automatic via fetch) - */ -buttonTestRequest.addEventListener('click', async () => { - breadcrumbsOutput.textContent = 'Testing request breadcrumb...'; - - try { - const response = await fetch('https://api.github.com/zen'); - const text = await response.text(); - - breadcrumbsOutput.textContent = `✓ Request breadcrumb added (${response.status}): "${text}"`; - } catch (error) { - breadcrumbsOutput.textContent = `✗ Request failed: ${error.message}`; - } -}); - -/** - * Test UI breadcrumb (automatic tracking) - */ -buttonTestUI.addEventListener('click', () => { - /** - * Create a test element and click it to trigger automatic UI breadcrumb - * BreadcrumbManager automatically captures click events when trackClicks: true - */ - const testElement = document.createElement('button'); - - testElement.id = 'auto-click-test'; - testElement.className = 'test-button'; - testElement.textContent = 'Auto Test'; - testElement.style.position = 'absolute'; - testElement.style.opacity = '0'; - testElement.style.pointerEvents = 'none'; - document.body.appendChild(testElement); - - /** - * Trigger a click event - */ - testElement.click(); - - /** - * Clean up - */ - setTimeout(() => { - document.body.removeChild(testElement); - }, 100); - - breadcrumbsOutput.textContent = '✓ UI Click breadcrumb added automatically'; -}); - -/** - * Test Navigation breadcrumb (automatic tracking) - */ -buttonTestNavigation.addEventListener('click', () => { - /** - * Change the hash to trigger automatic navigation breadcrumb - * BreadcrumbManager automatically captures this event - */ - window.location.hash = 'breadcrumb-test-' + Date.now(); - - breadcrumbsOutput.textContent = '✓ Navigation breadcrumb added automatically'; -}); - -/** - * Test Logic breadcrumb (manual) - */ -buttonTestLogic.addEventListener('click', () => { - /** - * Simulate some logic operations - */ - const startTime = performance.now(); - - /** - * Complex calculation for testing - * - * @param {number} n - Number of iterations - * @returns {number} Calculation result - */ - function complexCalculation(n) { - let result = 0; - - for (let i = 0; i < n; i++) { - result += Math.sqrt(i); - } - - return result; - } - - const result = complexCalculation(10000); - const duration = performance.now() - startTime; - - /** - * Logic breadcrumbs are always added manually to track application flow - */ - window.hawk.breadcrumbs.add({ - type: 'logic', - level: 'debug', - category: 'calculation.complex', - message: 'Performed complex calculation', - data: { - operation: 'complexCalculation', - iterations: 10000, - result: result, - durationMs: duration.toFixed(2), - }, - }); - - breadcrumbsOutput.textContent = `✓ Logic breadcrumb added manually (${duration.toFixed(2)}ms)`; -}); - -/** - * Test Error breadcrumb (manual) - */ -buttonTestError.addEventListener('click', () => { - try { - /** - * Intentionally cause an error but catch it - */ - JSON.parse('invalid json {{{'); - } catch (error) { - /** - * Caught errors can be manually added as breadcrumbs - * Uncaught errors are sent to Hawk automatically, not as breadcrumbs - */ - window.hawk.breadcrumbs.add({ - type: 'error', - level: 'error', - category: 'json.parse', - message: `JSON parse error: ${error.message}`, - data: { - error: error.name, - message: error.message, - input: 'invalid json {{{', - }, - }); - - breadcrumbsOutput.textContent = `✓ Error breadcrumb added manually: ${error.message}`; - } -}); - -/** - * Test All Types in sequence - */ -buttonTestAllTypes.addEventListener('click', async () => { - breadcrumbsOutput.textContent = 'Running all breadcrumb types...'; - - /** - * 1. Default - */ - window.hawk.breadcrumbs.add({ - type: 'default', - level: 'info', - message: 'Sequence started', - }); - - await new Promise(resolve => setTimeout(resolve, 200)); - - /** - * 2. Logic - */ - window.hawk.breadcrumbs.add({ - type: 'logic', - level: 'debug', - category: 'sequence.step', - message: 'Processing step 1', - data: { - step: 1, - }, - }); - - await new Promise(resolve => setTimeout(resolve, 200)); - - /** - * 3. UI (automatic) - */ - const autoClickElement = document.createElement('button'); - - autoClickElement.id = 'sequence-auto-click'; - autoClickElement.style.position = 'absolute'; - autoClickElement.style.opacity = '0'; - autoClickElement.style.pointerEvents = 'none'; - document.body.appendChild(autoClickElement); - autoClickElement.click(); - document.body.removeChild(autoClickElement); - - await new Promise(resolve => setTimeout(resolve, 200)); - - /** - * 4. Request (automatic) - */ - try { - await fetch('https://api.github.com/zen'); - } catch (error) { - /** - * Fetch will be captured automatically - */ - } - - await new Promise(resolve => setTimeout(resolve, 200)); - - /** - * 5. Navigation (automatic) - */ - window.location.hash = 'sequence-test-' + Date.now(); - - await new Promise(resolve => setTimeout(resolve, 200)); - - /** - * 6. Error - */ - try { - throw new Error('Test error in sequence'); - } catch (error) { - window.hawk.breadcrumbs.add({ - type: 'error', - level: 'warning', - message: `Caught error: ${error.message}`, - data: { - error: error.name, - }, - }); - } - - breadcrumbsOutput.textContent = '✓ All breadcrumb types added! Check "Get Breadcrumbs"'; -}); diff --git a/packages/javascript/example/index.html b/packages/javascript/example/index.html deleted file mode 100644 index 91f6185..0000000 --- a/packages/javascript/example/index.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - Hawk JavaScript example - - - - -
-

Hawk JavaScript Catcher

- https://github.com/codex-team/hawk.javascript -
-
-

Send test event

- -
-
-

Send real error

- -
-
-

Send Unhandled promise rejection error

- -
-
-

- Send event manually - Through the .send(error, context) method -

- - -
-
- -
-
-

Send the specified number of errors

- - -

- - -

- -
-
-

Test console catcher

- - -

- - -

- -
-
-

User Management

- - -

- - -

- - -

- - -
-
-

Context Management

- - -

- - -

- -
-
-

Breadcrumbs Management

- - -

- - -

- - -

- - -

- - - - -

Test All Breadcrumb Types Quick examples for each type

-
- - - - - - -
-
- -
-
- -
-

Test Vue integration: $root

-
- -
- -
-
-

Test Vue integration: <test-component>

-
- -
- -
- - - - - diff --git a/packages/javascript/example/sample-errors.js b/packages/javascript/example/sample-errors.js deleted file mode 100644 index 1f88c10..0000000 --- a/packages/javascript/example/sample-errors.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Real error sample - */ -function realErrorSample() { - /** - * Error wrapper used to fill stack - */ - function errorWrapperForStack(initialValue) { - const a = 1; - - a = initialValue; - } - - errorWrapperForStack(2); -} - -/** - * Calling function that has syntax error; - */ -const buttonRealError = document.getElementById('btn-real-error'); - -buttonRealError.addEventListener('click', realErrorSample); - -/** - * Unhandled promise rejection - */ -const buttonPromiseRejection = document.getElementById('btn-promise-rejection'); - -buttonPromiseRejection.addEventListener('click', function promiseRejectionSample() { - /** - * Promise.reject('This is a sample rejected promise'); - */ - Promise.resolve() - .then(realErrorSample) - .then(() => {}); -}); - -/** - * Send many errors - */ -const buttonSendMany = document.getElementById('btn-send-many'); - -buttonSendMany.addEventListener('click', function sendManyErrors() { - const inputElement = document.getElementById('errorsNumber'); - const errorType = document.getElementById('errorType').value; - const errorsNumber = inputElement.value; - - for (let i = 0; i < errorsNumber; i++) { - window.hawk.send(new window[errorType]('Test many error')); - } -}); - -/** - * Console watcher test - */ -const buttonConsoleTest = document.getElementById('btn-console-test'); - -buttonConsoleTest.addEventListener('click', function consoleLogPrint() { - const consoleMethod = document.getElementById('consoleMethod').value; - const text = document.getElementById('consoleCatcherTestTextInput').value; - - console[consoleMethod](text); -}); - -/** - * Button for the manual sending - */ -const buttonManualSending = document.getElementById('btn-manual-sending'); - -buttonManualSending.addEventListener('click', () => { - const contextSample = document.getElementById('errorContext').value; - - window.hawk.send( - new Error('Manual sending example'), - contextSample.trim().length ? { contextSample } : undefined - ); -}); - -/** - * User Management - */ -const buttonSetUser = document.getElementById('btn-set-user'); -const buttonClearUser = document.getElementById('btn-clear-user'); - -buttonSetUser.addEventListener('click', () => { - const userId = document.getElementById('userId').value; - const userName = document.getElementById('userName').value; - const userUrl = document.getElementById('userUrl').value; - - if (!userId.trim()) { - alert('User ID is required'); - return; - } - - const user = { - id: userId, - ...(userName.trim() && { name: userName }), - ...(userUrl.trim() && { url: userUrl }), - }; - - window.hawk.setUser(user); -}); - -buttonClearUser.addEventListener('click', () => { - window.hawk.clearUser(); -}); - -/** - * Context Management - */ -const buttonSetContext = document.getElementById('btn-set-context'); - -buttonSetContext.addEventListener('click', () => { - const contextKey = document.getElementById('contextKey').value; - const contextValue = document.getElementById('contextValue').value; - - if (!contextKey.trim()) { - alert('Context key is required'); - return; - } - - const context = { - [contextKey]: contextValue, - }; - - window.hawk.setContext(context); -}); diff --git a/packages/javascript/package.json b/packages/javascript/package.json deleted file mode 100644 index 6db939c..0000000 --- a/packages/javascript/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@hawk.so/javascript", - "version": "3.2.14", - "description": "JavaScript errors tracking for Hawk.so", - "files": [ - "dist" - ], - "main": "./dist/hawk.umd.js", - "module": "./dist/hawk.mjs", - "types": "dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/hawk.mjs", - "require": "./dist/hawk.umd.js" - } - }, - "scripts": { - "dev": "vite", - "build": "vite build", - "stats": "size-limit > stats.txt", - "lint": "eslint --fix \"src/**/*.{js,ts}\"" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/codex-team/hawk.javascript.git", - "directory": "packages/javascript" - }, - "author": { - "name": "CodeX", - "email": "team@codex.so" - }, - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/codex-team/hawk.javascript/issues" - }, - "homepage": "https://github.com/codex-team/hawk.javascript#readme", - "dependencies": { - "error-stack-parser": "^2.1.4" - }, - "devDependencies": { - "@hawk.so/types": "0.5.2", - "vite": "^7.3.1", - "vite-plugin-dts": "^4.2.4", - "vue": "^2" - } -} diff --git a/packages/javascript/src/addons/breadcrumbs.ts b/packages/javascript/src/addons/breadcrumbs.ts deleted file mode 100644 index 8c5361a..0000000 --- a/packages/javascript/src/addons/breadcrumbs.ts +++ /dev/null @@ -1,622 +0,0 @@ -/** - * @file Breadcrumbs module - captures chronological trail of events before an error - */ -import type { Breadcrumb, BreadcrumbLevel, BreadcrumbType, Json, JsonNode } from '@hawk.so/types'; -import Sanitizer from '../modules/sanitizer'; -import { buildElementSelector } from '../utils/selector'; -import log from '../utils/log'; - -/** - * Default maximum number of breadcrumbs to store - */ -const DEFAULT_MAX_BREADCRUMBS = 15; - -/** - * Hint object passed to beforeBreadcrumb callback - */ -export interface BreadcrumbHint { - /** - * Original event that triggered the breadcrumb (if any) - */ - event?: Event | Response | XMLHttpRequest; - - /** - * Request info for fetch/xhr breadcrumbs - */ - input?: RequestInfo | URL; - - /** - * Response data for fetch/xhr breadcrumbs - */ - response?: Response; - - /** - * XHR instance for xhr breadcrumbs - */ - xhr?: XMLHttpRequest; -} - -/** - * Configuration options for breadcrumbs - */ -export interface BreadcrumbsOptions { - /** - * Maximum number of breadcrumbs to store (FIFO) - * - * @default 15 - */ - maxBreadcrumbs?: number; - - /** - * Hook called before each breadcrumb is stored - * Return null to discard the breadcrumb - * Return modified breadcrumb to store it - */ - beforeBreadcrumb?: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => Breadcrumb | null; - - /** - * Enable automatic fetch/XHR breadcrumbs - * - * @default true - */ - trackFetch?: boolean; - - /** - * Enable automatic navigation breadcrumbs (history API) - * - * @default true - */ - trackNavigation?: boolean; - - /** - * Enable automatic UI click breadcrumbs - * - * @default true - */ - trackClicks?: boolean; -} - -/** - * Breadcrumb input type - breadcrumb data with optional timestamp - * (timestamp will be auto-generated if not provided) - */ -export type BreadcrumbInput = Omit & { timestamp?: Breadcrumb['timestamp'] }; - -/** - * Internal breadcrumbs options - all fields except 'beforeBreadcrumb' are required - * (they have default values and are always set during init) - */ -interface InternalBreadcrumbsOptions { - maxBreadcrumbs: number; - trackFetch: boolean; - trackNavigation: boolean; - trackClicks: boolean; - beforeBreadcrumb?: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => Breadcrumb | null; -} - -/** - * BreadcrumbManager - singleton that manages breadcrumb collection and storage - */ -export class BreadcrumbManager { - /** - * Singleton instance - */ - private static instance: BreadcrumbManager | null = null; - - /** - * Breadcrumbs buffer (FIFO) - */ - private readonly breadcrumbs: Breadcrumb[] = []; - - /** - * Configuration options - all fields are guaranteed to be set (except optional beforeBreadcrumb) - */ - private options: InternalBreadcrumbsOptions; - - /** - * Initialization flag - */ - private isInitialized = false; - - /** - * Original fetch function (for restoration) - */ - private originalFetch: typeof fetch | null = null; - - /** - * Original XMLHttpRequest.open (for restoration) - */ - private originalXHROpen: typeof XMLHttpRequest.prototype.open | null = null; - - /** - * Original XMLHttpRequest.send (for restoration) - */ - private originalXHRSend: typeof XMLHttpRequest.prototype.send | null = null; - - /** - * Original history.pushState (for restoration) - */ - private originalPushState: typeof history.pushState | null = null; - - /** - * Original history.replaceState (for restoration) - */ - private originalReplaceState: typeof history.replaceState | null = null; - - /** - * Click event handler reference (for removal) - */ - private clickHandler: ((event: MouseEvent) => void) | null = null; - - /** - * Popstate event handler reference (for removal) - */ - private popstateHandler: (() => void) | null = null; - - /** - * Private constructor to enforce singleton pattern - */ - private constructor() { - this.options = { - maxBreadcrumbs: DEFAULT_MAX_BREADCRUMBS, - trackFetch: true, - trackNavigation: true, - trackClicks: true, - }; - } - - /** - * Get singleton instance - */ - public static getInstance(): BreadcrumbManager { - BreadcrumbManager.instance ??= new BreadcrumbManager(); - - return BreadcrumbManager.instance; - } - - /** - * Initialize breadcrumbs with options and start auto-capture - * - * @param options - Configuration options for breadcrumbs - */ - public init(options: BreadcrumbsOptions = {}): void { - if (this.isInitialized) { - log('[BreadcrumbManager] init has already been called; breadcrumb configuration is global and subsequent init options are ignored.', 'warn'); - - return; - } - - this.options = { - maxBreadcrumbs: options.maxBreadcrumbs ?? DEFAULT_MAX_BREADCRUMBS, - beforeBreadcrumb: options.beforeBreadcrumb, - trackFetch: options.trackFetch ?? true, - trackNavigation: options.trackNavigation ?? true, - trackClicks: options.trackClicks ?? true, - }; - - this.isInitialized = true; - - /** - * Setup auto-capture handlers - */ - if (this.options.trackFetch) { - this.monkeypatchFetch(); - this.wrapXHR(); - } - - if (this.options.trackNavigation) { - this.wrapHistory(); - } - - if (this.options.trackClicks) { - this.setupClickTracking(); - } - } - - /** - * Add a breadcrumb to the buffer - * - * @param breadcrumb - The breadcrumb data to add - * @param hint - Optional hint object with original event data (Event, Response, XMLHttpRequest, etc.) - * Used by beforeBreadcrumb callback to access original event context - */ - public addBreadcrumb(breadcrumb: BreadcrumbInput, hint?: BreadcrumbHint): void { - /** - * Ensure timestamp - */ - const bc: Breadcrumb = { - ...breadcrumb, - timestamp: breadcrumb.timestamp ?? Date.now(), - }; - - /** - * Apply beforeBreadcrumb hook - */ - if (this.options.beforeBreadcrumb) { - const result = this.options.beforeBreadcrumb(bc, hint); - - if (result === null) { - /** - * Discard breadcrumb - */ - return; - } - - Object.assign(bc, result); - } - - /** - * Sanitize data and message - */ - if (bc.data) { - bc.data = Sanitizer.sanitize(bc.data) as Record; - } - - if (bc.message) { - bc.message = Sanitizer.sanitize(bc.message) as string; - } - - /** - * Add to buffer (FIFO) - */ - this.breadcrumbs.push(bc); - - if (this.breadcrumbs.length > this.options.maxBreadcrumbs) { - this.breadcrumbs.shift(); - } - } - - /** - * Get current breadcrumbs snapshot (oldest to newest) - */ - public getBreadcrumbs(): Breadcrumb[] { - return [ ...this.breadcrumbs ]; - } - - /** - * Clear all breadcrumbs - */ - public clearBreadcrumbs(): void { - this.breadcrumbs.length = 0; - } - - /** - * Destroy the manager and restore original functions - */ - public destroy(): void { - /** - * Restore fetch - */ - if (this.originalFetch) { - window.fetch = this.originalFetch; - this.originalFetch = null; - } - - /** - * Restore XHR - */ - if (this.originalXHROpen) { - XMLHttpRequest.prototype.open = this.originalXHROpen; - this.originalXHROpen = null; - } - - if (this.originalXHRSend) { - XMLHttpRequest.prototype.send = this.originalXHRSend; - this.originalXHRSend = null; - } - - /** - * Restore history - */ - if (this.originalPushState) { - history.pushState = this.originalPushState; - this.originalPushState = null; - } - - if (this.originalReplaceState) { - history.replaceState = this.originalReplaceState; - this.originalReplaceState = null; - } - - /** - * Remove click handler - */ - if (this.clickHandler) { - document.removeEventListener('click', this.clickHandler, { capture: true }); - this.clickHandler = null; - } - - /** - * Remove popstate handler - */ - if (this.popstateHandler) { - window.removeEventListener('popstate', this.popstateHandler); - this.popstateHandler = null; - } - - this.clearBreadcrumbs(); - this.isInitialized = false; - BreadcrumbManager.instance = null; - } - - - /** - * Monkeypatch fetch API to capture HTTP breadcrumbs - */ - private monkeypatchFetch(): void { - if (typeof fetch === 'undefined') { - return; - } - - const originalFetch = window.fetch.bind(window); - - this.originalFetch = originalFetch; - - // eslint-disable-next-line @typescript-eslint/no-this-alias - const manager = this; - - window.fetch = async function (input: RequestInfo | URL, init?: RequestInit): Promise { - const startTime = Date.now(); - const method = init?.method || 'GET'; - let url: string; - - if (typeof input === 'string') { - url = input; - } else if (input instanceof URL) { - url = input.href; - } else { - url = input.url; - } - - let response: Response; - - try { - response = await originalFetch(input, init); - - const duration = Date.now() - startTime; - - manager.addBreadcrumb({ - type: 'request', - category: 'fetch', - message: `${response.status} ${method} ${url}`, - level: response.ok ? 'info' : 'error', - data: { - url, - method, - statusCode: response.status, - durationMs: duration, - }, - }, { - input, - response, - }); - - return response; - } catch (error) { - const duration = Date.now() - startTime; - - manager.addBreadcrumb({ - type: 'request', - category: 'fetch', - message: `[FAIL] ${method} ${url}`, - level: 'error', - data: { - url, - method, - statusCode: 0, - durationMs: duration, - error: error instanceof Error ? error.message : String(error), - }, - }, { - input, - }); - - throw error; - } - }; - } - - /** - * Wrap XMLHttpRequest to capture XHR breadcrumbs - */ - private wrapXHR(): void { - if (typeof XMLHttpRequest === 'undefined') { - return; - } - - // eslint-disable-next-line @typescript-eslint/no-this-alias - const manager = this; - const originalOpen = XMLHttpRequest.prototype.open; - const originalSend = XMLHttpRequest.prototype.send; - - this.originalXHROpen = originalOpen; - this.originalXHRSend = originalSend; - - /** - * Store request info on the XHR instance - */ - interface XHRWithBreadcrumb extends XMLHttpRequest { - hawkMethod?: string; - hawkUrl?: string; - hawkStart?: number; - hawkListenerAdded?: boolean; - } - - XMLHttpRequest.prototype.open = function (this: XHRWithBreadcrumb, method: string, url: string | URL, ...args: unknown[]) { - this.hawkMethod = method; - this.hawkUrl = typeof url === 'string' ? url : url.href; - - return originalOpen.apply(this, [method, url, ...args] as Parameters); - }; - - XMLHttpRequest.prototype.send = function (this: XHRWithBreadcrumb, body?: Document | XMLHttpRequestBodyInit | null) { - this.hawkStart = Date.now(); - - const onReadyStateChange = (): void => { - if (this.readyState === XMLHttpRequest.DONE) { - const duration = Date.now() - (this.hawkStart || Date.now()); - const method = this.hawkMethod || 'GET'; - const url = this.hawkUrl || ''; - const status = this.status; - - manager.addBreadcrumb({ - type: 'request', - category: 'xhr', - message: `${status} ${method} ${url}`, - level: status >= 200 && status < 400 ? 'info' : 'error', - data: { - url, - method, - statusCode: status, - durationMs: duration, - }, - }, { - xhr: this, - }); - } - }; - - /** - * Add listener only once per XHR instance to prevent duplicates - */ - if (!this.hawkListenerAdded) { - this.addEventListener('readystatechange', onReadyStateChange); - this.hawkListenerAdded = true; - } - - return originalSend.call(this, body); - }; - } - - /** - * Wrap History API to capture navigation breadcrumbs - */ - private wrapHistory(): void { - if (typeof history === 'undefined') { - return; - } - - // eslint-disable-next-line @typescript-eslint/no-this-alias - const manager = this; - let lastUrl = window.location.href; - - const createNavigationBreadcrumb = (to: string): void => { - const from = lastUrl; - - lastUrl = to; - - manager.addBreadcrumb({ - type: 'navigation', - category: 'navigation', - message: `Navigated to ${to}`, - level: 'info', - data: { - from, - to, - }, - }); - }; - - /** - * Wrap pushState - */ - this.originalPushState = history.pushState; - history.pushState = function (...args) { - const result = manager.originalPushState!.apply(this, args); - - createNavigationBreadcrumb(window.location.href); - - return result; - }; - - /** - * Wrap replaceState - */ - this.originalReplaceState = history.replaceState; - history.replaceState = function (...args) { - const result = manager.originalReplaceState!.apply(this, args); - - createNavigationBreadcrumb(window.location.href); - - return result; - }; - - /** - * Listen for popstate (back/forward) - */ - this.popstateHandler = (): void => { - createNavigationBreadcrumb(window.location.href); - }; - - window.addEventListener('popstate', this.popstateHandler); - } - - /** - * Setup click event tracking for UI breadcrumbs - */ - private setupClickTracking(): void { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const manager = this; - - this.clickHandler = (event: MouseEvent): void => { - const target = event.target as HTMLElement; - - if (!target) { - return; - } - - /** - * Build a simple selector - */ - const selector = buildElementSelector(target); - - /** - * Get text content (limited) - */ - const text = (target.textContent || target.innerText || '').trim().substring(0, 50); - - manager.addBreadcrumb({ - type: 'ui', - category: 'ui.click', - message: `Click on ${selector}`, - level: 'info', - data: { - selector, - text, - tagName: target.tagName, - }, - }, { - event, - }); - }; - - document.addEventListener('click', this.clickHandler, { - capture: true, - passive: true }); - } -} - -/** - * Helper function to create a breadcrumb object - * - * @param message - The breadcrumb message - * @param options - Optional breadcrumb configuration - */ -export function createBreadcrumb( - message: string, - options?: { - type?: BreadcrumbType; - category?: string; - level?: BreadcrumbLevel; - data?: Record; - } -): Breadcrumb { - return { - timestamp: Date.now(), - message, - type: options?.type ?? 'default', - category: options?.category, - level: options?.level ?? 'info', - data: options?.data, - }; -} diff --git a/packages/javascript/src/addons/consoleCatcher.ts b/packages/javascript/src/addons/consoleCatcher.ts deleted file mode 100644 index 16815ab..0000000 --- a/packages/javascript/src/addons/consoleCatcher.ts +++ /dev/null @@ -1,297 +0,0 @@ -/** - * @file Module for intercepting console logs with stack trace capture - */ -import type { ConsoleLogEvent } from '@hawk.so/types'; -import Sanitizer from '../modules/sanitizer'; - -/** - * Maximum number of console logs to store - */ -const MAX_LOGS = 20; - -/** - * Console methods to intercept - */ -const CONSOLE_METHODS: string[] = ['log', 'warn', 'error', 'info', 'debug']; - -/** - * Console catcher class for intercepting and capturing console logs. - * - * This singleton class wraps native console methods to capture all console output with accurate - * stack traces. When developers click on console messages in DevTools, they are taken to the - * original call site in their code, not to the interceptor's code. - */ -export class ConsoleCatcher { - /** - * Singleton instance - */ - private static instance: ConsoleCatcher | null = null; - - /** - * Console output buffer - */ - private readonly consoleOutput: ConsoleLogEvent[] = []; - - /** - * Initialization flag - */ - private isInitialized = false; - - /** - * Private constructor to enforce singleton pattern - */ - private constructor() {} - - /** - * Get singleton instance - */ - public static getInstance(): ConsoleCatcher { - ConsoleCatcher.instance ??= new ConsoleCatcher(); - - return ConsoleCatcher.instance; - } - - /** - * Converts any argument to its string representation - * - * @param arg - Value to convert to string - * @throws Error if the argument can not be stringified, for example by such reason: - * SecurityError: Failed to read a named property 'toJSON' from 'Window': Blocked a frame with origin "https://codex.so" from accessing a cross-origin frame. - */ - private stringifyArg(arg: unknown): string { - if (typeof arg === 'string') { - return arg; - } - if (typeof arg === 'number' || typeof arg === 'boolean') { - return String(arg); - } - - /** - * Sanitize the argument before stringifying to handle circular references, deep objects, etc - * And then it can be stringified safely - */ - const sanitized = Sanitizer.sanitize(arg); - - return JSON.stringify(sanitized); - } - - /** - * Formats console arguments handling %c directives - * - * @param args - Console arguments that may include style directives - */ - private formatConsoleArgs(args: unknown[]): { - message: string; - styles: string[]; - } { - if (args.length === 0) { - return { - message: '', - styles: [], - }; - } - - const firstArg = args[0]; - - if (typeof firstArg !== 'string' || !firstArg.includes('%c')) { - return { - message: args.map(arg => { - try { - return this.stringifyArg(arg); - } catch (error) { - return '[Error stringifying argument: ' + (error instanceof Error ? error.message : String(error)) + ']'; - } - }).join(' '), - styles: [], - }; - } - - // Handle %c formatting - const message = args[0] as string; - const styles: string[] = []; - - // Extract styles from arguments - let styleIndex = 0; - - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - - if (typeof arg === 'string' && message.indexOf('%c', styleIndex) !== -1) { - styles.push(arg); - styleIndex = message.indexOf('%c', styleIndex) + 2; - } - } - - // Add remaining arguments that aren't styles - const remainingArgs = args - .slice(styles.length + 1) - .map(arg => { - try { - return this.stringifyArg(arg); - } catch (error) { - return '[Error stringifying argument: ' + (error instanceof Error ? error.message : String(error)) + ']'; - } - }) - .join(' '); - - return { - message: message + (remainingArgs ? ' ' + remainingArgs : ''), - styles, - }; - } - - /** - * Extracts user code stack trace from the full stack trace. - * - * Dynamic stack frame identification: - * - Problem: Fixed slice(2) doesn't work reliably because the number of internal frames - * varies based on code structure (arrow functions, class methods, TS→JS transforms, etc.). - * - Solution: Find the first stack frame that doesn't belong to consoleCatcher module. - * This ensures DevTools will navigate to the user's code, not the interceptor's code. - * - * @param errorStack - Full stack trace string from Error.stack - * @returns Object with userStack (full stack from user code) and fileLine (first frame for DevTools link) - */ - private extractUserStack(errorStack: string | undefined): { - userStack: string; - fileLine: string; - } { - const stackLines = errorStack?.split('\n') || []; - const consoleCatcherPattern = /consoleCatcher/i; - let userFrameIndex = 1; // Skip Error message line - - // Find first frame that doesn't belong to consoleCatcher module - for (let i = 1; i < stackLines.length; i++) { - if (!consoleCatcherPattern.test(stackLines[i])) { - userFrameIndex = i; - break; - } - } - - // Extract user code stack (everything from the first non-consoleCatcher frame) - const userStack = stackLines.slice(userFrameIndex).join('\n'); - // First frame is used as fileLine - this is what DevTools shows as clickable link - const fileLine = stackLines[userFrameIndex]?.trim() || ''; - - return { userStack, - fileLine }; - } - - /** - * Adds a console log event to the output buffer - * - * @param logEvent - The console log event to be added to the output buffer - */ - private addToConsoleOutput(logEvent: ConsoleLogEvent): void { - if (this.consoleOutput.length >= MAX_LOGS) { - this.consoleOutput.shift(); - } - this.consoleOutput.push(logEvent); - } - - /** - * Creates a console log event from an error or promise rejection - * - * @param event - The error event or promise rejection event to convert - */ - private createConsoleEventFromError(event: ErrorEvent | PromiseRejectionEvent): ConsoleLogEvent { - if (event instanceof ErrorEvent) { - return { - method: 'error', - timestamp: new Date(), - type: event.error?.name || 'Error', - message: event.error?.message || event.message, - stack: event.error?.stack || '', - fileLine: event.filename - ? `${event.filename}:${event.lineno}:${event.colno}` - : '', - }; - } - - return { - method: 'error', - timestamp: new Date(), - type: 'UnhandledRejection', - message: event.reason?.message || String(event.reason), - stack: event.reason?.stack || '', - fileLine: '', - }; - } - - /** - * Initializes the console interceptor by overriding default console methods. - * - * Wraps native console methods to intercept all calls, capture their context, and generate - * accurate stack traces that point to the original call site (not the interceptor). - */ - // eslint-disable-next-line @typescript-eslint/member-ordering - public init(): void { - if (this.isInitialized) { - return; - } - - this.isInitialized = true; - - CONSOLE_METHODS.forEach((method) => { - if (typeof window.console[method] !== 'function') { - return; - } - - // Store original function to forward calls after interception - const oldFunction = window.console[method].bind(window.console); - - /** - * Override console method to intercept all calls. - * - * For each intercepted call, we: - * 1. Generate a stack trace to find the original call site - * 2. Format the console arguments into a structured message - * 3. Create a ConsoleLogEvent with metadata - * 4. Store it in the buffer - * 5. Forward the call to the native console (so output still appears in DevTools) - * - * @param {...any} args - */ - window.console[method] = (...args: unknown[]): void => { - // Capture full stack trace and extract user code stack - const errorStack = new Error('Console log stack trace').stack; - const { userStack, fileLine } = this.extractUserStack(errorStack); - const { message, styles } = this.formatConsoleArgs(args); - - const logEvent: ConsoleLogEvent = { - method, - timestamp: new Date(), - type: method, - message, - stack: userStack, - fileLine, - styles, - }; - - this.addToConsoleOutput(logEvent); - // Forward to native console so output still appears in DevTools - oldFunction(...args); - }; - }); - } - - /** - * Handles error events by converting them to console log events - * - * @param event - The error or promise rejection event to handle - */ - // eslint-disable-next-line @typescript-eslint/member-ordering - public addErrorEvent(event: ErrorEvent | PromiseRejectionEvent): void { - const logEvent = this.createConsoleEventFromError(event); - - this.addToConsoleOutput(logEvent); - } - - /** - * Returns the current console output buffer - */ - // eslint-disable-next-line @typescript-eslint/member-ordering - public getConsoleLogStack(): ConsoleLogEvent[] { - return [ ...this.consoleOutput ]; - } -} diff --git a/packages/javascript/src/addons/userAgentInfo.ts b/packages/javascript/src/addons/userAgentInfo.ts deleted file mode 100644 index ec7c370..0000000 --- a/packages/javascript/src/addons/userAgentInfo.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @file Integration for adding User Agent info - */ - -/** - * @param event - event to modify - * @param data - event data - */ -export default function (event, data): void { - data.payload.userAgent = { - name: window.navigator.userAgent, - frame: { - width: window.innerWidth, - height: window.innerHeight, - }, - }; -} diff --git a/packages/javascript/src/catcher.ts b/packages/javascript/src/catcher.ts deleted file mode 100644 index 313ba93..0000000 --- a/packages/javascript/src/catcher.ts +++ /dev/null @@ -1,667 +0,0 @@ -import Socket from './modules/socket'; -import Sanitizer from './modules/sanitizer'; -import log from './utils/log'; -import StackParser from './modules/stackParser'; -import type { CatcherMessage, HawkInitialSettings, BreadcrumbsAPI } from './types'; -import { VueIntegration } from './integrations/vue'; -import { id } from './utils/id'; -import type { - AffectedUser, - EventContext, - JavaScriptAddons, - VueIntegrationAddons, - Json, EncodedIntegrationToken, DecodedIntegrationToken, -} from '@hawk.so/types'; -import type { JavaScriptCatcherIntegrations } from './types/integrations'; -import { EventRejectedError } from './errors'; -import type { HawkJavaScriptEvent } from './types'; -import { isErrorProcessed, markErrorAsProcessed } from './utils/event'; -import { ConsoleCatcher } from './addons/consoleCatcher'; -import { BreadcrumbManager } from './addons/breadcrumbs'; -import { validateUser, validateContext } from './utils/validation'; - -/** - * Allow to use global VERSION, that will be overwritten by Webpack - */ -declare const VERSION: string; - -/** - * Hawk JavaScript Catcher - * Module for errors and exceptions tracking - * - * @copyright CodeX - */ -export default class Catcher { - /** - * JS Catcher version - */ - public readonly version: string = VERSION; - - /** - * Vue.js integration instance - */ - public vue: VueIntegration | null = null; - - /** - * Catcher Type - */ - private readonly type: string = 'errors/javascript'; - - /** - * User project's Integration Token - */ - private readonly token: EncodedIntegrationToken; - - /** - * Enable debug mode - */ - private readonly debug: boolean; - - /** - * Current bundle version - */ - private readonly release: string | undefined; - - /** - * Current authenticated user - */ - private user: AffectedUser; - - /** - * Any additional data passed by user for sending with all messages - */ - private context: EventContext | undefined; - - /** - * This Method allows developer to filter any data you don't want sending to Hawk - * If method returns false, event will not be sent - */ - private readonly beforeSend: undefined | ((event: HawkJavaScriptEvent) => HawkJavaScriptEvent | false); - - /** - * Transport for dialog between Catcher and Collector - * (WebSocket decorator) - */ - private readonly transport: Socket; - - /** - * Module for parsing backtrace - */ - private readonly stackParser: StackParser = new StackParser(); - - /** - * Disable Vue.js error handler - */ - private readonly disableVueErrorHandler: boolean = false; - - /** - * Console log handler - */ - private readonly consoleTracking: boolean; - - /** - * Console catcher instance - */ - private readonly consoleCatcher: ConsoleCatcher | null = null; - - /** - * Breadcrumb manager instance - */ - private readonly breadcrumbManager: BreadcrumbManager | null; - - /** - * Catcher constructor - * - * @param {HawkInitialSettings|string} settings - If settings is a string, it means an Integration Token - */ - constructor(settings: HawkInitialSettings | string) { - if (typeof settings === 'string') { - settings = { - token: settings, - } as HawkInitialSettings; - } - - this.token = settings.token; - this.debug = settings.debug || false; - this.release = settings.release !== undefined ? String(settings.release) : undefined; - this.setUser(settings.user || Catcher.getGeneratedUser()); - this.setContext(settings.context || undefined); - this.beforeSend = settings.beforeSend; - this.disableVueErrorHandler = - settings.disableVueErrorHandler !== null && settings.disableVueErrorHandler !== undefined - ? settings.disableVueErrorHandler - : false; - this.consoleTracking = - settings.consoleTracking !== null && settings.consoleTracking !== undefined - ? settings.consoleTracking - : true; - - if (!this.token) { - log( - 'Integration Token is missed. You can get it on https://hawk.so at Project Settings.', - 'warn' - ); - - return; - } - - /** - * Init transport - */ - this.transport = new Socket({ - collectorEndpoint: settings.collectorEndpoint || `wss://${this.getIntegrationId()}.k1.hawk.so:443/ws`, - reconnectionAttempts: settings.reconnectionAttempts, - reconnectionTimeout: settings.reconnectionTimeout, - onClose(): void { - log( - 'Connection lost. Connection will be restored when new errors occurred', - 'info' - ); - }, - }); - - if (this.consoleTracking) { - this.consoleCatcher = ConsoleCatcher.getInstance(); - this.consoleCatcher.init(); - } - - /** - * Initialize breadcrumbs - */ - if (settings.breadcrumbs !== false) { - this.breadcrumbManager = BreadcrumbManager.getInstance(); - this.breadcrumbManager.init(settings.breadcrumbs ?? {}); - } else { - this.breadcrumbManager = null; - } - - /** - * Set global handlers - */ - if (!settings.disableGlobalErrorsHandling) { - this.initGlobalHandlers(); - } - - if (settings.vue) { - this.connectVue(settings.vue); - } - } - - /** - * Generates user if no one provided via HawkCatcher settings - * After generating, stores user for feature requests - */ - private static getGeneratedUser(): AffectedUser { - let userId: string; - const LOCAL_STORAGE_KEY = 'hawk-user-id'; - const storedId = localStorage.getItem(LOCAL_STORAGE_KEY); - - if (storedId) { - userId = storedId; - } else { - userId = id(); - localStorage.setItem(LOCAL_STORAGE_KEY, userId); - } - - return { - id: userId, - }; - } - - /** - * Send test event from client - */ - public test(): void { - const fakeEvent = new Error('Hawk JavaScript Catcher test message.'); - - this.send(fakeEvent); - } - - /** - * Public method for manual sending messages to the Hawk - * Can be called in user's try-catch blocks or by other custom logic - * - * @param message - what to send - * @param [context] - any additional data to send - */ - public send(message: Error | string, context?: EventContext): void { - void this.formatAndSend(message, undefined, context); - } - - /** - * Method for Frameworks SDK using own error handlers. - * Allows to send errors to Hawk with additional Frameworks data (addons) - * - * @param error - error to send - * @param [addons] - framework-specific data, can be undefined - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public captureError(error: Error | string, addons?: JavaScriptCatcherIntegrations): void { - void this.formatAndSend(error, addons); - } - - /** - * Add error handing to the passed Vue app - * - * @param vue - Vue app - */ - public connectVue(vue): void { - // eslint-disable-next-line no-new - this.vue = new VueIntegration( - vue, - (error: Error, addons: VueIntegrationAddons) => { - void this.formatAndSend(error, { - vue: addons, - }); - }, - { - disableVueErrorHandler: this.disableVueErrorHandler, - } - ); - } - - /** - * Update the current user information - * - * @param user - New user information - */ - public setUser(user: AffectedUser): void { - if (!validateUser(user)) { - return; - } - - this.user = user; - } - - /** - * Clear current user information (revert to generated user) - */ - public clearUser(): void { - this.user = Catcher.getGeneratedUser(); - } - - /** - * Breadcrumbs API - provides convenient access to breadcrumb methods - * - * @example - * hawk.breadcrumbs.add({ - * type: 'user', - * category: 'auth', - * message: 'User logged in', - * level: 'info', - * data: { userId: '123' } - * }); - */ - public get breadcrumbs(): BreadcrumbsAPI { - return { - add: (breadcrumb, hint) => this.breadcrumbManager?.addBreadcrumb(breadcrumb, hint), - get: () => this.breadcrumbManager?.getBreadcrumbs() ?? [], - clear: () => this.breadcrumbManager?.clearBreadcrumbs(), - }; - } - - /** - * Update the context data that will be sent with all events - * - * @param context - New context data - */ - public setContext(context: EventContext | undefined): void { - if (!validateContext(context)) { - return; - } - - this.context = context; - } - - /** - * Init global errors handler - */ - private initGlobalHandlers(): void { - window.addEventListener('error', (event: ErrorEvent) => this.handleEvent(event)); - window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => this.handleEvent(event)); - } - - /** - * Handles the event and sends it to the server - * - * @param {ErrorEvent|PromiseRejectionEvent} event — (!) both for Error and Promise Rejection - */ - private async handleEvent(event: ErrorEvent | PromiseRejectionEvent): Promise { - /** - * Add error to console logs - */ - - if (this.consoleTracking) { - this.consoleCatcher!.addErrorEvent(event); - } - - /** - * Promise rejection reason is recommended to be an Error, but it can be a string: - * - Promise.reject(new Error('Reason message')) ——— recommended - * - Promise.reject('Reason message') - */ - let error = (event as ErrorEvent).error || (event as PromiseRejectionEvent).reason; - - /** - * Case when error triggered in external script - * We can't access event error object because of CORS - * Event message will be 'Script error.' - */ - if (event instanceof ErrorEvent && error === undefined) { - error = (event as ErrorEvent).message; - } - - void this.formatAndSend(error); - } - - /** - * Format and send an error - * - * @param error - error to send - * @param integrationAddons - addons spoiled by Integration - * @param context - any additional data passed by user - */ - private async formatAndSend( - error: Error | string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - integrationAddons?: JavaScriptCatcherIntegrations, - context?: EventContext - ): Promise { - try { - const isAlreadySentError = isErrorProcessed(error); - - if (isAlreadySentError) { - /** - * @todo add debug build and log this case - */ - return; - } else { - markErrorAsProcessed(error); - } - - const errorFormatted = await this.prepareErrorFormatted(error, context); - - /** - * If this event caught by integration (Vue or other), it can pass extra addons - */ - if (integrationAddons) { - this.appendIntegrationAddons(errorFormatted, Sanitizer.sanitize(integrationAddons)); - } - - this.sendErrorFormatted(errorFormatted); - } catch (e) { - if (e instanceof EventRejectedError) { - /** - * Event was rejected by user using the beforeSend method - */ - return; - } - - log('Unable to send error. Seems like it is Hawk internal bug. Please, report it here: https://github.com/codex-team/hawk.javascript/issues/new', 'warn', e); - } - } - - /** - * Sends formatted HawkEvent to the Collector - * - * @param errorFormatted - formatted error to send - */ - private sendErrorFormatted(errorFormatted: CatcherMessage): void { - this.transport.send(errorFormatted) - .catch((sendingError) => { - log('WebSocket sending error', 'error', sendingError); - }); - } - - /** - * Formats the event - * - * @param error - error to format - * @param context - any additional data passed by user - */ - private async prepareErrorFormatted(error: Error | string, context?: EventContext): Promise { - let payload: HawkJavaScriptEvent = { - title: this.getTitle(error), - type: this.getType(error), - release: this.getRelease(), - breadcrumbs: this.getBreadcrumbsForEvent(), - context: this.getContext(context), - user: this.getUser(), - addons: this.getAddons(error), - backtrace: await this.getBacktrace(error), - catcherVersion: this.version, - }; - - /** - * Filter sensitive data - */ - if (typeof this.beforeSend === 'function') { - const beforeSendResult = this.beforeSend(payload); - - if (beforeSendResult === false) { - throw new EventRejectedError('Event rejected by beforeSend method.'); - } else { - payload = beforeSendResult; - } - } - - return { - token: this.token, - catcherType: this.type, - payload, - }; - } - - /** - * Return event title - * - * @param error - event from which to get the title - */ - private getTitle(error: Error | string): string { - const notAnError = !(error instanceof Error); - - /** - * Case when error is 'reason' of PromiseRejectionEvent - * and reject() provided with text reason instead of Error() - */ - if (notAnError) { - return error.toString() as string; - } - - return (error as Error).message; - } - - /** - * Return event type: TypeError, ReferenceError etc - * - * @param error - caught error - */ - private getType(error: Error | string): HawkJavaScriptEvent['type'] { - const notAnError = !(error instanceof Error); - - /** - * Case when error is 'reason' of PromiseRejectionEvent - * and reject() provided with text reason instead of Error() - */ - if (notAnError) { - return null; - } - - return (error as Error).name; - } - - /** - * Release version - */ - private getRelease(): HawkJavaScriptEvent['release'] { - return this.release !== undefined ? String(this.release) : null; - } - - /** - * Returns integration id from integration token - */ - private getIntegrationId(): string { - try { - const decodedIntegrationToken: DecodedIntegrationToken = JSON.parse(atob(this.token)); - const { integrationId } = decodedIntegrationToken; - - if (!integrationId || integrationId === '') { - throw new Error(); - } - - return integrationId; - } catch { - throw new Error('Invalid integration token.'); - } - } - - /** - * Collects additional information - * - * @param context - any additional data passed by user - */ - private getContext(context?: EventContext): HawkJavaScriptEvent['context'] { - const contextMerged = {}; - - if (this.context !== undefined) { - Object.assign(contextMerged, this.context); - } - - if (context !== undefined) { - Object.assign(contextMerged, context); - } - - return Sanitizer.sanitize(contextMerged); - } - - /** - * Current authenticated user - */ - private getUser(): HawkJavaScriptEvent['user'] { - return this.user || null; - } - - /** - * Get breadcrumbs for event payload - */ - private getBreadcrumbsForEvent(): HawkJavaScriptEvent['breadcrumbs'] { - const breadcrumbs = this.breadcrumbManager?.getBreadcrumbs(); - - return breadcrumbs && breadcrumbs.length > 0 ? breadcrumbs : null; - } - - /** - * Get parameters - */ - private getGetParams(): Json | null { - const searchString = window.location.search.substr(1); - - if (!searchString) { - return null; - } - - /** - * Create object from get-params string - */ - const pairs = searchString.split('&'); - - return pairs.reduce((accumulator, pair) => { - const [key, value] = pair.split('='); - - accumulator[key] = value; - - return accumulator; - }, {}); - } - - /** - * Return parsed backtrace information - * - * @param error - event from which to get backtrace - */ - private async getBacktrace(error: Error | string): Promise { - const notAnError = !(error instanceof Error); - - /** - * Case when error is 'reason' of PromiseRejectionEvent - * and reject() provided with text reason instead of Error() - */ - if (notAnError) { - return null; - } - - try { - return await this.stackParser.parse(error as Error); - } catch (e) { - log('Can not parse stack:', 'warn', e); - - return null; - } - } - - /** - * Return some details - * - * @param {Error|string} error — caught error - */ - private getAddons(error: Error | string): HawkJavaScriptEvent['addons'] { - const { innerWidth, innerHeight } = window; - const userAgent = window.navigator.userAgent; - const location = window.location.href; - const getParams = this.getGetParams(); - const consoleLogs = this.consoleTracking && this.consoleCatcher?.getConsoleLogStack(); - - const addons: JavaScriptAddons = { - window: { - innerWidth, - innerHeight, - }, - userAgent, - url: location, - }; - - if (getParams) { - addons.get = getParams; - } - - if (this.debug) { - addons.RAW_EVENT_DATA = this.getRawData(error); - } - - if (consoleLogs && consoleLogs.length > 0) { - addons.consoleOutput = consoleLogs; - } - - return addons; - } - - /** - * Compose raw data object - * - * @param {Error|string} error — caught error - */ - private getRawData(error: Error | string): Json | undefined { - if (!(error instanceof Error)) { - return; - } - - const stack = error.stack !== null && error.stack !== undefined ? error.stack : ''; - - return { - name: error.name, - message: error.message, - stack, - }; - } - - /** - * Extend addons object with addons spoiled by integration - * This method mutates original event - * - * @param errorFormatted - Hawk event prepared for sending - * @param integrationAddons - extra addons - */ - private appendIntegrationAddons(errorFormatted: CatcherMessage, integrationAddons: JavaScriptCatcherIntegrations): void { - Object.assign(errorFormatted.payload.addons, integrationAddons); - } -} diff --git a/packages/javascript/src/errors.ts b/packages/javascript/src/errors.ts deleted file mode 100644 index 8fcc582..0000000 --- a/packages/javascript/src/errors.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Error triggered when event was rejected by beforeSend method - */ -export class EventRejectedError extends Error { - /** - * @param message - error message - */ - constructor(message: string) { - super(message); - this.name = 'EventRejectedError'; - } -} diff --git a/packages/javascript/src/index.ts b/packages/javascript/src/index.ts deleted file mode 100644 index 00e5dd4..0000000 --- a/packages/javascript/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Catcher from './catcher'; -export type { AffectedUser } from '@hawk.so/types'; -export * from './types'; - -export default Catcher; diff --git a/packages/javascript/src/integrations/vue.ts b/packages/javascript/src/integrations/vue.ts deleted file mode 100644 index 391070e..0000000 --- a/packages/javascript/src/integrations/vue.ts +++ /dev/null @@ -1,253 +0,0 @@ -import type { JsonNode, VueIntegrationAddons } from '@hawk.so/types'; - -interface VueIntegrationOptions { - /** - * Disable Vue.js error handler - * - * Used by @hawk.so/nuxt since Nuxt has own error hook. - * Otherwise, Nuxt will show 500 error - */ - disableVueErrorHandler?: boolean; -} - -/** - * Errors fired inside Vue components are not dispatched by global handlers. - * This integration allow us to set up own error handler - */ -export class VueIntegration { - /** - * Vue application to handle errors in it - */ - private readonly vue; - - /** - * User can set up own vue error handler, - * we should save and call it at the end - */ - private readonly existedHandler: () => void; - - /** - * Callback that should be triggered with caught error. - * This callback is used by parent class to format and send an event. - */ - private readonly callback: (error: Error, addons: VueIntegrationAddons) => void; - - /** - * Set up a new vue app - * - * @param vue - Vue app to handle - * @param callback - callback that accepts new error - * @param options - additional options - */ - constructor(vue, callback, options: VueIntegrationOptions) { - this.vue = vue; - this.existedHandler = vue.config.errorHandler; - this.callback = callback; - - if (options.disableVueErrorHandler !== true) { - this.setupHandler(); - } - } - - /** - * Extract additional useful information from the Vue app - * - * Can be used outside of this class, for example, by Nuxt integration - * - * @param vm - component instance - * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. - */ - public spoilAddons(vm: { [key: string]: unknown }, info: string): VueIntegrationAddons { - const isVue3 = vm.$ !== undefined; - - if (isVue3) { - return this.spoilAddonsFromVue3(vm, info); - } else { - return this.spoilAddonsFromVue2(vm, info); - } - } - - /** - * Setups event handlers for Vue.js instance - */ - private setupHandler(): void { - this.vue.config.errorHandler = - /** - * Vue app error handler - * - * @see https://vuejs.org/v2/api/#errorHandler - * @param err - error thrown - * @param vm - vue VM - * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. - */ - (err: Error, vm: {[key: string]: unknown}, info: string): void => { - if (typeof this.existedHandler === 'function') { - this.existedHandler.call(this.vue, err, vm, info); - } - - const addons: VueIntegrationAddons = this.spoilAddons(vm, info); - - this.callback(err, addons); - - this.printError(err, info, addons.component); - }; - } - - /** - * Extract additional useful information from the Vue 2 app - * - * @param vm - component instance - * @param info - which lifecycle hook the error was found in. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private spoilAddonsFromVue2(vm: { [key: string]: any }, info: string): VueIntegrationAddons { - const addons: VueIntegrationAddons = { - lifecycle: info, - component: null, - }; - - /** - * Get component name - */ - if (vm.$root === vm) { - addons.component = vm.$el.outerHTML.replace(/>.*/, '>') + ' (root)'; - } else { - addons.component = '<' + (vm._isVue ? vm.$options.name || vm.$options._componentTag : vm.name) + '>'; - } - - /** - * Fill props - */ - if (vm.$options && vm.$options.propsData) { - addons.props = vm.$options.propsData; - } - - /** - * Fill component's data values - */ - if (vm._data) { - addons.data = {}; - - Object.entries(vm._data).forEach(([key, value]) => { - addons.data![key] = value as JsonNode; - }); - } - - /** - * Fill computed - */ - if (vm._computedWatchers) { - addons.computed = {}; - - Object.entries(vm._computedWatchers).forEach(([key, watcher]) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - addons.computed![key] = (watcher as {[key: string]: any}).value; - }); - } - - return addons; - } - - /** - * Extract additional useful information from the Vue 3 app - * - * @param vm - component instance - * @param info - which lifecycle hook the error was found in. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private spoilAddonsFromVue3(vm: { [key: string]: any }, info: string): VueIntegrationAddons { - const addons: VueIntegrationAddons = { - lifecycle: this.getRuntimeErrorSourceByCode(info), - component: null, - }; - - /** - * Extract the component name - */ - if (vm.$options !== undefined) { - addons['component'] = `<${vm.$options.__name || vm.$options.name || vm.$options._componentTag || 'Anonymous'}>`; - } - - /** - * Fill props - */ - if (Object.keys(vm.$props).length) { - addons['props'] = vm.$props; - } - - return addons; - } - - /** - * In production, the error code is a link with reference to doc. - * This method returns the error message by the code extracted from the link - * - * @param code - Error source info (3rd argument of the vue:error hook) - * https://vuejs.org/api/composition-api-lifecycle.html#onerrorcaptured - */ - private getRuntimeErrorSourceByCode(code: string): string { - if (!code.includes('https://vuejs.org/error-reference/#runtime-')) { - return code; - } - - const codeParts = code.split('https://vuejs.org/error-reference/#runtime-'); - const errorCode = codeParts[codeParts.length - 1]; - - const errorCodeMap = new Map([ - ['0', 'setup function'], - ['1', 'render function'], - ['2', 'watcher getter'], - ['3', 'watcher callback'], - ['4', 'watcher cleanup function'], - ['5', 'native event handler'], - ['6', 'component event handler'], - ['7', 'vnode hook'], - ['8', 'directive hook'], - ['9', 'transition hook'], - ['10', 'app errorHandler'], - ['11', 'app warnHandler'], - ['12', 'ref function'], - ['13', 'async component loader'], - ['14', 'scheduler flush'], - ['15', 'component update'], - ['16', 'app unmount cleanup function'], - ['sp', 'serverPrefetch hook'], - ['bc', 'beforeCreate hook'], - ['c', 'created hook'], - ['bm', 'beforeMount hook'], - ['m', 'mounted hook'], - ['bu', 'beforeUpdate hook'], - ['u', 'updated'], - ['bum', 'beforeUnmount hook'], - ['um', 'unmounted hook'], - ['a', 'activated hook'], - ['da', 'deactivated hook'], - ['ec', 'errorCaptured hook'], - ['rtc', 'renderTracked hook'], - ['rtg', 'renderTriggered hook'], - ]); - - return errorCodeMap.get(errorCode) || code; - } - - - /** - * Write error to the console - * - * @param err - error to print - * @param info - a Vue-specific error info, e.g. which lifecycle hook the error was found in. - * @param component - where error was occurred - */ - private printError(err: Error, info: string, component: string | null): void { - const source = this.getRuntimeErrorSourceByCode(info); - - if (component === null) { - console.error(`${source}`, err); - - return; - } - - console.error(`${component} @ ${source}`, err); - } -} - diff --git a/packages/javascript/src/modules/fetchTimer.ts b/packages/javascript/src/modules/fetchTimer.ts deleted file mode 100644 index bd32bd6..0000000 --- a/packages/javascript/src/modules/fetchTimer.ts +++ /dev/null @@ -1,42 +0,0 @@ -import log from '../utils/log'; - -/** - * Sends AJAX request and wait for some time. - * If time is exceeded, cancel the request. - * - * @param {string} url — request endpoint - * @param {number} ms — maximum request time allowed - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export default function fetchTimer(url: string, ms: number): Promise { - /** - * Using AbortController to cancel fetch request - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController - */ - const controller = new AbortController(); - const signal = controller.signal; - const fetchPromise = fetch(url, { - signal, - }); - - const timeoutId = setTimeout(() => { - controller.abort(); - log('Request is too long, aborting...', 'log', url); - }, ms); - - return fetchPromise - .then((response) => { - clearTimeout(timeoutId); - - return response; - }) - .catch((error) => { - clearTimeout(timeoutId); - - /** - * Re-throw the error so it can be handled by the caller - */ - throw error; - }); -} diff --git a/packages/javascript/src/modules/sanitizer.ts b/packages/javascript/src/modules/sanitizer.ts deleted file mode 100644 index a02172d..0000000 --- a/packages/javascript/src/modules/sanitizer.ts +++ /dev/null @@ -1,297 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/** - * This class provides methods for preparing data to sending to Hawk - * - trim long strings - * - represent html elements like
as "
" instead of "{}" - * - represent big objects as "" - * - represent class as or - */ -export default class Sanitizer { - /** - * Maximum string length - */ - private static readonly maxStringLen: number = 200; - - /** - * If object in stringified JSON has more keys than this value, - * it will be represented as "" - */ - private static readonly maxObjectKeysCount: number = 20; - - /** - * Maximum depth of context object - */ - private static readonly maxDepth: number = 5; - - /** - * Maximum length of context arrays - */ - private static readonly maxArrayLength: number = 10; - - /** - * Check if passed variable is an object - * - * @param target - variable to check - */ - public static isObject(target: any): boolean { - return Sanitizer.typeOf(target) === 'object'; - } - - /** - * Apply sanitizing for array/object/primitives - * - * @param data - any object to sanitize - * @param depth - current depth of recursion - * @param seen - Set of already seen objects to prevent circular references - */ - public static sanitize(data: any, depth = 0, seen = new WeakSet()): any { - /** - * Check for circular references on objects and arrays - */ - if (data !== null && typeof data === 'object') { - if (seen.has(data)) { - return ''; - } - seen.add(data); - } - - /** - * If value is an Array, apply sanitizing for each element - */ - if (Sanitizer.isArray(data)) { - return this.sanitizeArray(data, depth + 1, seen); - - /** - * If value is an Element, format it as string with outer HTML - * HTMLDivElement -> "
" - */ - } else if (Sanitizer.isElement(data)) { - return Sanitizer.formatElement(data); - - /** - * If values is a not-constructed class, it will be formatted as "" - * class Editor {...} -> - */ - } else if (Sanitizer.isClassPrototype(data)) { - return Sanitizer.formatClassPrototype(data); - - /** - * If values is a some class instance, it will be formatted as "" - * new Editor() -> - */ - } else if (Sanitizer.isClassInstance(data)) { - return Sanitizer.formatClassInstance(data); - - /** - * If values is an object, do recursive call - */ - } else if (Sanitizer.isObject(data)) { - return Sanitizer.sanitizeObject(data, depth + 1, seen); - - /** - * If values is a string, trim it for max-length - */ - } else if (Sanitizer.isString(data)) { - return Sanitizer.trimString(data); - } - - /** - * If values is a number, boolean and other primitive, leave as is - */ - return data; - } - - /** - * Apply sanitizing for each element of the array - * - * @param arr - array to sanitize - * @param depth - current depth of recursion - * @param seen - Set of already seen objects to prevent circular references - */ - private static sanitizeArray(arr: any[], depth: number, seen: WeakSet): any[] { - /** - * If the maximum length is reached, slice array to max length and add a placeholder - */ - const length = arr.length; - - if (length > Sanitizer.maxArrayLength) { - arr = arr.slice(0, Sanitizer.maxArrayLength); - arr.push(`<${length - Sanitizer.maxArrayLength} more items...>`); - } - - return arr.map((item: any) => { - return Sanitizer.sanitize(item, depth, seen); - }); - } - - /** - * Process object values recursive - * - * @param data - object to beautify - * @param depth - current depth of recursion - * @param seen - Set of already seen objects to prevent circular references - */ - private static sanitizeObject(data: { [key: string]: any }, depth: number, seen: WeakSet): Record | '' | '' { - /** - * If the maximum depth is reached, return a placeholder - */ - if (depth > Sanitizer.maxDepth) { - return ''; - } - - /** - * If the object has more keys than the limit, return a placeholder - */ - if (Object.keys(data).length > Sanitizer.maxObjectKeysCount) { - return ''; - } - - const result: any = {}; - - for (const key in data) { - if (Object.prototype.hasOwnProperty.call(data, key)) { - result[key] = Sanitizer.sanitize(data[key], depth, seen); - } - } - - return result; - } - - /** - * Check if passed variable is an array - * - * @param target - variable to check - */ - private static isArray(target: any): boolean { - return Array.isArray(target); - } - - /** - * Check if passed variable is a not-constructed class - * - * @param target - variable to check - */ - private static isClassPrototype(target: any): boolean { - if (!target || !target.constructor) { - return false; - } - - /** - * like - * "function Function { - * [native code] - * }" - */ - const constructorStr = target.constructor.toString(); - - return constructorStr.includes('[native code]') && constructorStr.includes('Function'); - } - - /** - * Check if passed variable is a constructed class instance - * - * @param target - variable to check - */ - private static isClassInstance(target: any): boolean { - return target && target.constructor && (/^class \S+ {/).test(target.constructor.toString()); - } - - /** - * Check if passed variable is a string - * - * @param target - variable to check - */ - private static isString(target: any): boolean { - return typeof target === 'string'; - } - - /** - * Return string representation of the object type - * - * @param object - object to get type - */ - private static typeOf(object: any): string { - return Object.prototype.toString.call(object).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); - } - - /** - * Check if passed variable is an HTML Element - * - * @param target - variable to check - */ - private static isElement(target: any): boolean { - return target instanceof Element; - } - - /** - * Return name of a passed class - * - * @param target - not-constructed class - */ - private static getClassNameByPrototype(target: any): string { - return target.name; - } - - /** - * Return name of a class by an instance - * - * @param target - instance of some class - */ - private static getClassNameByInstance(target: any): string { - return Sanitizer.getClassNameByPrototype(target.constructor); - } - - /** - * Trim string if it reaches max length - * - * @param target - string to check - */ - private static trimString(target: string): string { - if (target.length > Sanitizer.maxStringLen) { - return target.substr(0, Sanitizer.maxStringLen) + '…'; - } - - return target; - } - - /** - * Represent HTML Element as string with it outer-html - * HTMLDivElement -> "
" - * - * @param target - variable to format - */ - private static formatElement(target: Element): string { - /** - * Also, remove inner HTML because it can be BIG - */ - const innerHTML = target.innerHTML; - - if (innerHTML) { - return target.outerHTML.replace(target.innerHTML, '…'); - } - - return target.outerHTML; - } - - /** - * Represent not-constructed class as "" - * - * @param target - class to format - */ - private static formatClassPrototype(target: any): string { - const className = Sanitizer.getClassNameByPrototype(target); - - return ``; - } - - /** - * Represent a some class instance as a "" - * - * @param target - class instance to format - */ - private static formatClassInstance(target: any): string { - const className = Sanitizer.getClassNameByInstance(target); - - return ``; - } -} diff --git a/packages/javascript/src/modules/socket.ts b/packages/javascript/src/modules/socket.ts deleted file mode 100644 index c07af1d..0000000 --- a/packages/javascript/src/modules/socket.ts +++ /dev/null @@ -1,212 +0,0 @@ -import log from '../utils/log'; -import type { CatcherMessage } from '@/types'; - -/** - * Custom WebSocket wrapper class - * - * @copyright CodeX - */ -export default class Socket { - /** - * Socket connection endpoint - */ - private readonly url: string; - - /** - * External handler for socket message - */ - private readonly onMessage: (message: MessageEvent) => void; - - /** - * External handler for socket opening - */ - private readonly onOpen: (event: Event) => void; - - /** - * External handler for socket close - */ - private readonly onClose: (event: CloseEvent) => void; - - /** - * Queue of events collected while socket is not connected - * They will be sent when connection will be established - */ - private eventsQueue: CatcherMessage[]; - - /** - * Websocket instance - */ - private ws: WebSocket | null; - - /** - * Reconnection tryings Timeout - */ - private reconnectionTimer: unknown; - - /** - * Time between reconnection attempts - */ - private readonly reconnectionTimeout: number; - - /** - * How many time we should attempt reconnection - */ - private reconnectionAttempts: number; - - /** - * Creates new Socket instance. Setup initial socket params. - * - * @param options — constructor options for catcher initialization - */ - constructor({ - collectorEndpoint, - // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars - onMessage = (message: MessageEvent): void => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - onClose = (): void => {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - onOpen = (): void => {}, - reconnectionAttempts = 5, - reconnectionTimeout = 10000, // 10 * 1000 ms = 10 sec - }) { - this.url = collectorEndpoint; - this.onMessage = onMessage; - this.onClose = onClose; - this.onOpen = onOpen; - this.reconnectionTimeout = reconnectionTimeout; - this.reconnectionAttempts = reconnectionAttempts; - - this.eventsQueue = []; - this.ws = null; - - this.init() - .then(() => { - /** - * Send queued events if exists - */ - this.sendQueue(); - }) - .catch((error) => { - log('WebSocket error', 'error', error); - }); - } - - /** - * Send an event to the Collector - * - * @param message - event data in Hawk Format - */ - public async send(message: CatcherMessage): Promise { - if (this.ws === null) { - this.eventsQueue.push(message); - - return this.init(); - } - - switch (this.ws.readyState) { - case WebSocket.OPEN: - return this.ws.send(JSON.stringify(message)); - - case WebSocket.CLOSED: - this.eventsQueue.push(message); - - return this.reconnect(); - - case WebSocket.CONNECTING: - case WebSocket.CLOSING: - this.eventsQueue.push(message); - } - } - - /** - * Create new WebSocket connection and setup event listeners - */ - private init(): Promise { - return new Promise((resolve, reject) => { - this.ws = new WebSocket(this.url); - - /** - * New message handler - */ - if (typeof this.onMessage === 'function') { - this.ws.onmessage = this.onMessage; - } - - /** - * Connection closing handler - * - * @param event - websocket event on closing - */ - this.ws.onclose = (event: CloseEvent): void => { - if (typeof this.onClose === 'function') { - this.onClose(event); - } - }; - - /** - * Error handler - * - * @param event - websocket event on error - */ - this.ws.onerror = (event: Event): void => { - reject(event); - }; - - this.ws.onopen = (event: Event): void => { - if (typeof this.onOpen === 'function') { - this.onOpen(event); - } - - resolve(); - }; - }); - } - - /** - * Tries to reconnect to the server for specified number of times with the interval - * - * @param {boolean} [isForcedCall] - call function despite on timer - * @returns {Promise} - */ - private async reconnect(isForcedCall = false): Promise { - if (this.reconnectionTimer && !isForcedCall) { - return; - } - - this.reconnectionTimer = null; - - try { - await this.init(); - - log('Successfully reconnected.', 'info'); - } catch (error) { - this.reconnectionAttempts--; - - if (this.reconnectionAttempts === 0) { - return; - } - - this.reconnectionTimer = setTimeout(() => { - void this.reconnect(true); - }, this.reconnectionTimeout); - } - } - - /** - * Sends all queued events one-by-one - */ - private sendQueue(): void { - while (this.eventsQueue.length) { - const event = this.eventsQueue.shift(); - - if (!event) { - continue; - } - - this.send(event) - .catch((sendingError) => { - log('WebSocket sending error', 'error', sendingError); - }); - } - } -} diff --git a/packages/javascript/src/modules/stackParser.ts b/packages/javascript/src/modules/stackParser.ts deleted file mode 100644 index f7ee32f..0000000 --- a/packages/javascript/src/modules/stackParser.ts +++ /dev/null @@ -1,167 +0,0 @@ -import type { StackFrame } from 'error-stack-parser'; -import ErrorStackParser from 'error-stack-parser'; -import type { BacktraceFrame, SourceCodeLine } from '@hawk.so/types'; -import fetchTimer from './fetchTimer'; - -/** - * This module prepares parsed backtrace - */ -export default class StackParser { - /** - * Prevents loading one file several times - * name -> content - */ - private sourceFilesCache: {[fileName: string]: Promise} = {}; - - /** - * Parse Error stack string and return useful information about an Error - * - * @param error - event from which to get backtrace - */ - public async parse(error: Error): Promise { - const stackParsed = ErrorStackParser.parse(error) as StackFrame[]; - - return Promise.all(stackParsed.map(async (frame) => { - const sourceCode = await this.extractSourceCode(frame); - const file = frame.fileName !== null && frame.fileName !== undefined ? frame.fileName : ''; - const line = frame.lineNumber !== null && frame.lineNumber !== undefined ? frame.lineNumber : 0; - - return { - file, - line, - column: frame.columnNumber, - sourceCode: sourceCode !== null ? sourceCode : undefined, - function: frame.functionName, - arguments: frame.args, - }; - })); - } - - /** - * Extract 5 lines below and above the error's line - * - * @param {StackFrame} frame — information about backtrace item - */ - private async extractSourceCode(frame: StackFrame): Promise { - const minifiedSourceCodeThreshold = 200; - - try { - if (!frame.fileName) { - return null; - }; - - if (!this.isValidUrl(frame.fileName)) { - return null; - } - - /** - * If error occurred in large column number, the script probably minified - * Skip minified bundles — they will be processed if user enabled source-maps tracking - */ - if (frame.columnNumber && frame.columnNumber > minifiedSourceCodeThreshold) { - return null; - } - - const file = await this.loadSourceFile(frame.fileName); - - if (!file) { - return null; - } - - const lines = file.split('\n'); - const actualLineNumber = frame.lineNumber ? frame.lineNumber - 1 : 0; - const linesCollectCount = 5; - const lineFrom = Math.max(0, actualLineNumber - linesCollectCount); - const lineTo = Math.min(lines.length - 1, actualLineNumber + linesCollectCount + 1); - - const sourceCodeLines: SourceCodeLine[] = []; - let extractedLineIndex = 1; - - /** - * In some cases column number of the error stack trace frame would be less then 200, but source code is minified - * For this cases we need to check, that all of the lines to collect have length less than 200 too - */ - lines.slice(lineFrom, lineTo).forEach((lineToCheck) => { - if (lineToCheck.length > minifiedSourceCodeThreshold) { - return null; - } else { - sourceCodeLines.push({ - line: lineFrom + extractedLineIndex, - content: lineToCheck, - }); - - extractedLineIndex += 1; - } - }); - - return sourceCodeLines; - } catch (e) { - console.warn('Hawk JS SDK: Can not extract source code. Please, report this issue: https://github.com/codex-team/hawk.javascript/issues/new', e); - - return null; - } - } - - /** - * Check if string is a valid URL - * - * @param string - string with URL to check - */ - private isValidUrl(string: string): boolean { - try { - return !!new URL(string); - } catch (_) { - return false; - } - } - - /** - * Downloads source file - * - * @param {string} fileName - name of file to download - */ - private async loadSourceFile(fileName): Promise { - if (this.sourceFilesCache[fileName] !== undefined) { - return this.sourceFilesCache[fileName]; - } - - try { - /** - * Try to load source file. - * Wait for maximum 2 sec to skip loading big files. - */ - this.sourceFilesCache[fileName] = fetchTimer(fileName, 2000) - .then((response) => response.text()) - .catch((error) => { - /** - * Remove failed promise from cache to allow retry - */ - delete this.sourceFilesCache[fileName]; - - /** - * Re-throw error so it can be caught by try-catch - */ - throw error; - }); - - /** - * Dealloc cache when it collects more that 10 files - */ - if (Object.keys(this.sourceFilesCache).length > 10) { - const alone = this.sourceFilesCache[fileName]; - - this.sourceFilesCache = {}; - this.sourceFilesCache[fileName] = alone; - } - - return await this.sourceFilesCache[fileName]; - } catch (error) { - /** - * Ensure failed promise is removed from cache - */ - delete this.sourceFilesCache[fileName]; // log('Can not load source file. Skipping...'); - - return null; - } - } -} diff --git a/packages/javascript/src/types/breadcrumbs-api.ts b/packages/javascript/src/types/breadcrumbs-api.ts deleted file mode 100644 index 777dcdf..0000000 --- a/packages/javascript/src/types/breadcrumbs-api.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Breadcrumb } from '@hawk.so/types'; -import type { BreadcrumbInput, BreadcrumbHint } from '../addons/breadcrumbs'; - -/** - * Breadcrumbs API interface - */ -export interface BreadcrumbsAPI { - add: (breadcrumb: BreadcrumbInput, hint?: BreadcrumbHint) => void; - get: () => Breadcrumb[]; - clear: () => void; -} diff --git a/packages/javascript/src/types/catcher-message.ts b/packages/javascript/src/types/catcher-message.ts deleted file mode 100644 index d892e22..0000000 --- a/packages/javascript/src/types/catcher-message.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { HawkJavaScriptEvent } from './event'; - -/** - * Structure describing a message sending by Catcher - */ -export interface CatcherMessage { - /** - * User project's Integration Token - */ - token: string; - - /** - * Hawk Catcher name - */ - catcherType: string; - - /** - * All information about the event - */ - payload: HawkJavaScriptEvent; -} diff --git a/packages/javascript/src/types/event.ts b/packages/javascript/src/types/event.ts deleted file mode 100644 index 82dec49..0000000 --- a/packages/javascript/src/types/event.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { AffectedUser, BacktraceFrame, EventContext, EventData, JavaScriptAddons, Breadcrumb } from '@hawk.so/types'; - -/** - * Event data with JS specific addons - */ -type JSEventData = EventData; - -/** - * Event will be sent to Hawk by Hawk JavaScript SDK - * - * The listed EventData properties will always be sent, so we define them as required in the type - */ -export type HawkJavaScriptEvent = Omit & { - /** - * Event type: TypeError, ReferenceError etc - * null for non-error events - */ - type: string | null; - - /** - * Current release (aka version, revision) of an application - */ - release: string | null; - - /** - * Breadcrumbs - chronological trail of events before the error - */ - breadcrumbs: Breadcrumb[] | null; - - /** - * Current authenticated user - */ - user: AffectedUser | null; - - /** - * Any other information collected and passed by user - */ - context: EventContext; - - /** - * Catcher-specific information - */ - addons: JavaScriptAddons; - - /** - * Stack - * From the latest call to the earliest - */ - backtrace: BacktraceFrame[] | null; - - /** - * Catcher version - */ - catcherVersion: string; -}; diff --git a/packages/javascript/src/types/hawk-initial-settings.ts b/packages/javascript/src/types/hawk-initial-settings.ts deleted file mode 100644 index 51e80f0..0000000 --- a/packages/javascript/src/types/hawk-initial-settings.ts +++ /dev/null @@ -1,93 +0,0 @@ -import type { EventContext, AffectedUser } from '@hawk.so/types'; -import type { HawkJavaScriptEvent } from './event'; -import type { BreadcrumbsOptions } from '../addons/breadcrumbs'; - -/** - * JS Catcher initial settings - */ -export interface HawkInitialSettings { - /** - * User project's Integration Token - */ - token: string; - - /** - * Enable debug mode - * Send raw event's data additionally in addons field by key 'RAW_EVENT_DATA' - */ - debug?: boolean; - - /** - * Current release and bundle version - */ - release?: string; - - /** - * Current user information - */ - user?: AffectedUser; - - /** - * Any additional data you want to send with every event - */ - context?: EventContext; - - /** - * How many time we should try to reconnect when connection lost. - */ - reconnectionAttempts?: number; - - /** - * How many time we should wait between reconnection attempts. - */ - reconnectionTimeout?: number; - - /** - * Hawk Collector endpoint. - * Can be overwritten for development purposes. - * - * @example ws://localhost:3000/ws - */ - collectorEndpoint?: string; - - /** - * Instance of a vue application - * to handle its errors - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - vue?: any; - - /** - * Do not initialize global errors handling - * This options still allow you send events manually - */ - disableGlobalErrorsHandling?: boolean; - - /** - * This Method allows you to filter any data you don't want sending to Hawk. - * - * Return `false` to prevent the event from being sent to Hawk. - */ - beforeSend?(event: HawkJavaScriptEvent): HawkJavaScriptEvent | false; - - /** - * Disable Vue.js error handler - * - * Used by @hawk.so/nuxt since Nuxt has own error hook. - */ - disableVueErrorHandler?: boolean; - - /** - * Console log handler - */ - consoleTracking?: boolean; - - /** - * Breadcrumbs configuration - * Pass false to disable breadcrumbs entirely - * Pass options object to configure breadcrumbs behavior - * - * @default enabled with default options - */ - breadcrumbs?: false | BreadcrumbsOptions; -} diff --git a/packages/javascript/src/types/index.ts b/packages/javascript/src/types/index.ts deleted file mode 100644 index ef0556e..0000000 --- a/packages/javascript/src/types/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { CatcherMessage } from './catcher-message'; -import type { HawkInitialSettings } from './hawk-initial-settings'; -import type { HawkJavaScriptEvent } from './event'; -import type { VueIntegrationData, NuxtIntegrationData, NuxtIntegrationAddons, JavaScriptCatcherIntegrations } from './integrations'; -import type { BreadcrumbsAPI } from './breadcrumbs-api'; - -export type { - CatcherMessage, - HawkInitialSettings, - HawkJavaScriptEvent, - VueIntegrationData, - NuxtIntegrationData, - NuxtIntegrationAddons, - JavaScriptCatcherIntegrations, - BreadcrumbsAPI -}; diff --git a/packages/javascript/src/types/integrations.ts b/packages/javascript/src/types/integrations.ts deleted file mode 100644 index ceb886d..0000000 --- a/packages/javascript/src/types/integrations.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { VueIntegrationAddons } from '@hawk.so/types'; - -/** - * The Vue integration will append this data to the addons - */ -export type VueIntegrationData = { - vue: VueIntegrationAddons; -}; - -/** - * Useful info extracted from Nuxt app - */ -export type NuxtIntegrationAddons = { - 'Component': string | null; - 'Route': { - path: string; - fullPath: string; - name?: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - redirectedFrom?: string | Record; - }, - 'Props': { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }, - 'Source': string; -}; - -/** - * The Nuxt integration will append this data to the addons - */ -export type NuxtIntegrationData = { - nuxt: NuxtIntegrationAddons; -}; - -/** - * Union Type for available integrations - */ -export type JavaScriptCatcherIntegrations = - | VueIntegrationData - | NuxtIntegrationData -; diff --git a/packages/javascript/src/utils/event.ts b/packages/javascript/src/utils/event.ts deleted file mode 100644 index 3882c27..0000000 --- a/packages/javascript/src/utils/event.ts +++ /dev/null @@ -1,46 +0,0 @@ -import log from './log'; - -/** - * Symbol to mark error as processed by Hawk - */ -const errorSentShadowProperty = Symbol('__hawk_processed__'); - -/** - * Check if the error has alrady been sent to Hawk. - * - * Motivation: - * Some integrations may catch errors on their own side and then normally re-throw them down. - * In this case, Hawk will catch the error again. - * We need to prevent this from happening. - * - * @param error - error object - */ -export function isErrorProcessed(error: unknown): boolean { - if (typeof error !== 'object' || error === null) { - return false; - } - - return error[errorSentShadowProperty] === true; -} - -/** - * Add non-enumerable property to the error object to mark it as processed. - * - * @param error - error object - */ -export function markErrorAsProcessed(error: unknown): void { - try { - if (typeof error !== 'object' || error === null) { - return; - } - - Object.defineProperty(error, errorSentShadowProperty, { - enumerable: false, // Prevent from beight collected by Hawk - value: true, - writable: true, - configurable: true, - }); - } catch (e) { - log('Failed to mark error as processed', 'error', e); - } -} diff --git a/packages/javascript/src/utils/id.ts b/packages/javascript/src/utils/id.ts deleted file mode 100644 index d55b42a..0000000 --- a/packages/javascript/src/utils/id.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Returns random string - */ -export function id(): string { - const validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - - let array = new Uint8Array(40); - - window.crypto.getRandomValues(array); - - array = array.map(x => validChars.charCodeAt(x % validChars.length)); - - return String.fromCharCode.apply(null, array); -} diff --git a/packages/javascript/src/utils/log.ts b/packages/javascript/src/utils/log.ts deleted file mode 100644 index 4087d90..0000000 --- a/packages/javascript/src/utils/log.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Logger module - * - * @example - * log('We got an error', 'error') - */ - -/** - * Allow to use global VERSION, that will be overwritten by Webpack - */ -declare const VERSION: string; - -/** - * Custom logger - * - * @param {string} msg - message - * @param {string} type - logging type 'log'|'warn'|'error'|'info' - * @param {*} [args] - argument to log with a message - * @param {string} style - additional styling to message - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export default function log(msg: string, type = 'log', args?: any, style = 'color: inherit'): void { - if (!('console' in window) || !window.console[type]) { - return; - } - - const editorLabelText = `Hawk (${VERSION})`; - const editorLabelStyle = `line-height: 1em; - color: #fff; - display: inline-block; - line-height: 1em; - background-color: rgba(0,0,0,.7); - padding: 3px 5px; - border-radius: 3px; - margin-right: 2px`; - - try { - if (['time', 'timeEnd'].includes(type)) { - console[type](`( ${editorLabelText} ) ${msg}`); - } else if (args) { - console[type](`%c${editorLabelText}%c ${msg} %o`, editorLabelStyle, style, args); - } else { - console[type](`%c${editorLabelText}%c ${msg}`, editorLabelStyle, style); - } - } catch (ignored) {} -} diff --git a/packages/javascript/src/utils/selector.ts b/packages/javascript/src/utils/selector.ts deleted file mode 100644 index d886884..0000000 --- a/packages/javascript/src/utils/selector.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Build a simple CSS selector from an HTML element - * If element has no id or class, recursively builds selector from parent - * - * @param element - HTML element to build selector from - * @param maxDepth - Maximum recursion depth (default: 3) - * @returns CSS selector string (e.g., "div#myId.class1.class2" or ".some-parent button") - */ -export function buildElementSelector(element: HTMLElement, maxDepth: number = 3): string { - let selector = element.tagName.toLowerCase(); - - if (element.id) { - selector += `#${element.id}`; - return selector; - } - - if (element.className) { - /** - * className can be a string, DOMTokenList, or SVGAnimatedString (e.g., in SVG elements) - * Convert to string safely before calling split() - * String() works for all types: string, DOMTokenList, SVGAnimatedString, etc. - */ - const classNameStr = String(element.className); - - if (classNameStr) { - selector += `.${classNameStr.split(' ').filter(Boolean).join('.')}`; - return selector; - } - } - - /** - * If element has no id or class, try to build selector from parent - */ - if (maxDepth > 0 && element.parentElement) { - const parentSelector = buildElementSelector(element.parentElement as HTMLElement, maxDepth - 1); - - return `${parentSelector} ${selector}`; - } - - return selector; -} diff --git a/packages/javascript/src/utils/validation.ts b/packages/javascript/src/utils/validation.ts deleted file mode 100644 index 8db0e0b..0000000 --- a/packages/javascript/src/utils/validation.ts +++ /dev/null @@ -1,40 +0,0 @@ -import log from './log'; -import type { AffectedUser, EventContext } from '@hawk.so/types'; -import Sanitizer from '../modules/sanitizer'; - -/** - * Validates user data - basic security checks - * - * @param user - */ -export function validateUser(user: AffectedUser): boolean { - if (!user || !Sanitizer.isObject(user)) { - log('validateUser: User must be an object', 'warn'); - - return false; - } - - // Validate required ID - if (!user.id || typeof user.id !== 'string' || user.id.trim() === '') { - log('validateUser: User ID is required and must be a non-empty string', 'warn'); - - return false; - } - - return true; -} - -/** - * Validates context data - basic security checks - * - * @param context - */ -export function validateContext(context: EventContext | undefined): boolean { - if (context && !Sanitizer.isObject(context)) { - log('validateContext: Context must be an object', 'warn'); - - return false; - } - - return true; -} diff --git a/packages/javascript/stats.txt b/packages/javascript/stats.txt deleted file mode 100644 index 0dda1a3..0000000 --- a/packages/javascript/stats.txt +++ /dev/null @@ -1,3 +0,0 @@ - - Size: 6.76 kB with all dependencies, minified and brotlied - diff --git a/packages/javascript/tsconfig.json b/packages/javascript/tsconfig.json deleted file mode 100644 index d57ffc8..0000000 --- a/packages/javascript/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src", - "baseUrl": ".", - "paths": { - "@/types": ["src/types"] - } - }, - "include": [ - "src/**/*", - "src/types/*" - ] -} diff --git a/packages/javascript/vite.config.ts b/packages/javascript/vite.config.ts deleted file mode 100644 index 47fe52e..0000000 --- a/packages/javascript/vite.config.ts +++ /dev/null @@ -1,74 +0,0 @@ -import path from 'path'; -import dts from 'vite-plugin-dts'; -import { defineConfig } from 'vite'; - -import license from 'rollup-plugin-license'; - -import * as pkg from './package.json'; - -const NODE_ENV = process.argv.mode || 'development'; -const VERSION = pkg.version; - -/** - * Trick to use Vite server.open option on macOS - * - * @see https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768 - */ -process.env.BROWSER = 'open'; - -export default defineConfig(() => { - return { - build: { - copyPublicDir: false, - lib: { - entry: path.resolve(__dirname, 'src', 'index.ts'), - name: 'HawkCatcher', - fileName: 'hawk', - }, - rollupOptions: { - plugins: [ - license({ - thirdParty: { - allow: { - test: (dependency) => { - // Return false for unlicensed dependencies. - if (!dependency.license) { - return false; - } - - // Allow MIT and Apache-2.0 licenses. - return ['MIT', 'Apache-2.0'].includes(dependency.license); - }, - failOnUnlicensed: true, - failOnViolation: true, - }, - output: path.resolve(__dirname, 'dist', 'vendor.LICENSE.txt'), - }, - }), - ], - }, - }, - - define: { - 'NODE_ENV': JSON.stringify(NODE_ENV), - 'VERSION': JSON.stringify(VERSION), - }, - - resolve: { - alias: { - '@/types': path.resolve(__dirname, './src/types'), - }, - }, - - server: { - port: 3303, - open: './example/index.html', - }, - - plugins: [ - dts({ - tsconfigPath: './tsconfig.json', - }), - ], - }; -}); diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json index 7c8e222..5c3c2ab 100644 --- a/packages/sveltekit/package.json +++ b/packages/sveltekit/package.json @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/codex-team/hawk.javascript#readme", "dependencies": { - "@hawk.so/javascript": "^3.0.0" + "@hawk.so/browser": "^1.0.0" }, "devDependencies": { "vite": "^7.3.1", diff --git a/packages/sveltekit/src/index.ts b/packages/sveltekit/src/index.ts index e37aee1..aa95a8e 100644 --- a/packages/sveltekit/src/index.ts +++ b/packages/sveltekit/src/index.ts @@ -4,5 +4,5 @@ * SvelteKit integration for Hawk Error tracker */ -export * from '@hawk.so/javascript'; -export { default } from '@hawk.so/javascript'; +export * from '@hawk.so/browser'; +export { default } from '@hawk.so/browser'; diff --git a/yarn.lock b/yarn.lock index c94e73e..0c29147 100644 --- a/yarn.lock +++ b/yarn.lock @@ -471,10 +471,11 @@ __metadata: languageName: node linkType: hard -"@hawk.so/javascript@npm:^3.0.0, @hawk.so/javascript@workspace:packages/javascript": +"@hawk.so/browser@npm:^1.0.0, @hawk.so/browser@workspace:packages/browser": version: 0.0.0-use.local - resolution: "@hawk.so/javascript@workspace:packages/javascript" + resolution: "@hawk.so/browser@workspace:packages/browser" dependencies: + "@hawk.so/core": "npm:^1.0.0" "@hawk.so/types": "npm:0.5.2" error-stack-parser: "npm:^2.1.4" vite: "npm:^7.3.1" @@ -483,11 +484,21 @@ __metadata: languageName: unknown linkType: soft +"@hawk.so/core@npm:^1.0.0, @hawk.so/core@workspace:packages/core": + version: 0.0.0-use.local + resolution: "@hawk.so/core@workspace:packages/core" + dependencies: + "@hawk.so/types": "npm:0.5.2" + vite: "npm:^7.3.1" + vite-plugin-dts: "npm:^4.2.4" + languageName: unknown + linkType: soft + "@hawk.so/sveltekit@workspace:packages/sveltekit": version: 0.0.0-use.local resolution: "@hawk.so/sveltekit@workspace:packages/sveltekit" dependencies: - "@hawk.so/javascript": "npm:^3.0.0" + "@hawk.so/browser": "npm:^1.0.0" vite: "npm:^7.3.1" vite-plugin-dts: "npm:^4.2.4" languageName: unknown