From 5fb5a624b85aa7faea3579414c60d6abe6c0846a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Chudy?= Date: Fri, 16 Jan 2026 08:35:43 +0100 Subject: [PATCH] UPO 4.3, fixes for invoices --- assets/upo.xml | 42 +- package-lock.json | 1303 +---------------- package.json | 2 +- src/app-public/index.html | 40 +- src/app-public/main.ts | 2 +- src/index.ts | 7 + src/lib-public/UPO-generator.spec.ts | 65 + src/lib-public/UPO-generator.ts | 35 + src/lib-public/generators/FA1/Platnosc.ts | 2 +- .../generators/FA1/Podmiot2Podmiot2k.ts | 7 +- .../FA1/PodsumowanieStawekPodatkuVat.spec.ts | 1 + .../FA1/PodsumowanieStawekPodatkuVat.ts | 2 +- src/lib-public/generators/FA1/Rabat.spec.ts | 2 +- src/lib-public/generators/FA1/Rabat.ts | 2 +- .../generators/FA1/Szczegoly.spec.ts | 9 +- src/lib-public/generators/FA1/Szczegoly.ts | 8 +- src/lib-public/generators/FA1/Wiersze.spec.ts | 11 +- src/lib-public/generators/FA1/Wiersze.ts | 15 +- .../generators/FA1/Zamowienia.spec.ts | 2 + src/lib-public/generators/FA1/Zamowienie.ts | 5 + .../generators/FA2/Adnotacje.spec.ts | 1 + src/lib-public/generators/FA2/Adnotacje.ts | 14 + src/lib-public/generators/FA2/Platnosc.ts | 2 +- .../generators/FA2/Podmiot2Podmiot2k.ts | 8 +- .../FA2/PodsumowanieStawekPodatkuVat.spec.ts | 3 +- .../FA2/PodsumowanieStawekPodatkuVat.ts | 6 +- src/lib-public/generators/FA2/Rabat.spec.ts | 2 +- src/lib-public/generators/FA2/Rabat.ts | 2 +- .../generators/FA2/Szczegoly.spec.ts | 20 +- src/lib-public/generators/FA2/Szczegoly.ts | 23 +- src/lib-public/generators/FA2/Wiersze.spec.ts | 8 +- src/lib-public/generators/FA2/Wiersze.ts | 15 +- .../generators/FA2/Zamowienia.spec.ts | 2 + src/lib-public/generators/FA2/Zamowienie.ts | 6 + .../generators/FA3/Adnotacje.spec.ts | 1 + src/lib-public/generators/FA3/Adnotacje.ts | 14 + src/lib-public/generators/FA3/Platnosc.ts | 2 +- .../generators/FA3/Podmiot2Podmiot2k.ts | 7 +- .../FA3/PodsumowanieStawekPodatkuVat.spec.ts | 11 +- .../FA3/PodsumowanieStawekPodatkuVat.ts | 14 +- src/lib-public/generators/FA3/Rabat.spec.ts | 2 +- src/lib-public/generators/FA3/Rabat.ts | 3 +- .../generators/FA3/Szczegoly.spec.ts | 20 +- src/lib-public/generators/FA3/Szczegoly.ts | 23 +- src/lib-public/generators/FA3/Wiersze.spec.ts | 14 +- src/lib-public/generators/FA3/Wiersze.ts | 15 +- .../generators/FA3/Zamowienia.spec.ts | 2 + src/lib-public/generators/FA3/Zamowienie.ts | 5 + .../generators/UPO4_3/Dokumenty.spec.ts | 123 ++ src/lib-public/generators/UPO4_3/Dokumenty.ts | 183 +++ src/lib-public/generators/UPO4_3/Naglowek.ts | 34 + src/lib-public/generators/common/Stopka.ts | 10 +- .../generators/common/Wiersze.spec.ts | 32 +- src/lib-public/generators/common/Wiersze.ts | 6 +- .../generators/common/Zalaczniki.ts | 4 +- src/lib-public/index.ts | 2 +- src/lib-public/types/fa3.types.ts | 2 +- src/lib-public/types/upo-v4_3.types.ts | 69 + src/shared/PDF-functions.spec.ts | 36 + src/shared/PDF-functions.ts | 78 +- src/shared/consts/const.ts | 57 +- src/shared/enums/common.enum.ts | 2 + .../generators/common/functions.spec.ts | 12 +- src/shared/generators/common/functions.ts | 31 +- 64 files changed, 1044 insertions(+), 1444 deletions(-) create mode 100644 src/lib-public/UPO-generator.spec.ts create mode 100644 src/lib-public/UPO-generator.ts create mode 100644 src/lib-public/generators/UPO4_3/Dokumenty.spec.ts create mode 100644 src/lib-public/generators/UPO4_3/Dokumenty.ts create mode 100644 src/lib-public/generators/UPO4_3/Naglowek.ts create mode 100644 src/lib-public/types/upo-v4_3.types.ts diff --git a/assets/upo.xml b/assets/upo.xml index 73d0d94..e8f2ef8 100644 --- a/assets/upo.xml +++ b/assets/upo.xml @@ -1,22 +1,24 @@ - - Ministerstwo Finansów - 36950822-93-9D5A28BFDA-47C899773E-5C - - - 5265877635-ATU12345678 - - kyqH+QUgP8ATWd/95IY632mP4uqibwG66Oqclq9+qno= - - 1-0E - FA (3) - - 5265877635 - 5265877635-20250916-0200A0D6723E-C2 - FA/XVQUD-9997622510/04/2027 - 2025-09-16 - 2025-09-16T11:05:40.841+02:00 - 2025-09-16T11:05:41.045+02:00 - GZMGNVzs3krF6URKgvaw77OOeG3nJ+WGziT5xguliQ8= - + + Ministerstwo Finansów + 36950822-93-9D5A28BFDA-47C899773E-5C + + + 5265877635-ATU12345678 + + kyqH+QUgP8ATWd/95IY632mP4uqibwG66Oqclq9+qno= + + + 1-0E + FA (3) + + 5265877635 + 5265877635-20250916-0200A0D6723E-C2 + FA/XVQUD-9997622510/04/2027 + 2025-09-16 + 2025-09-16T11:05:40.841+02:00 + 2025-09-16T11:05:41.045+02:00 + GZMGNVzs3krF6URKgvaw77OOeG3nJ+WGziT5xguliQ8= + Offline + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9e27f1e..ad05791 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@akmf/ksef-fe-invoice-converter", - "version": "0.0.32", + "version": "0.0.42", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@akmf/ksef-fe-invoice-converter", - "version": "0.0.32", + "version": "0.0.42", "license": "ISC", "dependencies": { "pdfmake": "^0.2.20", @@ -40,8 +40,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -50,8 +48,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -60,8 +56,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "dev": true, "license": "MIT", "dependencies": { @@ -76,8 +70,6 @@ }, "node_modules/@babel/parser/node_modules/@babel/types": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -90,8 +82,6 @@ }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", "dev": true, "funding": [ { @@ -110,8 +100,6 @@ }, "node_modules/@csstools/css-calc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, "funding": [ { @@ -134,8 +122,6 @@ }, "node_modules/@csstools/css-color-parser": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", "dev": true, "funding": [ { @@ -162,8 +148,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -185,8 +169,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -203,435 +185,8 @@ "node": ">=18" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -649,8 +204,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -662,8 +215,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -672,8 +223,6 @@ }, "node_modules/@eslint/js": { "version": "9.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", - "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "dev": true, "license": "MIT", "engines": { @@ -685,8 +234,6 @@ }, "node_modules/@foliojs-fork/linebreak": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz", - "integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==", "license": "MIT", "dependencies": { "base64-js": "1.3.1", @@ -695,8 +242,6 @@ }, "node_modules/@foliojs-fork/pdfkit": { "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz", - "integrity": "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw==", "license": "MIT", "dependencies": { "@foliojs-fork/fontkit": "^1.9.2", @@ -708,8 +253,6 @@ }, "node_modules/@foliojs-fork/pdfkit/node_modules/@foliojs-fork/fontkit": { "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz", - "integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==", "license": "MIT", "dependencies": { "@foliojs-fork/restructure": "^2.0.2", @@ -724,14 +267,10 @@ }, "node_modules/@foliojs-fork/restructure": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -740,8 +279,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -754,8 +291,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -768,8 +303,6 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -778,15 +311,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -796,8 +325,6 @@ }, "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -806,8 +333,6 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -817,8 +342,6 @@ }, "node_modules/@pkgr/core": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -830,8 +353,6 @@ }, "node_modules/@polka/url": { "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, @@ -1046,9 +567,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", "cpu": [ "x64" ], @@ -1116,8 +637,6 @@ }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", - "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", "cpu": [ "x64" ], @@ -1130,8 +649,6 @@ }, "node_modules/@rushstack/problem-matcher": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", - "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1145,8 +662,6 @@ }, "node_modules/@stylistic/eslint-plugin": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.4.0.tgz", - "integrity": "sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==", "dev": true, "license": "MIT", "dependencies": { @@ -1166,15 +681,11 @@ }, "node_modules/@types/argparse": { "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", "dev": true, "license": "MIT" }, "node_modules/@types/chai": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", - "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1183,29 +694,21 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "24.7.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", - "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", "dev": true, "license": "MIT", "dependencies": { @@ -1214,8 +717,6 @@ }, "node_modules/@types/pdfkit": { "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.17.3.tgz", - "integrity": "sha512-E4tp2qFaghqfS4K5TR4Gn1uTIkg0UAkhUgvVIszr5cS6ZmbioPWEkvhNDy3GtR9qdKC8DLQAnaaMlTcf346VsA==", "dev": true, "license": "MIT", "dependencies": { @@ -1224,8 +725,6 @@ }, "node_modules/@types/pdfmake": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@types/pdfmake/-/pdfmake-0.2.11.tgz", - "integrity": "sha512-gglgMQhnG6C2kco13DJlvokqTxL+XKxHwCejElH8fSCNF9ZCkRK6Mzo011jQ0zuug+YlIgn6BpcpZrARyWdW3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1235,8 +734,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", - "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", "dev": true, "license": "MIT", "dependencies": { @@ -1265,8 +762,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", - "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1290,8 +785,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1304,8 +797,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1314,8 +805,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1328,8 +817,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { @@ -1357,8 +844,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1367,8 +852,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1384,8 +867,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1397,8 +878,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -1411,8 +890,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1427,8 +904,6 @@ }, "node_modules/@typescript-eslint/parser/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -1440,8 +915,6 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", - "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1462,8 +935,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", - "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", "dev": true, "license": "MIT", "dependencies": { @@ -1480,8 +951,6 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", - "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", "dev": true, "license": "MIT", "engines": { @@ -1497,8 +966,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", - "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", "dev": true, "license": "MIT", "dependencies": { @@ -1522,8 +989,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1536,8 +1001,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1546,8 +1009,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1560,8 +1021,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { @@ -1589,8 +1048,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1599,8 +1056,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1616,8 +1071,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1629,8 +1082,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -1643,8 +1094,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1659,8 +1108,6 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -1672,8 +1119,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", - "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", "dev": true, "license": "MIT", "engines": { @@ -1686,8 +1131,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", - "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", "dev": true, "license": "MIT", "dependencies": { @@ -1710,8 +1153,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1724,8 +1165,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1734,8 +1173,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1748,8 +1185,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { @@ -1777,8 +1212,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1787,8 +1220,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1804,8 +1235,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1817,8 +1246,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -1831,8 +1258,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1847,8 +1272,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -1860,8 +1283,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", - "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1878,8 +1299,6 @@ }, "node_modules/@vitest/coverage-v8": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", - "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1912,8 +1331,6 @@ }, "node_modules/@vitest/coverage-v8/node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1926,8 +1343,6 @@ }, "node_modules/@vitest/coverage-v8/node_modules/@bcoe/v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", "engines": { @@ -1936,8 +1351,6 @@ }, "node_modules/@vitest/coverage-v8/node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1947,8 +1360,6 @@ }, "node_modules/@vitest/coverage-v8/node_modules/ast-v8-to-istanbul": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.5.tgz", - "integrity": "sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==", "dev": true, "license": "MIT", "dependencies": { @@ -1959,8 +1370,6 @@ }, "node_modules/@vitest/coverage-v8/node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1973,8 +1382,6 @@ }, "node_modules/@vitest/expect": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "dev": true, "license": "MIT", "dependencies": { @@ -1990,8 +1397,6 @@ }, "node_modules/@vitest/expect/node_modules/chai": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -2007,8 +1412,6 @@ }, "node_modules/@vitest/pretty-format": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -2020,8 +1423,6 @@ }, "node_modules/@vitest/runner": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2035,8 +1436,6 @@ }, "node_modules/@vitest/snapshot": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2050,8 +1449,6 @@ }, "node_modules/@vitest/spy": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "dev": true, "license": "MIT", "dependencies": { @@ -2063,8 +1460,6 @@ }, "node_modules/@vitest/ui": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.4.tgz", - "integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==", "dev": true, "license": "MIT", "dependencies": { @@ -2085,8 +1480,6 @@ }, "node_modules/@vitest/utils": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "dev": true, "license": "MIT", "dependencies": { @@ -2100,8 +1493,6 @@ }, "node_modules/@volar/language-core": { "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz", - "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2110,15 +1501,11 @@ }, "node_modules/@volar/source-map": { "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz", - "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-core": { "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", - "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2131,8 +1518,6 @@ }, "node_modules/@vue/compiler-core/node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2144,15 +1529,11 @@ }, "node_modules/@vue/compiler-core/node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-dom": { "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", - "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", "dev": true, "license": "MIT", "dependencies": { @@ -2162,8 +1543,6 @@ }, "node_modules/@vue/compiler-vue2": { "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", "dev": true, "license": "MIT", "dependencies": { @@ -2173,15 +1552,11 @@ }, "node_modules/@vue/shared": { "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", - "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", "dev": true, "license": "MIT" }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -2193,8 +1568,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2203,8 +1576,6 @@ }, "node_modules/agent-base": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -2213,8 +1584,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -2230,8 +1599,6 @@ }, "node_modules/ajv/node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2240,15 +1607,11 @@ }, "node_modules/alien-signals": { "version": "0.4.14", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", - "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", "dev": true, "license": "MIT" }, "node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -2260,8 +1623,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -2276,15 +1637,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { @@ -2293,21 +1650,15 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/base64-js": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2317,8 +1668,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -2330,8 +1679,6 @@ }, "node_modules/brotli": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "license": "MIT", "dependencies": { "base64-js": "^1.1.2" @@ -2339,8 +1686,6 @@ }, "node_modules/cac": { "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { @@ -2349,8 +1694,6 @@ }, "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", @@ -2367,8 +1710,6 @@ }, "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", @@ -2380,8 +1721,6 @@ }, "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", @@ -2396,8 +1735,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -2406,8 +1743,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -2423,8 +1758,6 @@ }, "node_modules/check-error": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, "license": "MIT", "engines": { @@ -2433,8 +1766,6 @@ }, "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "license": "MIT", "engines": { "node": ">=0.8" @@ -2442,8 +1773,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2455,36 +1784,26 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/compare-versions": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/confbox": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -2498,14 +1817,10 @@ }, "node_modules/crypto-js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", "license": "MIT" }, "node_modules/cssstyle": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, "license": "MIT", "dependencies": { @@ -2518,8 +1833,6 @@ }, "node_modules/cssstyle/node_modules/@asamuzakjp/css-color": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "dev": true, "license": "MIT", "dependencies": { @@ -2532,8 +1845,6 @@ }, "node_modules/data-urls": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2546,15 +1857,11 @@ }, "node_modules/de-indent": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", "dev": true, "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -2571,15 +1878,11 @@ }, "node_modules/decimal.js": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, "node_modules/deep-eql": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "license": "MIT", "engines": { @@ -2588,8 +1891,6 @@ }, "node_modules/deep-equal": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", "license": "MIT", "dependencies": { "is-arguments": "^1.1.1", @@ -2608,15 +1909,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2632,8 +1929,6 @@ }, "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", @@ -2649,14 +1944,10 @@ }, "node_modules/dfa": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "license": "MIT" }, "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", @@ -2669,22 +1960,16 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/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" @@ -2692,8 +1977,6 @@ }, "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" @@ -2701,15 +1984,11 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "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" @@ -2720,8 +1999,6 @@ }, "node_modules/esbuild": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2762,8 +2039,6 @@ }, "node_modules/esbuild/node_modules/@esbuild/win32-x64": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", "cpu": [ "x64" ], @@ -2779,8 +2054,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -2792,8 +2065,6 @@ }, "node_modules/eslint": { "version": "9.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", - "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "dev": true, "license": "MIT", "dependencies": { @@ -2853,8 +2124,6 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { @@ -2868,16 +2137,12 @@ } }, "node_modules/eslint-plugin-no-relative-import-paths": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.6.1.tgz", - "integrity": "sha512-YZNeOnsOrJcwhFw0X29MXjIzu2P/f5X2BZDPWw1R3VUYBRFxNIh77lyoL/XrMU9ewZNQPcEvAgL/cBOT1P330A==", + "version": "v1.6.1", "dev": true, "license": "ISC" }, "node_modules/eslint-plugin-prettier": { "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { @@ -2907,8 +2172,6 @@ }, "node_modules/eslint-scope": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2924,8 +2187,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2937,8 +2198,6 @@ }, "node_modules/eslint/node_modules/@eslint/config-array": { "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2952,8 +2211,6 @@ }, "node_modules/eslint/node_modules/@eslint/config-helpers": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", - "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2965,8 +2222,6 @@ }, "node_modules/eslint/node_modules/@eslint/core": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2978,8 +2233,6 @@ }, "node_modules/eslint/node_modules/@eslint/eslintrc": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3002,8 +2255,6 @@ }, "node_modules/eslint/node_modules/@eslint/object-schema": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3012,8 +2263,6 @@ }, "node_modules/eslint/node_modules/@eslint/plugin-kit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", - "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3026,8 +2275,6 @@ }, "node_modules/eslint/node_modules/@humanfs/node": { "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3040,8 +2287,6 @@ }, "node_modules/eslint/node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -3053,8 +2298,6 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -3063,8 +2306,6 @@ }, "node_modules/espree": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3081,8 +2322,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3094,8 +2333,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3107,8 +2344,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3117,8 +2352,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { @@ -3127,8 +2360,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3137,8 +2368,6 @@ }, "node_modules/expect-type": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3147,43 +2376,31 @@ }, "node_modules/exsolve": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3192,8 +2409,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -3210,15 +2425,11 @@ }, "node_modules/fflate": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "dev": true, "license": "MIT" }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3230,8 +2441,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -3243,8 +2452,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -3260,8 +2467,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3274,15 +2479,11 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/foreground-child": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { @@ -3298,8 +2499,6 @@ }, "node_modules/fs-extra": { "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -3328,8 +2527,6 @@ }, "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" @@ -3337,8 +2534,6 @@ }, "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" @@ -3346,8 +2541,6 @@ }, "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", @@ -3370,8 +2563,6 @@ }, "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", @@ -3383,8 +2574,6 @@ }, "node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -3404,8 +2593,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -3417,8 +2604,6 @@ }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3427,8 +2612,6 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3443,8 +2626,6 @@ }, "node_modules/glob/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3460,8 +2641,6 @@ }, "node_modules/globals": { "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "dev": true, "license": "MIT", "engines": { @@ -3473,8 +2652,6 @@ }, "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" @@ -3485,22 +2662,16 @@ }, "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==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -3509,8 +2680,6 @@ }, "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" @@ -3521,8 +2690,6 @@ }, "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" @@ -3533,8 +2700,6 @@ }, "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" @@ -3548,8 +2713,6 @@ }, "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" @@ -3560,8 +2723,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -3570,8 +2731,6 @@ }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3583,15 +2742,11 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -3604,8 +2759,6 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -3618,8 +2771,6 @@ }, "node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -3630,8 +2781,6 @@ }, "node_modules/ignore": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -3640,8 +2789,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3657,8 +2804,6 @@ }, "node_modules/import-lazy": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "license": "MIT", "engines": { @@ -3667,8 +2812,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -3677,8 +2820,6 @@ }, "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -3693,8 +2834,6 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -3709,8 +2848,6 @@ }, "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", @@ -3725,8 +2862,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -3735,8 +2870,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -3745,8 +2878,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3758,8 +2889,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -3768,15 +2897,11 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, "license": "MIT" }, "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", @@ -3793,15 +2918,11 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3810,8 +2931,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3825,8 +2944,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3840,8 +2957,6 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3856,8 +2971,6 @@ }, "node_modules/jackspeak/node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -3874,8 +2987,6 @@ }, "node_modules/jackspeak/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -3884,16 +2995,12 @@ }, "node_modules/jackspeak/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/jackspeak/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -3907,8 +3014,6 @@ }, "node_modules/jackspeak/node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -3921,8 +3026,6 @@ "node_modules/jackspeak/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3939,8 +3042,6 @@ }, "node_modules/jackspeak/node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -3954,8 +3055,6 @@ }, "node_modules/jackspeak/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -3967,8 +3066,6 @@ }, "node_modules/jiti": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", "bin": { @@ -3977,28 +3074,20 @@ }, "node_modules/jju": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true, "license": "MIT" }, "node_modules/jpeg-exif": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", - "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", "license": "MIT" }, "node_modules/js-tokens": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -4010,8 +3099,6 @@ }, "node_modules/jsdom": { "version": "26.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", - "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", "dependencies": { @@ -4050,29 +3137,21 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -4084,8 +3163,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -4094,15 +3171,11 @@ }, "node_modules/kolorist": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", "dev": true, "license": "MIT" }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4115,8 +3188,6 @@ }, "node_modules/local-pkg": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", "dev": true, "license": "MIT", "dependencies": { @@ -4133,15 +3204,11 @@ }, "node_modules/local-pkg/node_modules/confbox": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "dev": true, "license": "MIT" }, "node_modules/local-pkg/node_modules/mlly": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", "dev": true, "license": "MIT", "dependencies": { @@ -4153,8 +3220,6 @@ }, "node_modules/local-pkg/node_modules/mlly/node_modules/pkg-types": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4165,8 +3230,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -4181,36 +3244,26 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/loupe": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/magic-string": { "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "dev": true, "license": "MIT", "dependencies": { @@ -4219,8 +3272,6 @@ }, "node_modules/magicast": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4231,8 +3282,6 @@ }, "node_modules/magicast/node_modules/@babel/types": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4245,8 +3294,6 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -4261,8 +3308,6 @@ }, "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" @@ -4270,8 +3315,6 @@ }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -4280,8 +3323,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -4293,8 +3334,6 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -4303,8 +3342,6 @@ }, "node_modules/mrmime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", "engines": { @@ -4313,22 +3350,16 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/muggle-string": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -4346,22 +3377,16 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/nwsapi": { "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", "dev": true, "license": "MIT" }, "node_modules/object-is": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4376,8 +3401,6 @@ }, "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" @@ -4385,8 +3408,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -4403,8 +3424,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4419,8 +3438,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -4435,21 +3452,15 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "license": "MIT" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -4461,8 +3472,6 @@ }, "node_modules/parse5": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "license": "MIT", "dependencies": { @@ -4474,8 +3483,6 @@ }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4487,15 +3494,11 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -4504,8 +3507,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -4514,22 +3515,16 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { @@ -4538,8 +3533,6 @@ }, "node_modules/pdfmake": { "version": "0.2.20", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.20.tgz", - "integrity": "sha512-bGbxbGFP5p8PWNT3Phsu1ZcRLnRfF6jmnuKTkgmt6i5PZzSdX6JaB+NeTz9q+aocfW8SE9GUjL3o/5GroBqGcQ==", "license": "MIT", "dependencies": { "@foliojs-fork/linebreak": "^1.1.2", @@ -4553,15 +3546,11 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -4573,8 +3562,6 @@ }, "node_modules/pkg-types": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", "dev": true, "license": "MIT", "dependencies": { @@ -4584,14 +3571,10 @@ } }, "node_modules/png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + "version": "1.0.0" }, "node_modules/postcss": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -4619,8 +3602,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -4629,8 +3610,6 @@ }, "node_modules/prettier": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -4645,8 +3624,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -4658,8 +3635,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -4668,8 +3643,6 @@ }, "node_modules/quansync": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "dev": true, "funding": [ { @@ -4685,8 +3658,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -4706,8 +3677,6 @@ }, "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", @@ -4726,8 +3695,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -4736,8 +3703,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -4746,8 +3711,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -4757,8 +3720,6 @@ }, "node_modules/rollup": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", - "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4797,10 +3758,22 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", - "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", "cpu": [ "x64" ], @@ -4813,15 +3786,11 @@ }, "node_modules/rrweb-cssom": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", "dev": true, "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -4844,20 +3813,14 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "license": "ISC" }, "node_modules/saxes": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "license": "ISC", "dependencies": { @@ -4869,8 +3832,6 @@ }, "node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4882,8 +3843,6 @@ }, "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", @@ -4899,8 +3858,6 @@ }, "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", @@ -4914,8 +3871,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -4927,8 +3882,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -4937,15 +3890,11 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -4957,8 +3906,6 @@ }, "node_modules/sirv": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", - "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", "dependencies": { @@ -4972,8 +3919,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4982,8 +3927,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4992,29 +3935,21 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/std-env": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "dev": true, "license": "MIT" }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -5023,8 +3958,6 @@ }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -5041,8 +3974,6 @@ }, "node_modules/strip-ansi": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -5058,8 +3989,6 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -5071,8 +4000,6 @@ }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -5081,8 +4008,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -5094,8 +4019,6 @@ }, "node_modules/strip-literal": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", "dev": true, "license": "MIT", "dependencies": { @@ -5107,8 +4030,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -5120,8 +4041,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -5133,15 +4052,11 @@ }, "node_modules/symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, "license": "MIT" }, "node_modules/synckit": { "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { @@ -5156,8 +4071,6 @@ }, "node_modules/test-exclude": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, "license": "ISC", "dependencies": { @@ -5171,8 +4084,6 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5181,8 +4092,6 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -5197,28 +4106,20 @@ }, "node_modules/tiny-inflate": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "license": "MIT" }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5234,8 +4135,6 @@ }, "node_modules/tinypool": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", "engines": { @@ -5244,8 +4143,6 @@ }, "node_modules/tinyrainbow": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", "engines": { @@ -5254,8 +4151,6 @@ }, "node_modules/tinyspy": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, "license": "MIT", "engines": { @@ -5264,8 +4159,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5277,8 +4170,6 @@ }, "node_modules/totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", "engines": { @@ -5287,8 +4178,6 @@ }, "node_modules/tough-cookie": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5300,8 +4189,6 @@ }, "node_modules/tough-cookie/node_modules/tldts": { "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5313,15 +4200,11 @@ }, "node_modules/tough-cookie/node_modules/tldts-core": { "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "dev": true, "license": "MIT" }, "node_modules/tr46": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, "license": "MIT", "dependencies": { @@ -5333,8 +4216,6 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -5346,8 +4227,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -5359,8 +4238,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5373,8 +4250,6 @@ }, "node_modules/typescript-eslint": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.0.tgz", - "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", "dev": true, "license": "MIT", "dependencies": { @@ -5397,8 +4272,6 @@ }, "node_modules/typescript-eslint/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -5411,8 +4284,6 @@ }, "node_modules/typescript-eslint/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -5421,8 +4292,6 @@ }, "node_modules/typescript-eslint/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -5435,8 +4304,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { @@ -5464,8 +4331,6 @@ }, "node_modules/typescript-eslint/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5474,8 +4339,6 @@ }, "node_modules/typescript-eslint/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -5491,8 +4354,6 @@ }, "node_modules/typescript-eslint/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -5504,8 +4365,6 @@ }, "node_modules/typescript-eslint/node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -5518,8 +4377,6 @@ }, "node_modules/typescript-eslint/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -5534,8 +4391,6 @@ }, "node_modules/typescript-eslint/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -5547,22 +4402,16 @@ }, "node_modules/ufo": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "dev": true, "license": "MIT" }, "node_modules/undici-types": { "version": "7.14.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", - "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", "dev": true, "license": "MIT" }, "node_modules/unicode-properties": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "license": "MIT", "dependencies": { "base64-js": "^1.3.0", @@ -5571,8 +4420,6 @@ }, "node_modules/unicode-trie": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "license": "MIT", "dependencies": { "pako": "^0.2.5", @@ -5581,8 +4428,6 @@ }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -5591,8 +4436,6 @@ }, "node_modules/vite": { "version": "7.1.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "dev": true, "license": "MIT", "dependencies": { @@ -5666,8 +4509,6 @@ }, "node_modules/vite-node": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, "license": "MIT", "dependencies": { @@ -5689,8 +4530,6 @@ }, "node_modules/vite-plugin-dts": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", - "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", "dev": true, "license": "MIT", "dependencies": { @@ -5716,8 +4555,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@isaacs/balanced-match": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, "license": "MIT", "engines": { @@ -5726,8 +4563,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@isaacs/brace-expansion": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, "license": "MIT", "dependencies": { @@ -5739,8 +4574,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@microsoft/api-extractor": { "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.53.1.tgz", - "integrity": "sha512-bul5eTNxijLdDBqLye74u9494sRmf+9QULtec9Od0uHnifahGeNt8CC4/xCdn7mVyEBrXIQyQ5+sc4Uc0QfBSA==", "dev": true, "license": "MIT", "dependencies": { @@ -5764,8 +4597,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@microsoft/api-extractor-model": { "version": "7.31.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.31.1.tgz", - "integrity": "sha512-Dhnip5OFKbl85rq/ICHBFGhV4RA5UQSl8AC/P/zoGvs+CBudPkatt5kIhMGiYgVPnUWmfR6fcp38+1AFLYNtUw==", "dev": true, "license": "MIT", "dependencies": { @@ -5776,8 +4607,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@microsoft/api-extractor/node_modules/typescript": { "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5790,15 +4619,11 @@ }, "node_modules/vite-plugin-dts/node_modules/@microsoft/tsdoc": { "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", - "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", "dev": true, "license": "MIT" }, "node_modules/vite-plugin-dts/node_modules/@microsoft/tsdoc-config": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz", - "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==", "dev": true, "license": "MIT", "dependencies": { @@ -5810,8 +4635,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rollup/pluginutils": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5833,8 +4656,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rushstack/node-core-library": { "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.17.0.tgz", - "integrity": "sha512-24vt1GbHN6kyIglRMTVpyEiNRRRJK8uZHc1XoGAhmnTDKnrWet8OmOpImMswJIe6gM78eV8cMg1HXwuUHkSSgg==", "dev": true, "license": "MIT", "dependencies": { @@ -5858,8 +4679,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rushstack/node-core-library/node_modules/ajv": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "license": "MIT", "dependencies": { @@ -5875,8 +4694,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rushstack/rig-package": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.6.0.tgz", - "integrity": "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==", "dev": true, "license": "MIT", "dependencies": { @@ -5886,8 +4703,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rushstack/terminal": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.1.tgz", - "integrity": "sha512-jsBuSad67IDVMO2yp0hDfs0OdE4z3mDIjIL2pclDT3aEJboeZXE85e1HjuD0F6JoW3XgHvDwoX+WOV+AVTDQeA==", "dev": true, "license": "MIT", "dependencies": { @@ -5906,8 +4721,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@rushstack/ts-command-line": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.1.tgz", - "integrity": "sha512-HPzFsUcr+wZ3oQI08Ec/E6cuiAVHKzrXZGHhwiwIGygAFiqN5QzX+ff30n70NU2WyE26CykgMwBZZSSyHCJrzA==", "dev": true, "license": "MIT", "dependencies": { @@ -5919,8 +4732,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@volar/typescript": { "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.23.tgz", - "integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==", "dev": true, "license": "MIT", "dependencies": { @@ -5931,8 +4742,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@vue/language-core": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", - "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", "dev": true, "license": "MIT", "dependencies": { @@ -5956,8 +4765,6 @@ }, "node_modules/vite-plugin-dts/node_modules/@vue/language-core/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -5972,8 +4779,6 @@ }, "node_modules/vite-plugin-dts/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "license": "MIT", "dependencies": { @@ -5989,8 +4794,6 @@ }, "node_modules/vite-plugin-dts/node_modules/ajv-draft-04": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6004,8 +4807,6 @@ }, "node_modules/vite-plugin-dts/node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6022,8 +4823,6 @@ }, "node_modules/vite-plugin-dts/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -6032,8 +4831,6 @@ }, "node_modules/vite-plugin-dts/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6042,22 +4839,16 @@ }, "node_modules/vite-plugin-dts/node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/vite-plugin-dts/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/vite-plugin-dts/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -6069,8 +4860,6 @@ }, "node_modules/vite-plugin-dts/node_modules/minimatch": { "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "license": "ISC", "dependencies": { @@ -6085,8 +4874,6 @@ }, "node_modules/vite-plugin-dts/node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -6106,8 +4893,6 @@ }, "node_modules/vite-plugin-dts/node_modules/semver": { "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "license": "ISC", "dependencies": { @@ -6122,8 +4907,6 @@ }, "node_modules/vite-plugin-dts/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": { @@ -6138,8 +4921,6 @@ }, "node_modules/vite-plugin-dts/node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6148,8 +4929,6 @@ }, "node_modules/vitest": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", "dependencies": { @@ -6221,8 +5000,6 @@ }, "node_modules/vitest/node_modules/@vitest/mocker": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6248,8 +5025,6 @@ }, "node_modules/vitest/node_modules/chai": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -6265,15 +5040,11 @@ }, "node_modules/vscode-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "dev": true, "license": "MIT" }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { @@ -6285,8 +5056,6 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6295,8 +5064,6 @@ }, "node_modules/whatwg-encoding": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6308,8 +5075,6 @@ }, "node_modules/whatwg-mimetype": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "license": "MIT", "engines": { @@ -6318,8 +5083,6 @@ }, "node_modules/whatwg-url": { "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, "license": "MIT", "dependencies": { @@ -6332,8 +5095,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -6348,8 +5109,6 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -6365,8 +5124,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -6375,8 +5132,6 @@ }, "node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6393,8 +5148,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -6406,8 +5159,6 @@ }, "node_modules/ws": { "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { @@ -6428,8 +5179,6 @@ }, "node_modules/xml-js": { "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "license": "MIT", "dependencies": { "sax": "^1.2.4" @@ -6440,8 +5189,6 @@ }, "node_modules/xml-name-validator": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6450,15 +5197,11 @@ }, "node_modules/xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" }, "node_modules/xmldoc": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-2.0.2.tgz", - "integrity": "sha512-UiRwoSStEXS3R+YE8OqYv3jebza8cBBAI2y8g3B15XFkn3SbEOyyLnmPHjLBPZANrPJKEzxxB7A3XwcLikQVlQ==", "license": "MIT", "dependencies": { "sax": "^1.2.4" @@ -6469,15 +5212,11 @@ }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index f3141cd..02ffb7f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@akmf/ksef-fe-invoice-converter", - "version": "0.0.32", + "version": "0.0.42", "scripts": { "dev": "vite --mode public --config vite.config.ts", "build": "vite build --mode production", diff --git a/src/app-public/index.html b/src/app-public/index.html index e6aee47..584ef33 100644 --- a/src/app-public/index.html +++ b/src/app-public/index.html @@ -1,19 +1,29 @@ - + - - - KSEF PDF GENERATOR - - -

📄 KSEF PDF GENERATOR

+ + + XML Parser + + +

📄 XML Parser

-

Wygeneruj wizualizacje faktury PDF

- +

Wygeneruj fakture:

+ -

Wygeneruj wizualizacje UPO PDF

- +

Wygeneruj UPO:

+ - - - - \ No newline at end of file + + + diff --git a/src/app-public/main.ts b/src/app-public/main.ts index 475ea87..53f3123 100644 --- a/src/app-public/main.ts +++ b/src/app-public/main.ts @@ -15,7 +15,7 @@ inputInvoice.addEventListener('change', async (): Promise => { const additionalData: AdditionalDataTypes = { nrKSeF: '5555555555-20250808-9231003CA67B-BE', qrCode: - 'https://ksef-test.mf.gov.pl/client-app/invoice/5265877635/26-10-2025/HS5E1zrA8WVjDNq_xMVIN5SD6nyRymmQ-BcYHReUAa0', + 'https://qr-test.ksef.mf.gov.pl/invoice/5265877635/26-10-2025/HS5E1zrA8WVjDNq_xMVIN5SD6nyRymmQ-BcYHReUAa0', }; generateInvoice(file, additionalData, 'blob').then((data: Blob): void => { diff --git a/src/index.ts b/src/index.ts index 8c52e06..c79b572 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,8 @@ export { generateInvoice, generatePDFUPO } from './lib-public'; +export { generateFA1 } from './lib-public/FA1-generator'; +export { generateFA2 } from './lib-public/FA2-generator'; +export { generateFA3 } from './lib-public/FA3-generator'; +export { generateNaglowekUPO } from './lib-public/generators/UPO4_3/Naglowek'; +export { generateDokumentUPO } from './lib-public/generators/UPO4_3/Dokumenty'; +export { generateStyle } from './shared/PDF-functions'; +export * from './shared/enums/common.enum'; diff --git a/src/lib-public/UPO-generator.spec.ts b/src/lib-public/UPO-generator.spec.ts new file mode 100644 index 0000000..1142913 --- /dev/null +++ b/src/lib-public/UPO-generator.spec.ts @@ -0,0 +1,65 @@ +import pdfMake from 'pdfmake/build/pdfmake'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { generatePDFUPO } from './UPO-generator'; +import * as XMLParser from '../shared/XML-parser'; + +describe('generatePDFUPO', () => { + const dummyFile = new File(['dummy'], 'dummy.xml', { type: 'text/xml' }); + const dummyUpo = { + Potwierdzenie: { + field1: 'value1', + field2: 'value2', + }, + }; + + beforeEach(() => { + vi.spyOn(XMLParser, 'parseXML').mockResolvedValue(dummyUpo); + + vi.spyOn(pdfMake, 'createPdf').mockImplementation( + () => + ({ + getBlob: (callback: (blob: Blob | null) => void) => { + const blob = new Blob(['PDF content'], { type: 'application/pdf' }); + + callback(blob); + }, + }) as any + ); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it('successfully generates a PDF blob', async () => { + const blob = await generatePDFUPO(dummyFile); + + expect(blob).toBeInstanceOf(Blob); + const text = await new Promise((resolve, reject) => { + const reader = new FileReader(); + + reader.onload = (): void => resolve(reader.result as string); + reader.onerror = (): void => reject(reader.error); + reader.readAsText(blob); + }); + + expect(text).toContain('PDF content'); + }); + + it('rejects promise if pdfMake returns null blob', async () => { + vi.spyOn(pdfMake, 'createPdf').mockReturnValue({ + getBlob: (callback: (blob: Blob | null) => void) => { + callback(null); + }, + } as any); + + await expect(generatePDFUPO(dummyFile)).rejects.toEqual('Error'); + }); + + it('calls parseXML with the input file', async () => { + const parseXMLSpy = vi.spyOn(XMLParser, 'parseXML'); + + await generatePDFUPO(dummyFile); + expect(parseXMLSpy).toHaveBeenCalledWith(dummyFile); + }); +}); diff --git a/src/lib-public/UPO-generator.ts b/src/lib-public/UPO-generator.ts new file mode 100644 index 0000000..8c4fe52 --- /dev/null +++ b/src/lib-public/UPO-generator.ts @@ -0,0 +1,35 @@ +import pdfMake from 'pdfmake/build/pdfmake'; +import { Upo } from './types/upo-v4_2.types'; +import { TDocumentDefinitions } from 'pdfmake/interfaces'; +import { generateStyle } from '../shared/PDF-functions'; +import { parseXML } from '../shared/XML-parser'; +import { Position } from '../shared/enums/common.enum'; +import { generateDokumentUPO } from './generators/UPO4_3/Dokumenty'; +import { generateNaglowekUPO } from './generators/UPO4_3/Naglowek'; + +export async function generatePDFUPO(file: File): Promise { + const upo = (await parseXML(file)) as Upo; + const docDefinition: TDocumentDefinitions = { + content: [generateNaglowekUPO(upo.Potwierdzenie!), generateDokumentUPO(upo.Potwierdzenie!)], + ...generateStyle(), + pageSize: 'A4', + pageOrientation: 'landscape', + footer: function (currentPage: number, pageCount: number) { + return { + text: currentPage.toString() + ' z ' + pageCount, + alignment: Position.RIGHT, + margin: [0, 0, 20, 0], + }; + }, + }; + + return new Promise((resolve, reject): void => { + pdfMake.createPdf(docDefinition).getBlob((blob: Blob): void => { + if (blob) { + resolve(blob); + } else { + reject('Error'); + } + }); + }); +} diff --git a/src/lib-public/generators/FA1/Platnosc.ts b/src/lib-public/generators/FA1/Platnosc.ts index f48144c..6f5c033 100644 --- a/src/lib-public/generators/FA1/Platnosc.ts +++ b/src/lib-public/generators/FA1/Platnosc.ts @@ -52,7 +52,7 @@ export function generatePlatnosc(platnosc: Platnosc | undefined): Content { if (platnosc.Zaplacono?._text === '1') { table.push(createLabelText('Informacja o płatności: ', 'Zapłacono')); - table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty)); + table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty, FormatTyp.Date)); } else if (platnosc.ZaplataCzesciowa?._text === '1') { table.push(createLabelText('Informacja o płatności: ', 'Zapłata częściowa')); } else { diff --git a/src/lib-public/generators/FA1/Podmiot2Podmiot2k.ts b/src/lib-public/generators/FA1/Podmiot2Podmiot2k.ts index 370e592..096b9e0 100644 --- a/src/lib-public/generators/FA1/Podmiot2Podmiot2k.ts +++ b/src/lib-public/generators/FA1/Podmiot2Podmiot2k.ts @@ -36,8 +36,11 @@ export function generatePodmiot2Podmiot2K(podmiot2: Podmiot2, podmiot2K: Podmiot columnGap: 20, }); } - firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); - secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + if(podmiot2K.Adres?.AdresPol || podmiot2K.Adres?.AdresZagr) { + firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); + secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + } + if (podmiot2.AdresKoresp) { secondColumn.push( generatePodmiotAdres(podmiot2.AdresKoresp, 'Adres do korespondencji', true, [0, 12, 0, 1.3]) diff --git a/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.spec.ts b/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.spec.ts index bf119e0..2de374c 100644 --- a/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.spec.ts +++ b/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.spec.ts @@ -79,6 +79,7 @@ describe('getSummaryTaxRate', () => { gross: '123.00', }); expect(summary[1].taxRateString).toBe('8% lub 7%'); + expect(summary[3].taxRateString).toBe('4% lub 3%'); expect(summary[4].taxRateString).toBe(''); expect(summary[5].taxRateString).toBe('zwolnione z opodatkowania'); }); diff --git a/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.ts b/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.ts index db2ec32..05c48f3 100644 --- a/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.ts +++ b/src/lib-public/generators/FA1/PodsumowanieStawekPodatkuVat.ts @@ -153,7 +153,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: (getNumberRounded(fa.P_13_4) + getNumberRounded(fa.P_14_4)).toFixed(2), tax: getNumberRounded(fa.P_14_4).toFixed(2), taxPLN: getNumberRounded(fa.P_14_4W).toFixed(2), - taxRateString: '4% lub 3% lub oo', + taxRateString: '4% lub 3%', }); no++; } diff --git a/src/lib-public/generators/FA1/Rabat.spec.ts b/src/lib-public/generators/FA1/Rabat.spec.ts index dd1001f..edccf3f 100644 --- a/src/lib-public/generators/FA1/Rabat.spec.ts +++ b/src/lib-public/generators/FA1/Rabat.spec.ts @@ -82,7 +82,7 @@ describe(generateRabat.name, () => { expect(PDFFunctions.getContentTable).toHaveBeenCalledWith( expect.arrayContaining([ - expect.objectContaining({ name: 'NrWierszaFay', title: 'Lp.' }), + expect.objectContaining({ name: 'NrWierszaFa', title: 'Lp.' }), expect.objectContaining({ name: 'P_7', title: 'Nazwa towaru lub usługi' }), expect.objectContaining({ name: 'P_8B', title: 'Ilość' }), expect.objectContaining({ name: 'P_8A', title: 'Miara' }), diff --git a/src/lib-public/generators/FA1/Rabat.ts b/src/lib-public/generators/FA1/Rabat.ts index fa4acb0..e6d0d09 100644 --- a/src/lib-public/generators/FA1/Rabat.ts +++ b/src/lib-public/generators/FA1/Rabat.ts @@ -17,7 +17,7 @@ export function generateRabat(invoice: Fa): Content[] { const faRows: Record[] = getTable(invoice!.FaWiersze?.FaWiersz); const result: Content[] = []; const definedHeader: HeaderDefine[] = [ - { name: 'NrWierszaFay', title: 'Lp.', format: FormatTyp.Default }, + { name: 'NrWierszaFa', title: 'Lp.', format: FormatTyp.Default }, { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default }, { name: 'P_8B', title: 'Ilość', format: FormatTyp.Default }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default }, diff --git a/src/lib-public/generators/FA1/Szczegoly.spec.ts b/src/lib-public/generators/FA1/Szczegoly.spec.ts index ab969fa..314f7d5 100644 --- a/src/lib-public/generators/FA1/Szczegoly.spec.ts +++ b/src/lib-public/generators/FA1/Szczegoly.spec.ts @@ -67,14 +67,19 @@ describe(generateSzczegoly.name, () => { describe('P_6 label', () => { it('uses "Data otrzymania zapłaty" for ZAL', () => { generateSzczegoly({ ...mockFaVat, RodzajFaktury: TRodzajFaktury.ZAL } as any); - expect(PDFFunctions.createLabelText).toHaveBeenCalledWith('Data otrzymania zapłaty: ', mockFaVat.P_6); + expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( + 'Data otrzymania zapłaty: ', + mockFaVat.P_6, + FormatTyp.Date + ); }); it('uses "Data dokonania lub zakończenia dostawy" for VAT', () => { generateSzczegoly(mockFaVat); expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( 'Data dokonania lub zakończenia dostawy towarów lub wykonania usługi: ', - mockFaVat.P_6 + mockFaVat.P_6, + FormatTyp.Date ); }); }); diff --git a/src/lib-public/generators/FA1/Szczegoly.ts b/src/lib-public/generators/FA1/Szczegoly.ts index 47b20f4..3f3a6e6 100644 --- a/src/lib-public/generators/FA1/Szczegoly.ts +++ b/src/lib-public/generators/FA1/Szczegoly.ts @@ -82,10 +82,14 @@ export function generateSzczegoly(faVat: Fa): Content[] { const forColumns: Content[][] = [ createLabelText('Numer faktury: ', faVat.P_2), - createLabelText('Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', faVat.P_1), + createLabelText( + 'Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', + faVat.P_1, + FormatTyp.Date + ), createLabelText('Miejsce wystawienia: ', faVat.P_1M), createLabelText('Okres, którego dotyczy rabat: ', faVat.OkresFaKorygowanej), - createLabelText(LabelP_6, faVat.P_6), + createLabelText(LabelP_6, faVat.P_6, FormatTyp.Date), P_6Scope, cenyLabel1, cenyLabel2, diff --git a/src/lib-public/generators/FA1/Wiersze.spec.ts b/src/lib-public/generators/FA1/Wiersze.spec.ts index 9fd3c0d..7eca37a 100644 --- a/src/lib-public/generators/FA1/Wiersze.spec.ts +++ b/src/lib-public/generators/FA1/Wiersze.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest'; import * as PDFFunctions from '../../../shared/PDF-functions'; import FormatTyp from '../../../shared/enums/common.enum'; -import { TRodzajFaktury } from '../../../shared/consts/const'; +import {TRodzajFaktury} from '../../../shared/consts/const'; import { Fa } from '../../types/fa1.types'; import { generateWiersze } from './Wiersze'; @@ -13,6 +13,7 @@ vi.mock('../../../shared/PDF-functions', () => ({ getContentTable: vi.fn(), getTable: vi.fn(), getValue: vi.fn(), + getTStawkaPodatku: vi.fn() })); describe(generateWiersze.name, () => { @@ -27,6 +28,7 @@ describe(generateWiersze.name, () => { P_7: { _text: 'Product 1' }, P_9A: { _text: '100' }, P_8B: { _text: '2' }, + P_12: { _text: '23' }, }, ], KodWaluty: { _text: 'PLN' }, @@ -106,7 +108,7 @@ describe(generateWiersze.name, () => { }); it('should display "brutto" when P_11 is not in fieldsWithValue', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable).mockReturnValue({ content: { table: {} } as any, @@ -117,6 +119,7 @@ describe(generateWiersze.name, () => { vi.mocked(PDFFunctions.formatText).mockReturnValue('formatted text' as any); vi.mocked(PDFFunctions.createHeader).mockReturnValue(['Header'] as any); vi.mocked(PDFFunctions.createSection).mockReturnValue({ section: 'content' } as any); + vi.mocked(PDFFunctions.getTStawkaPodatku).mockReturnValue('23'); generateWiersze(mockFaVat); @@ -148,7 +151,7 @@ describe(generateWiersze.name, () => { }); it('should generate two tables when fieldsWithValue.length > 8', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ @@ -175,7 +178,7 @@ describe(generateWiersze.name, () => { }); it('should not add second table if it has only 1 field with value', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ diff --git a/src/lib-public/generators/FA1/Wiersze.ts b/src/lib-public/generators/FA1/Wiersze.ts index 6ea5aee..29dc636 100644 --- a/src/lib-public/generators/FA1/Wiersze.ts +++ b/src/lib-public/generators/FA1/Wiersze.ts @@ -6,6 +6,7 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; @@ -13,16 +14,20 @@ import { Procedura, TRodzajFaktury } from '../../../shared/consts/const'; import { Fa, FP } from '../../types/fa1.types'; import FormatTyp, { Position } from '../../../shared/enums/common.enum'; import { FormContentState } from '../../../shared/types/additional-data.types'; -import { shouldAddMarza } from '../common/Wiersze'; +import { addMarza } from '../common/Wiersze'; export function generateWiersze(faVat: Fa): Content { const table: Content[] = []; const rodzajFaktury: string | number | undefined = getValue(faVat.RodzajFaktury); - const isP_PMarzy: boolean = Boolean(Number(getValue(faVat.Adnotacje?.P_PMarzy))); + const isP_PMarzy = Boolean(Number(getValue(faVat.Adnotacje?.P_PMarzy))); const faWiersze: Record[] = getTable(faVat.FaWiersze?.FaWiersz).map( (wiersz: Record): Record => { - const marza: Record = shouldAddMarza(rodzajFaktury, isP_PMarzy, wiersz)!; - return marza ? { ...wiersz, ...marza } : wiersz; + const marza: Record = addMarza(rodzajFaktury, isP_PMarzy, wiersz)!; + + if (getValue(wiersz.P_12)) { + wiersz.P_12._text = getTStawkaPodatku(getValue(wiersz.P_12) as string, 1); + } + return { ...wiersz, ...marza }; } ); const definedHeaderLp: HeaderDefine[] = [ @@ -33,7 +38,7 @@ export function generateWiersze(faVat: Fa): Content { { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default, width: '*' }, { name: 'P_9A', title: 'Cena jedn. netto', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_9B', title: 'Cena jedn. brutto', format: FormatTyp.Currency, width: 'auto' }, - { name: 'P_8B', title: 'Ilość', format: FormatTyp.Right, width: 'auto' }, + { name: 'P_8B', title: 'Ilość', format: FormatTyp.Number, width: 'auto' }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default, width: 'auto' }, { name: 'P_10', title: 'Rabat', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_12', title: 'Stawka podatku', format: FormatTyp.Default, width: 'auto' }, diff --git a/src/lib-public/generators/FA1/Zamowienia.spec.ts b/src/lib-public/generators/FA1/Zamowienia.spec.ts index abbd27a..926c81b 100644 --- a/src/lib-public/generators/FA1/Zamowienia.spec.ts +++ b/src/lib-public/generators/FA1/Zamowienia.spec.ts @@ -12,6 +12,8 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn(), getContentTable: vi.fn(), getTable: vi.fn(), + getValue: vi.fn(), + getTStawkaPodatku: vi.fn() })); describe(generateZamowienie.name, () => { diff --git a/src/lib-public/generators/FA1/Zamowienie.ts b/src/lib-public/generators/FA1/Zamowienie.ts index 8cfe697..4ab817f 100644 --- a/src/lib-public/generators/FA1/Zamowienie.ts +++ b/src/lib-public/generators/FA1/Zamowienie.ts @@ -5,6 +5,8 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, + getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; import { Procedura, TRodzajFaktury } from '../../../shared/consts/const'; @@ -29,6 +31,9 @@ export function generateZamowienie( if (!el.NrWierszaZam._text) { el.NrWierszaZam._text = (index + 1).toString(); } + if (getValue(el.P_12)) { + el.P_12._text = getTStawkaPodatku(getValue(el.P_12) as string, 1); + } return el; }); const definedHeaderLp: HeaderDefine[] = [ diff --git a/src/lib-public/generators/FA2/Adnotacje.spec.ts b/src/lib-public/generators/FA2/Adnotacje.spec.ts index 00133b9..6bf9ff8 100644 --- a/src/lib-public/generators/FA2/Adnotacje.spec.ts +++ b/src/lib-public/generators/FA2/Adnotacje.spec.ts @@ -8,6 +8,7 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn((text: string) => ({ text })), getTable: vi.fn(() => []), hasValue: vi.fn((v) => !!v?._text), + getValue: vi.fn((v) => v?._text || v), verticalSpacing: vi.fn((n: number) => ({ text: `space-${n}` })), generateColumns: vi.fn((left, right) => ({ columns: [left, right] })), })); diff --git a/src/lib-public/generators/FA2/Adnotacje.ts b/src/lib-public/generators/FA2/Adnotacje.ts index 44839d8..91aefb4 100644 --- a/src/lib-public/generators/FA2/Adnotacje.ts +++ b/src/lib-public/generators/FA2/Adnotacje.ts @@ -5,6 +5,7 @@ import { formatText, generateColumns, getTable, + getValue, hasValue, verticalSpacing, } from '../../../shared/PDF-functions'; @@ -169,6 +170,19 @@ export function generateDostawy(noweSrodkiTransportu: NoweSrodkiTransportu): Con } else if (anyP22D) { value.push('Dostawa dotyczy statków powietrznych, o których mowa w art. 2 pkt 10 lit. c ustawy'); } + + const transportProperties = [ + getValue(item.P_22BMK), + getValue(item.P_22BMD), + getValue(item.P_22BK), + getValue(item.P_22BNR), + getValue(item.P_22BRP), + ].filter((prop) => !!prop); + + if (transportProperties.length) { + value.push(transportProperties.join(', ')); + } + if (item.DetailsString?._text) { value.push(item.DetailsString._text); } diff --git a/src/lib-public/generators/FA2/Platnosc.ts b/src/lib-public/generators/FA2/Platnosc.ts index 49af52e..30bea00 100644 --- a/src/lib-public/generators/FA2/Platnosc.ts +++ b/src/lib-public/generators/FA2/Platnosc.ts @@ -49,7 +49,7 @@ export function generatePlatnosc(platnosc: Platnosc | undefined): Content { if (platnosc.Zaplacono?._text === '1') { table.push(createLabelText('Informacja o płatności: ', 'Zapłacono')); - table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty)); + table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty, FormatTyp.Date)); } else if (platnosc.ZnacznikZaplatyCzesciowej?._text === '1') { table.push(createLabelText('Informacja o płatności: ', 'Zapłata częściowa')); } else { diff --git a/src/lib-public/generators/FA2/Podmiot2Podmiot2k.ts b/src/lib-public/generators/FA2/Podmiot2Podmiot2k.ts index c13eee8..4e3d48c 100644 --- a/src/lib-public/generators/FA2/Podmiot2Podmiot2k.ts +++ b/src/lib-public/generators/FA2/Podmiot2Podmiot2k.ts @@ -36,8 +36,12 @@ export function generatePodmiot2Podmiot2K(podmiot2: Podmiot2, podmiot2K: Podmiot columnGap: 20, }); } - firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); - secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + + if(podmiot2K.Adres?.AdresL1?._text) { + firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); + secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + } + if (podmiot2.AdresKoresp) { secondColumn.push( formatText('Adres do korespondencji', [FormatTyp.Label, FormatTyp.LabelMargin]), diff --git a/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.spec.ts b/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.spec.ts index daab1d6..eced80d 100644 --- a/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.spec.ts +++ b/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.spec.ts @@ -140,7 +140,7 @@ describe(generatePodsumowanieStawekPodatkuVat.name, () => { expect(summary[0].taxRateString).toBe('23% lub 22%'); expect(summary[1].taxRateString).toBe('8% lub 7%'); expect(summary[2].taxRateString).toBe('5%'); - expect(summary[3].taxRateString).toBe('4% lub 3% lub oo'); + expect(summary[3].taxRateString).toBe('4% lub 3%'); expect(summary[4].taxRateString).toBe(''); expect(summary[5].taxRateString).toBe('0% - krajowe'); expect(summary[6].taxRateString).toBe('0% - wdt'); @@ -148,6 +148,7 @@ describe(generatePodsumowanieStawekPodatkuVat.name, () => { expect(summary[8].taxRateString).toBe('zwolnione z opodatkowania'); expect(summary[9].taxRateString).toBe('np z wyłączeniem art. 100 ust 1 pkt 4 ustawy'); expect(summary[10].taxRateString).toBe('np na podstawie art. 100 ust. 1 pkt 4 ustawy'); + expect(summary[11].taxRateString).toBe('odwrotne obciążenie'); }); it('handles reverse charge and margin', () => { diff --git a/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.ts b/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.ts index 8e8934c..be9a72a 100644 --- a/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.ts +++ b/src/lib-public/generators/FA2/PodsumowanieStawekPodatkuVat.ts @@ -173,7 +173,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: (getNumberRounded(fa.P_13_4) + getNumberRounded(fa.P_14_4)).toFixed(2), tax: getNumberRounded(fa.P_14_4).toFixed(2), taxPLN: getNumberRounded(fa.P_14_4W).toFixed(2), - taxRateString: '4% lub 3% lub oo', + taxRateString: '4% lub 3%', }); no++; } @@ -217,8 +217,8 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { if (AnyP13_6_3Diff0) { summary.push({ no, - net: getNumberRounded(fa.P_13_6_2).toFixed(2), - gross: getNumberRounded(fa.P_13_6_2).toFixed(2), + net: getNumberRounded(fa.P_13_6_3).toFixed(2), + gross: getNumberRounded(fa.P_13_6_3).toFixed(2), tax: '0.00', taxPLN: '', taxRateString: '0% - eksport', diff --git a/src/lib-public/generators/FA2/Rabat.spec.ts b/src/lib-public/generators/FA2/Rabat.spec.ts index 7e1d93c..dc97fa7 100644 --- a/src/lib-public/generators/FA2/Rabat.spec.ts +++ b/src/lib-public/generators/FA2/Rabat.spec.ts @@ -82,7 +82,7 @@ describe(generateRabat.name, () => { expect(PDFFunctions.getContentTable).toHaveBeenCalledWith( expect.arrayContaining([ - expect.objectContaining({ name: 'NrWierszaFay', title: 'Lp.' }), + expect.objectContaining({ name: 'NrWierszaFa', title: 'Lp.' }), expect.objectContaining({ name: 'P_7', title: 'Nazwa towaru lub usługi' }), expect.objectContaining({ name: 'P_8B', title: 'Ilość' }), expect.objectContaining({ name: 'P_8A', title: 'Miara' }), diff --git a/src/lib-public/generators/FA2/Rabat.ts b/src/lib-public/generators/FA2/Rabat.ts index 65a963d..3843995 100644 --- a/src/lib-public/generators/FA2/Rabat.ts +++ b/src/lib-public/generators/FA2/Rabat.ts @@ -18,7 +18,7 @@ export function generateRabat(invoice: Fa): Content[] { const faRows: Record[] = getTable(invoice!.FaWiersz); const result: Content[] = []; const definedHeader: HeaderDefine[] = [ - { name: 'NrWierszaFay', title: 'Lp.', format: FormatTyp.Default }, + { name: 'NrWierszaFa', title: 'Lp.', format: FormatTyp.Default }, { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default }, { name: 'P_8B', title: 'Ilość', format: FormatTyp.Default }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default }, diff --git a/src/lib-public/generators/FA2/Szczegoly.spec.ts b/src/lib-public/generators/FA2/Szczegoly.spec.ts index 2225103..2a4bfe2 100644 --- a/src/lib-public/generators/FA2/Szczegoly.spec.ts +++ b/src/lib-public/generators/FA2/Szczegoly.spec.ts @@ -96,7 +96,11 @@ describe(generateSzczegoly.name, () => { generateSzczegoly(data); - expect(PDFFunctions.createLabelText).toHaveBeenCalledWith('Data otrzymania zapłaty: ', data.P_6); + expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( + 'Data otrzymania zapłaty: ', + data.P_6, + FormatTyp.Date + ); }); it('should use "Data otrzymania zapłaty" label for KOR_ZAL invoice', () => { @@ -107,7 +111,11 @@ describe(generateSzczegoly.name, () => { generateSzczegoly(data); - expect(PDFFunctions.createLabelText).toHaveBeenCalledWith('Data otrzymania zapłaty: ', data.P_6); + expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( + 'Data otrzymania zapłaty: ', + data.P_6, + FormatTyp.Date + ); }); it('should use "Data dokonania lub zakończenia dostawy" label for other invoice types', () => { @@ -120,7 +128,8 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( 'Data dokonania lub zakończenia dostawy towarów lub wykonania usługi: ', - data.P_6 + data.P_6, + FormatTyp.Date ); }); }); @@ -386,7 +395,8 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( 'Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', - mockFaVat.P_1 + mockFaVat.P_1, + FormatTyp.Date ); }); @@ -546,7 +556,7 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.getContentTable).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ - name: 'NrKSeFFaZaliczkowej', + name: 'NrFaZaliczkowej', title: 'Numery wcześniejszych faktur zaliczkowych', }), ]), diff --git a/src/lib-public/generators/FA2/Szczegoly.ts b/src/lib-public/generators/FA2/Szczegoly.ts index 508aecf..fab0d57 100644 --- a/src/lib-public/generators/FA2/Szczegoly.ts +++ b/src/lib-public/generators/FA2/Szczegoly.ts @@ -74,10 +74,14 @@ export function generateSzczegoly(faVat: Fa): Content[] { const tpLabel2: Content[] = []; const forColumns: Content[][] = [ - createLabelText('Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', faVat.P_1), + createLabelText( + 'Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', + faVat.P_1, + FormatTyp.Date + ), createLabelText('Miejsce wystawienia: ', faVat.P_1M), createLabelText('Okres, którego dotyczy rabat: ', faVat.OkresFaKorygowanej), - createLabelText(LabelP_6, faVat.P_6), + createLabelText(LabelP_6, faVat.P_6, FormatTyp.Date), P_6Scope, cenyLabel1, cenyLabel2, @@ -163,11 +167,22 @@ function generateFakturaZaliczkowa(fakturaZaliczkowaData: ObjectKeysOfFP[] | und return []; } const fakturaZaliczkowa = getTable(fakturaZaliczkowaData) as unknown as FA2FakturaZaliczkowaData[]; + const fakturaZaliczkowaMapped = fakturaZaliczkowa.map(item => { + const fp = + ( + 'NrFaZaliczkowej' in item && item.NrFaZaliczkowej + ) ? item.NrFaZaliczkowej : ('NrKSeFFaZaliczkowej' in item ? item.NrKSeFFaZaliczkowej : undefined ); + + return{ + ...item, + NrFaZaliczkowej : fp ?? { _text: ''}, + }; + }) const table: Content[] = []; const fakturaZaliczkowaHeader: HeaderDefine[] = [ { - name: 'NrKSeFFaZaliczkowej', + name: 'NrFaZaliczkowej', title: 'Numery wcześniejszych faktur zaliczkowych', format: FormatTyp.Default, }, @@ -175,7 +190,7 @@ function generateFakturaZaliczkowa(fakturaZaliczkowaData: ObjectKeysOfFP[] | und const tableFakturaZaliczkowa: TableWithFields = getContentTable<(typeof fakturaZaliczkowa)[0]>( fakturaZaliczkowaHeader, - fakturaZaliczkowa, + fakturaZaliczkowaMapped, 'auto', [0, 4, 0, 0] ); diff --git a/src/lib-public/generators/FA2/Wiersze.spec.ts b/src/lib-public/generators/FA2/Wiersze.spec.ts index 3db57e1..5ff17d8 100644 --- a/src/lib-public/generators/FA2/Wiersze.spec.ts +++ b/src/lib-public/generators/FA2/Wiersze.spec.ts @@ -13,6 +13,7 @@ vi.mock('../../../shared/PDF-functions', () => ({ getContentTable: vi.fn(), getTable: vi.fn(), getValue: vi.fn(), + getTStawkaPodatku: vi.fn() })); describe(generateWiersze.name, () => { @@ -27,6 +28,7 @@ describe(generateWiersze.name, () => { P_7: { _text: 'Product 1' }, P_9A: { _text: '100' }, P_8B: { _text: '2' }, + P_12: { _text: '23' }, }, ], KodWaluty: { _text: 'PLN' }, @@ -106,7 +108,7 @@ describe(generateWiersze.name, () => { }); it('should display "brutto" when P_11 is not in fieldsWithValue', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable).mockReturnValue({ content: { table: {} } as any, @@ -148,7 +150,7 @@ describe(generateWiersze.name, () => { }); it('should generate two tables when fieldsWithValue.length > 8', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ @@ -175,7 +177,7 @@ describe(generateWiersze.name, () => { }); it('should not add second table if it has only 1 field with value', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ diff --git a/src/lib-public/generators/FA2/Wiersze.ts b/src/lib-public/generators/FA2/Wiersze.ts index 85c991d..d10a9c1 100644 --- a/src/lib-public/generators/FA2/Wiersze.ts +++ b/src/lib-public/generators/FA2/Wiersze.ts @@ -6,6 +6,7 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; @@ -13,15 +14,19 @@ import { TRodzajFaktury } from '../../../shared/consts/const'; import { Fa, FP } from '../../types/fa2.types'; import FormatTyp, { Position } from '../../../shared/enums/common.enum'; import { TableWithFields } from '../../types/fa1-additional-types'; -import { shouldAddMarza } from '../common/Wiersze'; +import { addMarza } from '../common/Wiersze'; export function generateWiersze(faVat: Fa): Content { const table: Content[] = []; const rodzajFaktury: string | number | undefined = getValue(faVat.RodzajFaktury); - const isP_PMarzy: boolean = Boolean(Number(getValue(faVat.Adnotacje?.PMarzy?.P_PMarzy))); + const isP_PMarzy = Boolean(Number(getValue(faVat.Adnotacje?.PMarzy?.P_PMarzy))); const faWiersze: Record[] = getTable(faVat.FaWiersz).map((wiersz) => { - const marza: Record = shouldAddMarza(rodzajFaktury, isP_PMarzy, wiersz)!; - return marza ? { ...wiersz, ...marza } : wiersz; + const marza: Record = addMarza(rodzajFaktury, isP_PMarzy, wiersz)!; + + if (getValue(wiersz.P_12)) { + wiersz.P_12._text = getTStawkaPodatku(getValue(wiersz.P_12) as string, 2); + } + return { ...wiersz, ...marza }; }); const definedHeaderLp: HeaderDefine[] = [ @@ -32,7 +37,7 @@ export function generateWiersze(faVat: Fa): Content { { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default, width: '*' }, { name: 'P_9A', title: 'Cena jedn. netto', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_9B', title: 'Cena jedn. brutto', format: FormatTyp.Currency, width: 'auto' }, - { name: 'P_8B', title: 'Ilość', format: FormatTyp.Right, width: 'auto' }, + { name: 'P_8B', title: 'Ilość', format: FormatTyp.Number, width: 'auto' }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default, width: 'auto' }, { name: 'P_10', title: 'Rabat', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_12', title: 'Stawka podatku', format: FormatTyp.Default, width: 'auto' }, diff --git a/src/lib-public/generators/FA2/Zamowienia.spec.ts b/src/lib-public/generators/FA2/Zamowienia.spec.ts index cc7a98d..048363c 100644 --- a/src/lib-public/generators/FA2/Zamowienia.spec.ts +++ b/src/lib-public/generators/FA2/Zamowienia.spec.ts @@ -12,6 +12,8 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn(), getContentTable: vi.fn(), getTable: vi.fn(), + getValue: vi.fn(), + getTStawkaPodatku: vi.fn() })); describe(generateZamowienie.name, () => { diff --git a/src/lib-public/generators/FA2/Zamowienie.ts b/src/lib-public/generators/FA2/Zamowienie.ts index 5b0779b..11fc36a 100644 --- a/src/lib-public/generators/FA2/Zamowienie.ts +++ b/src/lib-public/generators/FA2/Zamowienie.ts @@ -5,6 +5,8 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, + getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; import { TRodzajFaktury } from '../../../shared/consts/const'; @@ -29,6 +31,9 @@ export function generateZamowienie( if (!el.NrWierszaZam._text) { el.NrWierszaZam._text = (index + 1).toString(); } + if (getValue(el.P_12)) { + el.P_12._text = getTStawkaPodatku(getValue(el.P_12) as string, 2); + } return el; }); const definedHeaderLp: HeaderDefine[] = [ @@ -56,6 +61,7 @@ export function generateZamowienie( { name: 'P_11NettoZ', title: 'Wartość sprzedaży netto', format: formatAbs, width: 'auto' }, { name: 'P_11VatZ', title: 'Kwota podatku', format: formatAbs, width: 'auto' }, ]; + const definedHeader2: HeaderDefine[] = [ { name: 'UU_IDZ', title: 'Numer umowy / Zamów.', format: FormatTyp.Default, width: 'auto' }, { name: 'GTINZ', title: 'GTIN', format: FormatTyp.Default, width: 'auto' }, diff --git a/src/lib-public/generators/FA3/Adnotacje.spec.ts b/src/lib-public/generators/FA3/Adnotacje.spec.ts index fbb2755..8a9b1b1 100644 --- a/src/lib-public/generators/FA3/Adnotacje.spec.ts +++ b/src/lib-public/generators/FA3/Adnotacje.spec.ts @@ -8,6 +8,7 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn((text: string) => ({ text })), getTable: vi.fn(() => []), hasValue: vi.fn((v) => !!v?._text), + getValue: vi.fn((v) => v?._text || v), verticalSpacing: vi.fn((n: number) => ({ text: `space-${n}` })), generateColumns: vi.fn((left, right) => ({ columns: [left, right] })), })); diff --git a/src/lib-public/generators/FA3/Adnotacje.ts b/src/lib-public/generators/FA3/Adnotacje.ts index 92ce9f5..ca435dc 100644 --- a/src/lib-public/generators/FA3/Adnotacje.ts +++ b/src/lib-public/generators/FA3/Adnotacje.ts @@ -5,6 +5,7 @@ import { formatText, generateColumns, getTable, + getValue, hasValue, verticalSpacing, } from '../../../shared/PDF-functions'; @@ -199,6 +200,19 @@ export function generateDostawy(noweSrodkiTransportu: NoweSrodkiTransportu): Con } else if (anyP22D) { value.push('Dostawa dotyczy statków powietrznych, o których mowa w art. 2 pkt 10 lit. c ustawy'); } + + const transportProperties = [ + getValue(item.P_22BMK), + getValue(item.P_22BMD), + getValue(item.P_22BK), + getValue(item.P_22BNR), + getValue(item.P_22BRP), + ].filter((prop) => !!prop); + + if (transportProperties.length) { + value.push(transportProperties.join(', ')); + } + if (item.DetailsString?._text) { value.push(item.DetailsString._text); } diff --git a/src/lib-public/generators/FA3/Platnosc.ts b/src/lib-public/generators/FA3/Platnosc.ts index 71e63ed..a001b49 100644 --- a/src/lib-public/generators/FA3/Platnosc.ts +++ b/src/lib-public/generators/FA3/Platnosc.ts @@ -49,7 +49,7 @@ export function generatePlatnosc(platnosc: Platnosc | undefined): Content { // TODO: Add to FA2 and FA1? (KSEF20-15289) if (getValue(platnosc.Zaplacono) === '1') { table.push(createLabelText('Informacja o płatności: ', 'Zapłacono')); - table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty)); + table.push(createLabelText('Data zapłaty: ', platnosc.DataZaplaty, FormatTyp.Date)); } else if ( getValue(platnosc.ZnacznikZaplatyCzesciowej) === '1' || getValue(platnosc.ZnacznikZaplatyCzesciowej) === '2' diff --git a/src/lib-public/generators/FA3/Podmiot2Podmiot2k.ts b/src/lib-public/generators/FA3/Podmiot2Podmiot2k.ts index 49c58bf..0b5c019 100644 --- a/src/lib-public/generators/FA3/Podmiot2Podmiot2k.ts +++ b/src/lib-public/generators/FA3/Podmiot2Podmiot2k.ts @@ -38,8 +38,11 @@ export function generatePodmiot2Podmiot2K(podmiot2: Podmiot2, podmiot2K: Podmiot columnGap: 20, }); } - firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); - secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + + if(podmiot2K.Adres?.AdresL1?._text){ + firstColumn = generateCorrectedContent(podmiot2K, 'Treść korygowana'); + secondColumn = generateCorrectedContent(podmiot2, 'Treść korygująca'); + } if (podmiot2.AdresKoresp) { secondColumn.push( diff --git a/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.spec.ts b/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.spec.ts index c028465..7aaf037 100644 --- a/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.spec.ts +++ b/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.spec.ts @@ -139,14 +139,15 @@ describe(generatePodsumowanieStawekPodatkuVat.name, () => { expect(summary[0].taxRateString).toBe('23% lub 22%'); expect(summary[1].taxRateString).toBe('8% lub 7%'); expect(summary[2].taxRateString).toBe('5%'); - expect(summary[3].taxRateString).toBe('4% lub 3% lub oo'); + expect(summary[3].taxRateString).toBe('4% lub 3%'); expect(summary[4].taxRateString).toBe(''); - expect(summary[5].taxRateString).toBe('0% - krajowe'); - expect(summary[6].taxRateString).toBe('0% - wdt'); - expect(summary[7].taxRateString).toBe('0% - eksport'); - expect(summary[8].taxRateString).toBe('zwolnione z opodatkowania'); + expect(summary[5].taxRateString).toBe('0% w przypadku sprzedaży towarów i świadczenia usług na terytorium kraju (z wyłączeniem WDT i eksportu)'); + expect(summary[6].taxRateString).toBe('0% w przypadku wewnątrzwspólnotowej dostawy towarów (WDT)'); + expect(summary[7].taxRateString).toBe('0% w przypadku eksportu towarów'); + expect(summary[8].taxRateString).toBe('zwolnione od podatku'); expect(summary[9].taxRateString).toBe('np z wyłączeniem art. 100 ust 1 pkt 4 ustawy'); expect(summary[10].taxRateString).toBe('np na podstawie art. 100 ust. 1 pkt 4 ustawy'); + expect(summary[11].taxRateString).toBe('odwrotne obciążenie'); }); it('handles reverse charge and margin', () => { diff --git a/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.ts b/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.ts index 8199eb3..e14e42f 100644 --- a/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.ts +++ b/src/lib-public/generators/FA3/PodsumowanieStawekPodatkuVat.ts @@ -177,7 +177,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: (getNumberRounded(fa.P_13_4) + getNumberRounded(fa.P_14_4)).toFixed(2), tax: getNumberRounded(fa.P_14_4).toFixed(2), taxPLN: getNumberRounded(fa.P_14_4W).toFixed(2), - taxRateString: '4% lub 3% lub oo', + taxRateString: '4% lub 3%', }); no++; } @@ -201,7 +201,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: getNumberRounded(fa.P_13_6_1).toFixed(2), tax: '0.00', taxPLN: '', - taxRateString: '0% - krajowe', + taxRateString: '0% w przypadku sprzedaży towarów i świadczenia usług na terytorium kraju (z wyłączeniem WDT i eksportu)', }); no++; } @@ -213,7 +213,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: getNumberRounded(fa.P_13_6_2).toFixed(2), tax: '0.00', taxPLN: '', - taxRateString: '0% - wdt', + taxRateString: '0% w przypadku wewnątrzwspólnotowej dostawy towarów (WDT)', }); no++; } @@ -221,11 +221,11 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { if (AnyP13_6_3Diff0) { summary.push({ no, - net: getNumberRounded(fa.P_13_6_2).toFixed(2), - gross: getNumberRounded(fa.P_13_6_2).toFixed(2), + net: getNumberRounded(fa.P_13_6_3).toFixed(2), + gross: getNumberRounded(fa.P_13_6_3).toFixed(2), tax: '0.00', taxPLN: '', - taxRateString: '0% - eksport', + taxRateString: '0% w przypadku eksportu towarów', }); no++; } @@ -237,7 +237,7 @@ export function getSummaryTaxRate(fa: Fa): TaxSummaryTypes[] { gross: getNumberRounded(fa.P_13_7).toFixed(2), tax: '0.00', taxPLN: '', - taxRateString: 'zwolnione z opodatkowania', + taxRateString: 'zwolnione od podatku', }); no++; } diff --git a/src/lib-public/generators/FA3/Rabat.spec.ts b/src/lib-public/generators/FA3/Rabat.spec.ts index f2f4bbe..698851f 100644 --- a/src/lib-public/generators/FA3/Rabat.spec.ts +++ b/src/lib-public/generators/FA3/Rabat.spec.ts @@ -83,7 +83,7 @@ describe(generateRabat.name, () => { expect(PDFFunctions.getContentTable).toHaveBeenCalledWith( expect.arrayContaining([ - expect.objectContaining({ name: 'NrWierszaFay', title: 'Lp.' }), + expect.objectContaining({ name: 'NrWierszaFa', title: 'Lp.' }), expect.objectContaining({ name: 'P_7', title: 'Nazwa towaru lub usługi' }), expect.objectContaining({ name: 'P_8B', title: 'Ilość' }), expect.objectContaining({ name: 'P_8A', title: 'Miara' }), diff --git a/src/lib-public/generators/FA3/Rabat.ts b/src/lib-public/generators/FA3/Rabat.ts index 2e1be76..89e00fd 100644 --- a/src/lib-public/generators/FA3/Rabat.ts +++ b/src/lib-public/generators/FA3/Rabat.ts @@ -16,12 +16,13 @@ export function generateRabat(invoice: Fa): Content[] { const faRows = getTable(invoice!.FaWiersz); const result: Content[] = []; const definedHeader: HeaderDefine[] = [ - { name: 'NrWierszaFay', title: 'Lp.', format: FormatTyp.Default }, + { name: 'NrWierszaFa', title: 'Lp.', format: FormatTyp.Default }, { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default }, { name: 'P_8B', title: 'Ilość', format: FormatTyp.Default }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default }, ]; const tabRabat = getContentTable<(typeof faRows)[0]>(definedHeader, faRows, '*'); + const isNrWierszaFa = tabRabat.fieldsWithValue.includes('NrWierszaFa'); result.push( diff --git a/src/lib-public/generators/FA3/Szczegoly.spec.ts b/src/lib-public/generators/FA3/Szczegoly.spec.ts index 9776d11..00957b9 100644 --- a/src/lib-public/generators/FA3/Szczegoly.spec.ts +++ b/src/lib-public/generators/FA3/Szczegoly.spec.ts @@ -96,7 +96,11 @@ describe(generateSzczegoly.name, () => { generateSzczegoly(data); - expect(PDFFunctions.createLabelText).toHaveBeenCalledWith('Data otrzymania zapłaty: ', data.P_6); + expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( + 'Data otrzymania zapłaty: ', + data.P_6, + FormatTyp.Date + ); }); it('should use "Data otrzymania zapłaty" label for KOR_ZAL invoice', () => { @@ -107,7 +111,11 @@ describe(generateSzczegoly.name, () => { generateSzczegoly(data); - expect(PDFFunctions.createLabelText).toHaveBeenCalledWith('Data otrzymania zapłaty: ', data.P_6); + expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( + 'Data otrzymania zapłaty: ', + data.P_6, + FormatTyp.Date + ); }); it('should use "Data dokonania lub zakończenia dostawy" label for other invoice types', () => { @@ -120,7 +128,8 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( 'Data dokonania lub zakończenia dostawy towarów lub wykonania usługi: ', - data.P_6 + data.P_6, + FormatTyp.Date ); }); }); @@ -386,7 +395,8 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.createLabelText).toHaveBeenCalledWith( 'Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', - mockFaVat.P_1 + mockFaVat.P_1, + FormatTyp.Date ); }); @@ -546,7 +556,7 @@ describe(generateSzczegoly.name, () => { expect(PDFFunctions.getContentTable).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ - name: 'NrKSeFFaZaliczkowej', + name: 'NrFaZaliczkowej', title: 'Numery wcześniejszych faktur zaliczkowych', }), ]), diff --git a/src/lib-public/generators/FA3/Szczegoly.ts b/src/lib-public/generators/FA3/Szczegoly.ts index 9e81041..e03c6ed 100644 --- a/src/lib-public/generators/FA3/Szczegoly.ts +++ b/src/lib-public/generators/FA3/Szczegoly.ts @@ -71,10 +71,14 @@ export function generateSzczegoly(faVat: Fa): Content[] { const tpLabel2: Content[] = []; const forColumns = [ - createLabelText('Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', faVat.P_1), + createLabelText( + 'Data wystawienia, z zastrzeżeniem art. 106na ust. 1 ustawy: ', + faVat.P_1, + FormatTyp.Date + ), createLabelText('Miejsce wystawienia: ', faVat.P_1M), createLabelText('Okres, którego dotyczy rabat: ', faVat.OkresFaKorygowanej), - createLabelText(LabelP_6, faVat.P_6), + createLabelText(LabelP_6, faVat.P_6, FormatTyp.Date), P_6Scope, cenyLabel1, cenyLabel2, @@ -160,11 +164,22 @@ function generateFakturaZaliczkowa(fakturaZaliczkowaData: ObjectKeysOfFP[] | und return []; } const fakturaZaliczkowa = getTable(fakturaZaliczkowaData) as unknown as FA3FakturaZaliczkowaData[]; + const fakturaZaliczkowaMapped = fakturaZaliczkowa.map(item => { + const fp = + ( + 'NrFaZaliczkowej' in item && item.NrFaZaliczkowej + ) ? item.NrFaZaliczkowej : ('NrKSeFFaZaliczkowej' in item ? item.NrKSeFFaZaliczkowej : undefined ); + + return{ + ...item, + NrFaZaliczkowej : fp ?? { _text: ''}, + }; + }) const table: Content[] = []; const fakturaZaliczkowaHeader: HeaderDefine[] = [ { - name: 'NrKSeFFaZaliczkowej', + name: 'NrFaZaliczkowej', title: 'Numery wcześniejszych faktur zaliczkowych', format: FormatTyp.Default, }, @@ -172,7 +187,7 @@ function generateFakturaZaliczkowa(fakturaZaliczkowaData: ObjectKeysOfFP[] | und const tableFakturaZaliczkowa = getContentTable<(typeof fakturaZaliczkowa)[0]>( fakturaZaliczkowaHeader, - fakturaZaliczkowa, + fakturaZaliczkowaMapped, 'auto', [0, 4, 0, 0] ); diff --git a/src/lib-public/generators/FA3/Wiersze.spec.ts b/src/lib-public/generators/FA3/Wiersze.spec.ts index 9c9085c..702407a 100644 --- a/src/lib-public/generators/FA3/Wiersze.spec.ts +++ b/src/lib-public/generators/FA3/Wiersze.spec.ts @@ -12,7 +12,8 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn(), getContentTable: vi.fn(), getTable: vi.fn(), - getValue: vi.fn(), + getValue: vi.fn((v) => v?._text || v), + getTStawkaPodatku: vi.fn() })); describe(generateWiersze.name, () => { @@ -27,6 +28,7 @@ describe(generateWiersze.name, () => { P_7: { _text: 'Product 1' }, P_9A: { _text: '100' }, P_8B: { _text: '2' }, + P_12: { _text: '23' }, }, ], KodWaluty: { _text: 'PLN' }, @@ -59,6 +61,8 @@ describe(generateWiersze.name, () => { vi.mocked(PDFFunctions.createHeader).mockReturnValue(['Header'] as any); vi.mocked(PDFFunctions.createSection).mockReturnValue({ section: 'content' } as any); vi.mocked(PDFFunctions.createLabelTextArray).mockReturnValue(['Label', 'Value'] as any); + vi.mocked(PDFFunctions.getTStawkaPodatku).mockReturnValue('0' as any); + }; describe('when no invoice lines exist', () => { @@ -106,11 +110,11 @@ describe(generateWiersze.name, () => { }); it('should display "brutto" when P_11 is not in fieldsWithValue', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable).mockReturnValue({ content: { table: {} } as any, - fieldsWithValue: ['P_11A', 'P_7'], + fieldsWithValue: ['P_11A', 'P_7', 'P12'], }); vi.mocked(PDFFunctions.getValue).mockReturnValue('0'); @@ -148,7 +152,7 @@ describe(generateWiersze.name, () => { }); it('should generate two tables when fieldsWithValue.length > 8', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ @@ -175,7 +179,7 @@ describe(generateWiersze.name, () => { }); it('should not add second table if it has only 1 field with value', () => { - vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' } }] as any); + vi.mocked(PDFFunctions.getTable).mockReturnValue([{ NrWierszaFa: { _text: '1' }, P_12: {_text: '23'} }] as any); vi.mocked(PDFFunctions.getContentTable) .mockReturnValueOnce({ diff --git a/src/lib-public/generators/FA3/Wiersze.ts b/src/lib-public/generators/FA3/Wiersze.ts index 87e5942..d5ef1da 100644 --- a/src/lib-public/generators/FA3/Wiersze.ts +++ b/src/lib-public/generators/FA3/Wiersze.ts @@ -6,22 +6,27 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; import { TRodzajFaktury } from '../../../shared/consts/const'; import { Fa, FP } from '../../types/fa3.types'; import FormatTyp, { Position } from '../../../shared/enums/common.enum'; -import { shouldAddMarza } from '../common/Wiersze'; +import { addMarza } from '../common/Wiersze'; export function generateWiersze(faVat: Fa): Content { const table: Content[] = []; const rodzajFaktury: string | number | undefined = getValue(faVat.RodzajFaktury); - const isP_PMarzy: boolean = Boolean(Number(getValue(faVat.Adnotacje?.PMarzy?.P_PMarzy))); + const isP_PMarzy = Boolean(Number(getValue(faVat.Adnotacje?.PMarzy?.P_PMarzy))); const faWiersze: Record[] = getTable(faVat.FaWiersz).map( (wiersz: Record): Record => { - const marza: Record = shouldAddMarza(rodzajFaktury, isP_PMarzy, wiersz)!; - return marza ? { ...wiersz, ...marza } : wiersz; + const marza: Record = addMarza(rodzajFaktury, isP_PMarzy, wiersz)!; + + if (getValue(wiersz.P_12)) { + wiersz.P_12._text = getTStawkaPodatku(getValue(wiersz.P_12) as string, 3); + } + return { ...wiersz, ...marza }; } ); const definedHeaderLp: HeaderDefine[] = [ @@ -32,7 +37,7 @@ export function generateWiersze(faVat: Fa): Content { { name: 'P_7', title: 'Nazwa towaru lub usługi', format: FormatTyp.Default, width: '*' }, { name: 'P_9A', title: 'Cena jedn. netto', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_9B', title: 'Cena jedn. brutto', format: FormatTyp.Currency, width: 'auto' }, - { name: 'P_8B', title: 'Ilość', format: FormatTyp.Right, width: 'auto' }, + { name: 'P_8B', title: 'Ilość', format: FormatTyp.Number, width: 'auto' }, { name: 'P_8A', title: 'Miara', format: FormatTyp.Default, width: 'auto' }, { name: 'P_10', title: 'Rabat', format: FormatTyp.Currency, width: 'auto' }, { name: 'P_12', title: 'Stawka podatku', format: FormatTyp.Default, width: 'auto' }, diff --git a/src/lib-public/generators/FA3/Zamowienia.spec.ts b/src/lib-public/generators/FA3/Zamowienia.spec.ts index 71a13b8..7e8e7cf 100644 --- a/src/lib-public/generators/FA3/Zamowienia.spec.ts +++ b/src/lib-public/generators/FA3/Zamowienia.spec.ts @@ -12,6 +12,8 @@ vi.mock('../../../shared/PDF-functions', () => ({ formatText: vi.fn(), getContentTable: vi.fn(), getTable: vi.fn(), + getValue: vi.fn(), + getTStawkaPodatku: vi.fn() })); describe(generateZamowienie.name, () => { diff --git a/src/lib-public/generators/FA3/Zamowienie.ts b/src/lib-public/generators/FA3/Zamowienie.ts index dd81d28..bfe13ce 100644 --- a/src/lib-public/generators/FA3/Zamowienie.ts +++ b/src/lib-public/generators/FA3/Zamowienie.ts @@ -5,6 +5,8 @@ import { formatText, getContentTable, getTable, + getTStawkaPodatku, + getValue, } from '../../../shared/PDF-functions'; import { HeaderDefine } from '../../../shared/types/pdf-types'; import { TRodzajFaktury } from '../../../shared/consts/const'; @@ -28,6 +30,9 @@ export function generateZamowienie( if (!el.NrWierszaZam._text) { el.NrWierszaZam._text = (index + 1).toString(); } + if (getValue(el.P_12Z)) { + el.P_12Z._text = getTStawkaPodatku(getValue(el.P_12Z) as string, 3); + } return el; }); const definedHeaderLp: HeaderDefine[] = [ diff --git a/src/lib-public/generators/UPO4_3/Dokumenty.spec.ts b/src/lib-public/generators/UPO4_3/Dokumenty.spec.ts new file mode 100644 index 0000000..1b9eb4e --- /dev/null +++ b/src/lib-public/generators/UPO4_3/Dokumenty.spec.ts @@ -0,0 +1,123 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import * as PDFFunctions from '../../../shared/PDF-functions'; +import FormatTyp from '../../../shared/enums/common.enum'; +import { Potwierdzenie } from '../../types/upo-v4_3.types'; +import { generateDokumentUPO } from './Dokumenty'; + +vi.mock('../../../shared/PDF-functions', () => ({ + formatText: vi.fn(), + generateLine: vi.fn(), + getContentTable: vi.fn(), + getTable: vi.fn(), + getValue: vi.fn(), + hasValue: vi.fn(), + verticalSpacing: vi.fn(), +})); + +describe(generateDokumentUPO.name, () => { + let mockPotwierdzenie: Potwierdzenie; + + beforeEach(() => { + vi.clearAllMocks(); + + mockPotwierdzenie = { + NumerReferencyjnySesji: { _text: 'NR123' }, + OpisPotwierdzenia: { + Strona: { _text: '1' }, + LiczbaStron: { _text: '2' }, + ZakresDokumentowOd: { _text: 'FA001' }, + ZakresDokumentowDo: { _text: 'FA002' }, + CalkowitaLiczbaDokumentow: { _text: '2' }, + }, + Uwierzytelnienie: { + IdKontekstu: { + NIP: { _text: '1234567890' }, + }, + SkrotDokumentuUwierzytelniajacego: { _text: 'ABC123' }, + }, + NazwaStrukturyLogicznej: { _text: 'XSD' }, + KodFormularza: { _text: 'K123' }, + Dokument: [ + { + NumerKSeFDokumentu: 'D001', + NumerFaktury: 'F001', + NipSprzedawcy: '123', + DataWystawieniaFaktury: '2024-01-01', + DataPrzeslaniaDokumentu: '2024-01-02', + DataNadaniaNumeruKSeF: '2024-01-03', + SkrotDokumentu: 'XYZ', + }, + ], + } as any; + + vi.mocked(PDFFunctions.getTable).mockReturnValue(mockPotwierdzenie.Dokument as any); + vi.mocked(PDFFunctions.hasValue).mockReturnValue(true); + vi.mocked(PDFFunctions.formatText).mockImplementation((text) => text as any); + vi.mocked(PDFFunctions.generateLine).mockReturnValue('line' as any); + vi.mocked(PDFFunctions.verticalSpacing).mockImplementation((val) => `space${val}` as any); + vi.mocked(PDFFunctions.getContentTable).mockReturnValue({ + content: 'tableContent', + fieldsWithValue: [], + } as any); + vi.mocked(PDFFunctions.getValue).mockImplementation((val: any) => val?._text); + }); + + it('should generate basic UPO structure', () => { + const result = generateDokumentUPO(mockPotwierdzenie); + + expect(result[0]).toBe('space4'); + expect(result[1]).toBe('line'); + expect(result[2]).toBe('space8'); + expect(result[3]).toBe('Urzędowe poświadczenie odbioru dokumentu elektronicznego KSeF'); + expect(result[4]).toBe('space8'); + }); + + it('should include all UPO fields when hasValue returns true', () => { + generateDokumentUPO(mockPotwierdzenie); + + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Numer referencyjny sesji: ', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith('Strona dokumentu UPO: ', FormatTyp.GrayBoldTitle); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Całkowita liczba stron dokumentu UPO: ', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith('Zakres dokumentów od: ', FormatTyp.GrayBoldTitle); + expect(PDFFunctions.formatText).toHaveBeenCalledWith('Zakres dokumentów do: ', FormatTyp.GrayBoldTitle); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Całkowita liczba dokumentów: ', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith('Typ kontekstu: ', FormatTyp.GrayBoldTitle); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Identyfikator kontekstu uwierzytelnienia: ', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Skrót dokumentu uwierzytelniającego: ', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Nazwa pliku XSD struktury logicznej dotycząca przesłanego dokumentu:', + FormatTyp.GrayBoldTitle + ); + expect(PDFFunctions.formatText).toHaveBeenCalledWith( + 'Kod formularza przedłożonego dokumentu elektronicznego:', + FormatTyp.GrayBoldTitle + ); + }); + + it('should not add document table if getContentTable.content is null', () => { + vi.mocked(PDFFunctions.getContentTable).mockReturnValue({ content: null, fieldsWithValue: [] }); + const result = generateDokumentUPO(mockPotwierdzenie); + + expect(result).not.toContain('null'); + }); + + it('should call getTable with Dokument', () => { + generateDokumentUPO(mockPotwierdzenie); + expect(PDFFunctions.getTable).toHaveBeenCalledWith(mockPotwierdzenie.Dokument); + }); +}); diff --git a/src/lib-public/generators/UPO4_3/Dokumenty.ts b/src/lib-public/generators/UPO4_3/Dokumenty.ts new file mode 100644 index 0000000..eceec81 --- /dev/null +++ b/src/lib-public/generators/UPO4_3/Dokumenty.ts @@ -0,0 +1,183 @@ +import { Content } from 'pdfmake/interfaces'; +import { + formatText, + generateLine, + getContentTable, + getTable, + getValue, + hasValue, + verticalSpacing, +} from '../../../shared/PDF-functions'; +import { HeaderDefine } from '../../../shared/types/pdf-types'; +import FormatTyp from '../../../shared/enums/common.enum'; +import { FormContentState } from '../../../shared/types/additional-data.types'; +import { DEFAULT_TABLE_LAYOUT } from '../../../shared/consts/const'; +import { Dokument, IDKontekstu, Potwierdzenie } from '../../types/upo-v4_3.types'; + +export function generateDokumentUPO(potwierdzenie: Potwierdzenie): Content[] { + const dokumenty: Dokument[] = getTable(potwierdzenie.Dokument); + + const result: Content[] = []; + const table: Content[] = []; + + result.push(verticalSpacing(4)); + result.push(generateLine()); + result.push(verticalSpacing(8)); + result.push( + formatText('Urzędowe poświadczenie odbioru dokumentu elektronicznego KSeF', FormatTyp.HeaderPosition) + ); + result.push(verticalSpacing(8)); + if (hasValue(potwierdzenie.NumerReferencyjnySesji)) { + table.push([ + formatText('Numer referencyjny sesji: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.NumerReferencyjnySesji?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.OpisPotwierdzenia?.Strona)) { + table.push([ + formatText('Strona dokumentu UPO: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.OpisPotwierdzenia?.Strona?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.OpisPotwierdzenia?.LiczbaStron)) { + table.push([ + formatText('Całkowita liczba stron dokumentu UPO: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.OpisPotwierdzenia?.LiczbaStron?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.OpisPotwierdzenia?.ZakresDokumentowOd)) { + table.push([ + formatText('Zakres dokumentów od: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.OpisPotwierdzenia?.ZakresDokumentowOd?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.OpisPotwierdzenia?.ZakresDokumentowDo)) { + table.push([ + formatText('Zakres dokumentów do: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.OpisPotwierdzenia?.ZakresDokumentowDo?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.OpisPotwierdzenia?.CalkowitaLiczbaDokumentow)) { + table.push([ + formatText('Całkowita liczba dokumentów: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.OpisPotwierdzenia?.CalkowitaLiczbaDokumentow?._text, FormatTyp.Default), + ]); + } + const idKontekstu: IDKontekstu | undefined = potwierdzenie?.Uwierzytelnienie?.IdKontekstu; + + if (idKontekstu) { + let typKontekstu = ''; + let id: string | number | undefined; + + if (hasValue(idKontekstu.IdDostawcyUslugPeppol)) { + typKontekstu = 'Identyfikator Peppol'; + id = getValue(idKontekstu.IdDostawcyUslugPeppol); + } + + if (hasValue(idKontekstu.Nip)) { + typKontekstu = 'NIP'; + id = getValue(idKontekstu.Nip); + } + + if (hasValue(idKontekstu.IdWewnetrzny)) { + typKontekstu = 'Identyfikator wewnętrzny'; + id = getValue(idKontekstu.IdWewnetrzny); + } + + if (hasValue(idKontekstu.IdZlozonyVatUE)) { + typKontekstu = 'Identyfikator złożony'; + id = getValue(idKontekstu.IdZlozonyVatUE); + } + table.push([ + formatText('Typ kontekstu: ', FormatTyp.GrayBoldTitle), + formatText(typKontekstu, FormatTyp.Default), + ]); + table.push([ + formatText('Identyfikator kontekstu uwierzytelnienia: ', FormatTyp.GrayBoldTitle), + formatText(id, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.Uwierzytelnienie?.SkrotDokumentuUwierzytelniajacego)) { + table.push([ + formatText('Skrót dokumentu uwierzytelniającego: ', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.Uwierzytelnienie?.SkrotDokumentuUwierzytelniajacego?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.NazwaStrukturyLogicznej)) { + table.push([ + formatText( + 'Nazwa pliku XSD struktury logicznej dotycząca przesłanego dokumentu:', + FormatTyp.GrayBoldTitle + ), + formatText(potwierdzenie.NazwaStrukturyLogicznej?._text, FormatTyp.Default), + ]); + } + if (hasValue(potwierdzenie.KodFormularza)) { + table.push([ + formatText('Kod formularza przedłożonego dokumentu elektronicznego:', FormatTyp.GrayBoldTitle), + formatText(potwierdzenie.KodFormularza?._text, FormatTyp.Default), + ]); + } + result.push([ + { + unbreakable: true, + table: { + body: table, + widths: ['auto', '*'], + }, + layout: DEFAULT_TABLE_LAYOUT, + } as Content, + ]); + result.push(verticalSpacing(8)); + const definedHeader: HeaderDefine[] = [ + { name: 'lp', title: 'Lp.', format: FormatTyp.Default }, + { + name: 'NumerKSeFDokumentu', + title: 'Numer identyfikujący fakturę w KSeF', + format: FormatTyp.Default, + }, + { name: 'NumerFaktury', title: 'Numer faktury', format: FormatTyp.Default }, + { name: 'NipSprzedawcy', title: 'NIP Sprzedawcy', format: FormatTyp.Default }, + { + name: 'DataWystawieniaFaktury', + title: 'Data wystawienia faktury', + format: FormatTyp.Date, + }, + { + name: 'DataPrzeslaniaDokumentu', + title: 'Data przesłania do KSeF', + format: FormatTyp.DateTime, + }, + { + name: 'DataNadaniaNumeruKSeF', + title: 'Data nadania numeru KSeF', + format: FormatTyp.DateTime, + }, + { + name: 'SkrotDokumentu', + title: 'Wartość funkcji skrótu złożonego dokumentu', + format: FormatTyp.Default, + }, + { + name: 'TrybWysylki', + title: 'Tryb wysyłki', + format: FormatTyp.Default, + width: '*', + }, + ]; + const documentData: Dokument[] = + dokumenty.map((doc: Dokument, index: number): Dokument => { + return { ...doc, lp: index + 1 }; + }) ?? []; + + const tabDocument: FormContentState = getContentTable<(typeof documentData)[0]>( + definedHeader, + documentData, + 'auto' + ); + + if (tabDocument.content) { + result.push(tabDocument.content); + } + return result; +} diff --git a/src/lib-public/generators/UPO4_3/Naglowek.ts b/src/lib-public/generators/UPO4_3/Naglowek.ts new file mode 100644 index 0000000..6d8d9cc --- /dev/null +++ b/src/lib-public/generators/UPO4_3/Naglowek.ts @@ -0,0 +1,34 @@ +import { Content } from 'pdfmake/interfaces'; +import { Potwierdzenie } from '../../types/upo-v4_3.types'; +import { createLabelText, generateTwoColumns } from '../../../shared/PDF-functions'; +import { Position } from '../../../shared/enums/common.enum'; + +export function generateNaglowekUPO(potwierdzenie: Potwierdzenie): Content[] { + return [ + generateTwoColumns( + { + text: [ + { text: 'Krajowy System ', fontSize: 18 }, + { text: 'e', color: 'red', bold: true, fontSize: 18 }, + { text: '-Faktur', bold: true, fontSize: 18 }, + ], + }, + [ + { + text: createLabelText( + 'Nazwa pełna podmiotu, któremu doręczono dokument elektroniczny: ', + potwierdzenie!.NazwaPodmiotuPrzyjmujacego + ), + alignment: Position.RIGHT, + }, + { + text: createLabelText( + 'Informacja o dokumencie: ', + 'Dokument został zarejestrowany w systemie teleinformatycznym Ministerstwa Finansów' + ), + alignment: Position.RIGHT, + }, + ] + ), + ]; +} diff --git a/src/lib-public/generators/common/Stopka.ts b/src/lib-public/generators/common/Stopka.ts index 608e2bf..52f648d 100644 --- a/src/lib-public/generators/common/Stopka.ts +++ b/src/lib-public/generators/common/Stopka.ts @@ -46,7 +46,7 @@ export function generateStopka( createSection( [ { - stack: createLabelText('Wytworzona w:', naglowek?.SystemInfo), + stack: createLabelText('Wytworzona w: ', naglowek?.SystemInfo), margin: [0, 8, 0, 0], }, ], @@ -147,9 +147,13 @@ function generateQRCodeData(additionalData?: AdditionalDataTypes): Content[] { 'Nie możesz zeskanować kodu z obrazka? Kliknij w link weryfikacyjny i przejdź do weryfikacji faktury!', FormatTyp.Value ), - { stack: [formatText(additionalData.qrCode, FormatTyp.Link)], marginTop: 5 }, + { + stack: [formatText(additionalData.qrCode, FormatTyp.Link)], + marginTop: 5, + link: additionalData.qrCode, + }, ], - link: additionalData.qrCode, + margin: [10, (qrCode.fit ?? 120) / 2 - 30, 0, 0], width: 'auto', } as ContentStack, diff --git a/src/lib-public/generators/common/Wiersze.spec.ts b/src/lib-public/generators/common/Wiersze.spec.ts index 1d6680f..2b89880 100644 --- a/src/lib-public/generators/common/Wiersze.spec.ts +++ b/src/lib-public/generators/common/Wiersze.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { shouldAddMarza } from './Wiersze'; +import { addMarza } from './Wiersze'; import { TRodzajFaktury } from '../../../shared/consts/const'; const getMockFaVat = (mockedObjects?: Record) => @@ -13,34 +13,40 @@ const getMockFaVat = (mockedObjects?: Record) => describe('shouldAddMarza', () => { it('returns P_12 when VAT type and P_12/P_12_XII are empty', () => { - const result = shouldAddMarza(TRodzajFaktury.VAT, true, getMockFaVat()); + const result = addMarza(TRodzajFaktury.VAT, true, getMockFaVat()); + expect(result).toEqual({ P_12: { _text: 'marża' } }); }); it('returns P_12Z when ZAL type and P_12Z/P_12Z_XII are empty', () => { - const result = shouldAddMarza(TRodzajFaktury.ZAL, true, getMockFaVat()); + const result = addMarza(TRodzajFaktury.ZAL, true, getMockFaVat()); + expect(result).toEqual({ P_12Z: { _text: 'marża' } }); }); - it('returns null when rodzajFaktury is not a string', () => { - const result = shouldAddMarza(undefined, true, getMockFaVat()); - expect(result).toBeNull(); + it('returns empty object when rodzajFaktury is not a string', () => { + const result = addMarza(undefined, true, getMockFaVat()); + + expect(result).toMatchObject({}); }); - it('returns null when isP_PMarzy is false', () => { + it('returns empty object when isP_PMarzy is false', () => { const mockP_12 = { P_12: { _text: '23' } }; - const result = shouldAddMarza(TRodzajFaktury.VAT, false, getMockFaVat(mockP_12)); - expect(result).toBeNull(); + const result = addMarza(TRodzajFaktury.VAT, false, getMockFaVat(mockP_12)); + + expect(result).toMatchObject({}); }); it('returns null when P_12 already has value', () => { const mockP_12 = { P_12: { _text: '23' } }; - const result = shouldAddMarza(TRodzajFaktury.VAT, true, getMockFaVat(mockP_12)); - expect(result).toBeNull(); + const result = addMarza(TRodzajFaktury.VAT, true, getMockFaVat(mockP_12)); + + expect(result).toEqual({}); }); it('returns null when rodzajFaktury is not VAT or ZAL type', () => { - const result = shouldAddMarza(TRodzajFaktury.UPR, true, getMockFaVat()); - expect(result).toBeNull(); + const result = addMarza(TRodzajFaktury.UPR, true, getMockFaVat()); + + expect(result).toEqual({}); }); }); diff --git a/src/lib-public/generators/common/Wiersze.ts b/src/lib-public/generators/common/Wiersze.ts index ef965da..8782e0a 100644 --- a/src/lib-public/generators/common/Wiersze.ts +++ b/src/lib-public/generators/common/Wiersze.ts @@ -2,7 +2,7 @@ import { TRodzajFaktury } from '../../../shared/consts/const'; import { FP } from '../../types/fa1.types'; import { getValue } from '../../../shared/PDF-functions'; -export function shouldAddMarza( +export function addMarza( rodzajFaktury: string | number | undefined, isP_PMarzy: boolean, wiersz: Record @@ -23,10 +23,10 @@ export function shouldAddMarza( } else if (isZALType && !getValue(wiersz.P_12Z) && !getValue(wiersz.P_12Z_XII)) { return { P_12Z: { _text: 'marża' } }; } else { - return null; + return {}; } } } - return null; + return {}; } diff --git a/src/lib-public/generators/common/Zalaczniki.ts b/src/lib-public/generators/common/Zalaczniki.ts index bbf459e..947c993 100644 --- a/src/lib-public/generators/common/Zalaczniki.ts +++ b/src/lib-public/generators/common/Zalaczniki.ts @@ -128,13 +128,13 @@ function generateTable(tabela: Tabela): Content[] { return result; } -function createTable(cols: Kol[], rows: Wiersz[], subTableIndex: number, totalLength: number): ContentTable { +function createTable(cols: Kol[], rows: Wiersz | Wiersz[], subTableIndex: number, totalLength: number): ContentTable { const definedHeader: Content[] = cols.map((item: Kol): string | ContentText => formatText(item.NKom?._text, FormatTyp.GrayBoldTitle) ); const tableBody: TableCell[] = []; - rows.forEach((item: Wiersz): void => { + getTable(rows).forEach((item: Wiersz): void => { const WKom: FP[] = getTable(item.WKom); while (WKom.length < totalLength) { diff --git a/src/lib-public/index.ts b/src/lib-public/index.ts index 1406a81..f8a2264 100644 --- a/src/lib-public/index.ts +++ b/src/lib-public/index.ts @@ -1,4 +1,4 @@ import { generateInvoice } from './generate-invoice'; -import { generatePDFUPO } from './UPO-4_2-generators'; +import { generatePDFUPO } from './UPO-generator'; export { generateInvoice, generatePDFUPO }; diff --git a/src/lib-public/types/fa3.types.ts b/src/lib-public/types/fa3.types.ts index 2cf048c..5694cc3 100644 --- a/src/lib-public/types/fa3.types.ts +++ b/src/lib-public/types/fa3.types.ts @@ -343,7 +343,7 @@ export interface Tabela { TMetaDane?: TMetaDane[]; Opis?: FP; TNaglowek?: TNaglowek; - Wiersz?: Wiersz[]; + Wiersz?: Wiersz | Wiersz[]; Suma?: Suma; } diff --git a/src/lib-public/types/upo-v4_3.types.ts b/src/lib-public/types/upo-v4_3.types.ts new file mode 100644 index 0000000..c91f75a --- /dev/null +++ b/src/lib-public/types/upo-v4_3.types.ts @@ -0,0 +1,69 @@ +export interface Upo { + _declaration?: Declaration; + _comment?: string; + Potwierdzenie?: Potwierdzenie; +} + +export interface Potwierdzenie { + _attributes?: PotwierdzenieAttributes; + NazwaPodmiotuPrzyjmujacego?: KodFormularza; + NumerReferencyjnySesji?: KodFormularza; + Uwierzytelnienie?: Uwierzytelnienie; + OpisPotwierdzenia?: OpisPotwierdzenia; + NazwaStrukturyLogicznej?: KodFormularza; + KodFormularza?: KodFormularza; + Dokument?: Dokument[]; +} + +export interface Dokument { + lp?: number; + NipSprzedawcy?: KodFormularza; + NumerKSeFDokumentu?: KodFormularza; + NumerFaktury?: KodFormularza; + DataWystawieniaFaktury?: KodFormularza; + DataPrzeslaniaDokumentu?: KodFormularza; + DataNadaniaNumeruKSeF?: KodFormularza; + SkrotDokumentu?: KodFormularza; + TrybWysylki?: KodFormularza; +} + +export interface KodFormularza { + _text?: string; +} + +export interface OpisPotwierdzenia { + Strona?: KodFormularza; + LiczbaStron?: KodFormularza; + ZakresDokumentowOd?: KodFormularza; + ZakresDokumentowDo?: KodFormularza; + CalkowitaLiczbaDokumentow?: KodFormularza; +} + +export interface Uwierzytelnienie { + IdKontekstu?: IDKontekstu; + NumerReferencyjnyTokenaKSeF?: KodFormularza; + SkrotDokumentuUwierzytelniajacego?: KodFormularza; +} + +export interface IDKontekstu { + Nip?: KodFormularza; + IdWewnetrzny?: KodFormularza; + IdZlozonyVatUE?: KodFormularza; + IdDostawcyUslugPeppol?: KodFormularza; +} + +export interface PotwierdzenieAttributes { + upo?: string; + xsi?: string; + wersjaSchemy?: string; + schemaLocation?: string; +} + +export interface Declaration { + _attributes?: DeclarationAttributes; +} + +export interface DeclarationAttributes { + version?: string; + encoding?: string; +} diff --git a/src/shared/PDF-functions.spec.ts b/src/shared/PDF-functions.spec.ts index ffcccae..d75094f 100644 --- a/src/shared/PDF-functions.spec.ts +++ b/src/shared/PDF-functions.spec.ts @@ -10,6 +10,8 @@ import { getNumberRounded, getValue, hasValue, + normalizeCurrencySeparator, + replaceDotWithCommaIfNeeded, verticalSpacing, } from './PDF-functions'; import FormatTyp, { Position } from './enums/common.enum'; @@ -126,3 +128,37 @@ describe('generateLine', () => { expect(lineContent).toHaveProperty('layout'); }); }); + +describe('normalized currency separator', () => { + it('should correctly add zeros ', () => { + const normalized = normalizeCurrencySeparator(43); + + expect(normalized).toBe('43,00'); + }); + + it('should correctyl add zero', () => { + const normalized = normalizeCurrencySeparator(43.7); + + expect(normalized).toBe('43,70'); + }); + + it('should correctly displa value', () => { + const normalized = normalizeCurrencySeparator('444,9999'); + + expect(normalized).toBe('444,9999'); + }); +}); + +describe('replaceDotWithCommaIfNeeded', () => { + it('shuold change comma to dot if needed', () => { + const dotToComma = replaceDotWithCommaIfNeeded(44.5); + + expect(dotToComma).toBe('44,5'); + }); + + it('do nothing if do not find comma', () => { + const dotToComma = replaceDotWithCommaIfNeeded(3); + + expect(dotToComma).toBe('3'); + }); +}); diff --git a/src/shared/PDF-functions.ts b/src/shared/PDF-functions.ts index 99e6d47..0f9b45f 100644 --- a/src/shared/PDF-functions.ts +++ b/src/shared/PDF-functions.ts @@ -10,8 +10,14 @@ import { TableCell, TDocumentDefinitions, } from 'pdfmake/interfaces'; -import { DEFAULT_TABLE_LAYOUT, Kraj } from './consts/const'; -import { formatDateTime, getFormaPlatnosciString } from './generators/common/functions'; +import { + DEFAULT_TABLE_LAYOUT, + Kraj, + TStawkaPodatku_FA1, + TStawkaPodatku_FA2, + TStawkaPodatku_FA3, +} from './consts/const'; +import {formatDateTime, formatTime, getFormaPlatnosciString} from './generators/common/functions'; import { HeaderDefine, PdfFP, PdfOptionField } from './types/pdf-types'; import { FP } from '../lib-public/types/fa3.types'; import { DifferentValues, FilteredKeysOfValues, TypesOfValues } from './types/universal.types'; @@ -77,7 +83,7 @@ function formatValue( case FormatTyp.Currency: result.text = isNaN(Number(value)) ? (value as string) - : `${dotToComma(Number(value).toFixed(2))} ${currency}`; + : `${normalizeCurrencySeparator(value)} ${currency}`; result.alignment = Position.RIGHT; break; case FormatTyp.CurrencyAbs: @@ -104,6 +110,9 @@ function formatValue( case FormatTyp.Date: result.text = formatDateTime(value as string, false, true); break; + case FormatTyp.Time: + result.text = formatTime(value as string); + break; case FormatTyp.FormOfPayment: result.text = getFormaPlatnosciString({ _text: value as string }); break; @@ -113,9 +122,43 @@ function formatValue( case FormatTyp.Percentage: result.text = `${value}%`; break; + case FormatTyp.Number: + result.text = replaceDotWithCommaIfNeeded(value); + result.alignment = Position.RIGHT; + break; } } +export function normalizeCurrencySeparator(value: string | number | undefined): string { + if (!value) { + return ''; + } + + const numberWithComma = dotToComma(typeof value === 'string' ? value : value.toString()); + + if (numberWithComma.includes(',')) { + const parts = numberWithComma.split(','); + + return parts[1].length > 1 ? numberWithComma : numberWithComma + '0'; + } else { + return numberWithComma + ',00'; + } +} + +export function replaceDotWithCommaIfNeeded(value: string | number | undefined): string { + let copyValue = ''; + + if (typeof value === 'number') { + copyValue = value.toString(); + } + + if (typeof value === 'string') { + copyValue = value; + } + + return copyValue.includes('.') ? dotToComma(copyValue) : copyValue; +} + function dotToComma(value: string): string { return value.replace('.', ','); } @@ -466,11 +509,32 @@ export function verticalSpacing(height: number): ContentText { return { text: '\n', fontSize: height }; } -export function getKraj(kod: string): string { - if (Kraj[kod]) { - return Kraj[kod]; +export function getKraj(code: string): string { + if (Kraj[code]) { + return Kraj[code]; } - return kod; + return code; +} + +export function getTStawkaPodatku(code: string, version: 1 | 2 | 3): string { + let TStawkaPodatkuVersioned: Record = {}; + + switch (version) { + case 1: + TStawkaPodatkuVersioned = TStawkaPodatku_FA1; + break; + case 2: + TStawkaPodatkuVersioned = TStawkaPodatku_FA2; + break; + case 3: + TStawkaPodatkuVersioned = TStawkaPodatku_FA3; + break; + } + + if (TStawkaPodatkuVersioned[code]) { + return TStawkaPodatkuVersioned[code]; + } + return code; } export function generateLine(): Content { diff --git a/src/shared/consts/const.ts b/src/shared/consts/const.ts index d8e09c9..52832ba 100644 --- a/src/shared/consts/const.ts +++ b/src/shared/consts/const.ts @@ -16,6 +16,59 @@ export const TypKorekty: Record = { '2': 'Korekta skutkująca w dacie wystawienia faktury korygującej', '3': 'Korekta skutkująca w dacie innej, w tym gdy dla różnych pozycji faktury korygującej daty te są różne', }; +export const TStawkaPodatku_FA1: Record = { + '23': '23%', + '22': '22%', + '8': '8%', + '7': '7%', + '5': '5%', + '4': '4% lub 3% lub oo', + '3': '4% lub 3% lub oo', + '0': '0%', + + zw: 'zwolnione z opodatkowania', + oo: '4% lub 3% lub oo\n' + + 'UWAGA: oo jest wykazywane łącznie z 4% lub 3%', + np: 'niepodlegające opodatkowaniu-transakcje dostawy towarów oraz świadczenia usług poza terytorium kraju', +}; + +export const TStawkaPodatku_FA2: Record = { + '23': '23%', + '22': '22%', + '8': '8%', + '7': '7%', + '5': '5%', + '4': '4%', + '3': '3%', + '0': '0%', + + zw: 'zwolnione od podatku', + oo: 'odwrotne obciążenie', + np: 'niepodlegające opodatkowaniu-transakcje dostawy towarów oraz świadczenia usług poza terytorium kraju', +}; + +export const TStawkaPodatku_FA3: Record = { + '23': '23%', + '22': '22%', + '8': '8%', + '7': '7%', + '5': '5%', + '4': '4%', + '3': '3%', + + '0 KR': + '0% - KR', + '0 WDT': '0% - WDT', + '0 EX': '0% - EX', + + zw: 'zw', + oo: 'oo', + + 'np I': + 'np I', + 'np II': + 'np II', +}; export const Kraj: Record = { AF: 'Afganistan', @@ -362,11 +415,11 @@ export const Procedura: Record = { }; export const TableDataType: Record = { - date: FormatTyp.DateTime, + date: FormatTyp.Date, datetime: FormatTyp.DateTime, dec: FormatTyp.Currency, int: FormatTyp.Currency, - time: FormatTyp.DateTime, + time: FormatTyp.Time, txt: FormatTyp.Value, }; diff --git a/src/shared/enums/common.enum.ts b/src/shared/enums/common.enum.ts index 019a3a4..6bc8df3 100644 --- a/src/shared/enums/common.enum.ts +++ b/src/shared/enums/common.enum.ts @@ -38,8 +38,10 @@ export enum FormatTyp { Right = 'Right', DateTime = 'DateTime', Date = 'Date', + Time = 'Time', FormOfPayment = 'FormOfPayment', Percentage = 'Percentage', + Number = 'Number', } export default FormatTyp; diff --git a/src/shared/generators/common/functions.spec.ts b/src/shared/generators/common/functions.spec.ts index b314b2c..2310f2d 100644 --- a/src/shared/generators/common/functions.spec.ts +++ b/src/shared/generators/common/functions.spec.ts @@ -29,21 +29,21 @@ describe('getRolaString', () => { it('returns correct string for FA=1', () => { const key = Object.keys(FA1RolaPodmiotu3)[0]; - const expected = FA1RolaPodmiotu3[key as keyof typeof FA1RolaPodmiotu3].split('-')[0]; + const expected = FA1RolaPodmiotu3[key as keyof typeof FA1RolaPodmiotu3]; expect(getRolaString({ _text: key } as any, 1)).toBe(expected); }); it('returns correct string for FA=2', () => { const key = Object.keys(FA2RolaPodmiotu3)[0]; - const expected = FA2RolaPodmiotu3[key as keyof typeof FA2RolaPodmiotu3].split('-')[0]; + const expected = FA2RolaPodmiotu3[key as keyof typeof FA2RolaPodmiotu3]; expect(getRolaString({ _text: key } as any, 2)).toBe(expected); }); it('returns correct string for FA=3', () => { const key = Object.keys(FA3RolaPodmiotu3)[0]; - const expected = FA3RolaPodmiotu3[key as keyof typeof FA3RolaPodmiotu3].split('-')[0]; + const expected = FA3RolaPodmiotu3[key as keyof typeof FA3RolaPodmiotu3]; expect(getRolaString({ _text: key } as any, 3)).toBe(expected); }); @@ -131,13 +131,13 @@ describe('formatDateTime', () => { it('formats date with seconds by default', () => { const date = '2025-10-03T12:15:30Z'; - expect(formatDateTime(date)).toBe('2025-10-03 14:15:30'); + expect(formatDateTime(date)).toBe('03.10.2025 14:15:30'); }); it('formats date without seconds if withoutSeconds true', () => { const date = '2025-10-03T12:15:30Z'; - expect(formatDateTime(date, true)).toBe('2025-10-03 14:15'); + expect(formatDateTime(date, true)).toBe('03.10.2025 14:15'); }); }); @@ -150,6 +150,6 @@ describe('getDateTimeWithoutSeconds', () => { it('returns formatted date without seconds if _text present', () => { const isoDate = { _text: '2025-10-03T12:15:30Z' } as any; - expect(getDateTimeWithoutSeconds(isoDate)).toBe('2025-10-03 14:15'); + expect(getDateTimeWithoutSeconds(isoDate)).toBe('03.10.2025 14:15'); }); }); diff --git a/src/shared/generators/common/functions.ts b/src/shared/generators/common/functions.ts index 63b502c..2d33447 100644 --- a/src/shared/generators/common/functions.ts +++ b/src/shared/generators/common/functions.ts @@ -18,11 +18,11 @@ export function getRolaString(rola: FP2 | undefined, FA: 1 | 2 | 3): string { } switch (FA) { case 1: - return FA1RolaPodmiotu3[rola._text as keyof typeof FA1RolaPodmiotu3].split('-')[0] ?? ''; + return FA1RolaPodmiotu3[rola._text as keyof typeof FA1RolaPodmiotu3]; case 2: - return FA2RolaPodmiotu3[rola._text as keyof typeof FA2RolaPodmiotu3].split('-')[0] ?? ''; + return FA2RolaPodmiotu3[rola._text as keyof typeof FA2RolaPodmiotu3]; case 3: - return FA3RolaPodmiotu3[rola._text as keyof typeof FA3RolaPodmiotu3].split('-')[0] ?? ''; + return FA3RolaPodmiotu3[rola._text as keyof typeof FA3RolaPodmiotu3]; } } @@ -86,11 +86,11 @@ export function formatDateTime(data?: string, withoutSeconds?: boolean, withoutT const seconds: string = dateTime.getSeconds().toString().padStart(2, '0'); if (withoutTime) { - return `${year}-${month}-${day}`; + return `${day}.${month}.${year}`; } else if (withoutSeconds) { - return `${year}-${month}-${day} ${hours}:${minutes}`; + return `${day}.${month}.${year} ${hours}:${minutes}`; } - return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`; } export function getDateTimeWithoutSeconds(isoDate?: FP2): string { @@ -99,3 +99,22 @@ export function getDateTimeWithoutSeconds(isoDate?: FP2): string { } return formatDateTime(isoDate._text, true); } +export function formatTime(data?: string, withoutSeconds?: boolean): string { + if (!data) { + return ''; + } + const dateTime: Date = new Date(data); + + if (isNaN(dateTime.getTime())) { + return data; + } + + const hours: string = dateTime.getHours().toString().padStart(2, '0'); + const minutes: string = dateTime.getMinutes().toString().padStart(2, '0'); + const seconds: string = dateTime.getSeconds().toString().padStart(2, '0'); + + if (withoutSeconds) { + return `${hours}:${minutes}`; + } + return `${hours}:${minutes}:${seconds}`; +} \ No newline at end of file