From a08de03d4d6fa54cc7bbaf629c97d7d14cd7e0d5 Mon Sep 17 00:00:00 2001 From: Philippe Torrel Date: Thu, 20 Aug 2026 08:47:55 +0200 Subject: [PATCH] --- .../typescript-ecom-manager-template.zip | Bin 35367 -> 26067 bytes .../.gitignore | 24 + .../README.md | 17 + .../assets/index.html | 21 + .../package-lock.json | 2393 +++++++++++++++++ .../package.json | 21 + .../src/Product.ts | 0 .../src/productFilters.ts | 0 .../src/productManager.ts | 0 .../src/salesManager.ts | 0 .../src/tests/ecomManager.test.ts | 145 + .../01_counter/website-app-react/index.html | 1 + .../website-app-react/package-lock.json | 874 +++++- .../01_counter/website-app-react/package.json | 5 +- .../01_counter/website-app-react/src/App.css | 184 -- .../01_counter/website-app-react/src/App.jsx | 143 +- .../src/components/counters/Counter.jsx | 40 + .../src/components/heros/Hero.jsx | 18 + .../src/components/heros/Hero.scss | 11 + .../website-app-react/src/index.css | 111 - .../01_counter/website-app-react/src/main.jsx | 10 +- 21 files changed, 3601 insertions(+), 417 deletions(-) create mode 100644 04_typescript/projects/typescript-ecom-manager-template/.gitignore create mode 100644 04_typescript/projects/typescript-ecom-manager-template/README.md create mode 100644 04_typescript/projects/typescript-ecom-manager-template/assets/index.html create mode 100644 04_typescript/projects/typescript-ecom-manager-template/package-lock.json create mode 100644 04_typescript/projects/typescript-ecom-manager-template/package.json create mode 100644 04_typescript/projects/typescript-ecom-manager-template/src/Product.ts create mode 100644 04_typescript/projects/typescript-ecom-manager-template/src/productFilters.ts create mode 100644 04_typescript/projects/typescript-ecom-manager-template/src/productManager.ts create mode 100644 04_typescript/projects/typescript-ecom-manager-template/src/salesManager.ts create mode 100644 04_typescript/projects/typescript-ecom-manager-template/src/tests/ecomManager.test.ts delete mode 100644 06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.css create mode 100644 06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/counters/Counter.jsx create mode 100644 06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.jsx create mode 100644 06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.scss delete mode 100644 06_js-debug/unterricht/tag48/01_counter/website-app-react/src/index.css diff --git a/04_typescript/projects/typescript-ecom-manager-template.zip b/04_typescript/projects/typescript-ecom-manager-template.zip index 52b511fb96737eeb848d71712a509d36db542e80..9c6a47e55830d22973a6255642d7d7ac5907b173 100644 GIT binary patch delta 19667 zcmYKFV{o9&^9Bk>Pn?bIjcuEoY;4=MamTi8+qO5x#YshZs(KW{73SKlz{j|IltBG@V3S(BC)||IB6o zT0w1Gohk#Qz~ox=e}XkOcpSQvd%KCoVv?Ks^3$ z+Z#=$#5_-^#3~P5009Il_TPm6S1!8Eoc4b=lE3%>!?@4;`irEr{^4z%Qk(-wM1n}p zxIDNwAvXkB>EAu1hZ2%Wl+AySpEko$9dJsL#10ZwlGBruU$?(ofzR`86cX33%igc^ zZ9JOjYeNzyUJBQQvzm*E@$m0UK%m7Us{nrf09b+lVEbU}0&t3#rV)Ocy*^;@^D$&~ z{eUgyX?&MDeAL_ zV5i^syX(D4*6`QAIW7YJ?j|c`xFD^TrVi>MeZg@9nZ~y|3KVYQXxW-Xy?uHoy?kBY zKyE4Uee81&NGYzr0{ee!NJ{ZO^bn1q#Ai26(u0YQX*u7UFm(uCG)ffqvwUOqR5V`o zpaKVO0~)B`^g{JeQ+nqIyaK;=u3q1+a?WbU*9DY*B#hriOPW z$M!7Ji5s;y>YvX5aJ4voCIWmvv;4YFzqSAV?g}m+V#xXCpQ->ajXII;xynsVHAdY2 z$|y^87rIl#h~dQVd=>b@9});QHpH~h-^LdEP*UfAwimsBy)xx>J9ojMoHztTn^AmO z(z(Rfnpk{t$UtRGHDjVe?R%6!6&3F-nfu$K2rR$dJAMcZ+{&leYW3vY>kptEhdaVtk)29aS; zX1SPwbC$kGKE!n953rD)Nc}~C?s7!?RBfUq1jDB=wws7sI8o2>$cG|4 zk0d!no$#Qp*3}wdn70LdhnzY=&4l@y#w~HFE`3-Q_7!>y)Y~X3Ybu*4ll8Uf zb5og-@NJpc+F2W;mjM34BbwHSEqHN%+u1Z~aSF4WHlwKKu^ZA!tK{-VzI=EAH(Df7PZS!$(HR<8pBIy(C55zuN!sq#!|A3NE&PQl`lMFuWz60M#4FVkUGoG9xk1QfC zLAAlbbyi7^ZR;X*kOLy}$OA4x?uB?5clsnYQ1f|ucO+@MV*wcqUD9uP7MBtU$c+%TQUbde3b77rKdm}yH$Nb*qzAAN_|?mhD+#}LXIZR?(Cp2?}` z&Mo5T@w1V~+nqr0L2UF?Bf<3C$I!~8>R1{MwY~iA(wHoa1r;$iY=f7romAj(i+x1L z%@GELU}Z2Uy-M7k6Vf%x#FRw7*t|Wab!%{2fMx}q^+inGKKd^9_mF&(e7y^Vnjs(>k?#B#SQRHv z#A(o;Lh`nk{jahA9rK&hR|v(MoVoAFvY#_l=6}YI>Qam74M%DY^8JgtbPvO-V8-g$ zHL30#x#74N_%%Adf4Nu;q5Y0p;@4wpb&_u^T(~efo%g-Q?-+kWZ3ygiexpi|1G0|` zvi8Sr0h=9Ubrn`6HRm1A?h)eiz#YaV_vYllSHX{?Hz1CMv)pTFASqBt?`G zLLg9rz;pvXJ_xq#Z;*=n6 ze}~3>w)=Z74Psa1VpmwA|NX6}@zqrtSFk9yeF~w4j@z+i_(lC2ob$#}EZN0>zE4Pm zu^)a3v+)rRchH);I4m5MN&lR}2^7Pf1|C;pCFhZ;4oZ` z+6n>v-phwWfhc2K(tnPq@UbcsJj2Y5W54{SXXXN{Ky_>^Ju!G3Iz14o~Q?v>rlmJpNiH#sBNqf$VKp?rFjt9oC0bgZZ?GITVb}lPx z-Uz8|SsXN&RM*|(bceiafKjnipk%k@M*KNRFqJEEe{8z;?{%pAnwE&+vz)_nYDm5t za#NyY6XuuIRpOhOJ1+E-64qeQBD1M3MeVp|<;zA((U*GxH1Uj|Dvbz(3cVxQCNZd!`U9{ zU)KfTi{rfk^S4E#$D^ywvN3Tw9xiTYr$!$oc;Gw6e1uaRsG8OZKU*y6LTT1ea1BS8 zt(tM{)7u|83dxQTpW}OKDvhQ0XG!&W3hKZ^69#kuC5_^Q#Ol&tM1)Pf;kn3SZl;

JTHnsGi10H0++%hQ!`qxhHEcvwSw7_t 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 X$-_S~3uOW-z)SnrF@r!%PQdCP!F;-c literal 35367 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%0Ddu!tKUCnxpi|m zP4JV~z;G;h*saDsSl{C0dLREf_!wyD>ps{wp0Fz}9c+Fb4qgAstB{QTL#{hM%R=A$ z!B%uAK5Rvohl%=h@BsuLewTk2AcYa|LTm6YSz9yo7hdI1&{!Me7 zOc-d}3w!7&1>>6%u$46&=75&uFIf?u)5T-5)zR&a(ho9ZIG)5H--Utiu=ATZD3J3P S1O#@-uPWqB@r4ugzyAR>)Z&u> diff --git a/04_typescript/projects/typescript-ecom-manager-template/.gitignore b/04_typescript/projects/typescript-ecom-manager-template/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/04_typescript/projects/typescript-ecom-manager-template/README.md b/04_typescript/projects/typescript-ecom-manager-template/README.md new file mode 100644 index 0000000..601f2df --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/README.md @@ -0,0 +1,17 @@ +## License and terms of use + +© Web Professional Institute Inc. All rights reserved. + +This material is provided solely for students enrolled in courses offered by Web Professional Institute Inc. By accessing or using this code, you acknowledge that it is strictly for educational use within the context of Web Professional Institute Inc. programs. + +**Usage Restrictions:** + +- Redistribution, sharing, or copying of this material outside the course environment is strictly prohibited. +- The content is designed to support your learning objectives and is not authorized for commercial projects, public repositories, or applications beyond the course scope. +- Unauthorized commercial use or open-source distribution is strictly prohibited and may result in expulsion from the program and legal action. + +**Agreement & Rights:** + +As a student, you have agreed to these terms as part of your enrollment agreement, which includes additional details on permitted uses, restrictions, and policies. The author and Web Professional Institute Inc. retain all rights to this material, including the code base and instructional content. + +For any questions regarding these terms, please contact Web Professional Institute Inc. for clarification. diff --git a/04_typescript/projects/typescript-ecom-manager-template/assets/index.html b/04_typescript/projects/typescript-ecom-manager-template/assets/index.html new file mode 100644 index 0000000..0e453f4 --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/assets/index.html @@ -0,0 +1,21 @@ + + + + + + Assignment 02: E-Commerce Product Inventory System + + + + +

+

E-Commerce Product Inventory System

+

Open the console to see the output

+
+ + diff --git a/04_typescript/projects/typescript-ecom-manager-template/package-lock.json b/04_typescript/projects/typescript-ecom-manager-template/package-lock.json new file mode 100644 index 0000000..4c00c4d --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/package-lock.json @@ -0,0 +1,2393 @@ +{ + "name": "ecom-management-system", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ecom-management-system", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "chalk": "^6.0.0", + "esbuild": "^0.28.2", + "npm-run-all": "^4.1.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.0.tgz", + "integrity": "sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + } + } +} diff --git a/04_typescript/projects/typescript-ecom-manager-template/package.json b/04_typescript/projects/typescript-ecom-manager-template/package.json new file mode 100644 index 0000000..4a63606 --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/package.json @@ -0,0 +1,21 @@ +{ + "name": "ecom-management-system", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "ts": "npx esbuild src/tests/ecomManager.test.ts --watch --bundle --outfile=assets/js/bundle.js --loader:.ts=ts", + "ts-build": "npx esbuild src/tests/ecomManager.test.ts --bundle --outfile=assets/js/bundle.js --loader:.ts=ts", + "build:test": "npx esbuild src/tests/ecomManager.test.ts --bundle --platform=node --outfile=dist/test-bundle.js", + "run:test": "node dist/test-bundle.js", + "test": "run-s build:test run:test" + }, + "dependencies": { + "chalk": "^6.0.0", + "esbuild": "^0.28.2", + "npm-run-all": "^4.1.5" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} diff --git a/04_typescript/projects/typescript-ecom-manager-template/src/Product.ts b/04_typescript/projects/typescript-ecom-manager-template/src/Product.ts new file mode 100644 index 0000000..e69de29 diff --git a/04_typescript/projects/typescript-ecom-manager-template/src/productFilters.ts b/04_typescript/projects/typescript-ecom-manager-template/src/productFilters.ts new file mode 100644 index 0000000..e69de29 diff --git a/04_typescript/projects/typescript-ecom-manager-template/src/productManager.ts b/04_typescript/projects/typescript-ecom-manager-template/src/productManager.ts new file mode 100644 index 0000000..e69de29 diff --git a/04_typescript/projects/typescript-ecom-manager-template/src/salesManager.ts b/04_typescript/projects/typescript-ecom-manager-template/src/salesManager.ts new file mode 100644 index 0000000..e69de29 diff --git a/04_typescript/projects/typescript-ecom-manager-template/src/tests/ecomManager.test.ts b/04_typescript/projects/typescript-ecom-manager-template/src/tests/ecomManager.test.ts new file mode 100644 index 0000000..862d062 --- /dev/null +++ b/04_typescript/projects/typescript-ecom-manager-template/src/tests/ecomManager.test.ts @@ -0,0 +1,145 @@ +/* +This is a test file for the `productManager`, `productFilters`, and `salesManager` modules. It tests the core functionality implemented in these modules. + +IMPORTANT: +- DO NOT MODIFY this file. +- After implementing the modules, you should be able to run this file by using the command `npm run ts-build`. +- Once the project is built, open the `index.html` file located in the `assets` folder in your browser to see the output of the test cases in the browser's console. + +The test file will: +- Add products. +- Update product stock. +- Remove products. +- Apply discounts. +- Filter products by category. +- Fetch low-stock products. +- Get top products by sales. +- Test edge cases, such as updating or deleting non-existing products. +- Test invalid discount values. +- Test automatic ID generation. + +EXPECTED BEHAVIOR: +- This file should run successfully without any modifications. +- Ensure that your implementation in the modules meets the requirements of these tests. + +DO NOT MODIFY this file. You should aim to pass all the tests provided here by only working on the respective modules. +*/ + +import { + addProduct, + removeProduct, + updateProductStock, + applyDiscount, +} from '../productManager'; +import { + filterProductsByCategory, + getLowStockProducts, +} from '../productFilters'; +import { getTopProductsBySales } from '../salesManager'; +import { products } from '../Product'; + +// ===== 1. Adding Products ===== +console.warn('=== Adding Products ==='); +const shirt = addProduct('T-Shirt', 29.99, 'clothing', 100, 30, 'id-1'); +console.log('Added T-Shirt (ID should be id-1):'); +console.log(shirt); + +const laptop = addProduct('Laptop', 999.99, 'electronics', 50, 10, 'id-2'); +console.log('Added Laptop (ID should be id-2):'); +console.log(laptop); + +const sofa = addProduct('Sofa', 499.99, 'home', 20, 15, 'id-3'); +console.log('Added Sofa (ID should be id-3):'); +console.log(sofa); + +// ===== 2. Applying Discount to a Product ===== +console.warn('=== Applying Discount to a Product ==='); +const discountedShirt = applyDiscount(shirt.id, 15); +console.log('It should say "Discount of 15% applied to product T-Shirt.":'); +console.log(discountedShirt); + +// ===== 3. Updating Product Stock ===== +console.warn('=== Updating Product Stock ==='); +const updatedLaptop = updateProductStock(laptop.id, 40); +console.log( + 'It should say "Stock quantity for product Laptop updated to 40.":' +); +console.log(updatedLaptop); + +// ===== 4. Removing a Product ===== +console.warn('=== Removing a Product ==='); +const removedLipstick = removeProduct('id-5'); +console.log('It should say "Product with ID id-5 not found.":'); +console.log(removedLipstick); + +// ===== 5. Filtering Products by Category ===== +console.warn('=== Filtering Products by Category ==='); +console.log('Clothing products (Expecting only T-Shirt):'); +console.log(filterProductsByCategory('clothing')); + +console.log('Clothing and Home products (Expecting T-Shirt and Sofa):'); +console.log(filterProductsByCategory(['clothing', 'home'])); + +// ===== 6. Fetching Low Stock Products ===== +console.warn('=== Fetching Low Stock Products ==='); +console.log('It should return the Laptop and Sofa products:'); +console.log(getLowStockProducts(50)); + +// ===== 7. Getting Top Products by Sales ===== +console.warn('=== Getting Top Products by Sales ==='); +const salesData = [ + { productId: 'id-2', soldUnits: 120 }, + { productId: 'id-1', soldUnits: 80 }, + { productId: 'id-4', soldUnits: 150 }, + { productId: 'id-3', soldUnits: 172 }, + { productId: 'id-5', soldUnits: 26 }, +]; +console.log('Top 2 products by sales (Expecting Sofa and Laptop):'); +console.log(getTopProductsBySales([shirt, laptop, sofa], salesData, 2)); + +// ===== 8. Edge Case: Updating Non-existing Product Stock ===== +console.warn('=== Attempting to Update a Non-existing Product ==='); +const updateNonExistingProduct = updateProductStock('id-9999', 50); +console.log( + 'Updating a non-existing product should return "Product with ID id-9999 not found.":' +); +console.log(updateNonExistingProduct); + +// ===== 9. Edge Case: Removing a Non-existing Product ===== +console.warn('=== Attempting to Remove a Non-existing Product ==='); +const removeNonExistingProduct = removeProduct('id-1000'); +console.log( + 'Removing a non-existing product should return "Product with ID id-1000 not found.":' +); +console.log(removeNonExistingProduct); + +// ===== 10. Adding Product After Removal and Checking IDs ===== +console.warn('=== Adding New Product After Removal ==='); +const basketball = addProduct('Basketball', 29.99, 'sports', 30, 25, 'id-6'); +console.log( + 'A basketball product with ID id-6 should be added in the products list:' +); +console.log(products); + +console.warn('=== Verifying Product IDs ==='); +console.log('All Product IDs should be [id-1, id-2, id-3, id-6]:'); +console.log([shirt.id, laptop.id, sofa.id, basketball.id]); + +// ===== 11. Invalid Discount Values (NEW TEST) ===== +console.warn('=== Testing Invalid Discount Values ==='); +console.log(applyDiscount(shirt.id, -10)); // Expecting error message +console.log(applyDiscount(shirt.id, 120)); // Expecting error message + +// ===== 12. Automatic ID Generation (NEW TEST) ===== +console.warn('=== Testing Automatic ID Generation ==='); +const autoGeneratedProduct = addProduct( + 'Headphones', + 79.99, + 'electronics', + 25, + 5 +); +console.log( + 'Generated ID should not be undefined or empty:', + autoGeneratedProduct.id +); diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/index.html b/06_js-debug/unterricht/tag48/01_counter/website-app-react/index.html index fc79883..f521cbf 100644 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/index.html +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/index.html @@ -5,6 +5,7 @@ website-app-react +
diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/package-lock.json b/06_js-debug/unterricht/tag48/01_counter/website-app-react/package-lock.json index 11b3dcd..ce17cfb 100644 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/package-lock.json +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/package-lock.json @@ -9,16 +9,26 @@ "version": "0.0.0", "dependencies": { "react": "^19.2.8", - "react-dom": "^19.2.8" + "react-dom": "^19.2.8", + "react-icons": "^5.7.0", + "uuid": "^14.0.2" }, "devDependencies": { "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.4", "oxlint": "^1.75.0", + "sass-embedded": "^1.102.0", "vite": "^8.2.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.14.0.tgz", + "integrity": "sha512-C3UGsiCwSprE2NKIIFA3hCDlpXTMCAXRZuEVp88L1GY36Y41+rYL5fryE+nOFhp4p4JPQvdV8PQ4DWgHgeTE+w==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@oxc-project/types": { "version": "0.144.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.144.0.tgz", @@ -376,6 +386,312 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.4.tgz", @@ -685,6 +1001,34 @@ } } }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -735,6 +1079,48 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -1027,6 +1413,14 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/oxlint": { "version": "1.79.0", "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.79.0.tgz", @@ -1146,6 +1540,30 @@ "react": "^19.2.8" } }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/rolldown": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.4.tgz", @@ -1179,6 +1597,394 @@ "@rolldown/binding-win32-x64-msvc": "1.2.4" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", + "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.102.0.tgz", + "integrity": "sha512-7xZ7jbsGTpA+oRIJ3HKeiYy+RIrwHltIjKMdnRTAZiPpqvKzwy80zZqR532yk5bpHn1lTqWdZ6Fh4KI+GWSsKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.102.0", + "sass-embedded-android-arm": "1.102.0", + "sass-embedded-android-arm64": "1.102.0", + "sass-embedded-android-riscv64": "1.102.0", + "sass-embedded-android-x64": "1.102.0", + "sass-embedded-darwin-arm64": "1.102.0", + "sass-embedded-darwin-x64": "1.102.0", + "sass-embedded-linux-arm": "1.102.0", + "sass-embedded-linux-arm64": "1.102.0", + "sass-embedded-linux-musl-arm": "1.102.0", + "sass-embedded-linux-musl-arm64": "1.102.0", + "sass-embedded-linux-musl-riscv64": "1.102.0", + "sass-embedded-linux-musl-x64": "1.102.0", + "sass-embedded-linux-riscv64": "1.102.0", + "sass-embedded-linux-x64": "1.102.0", + "sass-embedded-unknown-all": "1.102.0", + "sass-embedded-win32-arm64": "1.102.0", + "sass-embedded-win32-x64": "1.102.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.102.0.tgz", + "integrity": "sha512-BpaRCODYILywdCOI8++Q63+/ptsnWdwYuKyD5gMH0cJblXj85EePdeTTOM7Hl2PP6d4dIojg8GS9fIZhD2x8qA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.102.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.102.0.tgz", + "integrity": "sha512-QM6sPMUtUvFopVR15qXWdobSTYW/sPrXJLxa7eaIbqr/0EtNBZirEXdiOFdDNcsFIEFX3NeZjDq8ZkBAQrxR1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.102.0.tgz", + "integrity": "sha512-p34iJl04ksTA/6/NZNKv4Bda710hvpoUNUK6vgHKe53tTGhL5XOfYyTjX95lpKPSvGm4BlPEVSSo6CBhyNSDpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.102.0.tgz", + "integrity": "sha512-wcT5N3B6fIwCKCicDcUP6Jol+e1R3WxHMGU7Swp9Ds9VV8di7HYOKIFcasT25dKJv4l17SA7x5Oum0FlRnMPkg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.102.0.tgz", + "integrity": "sha512-IF4eJmoM4uzOborahHp8D4PlCIvumr6IGEbe1XkedwE57qRdk/GENiYZjGwYUQP0uy+pfb+WfvTNhMxkD2VhJg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.102.0.tgz", + "integrity": "sha512-txaURnQp3L/5mGgSkg6zFrI/H1BgwPxH+7fv/HMuFT1fTXGi7i5++OJNCFVPL7gFB50WFmpf02bCvgec3/gxMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.102.0.tgz", + "integrity": "sha512-KXs/y/bCVTxRy6NbgC2kK2JwmYnu4+EcDu+DVpHHIfiRgClTca++jYEqcxkthqK9ufkCgwMmrhb3tllyw5l1dw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.102.0.tgz", + "integrity": "sha512-1nqC2lrn91fjEsf6gSr/KigU15FrhUSDGWdSWowLXvNG8KbYUNRKjfypn+8u4P0SrL+R/v4VSVZguZiVVTI94A==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.102.0.tgz", + "integrity": "sha512-Yg3Ga1deV+igVqjyK5gHMKbC6fdtKkVYBnzkPVbn/W2/DeActR2JFBfMwVtZJdLpNneMye3dRzOVO2QFegsTbQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.102.0.tgz", + "integrity": "sha512-WULwlrLbhHsJzGBcfztoXK47VyJugcWDmLXF893+yrMj6dF4/zJP6JqootT3EmAx9JAUdAppXI6ma7aGlnV8jw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.102.0.tgz", + "integrity": "sha512-UFvRNJcYFOqo0X525vXG3Buue+waoqiG58xx7J6tMHSj5K/38t+9YbbgppKGLRoKoAwZTIdW8pxPA8qBSzQC6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.102.0.tgz", + "integrity": "sha512-7EmAMt5cX0SEN/qTNHD4VBHyjJXmFMAGuNR9R4YJR/SWGj/OZJw9VWryMfzEnMgNbG6HykiIttGfr9CyNKmZbA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.102.0.tgz", + "integrity": "sha512-HHzU5/g/MT1edbHfDzZleKcX19l6LMGk0KhZFLy66cxQl1iRLUaL22jfGstmHOdRUmVzWF3VevjSflSGvAjr4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.102.0.tgz", + "integrity": "sha512-AUc4wHQ7IUo9/0mcZQn7Xkl1t1+NZlTF+v5i3GX93HNoQUGIFic7q6qjSERLkdwQ0dLnWrMqe8KhV98V8v0ZoA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.102.0.tgz", + "integrity": "sha512-CxfhMwwbQFBCTjGysByvOw4PIOCYZ/jtz9uBU0UR5sfHtQvqqnsNyb1fVCIUsZ7piimxQAwcLV5H3Skj96QiVg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.102.0.tgz", + "integrity": "sha512-qhqfvFD/7X0c6e5rwvzABkGlaYJju1G+hDPCiB0HdK+S7JF+YDDb9XpRYJ9+tGIopWzEHhoNnJDPtPs9IX1lOQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.102.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.102.0.tgz", + "integrity": "sha512-EQOTKStMf7ervyhe3AX10Pa6F7CQMN3IgmpBkfgjy9HQG4Iyt34zCl/4vNJLVBWLW03b7/KJacy2I9SRz26X9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.102.0.tgz", + "integrity": "sha512-e+26mgR+O4g/m7r+WGuvygsjgZEsfgWntIOgaNhkSa9b7vVas70l2RB/SipUM4zGXQk1jX06aOEz0w0Pq1pprQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -1195,6 +2001,45 @@ "node": ">=0.10.0" } }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -1212,6 +2057,33 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/uuid": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz", + "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, "node_modules/vite": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/package.json b/06_js-debug/unterricht/tag48/01_counter/website-app-react/package.json index c14e783..ae92b73 100644 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/package.json +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/package.json @@ -11,13 +11,16 @@ }, "dependencies": { "react": "^19.2.8", - "react-dom": "^19.2.8" + "react-dom": "^19.2.8", + "react-icons": "^5.7.0", + "uuid": "^14.0.2" }, "devDependencies": { "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.4", "oxlint": "^1.75.0", + "sass-embedded": "^1.102.0", "vite": "^8.2.0" } } diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.css b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.css deleted file mode 100644 index f90339d..0000000 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.css +++ /dev/null @@ -1,184 +0,0 @@ -.counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; - - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } -} - -.hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; - position: relative; - z-index: 0; - } - - .framework, - .vite { - position: absolute; - } - - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } - - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } -} - -#center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; - - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } -} - -#next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; - - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; - } - } - - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } - - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } -} - -#docs { - border-right: 1px solid var(--border); - - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } -} - -#next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); - display: flex; - padding: 6px 12px; - align-items: center; - gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; - - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); - } - - a { - width: 100%; - justify-content: center; - box-sizing: border-box; - } - } -} - -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { - height: 48px; - } -} - -.ticks { - position: relative; - width: 100%; - - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } - - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } -} diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.jsx b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.jsx index 4f03aa1..43aa8cc 100644 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.jsx +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/App.jsx @@ -1,122 +1,35 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from './assets/vite.svg' -import heroImg from './assets/hero.png' -import './App.css' +import Counter from './components/counters/Counter'; +import Hero from './components/heros/Hero'; -function App() { - const [count, setCount] = useState(0) +function App(props) { + // const { } = props; return ( <> -
-
- - React logo - Vite logo + +
+
+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsum animi eaque doloremque error voluptate + alias dolorem esse qui voluptatum eius placeat unde consequuntur sequi dolor, repudiandae nobis. + Excepturi, dolores tenetur. +

+
+ +
+
+
+
+
+

© copyright 2026 Donkey-Coders

+
+
+ +
-
-

Get started

-

- Edit src/App.jsx and save to test HMR -

-
- -
- -
- -
-
- -

Documentation

-

Your questions, answered

- -
-
- -

Connect with us

-

Join the Vite community

- -
-
- -
-
+ - ) + ); } - -export default App +export default App; diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/counters/Counter.jsx b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/counters/Counter.jsx new file mode 100644 index 0000000..9257ca7 --- /dev/null +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/counters/Counter.jsx @@ -0,0 +1,40 @@ +import { useId, useState } from 'react'; + +const Counter = (props) => { + // const { } = props; + const [count, setCount] = useState(0); + const id = useId().replaceAll('_', ''); + + // EventHandler ======= + const handleClick = (e) => { + // setCount(count + 1); + setCount((prevState) => prevState + 1); + }; + + return ( +
+
+

Counter

+
+
+
+ Count: + +
+ +
+
+
+
+ ); +}; +export default Counter; diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.jsx b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.jsx new file mode 100644 index 0000000..e314a7c --- /dev/null +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.jsx @@ -0,0 +1,18 @@ +import './Hero.scss'; // import von scss|css funktioniert wg. rollup und esbuild bundler + +const Hero = (props) => { + // const { } = props; + + return ( +
+
+
+
+

HERO

+
+
+
+
+ ); +}; +export default Hero; diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.scss b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.scss new file mode 100644 index 0000000..ccc5a51 --- /dev/null +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/components/heros/Hero.scss @@ -0,0 +1,11 @@ +.section-hero { + width: 100%; + height: 40vh; + + background: tomato url('https://dummyimage.com/900x450/f90/000.jpg') center no-repeat; + background-size: cover; + + @media (min-width: 996px) { + background: tomato url('https://dummyimage.com/1920x450/f90/000.jpg') center no-repeat; + } +} diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/index.css b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/index.css deleted file mode 100644 index 2c84af0..0000000 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/index.css +++ /dev/null @@ -1,111 +0,0 @@ -:root { - --text: #6b6375; - --text-h: #08060d; - --bg: #fff; - --border: #e5e4e7; - --code-bg: #f4f3ec; - --accent: #aa3bff; - --accent-bg: rgba(170, 59, 255, 0.1); - --accent-border: rgba(170, 59, 255, 0.5); - --social-bg: rgba(244, 243, 236, 0.5); - --shadow: - rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; - - --sans: system-ui, 'Segoe UI', Roboto, sans-serif; - --heading: system-ui, 'Segoe UI', Roboto, sans-serif; - --mono: ui-monospace, Consolas, monospace; - - font: 18px/145% var(--sans); - letter-spacing: 0.18px; - color-scheme: light dark; - color: var(--text); - background: var(--bg); - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - @media (max-width: 1024px) { - font-size: 16px; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --text: #9ca3af; - --text-h: #f3f4f6; - --bg: #16171d; - --border: #2e303a; - --code-bg: #1f2028; - --accent: #c084fc; - --accent-bg: rgba(192, 132, 252, 0.15); - --accent-border: rgba(192, 132, 252, 0.5); - --social-bg: rgba(47, 48, 58, 0.5); - --shadow: - rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; - } - - #social .button-icon { - filter: invert(1) brightness(2); - } -} - -body { - margin: 0; -} - -#root { - width: 1126px; - max-width: 100%; - margin: 0 auto; - text-align: center; - border-inline: 1px solid var(--border); - min-height: 100svh; - display: flex; - flex-direction: column; - box-sizing: border-box; -} - -h1, -h2 { - font-family: var(--heading); - font-weight: 500; - color: var(--text-h); -} - -h1 { - font-size: 56px; - letter-spacing: -1.68px; - margin: 32px 0; - @media (max-width: 1024px) { - font-size: 36px; - margin: 20px 0; - } -} -h2 { - font-size: 24px; - line-height: 118%; - letter-spacing: -0.24px; - margin: 0 0 8px; - @media (max-width: 1024px) { - font-size: 20px; - } -} -p { - margin: 0; -} - -code, -.counter { - font-family: var(--mono); - display: inline-flex; - border-radius: 4px; - color: var(--text-h); -} - -code { - font-size: 15px; - line-height: 135%; - padding: 4px 8px; - background: var(--code-bg); -} diff --git a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/main.jsx b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/main.jsx index b9a1a6d..3ecc71b 100644 --- a/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/main.jsx +++ b/06_js-debug/unterricht/tag48/01_counter/website-app-react/src/main.jsx @@ -1,10 +1,10 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.jsx' +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; + +import App from './App.jsx'; createRoot(document.getElementById('root')).render( , -) +);