diff --git a/CHANGELOG.md b/CHANGELOG.md index 19c3379..1d2f30e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,45 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v2.12.2](https://github.com/lightning-tv/core/compare/v3.0.0-15...v2.12.2) +#### [v3.0.0-20](https://github.com/lightning-tv/core/compare/v3.0.0-19...v3.0.0-20) +- update renderer.16 [`08448f9`](https://github.com/lightning-tv/core/commit/08448f9cb15138f8bc2a24a37ad79bf196a02ecb) +- set max lines when width is set [`b0358d2`](https://github.com/lightning-tv/core/commit/b0358d298bd1601756e3666811b71fcf2d4b73b1) + +#### [v3.0.0-19](https://github.com/lightning-tv/core/compare/v3.0.0-18...v3.0.0-19) + +> 6 November 2025 + +- update to latest renderer [`b774ba8`](https://github.com/lightning-tv/core/commit/b774ba83323f333958f00e86a651a38aecf2ea14) +- :rocket: bump version v3.0.0-19 [`9369e2a`](https://github.com/lightning-tv/core/commit/9369e2a3d2dab3bf1efe70c65b7b7b1aef0818de) + +#### [v3.0.0-18](https://github.com/lightning-tv/core/compare/v3.0.0-17...v3.0.0-18) + +> 1 October 2025 + +- :rocket: bump version v3.0.0-18 [`1829494`](https://github.com/lightning-tv/core/commit/1829494db7ee84e3c2c64061b371ac0a023f6e64) +- fix border-w as new name from width [`811c0b9`](https://github.com/lightning-tv/core/commit/811c0b93137a11e5c7f81e75a190f66fe3d0b4b2) + +#### [v3.0.0-17](https://github.com/lightning-tv/core/compare/v3.0.0-16...v3.0.0-17) + +> 26 September 2025 + +- :rocket: bump version v3.0.0-17 [`1d40158`](https://github.com/lightning-tv/core/commit/1d40158489d4d32c05b3945f2aa0636661ebc06f) +- add fontWeight to change fontFamily as shortcut [`f7b9b45`](https://github.com/lightning-tv/core/commit/f7b9b451059b04907e2fb2e88419a9c0e44322b5) +- fontWeight should be optional [`6929613`](https://github.com/lightning-tv/core/commit/6929613d4d57ee9b52c38ee3a63a9c8fc12e84fd) + +#### [v3.0.0-16](https://github.com/lightning-tv/core/compare/v3.0.0-15...v3.0.0-16) + +> 26 September 2025 + +- Fix border shader [`#70`](https://github.com/lightning-tv/core/pull/70) +- Add default shaders and outside border. [`#68`](https://github.com/lightning-tv/core/pull/68) - Backport changes from rc3 [`#69`](https://github.com/lightning-tv/core/pull/69) - Add onRender and onRemove handlers [`#56`](https://github.com/lightning-tv/core/pull/56) - Port dom renderer from v3 to v2 [`#55`](https://github.com/lightning-tv/core/pull/55) +- update core to work with latest renderer beta [`4c07701`](https://github.com/lightning-tv/core/commit/4c07701e9a3455f46c31cc85029b67fec4547d1b) - add simple animation manager for transitions [`5980ff9`](https://github.com/lightning-tv/core/commit/5980ff9008b881c6452db5bcd1d50630656e868e) - :rocket: bump version v2.8.0-0 [`25de938`](https://github.com/lightning-tv/core/commit/25de938190227e4e996700582634450b9b614a70) -- add global and node throttleInput support [`f1309b9`](https://github.com/lightning-tv/core/commit/f1309b9b770e750ec6bccee1d3c33e34f0d05a62) #### [v3.0.0-15](https://github.com/lightning-tv/core/compare/v3.0.0-14...v3.0.0-15) @@ -152,13 +183,49 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - :rocket: bump version v2.7.7 [`e6d0193`](https://github.com/lightning-tv/core/commit/e6d0193dab280f1621ca9cb0eb4a52bdc456798d) - add isDev checks to remove log and assertTruthy from builds [`fd05557`](https://github.com/lightning-tv/core/commit/fd055579034d0a60f300da4fb54d74d377311b31) -#### [v3.0.0-0](https://github.com/lightning-tv/core/compare/v2.12.1...v3.0.0-0) +#### [v3.0.0-0](https://github.com/lightning-tv/core/compare/v2.14.0...v3.0.0-0) > 19 March 2025 - get core working with Renderer 3 [`d21db88`](https://github.com/lightning-tv/core/commit/d21db88693c897ce0fc82f5b670c1001b86cd9b2) - :rocket: bump version v3.0.0-0 [`96d54bf`](https://github.com/lightning-tv/core/commit/96d54bf7b3553f0ea3d81d2d1bda7b112bf0325f) +#### [v2.14.0](https://github.com/lightning-tv/core/compare/v2.13.2...v2.14.0) + +> 29 October 2025 + +- update to latest renderer, use renderer timings [`474a0b6`](https://github.com/lightning-tv/core/commit/474a0b65e9dc05de81913233e9b71e87f333c926) +- :rocket: bump version v2.14.0 [`2525c76`](https://github.com/lightning-tv/core/commit/2525c76e2114a3ccfb812ca1712f27d6ca7b1782) + +#### [v2.13.2](https://github.com/lightning-tv/core/compare/v2.13.1...v2.13.2) + +> 27 October 2025 + +- add ts docs for element properties [`4d88314`](https://github.com/lightning-tv/core/commit/4d88314a5c1be958b9d7bd45c272df3ebd8147ba) +- :rocket: bump version v2.13.2 [`305c60e`](https://github.com/lightning-tv/core/commit/305c60ec67cd12afa9b69220f2051fb456bfedae) + +#### [v2.13.1](https://github.com/lightning-tv/core/compare/v2.13.0...v2.13.1) + +> 22 October 2025 + +- :rocket: bump version v2.13.1 [`bb7e2bf`](https://github.com/lightning-tv/core/commit/bb7e2bf88afa80be8e0eb1396eff3add56eb2ba3) +- add shortcuts for w (width) and h (height) for upcoming renderer changes [`8f31fe0`](https://github.com/lightning-tv/core/commit/8f31fe00bf4b9e5aac8b852d9411be2effd11e0e) + +#### [v2.13.0](https://github.com/lightning-tv/core/compare/v2.12.2...v2.13.0) + +> 30 September 2025 + +- :rocket: bump version v2.13.0 [`398f35d`](https://github.com/lightning-tv/core/commit/398f35d474cb5eb4bcd40d35c6ad5998c389a336) +- update dom rendering to use vite so it tree shakes properly [`e4b3e37`](https://github.com/lightning-tv/core/commit/e4b3e37446501f5d8478a0605c1d1b818ff38691) +- only throttle the same input keys [`361162b`](https://github.com/lightning-tv/core/commit/361162bf5f38668f1f4aba543541711f0b4cae48) + +#### [v2.12.2](https://github.com/lightning-tv/core/compare/v2.12.1...v2.12.2) + +> 16 September 2025 + +- :rocket: bump version v2.12.2 [`6d1662d`](https://github.com/lightning-tv/core/commit/6d1662de14b2d1799678e921572c7117cf77f82e) +- fix swap back of nodes, always remove nodes [`b567a5f`](https://github.com/lightning-tv/core/commit/b567a5fb0278efbea85b5108fddb8213511de2e7) + #### [v2.12.1](https://github.com/lightning-tv/core/compare/v2.12.0...v2.12.1) > 10 September 2025 diff --git a/package.json b/package.json index aa7b10a..da17326 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lightningtv/core", - "version": "2.12.2", + "version": "3.0.0-20", "description": "Lightning TV Core for Universal Renderers", "type": "module", "exports": { @@ -46,7 +46,7 @@ "author": "Chris Lorenzo", "license": "Apache-2.0", "peerDependencies": { - "@lightningjs/renderer": "^2.16.0" + "@lightningjs/renderer": "^3.0.0-beta16" }, "devDependencies": { "@eslint/js": "^9.15.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bbf335..5d62101 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,69 +9,69 @@ importers: .: dependencies: '@lightningjs/renderer': - specifier: ^2.16.0 - version: 2.16.0 + specifier: ^3.0.0-beta16 + version: 3.0.0-beta16 devDependencies: '@eslint/js': specifier: ^9.15.0 - version: 9.15.0 + version: 9.36.0 '@types/eslint__js': specifier: ^8.42.3 version: 8.42.3 '@typescript-eslint/eslint-plugin': specifier: ^8.14.0 - version: 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3) + version: 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0)(typescript@5.9.2))(eslint@9.36.0)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^8.14.0 - version: 8.14.0(eslint@9.15.0)(typescript@5.6.3) + version: 8.44.1(eslint@9.36.0)(typescript@5.9.2) '@vitest/ui': specifier: ^3.1.3 - version: 3.1.3(vitest@3.1.3) + version: 3.2.4(vitest@3.2.4) eslint: specifier: ^9.15.0 - version: 9.15.0 + version: 9.36.0 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.15.0) + version: 9.1.2(eslint@9.36.0) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.15.0))(eslint@9.15.0)(prettier@3.3.3) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.36.0))(eslint@9.36.0)(prettier@3.6.2) globals: specifier: ^15.12.0 - version: 15.12.0 + version: 15.15.0 husky: specifier: ^9.1.6 - version: 9.1.6 + version: 9.1.7 lint-staged: specifier: ^15.2.10 - version: 15.2.10 + version: 15.5.2 prettier: specifier: ^3.3.3 - version: 3.3.3 + version: 3.6.2 release-it: specifier: ^18.1.2 - version: 18.1.2(@types/node@24.0.1)(typescript@5.6.3) + version: 18.1.2(@types/node@24.5.2)(typescript@5.9.2) typescript: specifier: ^5.6.3 - version: 5.6.3 + version: 5.9.2 typescript-eslint: specifier: ^8.14.0 - version: 8.16.0(eslint@9.15.0)(typescript@5.6.3) + version: 8.44.1(eslint@9.36.0)(typescript@5.9.2) vite: specifier: ^5.4.11 - version: 5.4.11(@types/node@24.0.1) + version: 5.4.20(@types/node@24.5.2) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@24.0.1)(@vitest/ui@3.1.3) + version: 3.2.4(@types/node@24.5.2)(@vitest/ui@3.2.4) packages: - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} '@esbuild/aix-ppc64@0.21.5': @@ -212,8 +212,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -222,55 +222,68 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.0': - resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.0': - resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.15.0': - resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.3': - resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - '@inquirer/checkbox@4.1.8': - resolution: {integrity: sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==} + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -278,8 +291,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.12': - resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==} + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -287,8 +300,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.13': - resolution: {integrity: sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==} + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -296,8 +309,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.13': - resolution: {integrity: sha512-WbicD9SUQt/K8O5Vyk9iC2ojq5RHoCLK6itpp2fHsWe44VxxcA9z3GTWlvjSTGmMQpZr+lbVmrxdHcumJoLbMA==} + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -305,8 +318,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.15': - resolution: {integrity: sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -314,12 +327,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.12': - resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==} + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} - '@inquirer/input@4.1.12': - resolution: {integrity: sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ==} + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -327,8 +340,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.15': - resolution: {integrity: sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g==} + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -336,8 +349,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.15': - resolution: {integrity: sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw==} + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -345,8 +358,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.5.3': - resolution: {integrity: sha512-8YL0WiV7J86hVAxrh3fE5mDCzcTDe1670unmJRz6ArDgN+DBK1a0+rbnNWp4DUB5rPMwqD5ZP6YHl9KK1mbZRg==} + '@inquirer/prompts@7.8.6': + resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -354,8 +367,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.3': - resolution: {integrity: sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA==} + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -363,8 +376,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.0.15': - resolution: {integrity: sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw==} + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -372,8 +385,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.2.3': - resolution: {integrity: sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg==} + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -381,8 +394,8 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.7': - resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==} + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -390,12 +403,12 @@ packages: '@types/node': optional: true - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@lightningjs/renderer@2.16.0': - resolution: {integrity: sha512-TA0litV7/ZMgRjc54GvXavzjBJFSZ8T3z7ohel4dqE3Tw9N3hC3aBmkey6PpF4usQ8JemNBMNgj7/2gR7bINhw==} - engines: {node: '>= 20.9.0', npm: '>= 10.0.0', pnpm: '>= 8.9.2'} + '@lightningjs/renderer@3.0.0-beta16': + resolution: {integrity: sha512-5hhDPpHKIAAsgEe1TEBqf+FV71F3xz5/jpYr2hoNB/pawHp4gnvCiZ3gqQWHZ2We2uOA61Nq6QPC3HpR2XwBfQ==} + engines: {node: '>= 18.0.0', npm: '>= 10.0.0', pnpm: '>= 10.17.0'} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -413,8 +426,8 @@ packages: resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} engines: {node: '>= 18'} - '@octokit/core@6.1.5': - resolution: {integrity: sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==} + '@octokit/core@6.1.6': + resolution: {integrity: sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==} engines: {node: '>= 18'} '@octokit/endpoint@10.1.4': @@ -425,17 +438,17 @@ packages: resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} engines: {node: '>= 18'} - '@octokit/openapi-types@22.2.0': - resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} '@octokit/openapi-types@25.1.0': resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} - '@octokit/plugin-paginate-rest@11.3.1': - resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': '>=6' '@octokit/plugin-request-log@5.3.1': resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} @@ -443,32 +456,32 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@13.2.2': - resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} + '@octokit/plugin-rest-endpoint-methods@13.5.0': + resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': ^5 + '@octokit/core': '>=6' '@octokit/request-error@6.1.8': resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} engines: {node: '>= 18'} - '@octokit/request@9.2.3': - resolution: {integrity: sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==} + '@octokit/request@9.2.4': + resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} engines: {node: '>= 18'} '@octokit/rest@21.0.2': resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} engines: {node: '>= 18'} - '@octokit/types@13.6.1': - resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@pnpm/config.env-replace@1.1.0': @@ -486,93 +499,113 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@rollup/rollup-android-arm-eabi@4.27.2': - resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} + '@rollup/rollup-android-arm-eabi@4.52.2': + resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.27.2': - resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} + '@rollup/rollup-android-arm64@4.52.2': + resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.27.2': - resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} + '@rollup/rollup-darwin-arm64@4.52.2': + resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.27.2': - resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} + '@rollup/rollup-darwin-x64@4.52.2': + resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.27.2': - resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} + '@rollup/rollup-freebsd-arm64@4.52.2': + resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.27.2': - resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} + '@rollup/rollup-freebsd-x64@4.52.2': + resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': - resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.2': + resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.27.2': - resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} + '@rollup/rollup-linux-arm-musleabihf@4.52.2': + resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.27.2': - resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} + '@rollup/rollup-linux-arm64-gnu@4.52.2': + resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.27.2': - resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} + '@rollup/rollup-linux-arm64-musl@4.52.2': + resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': - resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} + '@rollup/rollup-linux-loong64-gnu@4.52.2': + resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.52.2': + resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.27.2': - resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} + '@rollup/rollup-linux-riscv64-gnu@4.52.2': + resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.52.2': + resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.27.2': - resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} + '@rollup/rollup-linux-s390x-gnu@4.52.2': + resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.27.2': - resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} + '@rollup/rollup-linux-x64-gnu@4.52.2': + resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.27.2': - resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} + '@rollup/rollup-linux-x64-musl@4.52.2': + resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.27.2': - resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} + '@rollup/rollup-openharmony-arm64@4.52.2': + resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.2': + resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.27.2': - resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} + '@rollup/rollup-win32-ia32-msvc@4.52.2': + resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.27.2': - resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} + '@rollup/rollup-win32-x64-gnu@4.52.2': + resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.2': + resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==} cpu: [x64] os: [win32] @@ -590,190 +623,136 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/eslint__js@8.42.3': resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@24.0.1': - resolution: {integrity: sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==} + '@types/node@24.5.2': + resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} '@types/parse-path@7.1.0': resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. - '@typescript-eslint/eslint-plugin@8.14.0': - resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==} + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.44.1 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.16.0': - resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} + '@typescript-eslint/parser@8.44.1': + resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.14.0': - resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.16.0': - resolution: {integrity: sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==} + '@typescript-eslint/project-service@8.44.1': + resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@8.14.0': - resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.16.0': - resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.14.0': - resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==} + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.16.0': - resolution: {integrity: sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==} + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.14.0': - resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.16.0': - resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.14.0': - resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@8.16.0': - resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==} + '@typescript-eslint/typescript-estree@8.44.1': + resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.14.0': - resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} + '@typescript-eslint/utils@8.44.1': + resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.16.0': - resolution: {integrity: sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/visitor-keys@8.14.0': - resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@typescript-eslint/visitor-keys@8.16.0': - resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} - - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/ui@3.1.3': - resolution: {integrity: sha512-IipSzX+8DptUdXN/GWq3hq5z18MwnpphYdOMm0WndkRGYELzfq7NDP8dMpZT7JGW1uXFrIGxOW2D0Xi++ulByg==} + '@vitest/ui@3.2.4': + resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} peerDependencies: - vitest: 3.1.3 + vitest: 3.2.4 - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} ajv@6.12.6: @@ -786,24 +765,24 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} argparse@2.0.1: @@ -837,11 +816,11 @@ packages: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -863,31 +842,31 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.4.1: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} cli-boxes@3.0.0: @@ -920,8 +899,8 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} concat-map@0.0.1: @@ -930,8 +909,8 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - configstore@7.0.0: - resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + configstore@7.1.0: + resolution: {integrity: sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==} engines: {node: '>=18'} cosmiconfig@9.0.0: @@ -943,10 +922,6 @@ packages: typescript: optional: true - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -955,17 +930,8 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1004,8 +970,8 @@ packages: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1018,8 +984,8 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -1042,19 +1008,19 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + eslint-config-prettier@9.1.2: + resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' eslint: '>=8.0.0' - eslint-config-prettier: '*' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' prettier: '>=3.0.0' peerDependenciesMeta: '@types/eslint': @@ -1062,20 +1028,20 @@ packages: eslint-config-prettier: optional: true - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.15.0: - resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1084,8 +1050,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -1123,14 +1089,10 @@ packages: resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - fast-content-type-parse@2.0.1: resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} @@ -1140,8 +1102,8 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -1150,11 +1112,12 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1184,16 +1147,9 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1205,8 +1161,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-stream@8.0.1: @@ -1217,8 +1173,8 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} git-up@8.1.1: @@ -1247,8 +1203,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.12.0: - resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} globby@14.0.2: @@ -1288,21 +1244,25 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} imurmurhash@0.1.4: @@ -1333,15 +1293,15 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-docker@3.0.0: @@ -1361,8 +1321,8 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} is-glob@4.0.3: @@ -1387,8 +1347,8 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-npm@6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + is-npm@6.1.0: + resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} is-number@7.0.0: @@ -1403,8 +1363,8 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-ssh@1.4.0: - resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -1436,13 +1396,13 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1455,14 +1415,11 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - ky@1.7.2: - resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} + ky@1.10.0: + resolution: {integrity: sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==} engines: {node: '>=18'} latest-version@9.0.0: @@ -1473,20 +1430,20 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + lint-staged@15.5.2: + resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} locate-path@6.0.0: @@ -1522,19 +1479,19 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - macos-release@3.3.0: - resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==} + macos-release@3.4.0: + resolution: {integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1584,8 +1541,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -1635,10 +1592,6 @@ packages: resolution: {integrity: sha512-bv608E0UX86atYi2GMGjDe0vF/X1TJjemNS8oEW6z22YW1Rc3QykSYoGfkQbX0zZX9H0ZB6CQP/3GTf1I5hURg==} engines: {node: '>=18'} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1671,8 +1624,8 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-path@7.0.0: - resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} parse-url@9.2.0: resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} @@ -1704,8 +1657,8 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} picocolors@1.1.1: @@ -1715,8 +1668,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pidtree@0.6.0: @@ -1724,8 +1677,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -1736,20 +1689,20 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - protocols@2.0.1: - resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} proxy-agent@6.5.0: resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} @@ -1762,8 +1715,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pupa@3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + pupa@3.3.0: + resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} engines: {node: '>=12.20'} queue-microtask@1.2.3: @@ -1777,8 +1730,8 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} engines: {node: '>=14'} registry-url@6.0.1: @@ -1794,8 +1747,9 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@5.1.0: @@ -1806,20 +1760,20 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.27.2: - resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} + rollup@4.52.2: + resolution: {integrity: sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-async@3.0.0: @@ -1829,8 +1783,8 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -1840,6 +1794,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1860,8 +1819,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} slash@5.1.0: @@ -1872,8 +1831,8 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} smart-buffer@4.2.0: @@ -1884,8 +1843,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-js@1.2.1: @@ -1896,9 +1855,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1925,8 +1881,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-final-newline@3.0.0: @@ -1945,6 +1901,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} @@ -1956,8 +1915,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} tinybench@2.9.0: @@ -1966,26 +1925,22 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1994,11 +1949,11 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} - engines: {node: '>=16'} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2015,27 +1970,24 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.16.0: - resolution: {integrity: sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==} + typescript-eslint@8.44.1: + resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} @@ -2052,10 +2004,6 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - update-notifier@7.3.1: resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} engines: {node: '>=18'} @@ -2067,13 +2015,13 @@ packages: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + vite@5.4.20: + resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2103,16 +2051,16 @@ packages: terser: optional: true - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2131,8 +2079,8 @@ packages: jsdom: optional: true - when-exit@2.1.3: - resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -2163,8 +2111,8 @@ packages: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} wrappy@1.0.2: @@ -2174,9 +2122,9 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@21.1.1: @@ -2187,23 +2135,23 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} snapshots: - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} '@esbuild/aix-ppc64@0.21.5': optional: true @@ -2274,179 +2222,191 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.15.0)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0)': dependencies: - eslint: 9.15.0 + eslint: 9.36.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.0': + '@eslint/config-array@0.21.0': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7 + '@eslint/object-schema': 2.1.6 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.9.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/eslintrc@3.2.0': + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.3.7 - espree: 10.3.0 + debug: 4.4.3 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.15.0': {} + '@eslint/js@9.36.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.3': + '@eslint/plugin-kit@0.3.5': dependencies: + '@eslint/core': 0.15.2 levn: 0.4.1 '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.1': {} + '@humanwhocodes/retry@0.4.3': {} '@iarna/toml@2.2.5': {} - '@inquirer/checkbox@4.1.8(@types/node@24.0.1)': + '@inquirer/ansi@1.0.0': {} + + '@inquirer/checkbox@4.2.4(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@24.0.1) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/confirm@5.1.12(@types/node@24.0.1)': + '@inquirer/confirm@5.1.18(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/core@10.1.13(@types/node@24.0.1)': + '@inquirer/core@10.2.2(@types/node@24.5.2)': dependencies: - '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@24.0.1) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/editor@4.2.13(@types/node@24.0.1)': + '@inquirer/editor@4.2.20(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) - external-editor: 3.1.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/external-editor': 1.0.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/expand@4.0.15(@types/node@24.0.1)': + '@inquirer/expand@4.0.20(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/figures@1.0.12': {} + '@inquirer/external-editor@1.0.2(@types/node@24.5.2)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 24.5.2 - '@inquirer/input@4.1.12(@types/node@24.0.1)': + '@inquirer/figures@1.0.13': {} + + '@inquirer/input@4.2.4(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/number@3.0.15(@types/node@24.0.1)': + '@inquirer/number@3.0.20(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/password@4.0.15(@types/node@24.0.1)': + '@inquirer/password@4.0.20(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 - - '@inquirer/prompts@7.5.3(@types/node@24.0.1)': - dependencies: - '@inquirer/checkbox': 4.1.8(@types/node@24.0.1) - '@inquirer/confirm': 5.1.12(@types/node@24.0.1) - '@inquirer/editor': 4.2.13(@types/node@24.0.1) - '@inquirer/expand': 4.0.15(@types/node@24.0.1) - '@inquirer/input': 4.1.12(@types/node@24.0.1) - '@inquirer/number': 3.0.15(@types/node@24.0.1) - '@inquirer/password': 4.0.15(@types/node@24.0.1) - '@inquirer/rawlist': 4.1.3(@types/node@24.0.1) - '@inquirer/search': 3.0.15(@types/node@24.0.1) - '@inquirer/select': 4.2.3(@types/node@24.0.1) + '@types/node': 24.5.2 + + '@inquirer/prompts@7.8.6(@types/node@24.5.2)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@24.5.2) + '@inquirer/confirm': 5.1.18(@types/node@24.5.2) + '@inquirer/editor': 4.2.20(@types/node@24.5.2) + '@inquirer/expand': 4.0.20(@types/node@24.5.2) + '@inquirer/input': 4.2.4(@types/node@24.5.2) + '@inquirer/number': 3.0.20(@types/node@24.5.2) + '@inquirer/password': 4.0.20(@types/node@24.5.2) + '@inquirer/rawlist': 4.1.8(@types/node@24.5.2) + '@inquirer/search': 3.1.3(@types/node@24.5.2) + '@inquirer/select': 4.3.4(@types/node@24.5.2) optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/rawlist@4.1.3(@types/node@24.0.1)': + '@inquirer/rawlist@4.1.8(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/search@3.0.15(@types/node@24.0.1)': + '@inquirer/search@3.1.3(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@24.0.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/select@4.2.3(@types/node@24.0.1)': + '@inquirer/select@4.3.4(@types/node@24.5.2)': dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@24.0.1) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@inquirer/type@3.0.7(@types/node@24.0.1)': + '@inquirer/type@3.0.8(@types/node@24.5.2)': optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@lightningjs/renderer@2.16.0': {} + '@lightningjs/renderer@3.0.0-beta16': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2458,15 +2418,15 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.1 '@octokit/auth-token@5.1.2': {} - '@octokit/core@6.1.5': + '@octokit/core@6.1.6': dependencies: '@octokit/auth-token': 5.1.2 '@octokit/graphql': 8.2.2 - '@octokit/request': 9.2.3 + '@octokit/request': 9.2.4 '@octokit/request-error': 6.1.8 '@octokit/types': 14.1.0 before-after-hook: 3.0.2 @@ -2479,33 +2439,33 @@ snapshots: '@octokit/graphql@8.2.2': dependencies: - '@octokit/request': 9.2.3 + '@octokit/request': 9.2.4 '@octokit/types': 14.1.0 universal-user-agent: 7.0.3 - '@octokit/openapi-types@22.2.0': {} + '@octokit/openapi-types@24.2.0': {} '@octokit/openapi-types@25.1.0': {} - '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@6.1.5)': + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.6)': dependencies: - '@octokit/core': 6.1.5 - '@octokit/types': 13.6.1 + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.5)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.6)': dependencies: - '@octokit/core': 6.1.5 + '@octokit/core': 6.1.6 - '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@6.1.5)': + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.6)': dependencies: - '@octokit/core': 6.1.5 - '@octokit/types': 13.6.1 + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 '@octokit/request-error@6.1.8': dependencies: '@octokit/types': 14.1.0 - '@octokit/request@9.2.3': + '@octokit/request@9.2.4': dependencies: '@octokit/endpoint': 10.1.4 '@octokit/request-error': 6.1.8 @@ -2515,20 +2475,20 @@ snapshots: '@octokit/rest@21.0.2': dependencies: - '@octokit/core': 6.1.5 - '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@6.1.5) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.5) - '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@6.1.5) + '@octokit/core': 6.1.6 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.6) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.6) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.6) - '@octokit/types@13.6.1': + '@octokit/types@13.10.0': dependencies: - '@octokit/openapi-types': 22.2.0 + '@octokit/openapi-types': 24.2.0 '@octokit/types@14.1.0': dependencies: '@octokit/openapi-types': 25.1.0 - '@pkgr/core@0.1.1': {} + '@pkgr/core@0.2.9': {} '@pnpm/config.env-replace@1.1.0': {} @@ -2544,58 +2504,70 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@rollup/rollup-android-arm-eabi@4.27.2': + '@rollup/rollup-android-arm-eabi@4.52.2': + optional: true + + '@rollup/rollup-android-arm64@4.52.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.2': + optional: true + + '@rollup/rollup-darwin-x64@4.52.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.2': optional: true - '@rollup/rollup-android-arm64@4.27.2': + '@rollup/rollup-freebsd-x64@4.52.2': optional: true - '@rollup/rollup-darwin-arm64@4.27.2': + '@rollup/rollup-linux-arm-gnueabihf@4.52.2': optional: true - '@rollup/rollup-darwin-x64@4.27.2': + '@rollup/rollup-linux-arm-musleabihf@4.52.2': optional: true - '@rollup/rollup-freebsd-arm64@4.27.2': + '@rollup/rollup-linux-arm64-gnu@4.52.2': optional: true - '@rollup/rollup-freebsd-x64@4.27.2': + '@rollup/rollup-linux-arm64-musl@4.52.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': + '@rollup/rollup-linux-loong64-gnu@4.52.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.27.2': + '@rollup/rollup-linux-ppc64-gnu@4.52.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.27.2': + '@rollup/rollup-linux-riscv64-gnu@4.52.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.27.2': + '@rollup/rollup-linux-riscv64-musl@4.52.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': + '@rollup/rollup-linux-s390x-gnu@4.52.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.27.2': + '@rollup/rollup-linux-x64-gnu@4.52.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.27.2': + '@rollup/rollup-linux-x64-musl@4.52.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.27.2': + '@rollup/rollup-openharmony-arm64@4.52.2': optional: true - '@rollup/rollup-linux-x64-musl@4.27.2': + '@rollup/rollup-win32-arm64-msvc@4.52.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.27.2': + '@rollup/rollup-win32-ia32-msvc@4.52.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.27.2': + '@rollup/rollup-win32-x64-gnu@4.52.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.27.2': + '@rollup/rollup-win32-x64-msvc@4.52.2': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -2606,248 +2578,186 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + + '@types/deep-eql@4.0.2': {} + '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 '@types/eslint__js@8.42.3': dependencies: '@types/eslint': 9.6.1 - '@types/estree@1.0.6': {} + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} - '@types/node@24.0.1': + '@types/node@24.5.2': dependencies: - undici-types: 7.8.0 + undici-types: 7.12.0 '@types/parse-path@7.1.0': dependencies: - parse-path: 7.0.0 + parse-path: 7.1.0 - '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0)(typescript@5.9.2))(eslint@9.36.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.14.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/type-utils': 8.14.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.14.0 - eslint: 9.15.0 + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 + eslint: 9.36.0 graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.16.0 - '@typescript-eslint/type-utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.16.0 - eslint: 9.15.0 - graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.14.0(eslint@9.15.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.44.1(eslint@9.36.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.14.0 - debug: 4.3.7 - eslint: 9.15.0 - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + eslint: 9.36.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3)': + '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.16.0 - '@typescript-eslint/types': 8.16.0 - '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.16.0 - debug: 4.3.7 - eslint: 9.15.0 - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + debug: 4.4.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.14.0': + '@typescript-eslint/scope-manager@8.44.1': dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 - '@typescript-eslint/scope-manager@8.16.0': + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.16.0 - '@typescript-eslint/visitor-keys': 8.16.0 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.14.0(eslint@9.15.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.15.0)(typescript@5.6.3) - debug: 4.3.7 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + debug: 4.4.3 + eslint: 9.36.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - - eslint - supports-color - '@typescript-eslint/type-utils@8.16.0(eslint@9.15.0)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - debug: 4.3.7 - eslint: 9.15.0 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.14.0': {} - - '@typescript-eslint/types@8.16.0': {} + '@typescript-eslint/types@8.44.1': {} - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 - debug: 4.3.7 - fast-glob: 3.3.2 + '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.16.0(typescript@5.6.3)': + '@typescript-eslint/utils@8.44.1(eslint@9.36.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.16.0 - '@typescript-eslint/visitor-keys': 8.16.0 - debug: 4.3.7 - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.14.0(eslint@9.15.0)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) - eslint: 9.15.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@8.16.0(eslint@9.15.0)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) - '@typescript-eslint/scope-manager': 8.16.0 - '@typescript-eslint/types': 8.16.0 - '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) - eslint: 9.15.0 - optionalDependencies: - typescript: 5.6.3 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + eslint: 9.36.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.14.0': + '@typescript-eslint/visitor-keys@8.44.1': dependencies: - '@typescript-eslint/types': 8.14.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@8.16.0': - dependencies: - '@typescript-eslint/types': 8.16.0 - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/types': 8.44.1 + eslint-visitor-keys: 4.2.1 - '@vitest/expect@3.1.3': + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@5.4.11(@types/node@24.0.1))': + '@vitest/mocker@3.2.4(vite@5.4.20(@types/node@24.5.2))': dependencies: - '@vitest/spy': 3.1.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.19 optionalDependencies: - vite: 5.4.11(@types/node@24.0.1) + vite: 5.4.20(@types/node@24.5.2) - '@vitest/pretty-format@3.1.3': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.1.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 - magic-string: 0.30.17 + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/spy@3.1.3': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.4 - '@vitest/ui@3.1.3(vitest@3.1.3)': + '@vitest/ui@3.2.4(vitest@3.2.4)': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.2.4 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 - sirv: 3.0.1 - tinyglobby: 0.2.13 + sirv: 3.0.2 + tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.1.3(@types/node@24.0.1)(@vitest/ui@3.1.3) + vitest: 3.2.4(@types/node@24.5.2)(@vitest/ui@3.2.4) - '@vitest/utils@3.1.3': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 tinyrainbow: 2.0.0 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.0 + acorn: 8.15.0 - acorn@8.14.0: {} + acorn@8.15.0: {} - agent-base@7.1.3: {} + agent-base@7.1.4: {} ajv@6.12.6: dependencies: @@ -2864,19 +2774,19 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.0.0: + ansi-escapes@7.1.1: dependencies: environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} argparse@2.0.1: {} @@ -2893,7 +2803,7 @@ snapshots: atomically@2.0.3: dependencies: stubborn-fs: 1.2.5 - when-exit: 2.1.3 + when-exit: 2.1.4 balanced-match@1.0.2: {} @@ -2908,16 +2818,16 @@ snapshots: chalk: 5.4.1 cli-boxes: 3.0.0 string-width: 7.2.0 - type-fest: 4.26.1 + type-fest: 4.41.0 widest-line: 5.0.0 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -2927,7 +2837,7 @@ snapshots: bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 cac@6.7.14: {} @@ -2935,28 +2845,28 @@ snapshots: camelcase@8.0.0: {} - chai@5.2.0: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 + loupe: 3.2.1 + pathval: 2.0.1 chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} - chalk@5.4.1: {} - chardet@0.7.0: {} + chalk@5.6.2: {} + + chardet@2.1.0: {} check-error@2.1.1: {} - ci-info@4.2.0: {} + ci-info@4.3.0: {} cli-boxes@3.0.0: {} @@ -2981,7 +2891,7 @@ snapshots: colorette@2.0.20: {} - commander@12.1.0: {} + commander@13.1.0: {} concat-map@0.0.1: {} @@ -2990,27 +2900,21 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - configstore@7.0.0: + configstore@7.1.0: dependencies: atomically: 2.0.3 dot-prop: 9.0.0 graceful-fs: 4.2.11 xdg-basedir: 5.1.0 - cosmiconfig@9.0.0(typescript@5.6.3): + cosmiconfig@9.0.0(typescript@5.9.2): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.6.3 - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + typescript: 5.9.2 cross-spawn@7.0.6: dependencies: @@ -3020,11 +2924,7 @@ snapshots: data-uri-to-buffer@6.0.2: {} - debug@4.3.7: - dependencies: - ms: 2.1.3 - - debug@4.4.0: + debug@4.4.3: dependencies: ms: 2.1.3 @@ -3051,9 +2951,9 @@ snapshots: dot-prop@9.0.0: dependencies: - type-fest: 4.26.1 + type-fest: 4.41.0 - emoji-regex@10.4.0: {} + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} @@ -3061,7 +2961,7 @@ snapshots: environment@1.1.0: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -3105,51 +3005,52 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@9.15.0): + eslint-config-prettier@9.1.2(eslint@9.36.0): dependencies: - eslint: 9.15.0 + eslint: 9.36.0 - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.15.0))(eslint@9.15.0)(prettier@3.3.3): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.36.0))(eslint@9.36.0)(prettier@3.6.2): dependencies: - eslint: 9.15.0 - prettier: 3.3.3 + eslint: 9.36.0 + prettier: 3.6.2 prettier-linter-helpers: 1.0.0 - synckit: 0.9.1 + synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.0(eslint@9.15.0) + eslint-config-prettier: 9.1.2(eslint@9.36.0) - eslint-scope@8.2.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.15.0: + eslint@9.36.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.0 - '@eslint/core': 0.9.0 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.15.0 - '@eslint/plugin-kit': 0.2.3 - '@humanfs/node': 0.16.6 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3167,11 +3068,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -3187,7 +3088,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -3195,7 +3096,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -3215,18 +3116,12 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 - pretty-ms: 9.2.0 + pretty-ms: 9.3.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 - - expect-type@1.2.1: {} + yoctocolors: 2.1.2 - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 + expect-type@1.2.2: {} fast-content-type-parse@2.0.1: {} @@ -3234,7 +3129,7 @@ snapshots: fast-diff@1.3.0: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -3246,13 +3141,13 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.17.1: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fflate@0.8.2: {} @@ -3275,19 +3170,11 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.3 keyv: 4.5.4 - flatted@3.3.1: {} - flatted@3.3.3: {} - fs-extra@11.2.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -3295,7 +3182,7 @@ snapshots: function-bind@1.1.2: {} - get-east-asian-width@1.2.0: {} + get-east-asian-width@1.4.0: {} get-stream@8.0.1: {} @@ -3304,18 +3191,17 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-uri@6.0.3: + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.0 - fs-extra: 11.2.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color git-up@8.1.1: dependencies: - is-ssh: 1.4.0 + is-ssh: 1.4.1 parse-url: 9.2.0 git-url-parse@16.0.0: @@ -3345,12 +3231,12 @@ snapshots: globals@14.0.0: {} - globals@15.12.0: {} + globals@15.15.0: {} globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 @@ -3370,15 +3256,15 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -3386,15 +3272,17 @@ snapshots: human-signals@8.0.1: {} - husky@9.1.6: {} + husky@9.1.7: {} - iconv-lite@0.4.24: + iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 ignore@5.3.2: {} - import-fresh@3.3.0: + ignore@7.0.5: {} + + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -3412,27 +3300,24 @@ snapshots: ini@4.1.1: {} - inquirer@12.3.0(@types/node@24.0.1): + inquirer@12.3.0(@types/node@24.5.2): dependencies: - '@inquirer/core': 10.1.13(@types/node@24.0.1) - '@inquirer/prompts': 7.5.3(@types/node@24.0.1) - '@inquirer/type': 3.0.7(@types/node@24.0.1) - '@types/node': 24.0.1 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/prompts': 7.8.6(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + '@types/node': 24.5.2 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 - rxjs: 7.8.1 + rxjs: 7.8.2 interpret@1.4.0: {} - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.0.1: {} is-arrayish@0.2.1: {} - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -3444,9 +3329,9 @@ snapshots: is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.4.0 is-glob@4.0.3: dependencies: @@ -3465,7 +3350,7 @@ snapshots: is-interactive@2.0.0: {} - is-npm@6.0.0: {} + is-npm@6.1.0: {} is-number@7.0.0: {} @@ -3473,9 +3358,9 @@ snapshots: is-plain-obj@4.1.0: {} - is-ssh@1.4.0: + is-ssh@1.4.1: dependencies: - protocols: 2.0.1 + protocols: 2.0.2 is-stream@3.0.0: {} @@ -3501,12 +3386,12 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -3515,17 +3400,11 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 - ky@1.7.2: {} + ky@1.10.0: {} latest-version@9.0.0: dependencies: @@ -3536,33 +3415,33 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - lint-staged@15.2.10: + lint-staged@15.5.2: dependencies: - chalk: 5.3.0 - commander: 12.1.0 - debug: 4.3.7 + chalk: 5.6.2 + commander: 13.1.0 + debug: 4.4.3 execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.5 + lilconfig: 3.1.3 + listr2: 8.3.3 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.5.1 + yaml: 2.8.1 transitivePeerDependencies: - supports-color - listr2@8.2.5: + listr2@8.3.3: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 locate-path@6.0.0: dependencies: @@ -3589,21 +3468,21 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.0.0 + ansi-escapes: 7.1.1 cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 - loupe@3.1.3: {} + loupe@3.2.1: {} lru-cache@7.18.3: {} - macos-release@3.3.0: {} + macos-release@3.4.0: {} - magic-string@0.30.17: + magic-string@0.30.19: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 merge-stream@2.0.0: {} @@ -3626,11 +3505,11 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -3640,7 +3519,7 @@ snapshots: mute-stream@2.0.0: {} - nanoid@3.3.7: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -3697,15 +3576,13 @@ snapshots: log-symbols: 6.0.0 stdin-discarder: 0.2.2 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 os-name@6.0.0: dependencies: - macos-release: 3.3.0 + macos-release: 3.4.0 windows-release: 6.1.0 - os-tmpdir@1.0.2: {} - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -3717,9 +3594,9 @@ snapshots: pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.0 - get-uri: 6.0.3 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -3734,8 +3611,8 @@ snapshots: package-json@10.0.1: dependencies: - ky: 1.7.2 - registry-auth-token: 5.0.2 + ky: 1.10.0 + registry-auth-token: 5.1.0 registry-url: 6.0.1 semver: 7.6.3 @@ -3745,21 +3622,21 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 - error-ex: 1.3.2 + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-ms@4.0.0: {} - parse-path@7.0.0: + parse-path@7.1.0: dependencies: - protocols: 2.0.1 + protocols: 2.0.2 parse-url@9.2.0: dependencies: '@types/parse-path': 7.1.0 - parse-path: 7.0.0 + parse-path: 7.1.0 path-exists@4.0.0: {} @@ -3775,19 +3652,19 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pidtree@0.6.0: {} - postcss@8.4.49: + postcss@8.5.6: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -3797,20 +3674,20 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.3: {} + prettier@3.6.2: {} - pretty-ms@9.2.0: + pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 proto-list@1.2.4: {} - protocols@2.0.1: {} + protocols@2.0.2: {} proxy-agent@6.5.0: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -3824,7 +3701,7 @@ snapshots: punycode@2.3.1: {} - pupa@3.1.0: + pupa@3.3.0: dependencies: escape-goat: 4.0.0 @@ -3839,9 +3716,9 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 - registry-auth-token@5.0.2: + registry-auth-token@5.1.0: dependencies: '@pnpm/npm-conf': 2.3.1 @@ -3849,18 +3726,18 @@ snapshots: dependencies: rc: 1.2.8 - release-it@18.1.2(@types/node@24.0.1)(typescript@5.6.3): + release-it@18.1.2(@types/node@24.5.2)(typescript@5.9.2): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 21.0.2 async-retry: 1.3.3 chalk: 5.4.1 - ci-info: 4.2.0 - cosmiconfig: 9.0.0(typescript@5.6.3) + ci-info: 4.3.0 + cosmiconfig: 9.0.0(typescript@5.9.2) execa: 9.5.2 git-url-parse: 16.0.0 globby: 14.0.2 - inquirer: 12.3.0(@types/node@24.0.1) + inquirer: 12.3.0(@types/node@24.5.2) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 @@ -3883,9 +3760,9 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -3896,35 +3773,39 @@ snapshots: retry@0.13.1: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rfdc@1.4.1: {} - rollup@4.27.2: + rollup@4.52.2: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.27.2 - '@rollup/rollup-android-arm64': 4.27.2 - '@rollup/rollup-darwin-arm64': 4.27.2 - '@rollup/rollup-darwin-x64': 4.27.2 - '@rollup/rollup-freebsd-arm64': 4.27.2 - '@rollup/rollup-freebsd-x64': 4.27.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 - '@rollup/rollup-linux-arm-musleabihf': 4.27.2 - '@rollup/rollup-linux-arm64-gnu': 4.27.2 - '@rollup/rollup-linux-arm64-musl': 4.27.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 - '@rollup/rollup-linux-riscv64-gnu': 4.27.2 - '@rollup/rollup-linux-s390x-gnu': 4.27.2 - '@rollup/rollup-linux-x64-gnu': 4.27.2 - '@rollup/rollup-linux-x64-musl': 4.27.2 - '@rollup/rollup-win32-arm64-msvc': 4.27.2 - '@rollup/rollup-win32-ia32-msvc': 4.27.2 - '@rollup/rollup-win32-x64-msvc': 4.27.2 + '@rollup/rollup-android-arm-eabi': 4.52.2 + '@rollup/rollup-android-arm64': 4.52.2 + '@rollup/rollup-darwin-arm64': 4.52.2 + '@rollup/rollup-darwin-x64': 4.52.2 + '@rollup/rollup-freebsd-arm64': 4.52.2 + '@rollup/rollup-freebsd-x64': 4.52.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.2 + '@rollup/rollup-linux-arm-musleabihf': 4.52.2 + '@rollup/rollup-linux-arm64-gnu': 4.52.2 + '@rollup/rollup-linux-arm64-musl': 4.52.2 + '@rollup/rollup-linux-loong64-gnu': 4.52.2 + '@rollup/rollup-linux-ppc64-gnu': 4.52.2 + '@rollup/rollup-linux-riscv64-gnu': 4.52.2 + '@rollup/rollup-linux-riscv64-musl': 4.52.2 + '@rollup/rollup-linux-s390x-gnu': 4.52.2 + '@rollup/rollup-linux-x64-gnu': 4.52.2 + '@rollup/rollup-linux-x64-musl': 4.52.2 + '@rollup/rollup-openharmony-arm64': 4.52.2 + '@rollup/rollup-win32-arm64-msvc': 4.52.2 + '@rollup/rollup-win32-ia32-msvc': 4.52.2 + '@rollup/rollup-win32-x64-gnu': 4.52.2 + '@rollup/rollup-win32-x64-msvc': 4.52.2 fsevents: 2.3.3 - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} run-async@3.0.0: {} @@ -3932,7 +3813,7 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -3940,6 +3821,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.2: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -3956,7 +3839,7 @@ snapshots: signal-exit@4.1.0: {} - sirv@3.0.1: + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 mrmime: 2.0.1 @@ -3966,27 +3849,27 @@ snapshots: slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: + slice-ansi@7.1.2: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 smart-buffer@4.2.0: {} socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 - socks: 2.8.3 + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.3: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.0.1 smart-buffer: 4.2.0 source-map-js@1.2.1: {} @@ -3994,8 +3877,6 @@ snapshots: source-map@0.6.1: optional: true - sprintf-js@1.1.3: {} - stackback@0.0.2: {} std-env@3.9.0: {} @@ -4012,17 +3893,17 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.2.0 - strip-ansi: 7.1.0 + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-final-newline@3.0.0: {} @@ -4032,6 +3913,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + stubborn-fs@1.2.5: {} supports-color@7.2.0: @@ -4040,29 +3925,24 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.9.1: + synckit@0.11.11: dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.8.1 + '@pkgr/core': 0.2.9 tinybench@2.9.0: {} tinyexec@0.3.2: {} - tinyglobby@0.2.13: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - tinypool@1.0.2: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} - - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 + tinyspy@4.0.4: {} to-regex-range@5.0.1: dependencies: @@ -4070,9 +3950,9 @@ snapshots: totalist@3.0.1: {} - ts-api-utils@1.4.0(typescript@5.6.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.6.3 + typescript: 5.9.2 tslib@2.8.1: {} @@ -4084,22 +3964,22 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.26.1: {} + type-fest@4.41.0: {} - typescript-eslint@8.16.0(eslint@9.15.0)(typescript@5.6.3): + typescript-eslint@8.44.1(eslint@9.36.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/parser': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3) - eslint: 9.15.0 - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0)(typescript@5.9.2))(eslint@9.36.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0)(typescript@5.9.2) + eslint: 9.36.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.6.3: {} + typescript@5.9.2: {} - undici-types@7.8.0: {} + undici-types@7.12.0: {} undici@6.21.1: {} @@ -4109,18 +3989,16 @@ snapshots: universal-user-agent@7.0.3: {} - universalify@2.0.1: {} - update-notifier@7.3.1: dependencies: boxen: 8.0.1 chalk: 5.4.1 - configstore: 7.0.0 + configstore: 7.1.0 is-in-ci: 1.0.0 is-installed-globally: 1.0.0 - is-npm: 6.0.0 + is-npm: 6.1.0 latest-version: 9.0.0 - pupa: 3.1.0 + pupa: 3.3.0 semver: 7.6.3 xdg-basedir: 5.1.0 @@ -4130,13 +4008,13 @@ snapshots: url-join@5.0.0: {} - vite-node@3.1.3(@types/node@24.0.1): + vite-node@3.2.4(@types/node@24.5.2): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 5.4.11(@types/node@24.0.1) + vite: 5.4.20(@types/node@24.5.2) transitivePeerDependencies: - '@types/node' - less @@ -4148,41 +4026,43 @@ snapshots: - supports-color - terser - vite@5.4.11(@types/node@24.0.1): + vite@5.4.20(@types/node@24.5.2): dependencies: esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.27.2 + postcss: 8.5.6 + rollup: 4.52.2 optionalDependencies: - '@types/node': 24.0.1 + '@types/node': 24.5.2 fsevents: 2.3.3 - vitest@3.1.3(@types/node@24.0.1)(@vitest/ui@3.1.3): - dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@5.4.11(@types/node@24.0.1)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.1 - magic-string: 0.30.17 + vitest@3.2.4(@types/node@24.5.2)(@vitest/ui@3.2.4): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@5.4.20(@types/node@24.5.2)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.2.2 + magic-string: 0.30.19 pathe: 2.0.3 + picomatch: 4.0.3 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 5.4.11(@types/node@24.0.1) - vite-node: 3.1.3(@types/node@24.0.1) + vite: 5.4.20(@types/node@24.5.2) + vite-node: 3.2.4(@types/node@24.5.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.0.1 - '@vitest/ui': 3.1.3(vitest@3.1.3) + '@types/node': 24.5.2 + '@vitest/ui': 3.2.4(vitest@3.2.4) transitivePeerDependencies: - less - lightningcss @@ -4194,7 +4074,7 @@ snapshots: - supports-color - terser - when-exit@2.1.3: {} + when-exit@2.1.4: {} which@2.0.2: dependencies: @@ -4223,22 +4103,22 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@9.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} xdg-basedir@5.1.0: {} - yaml@2.5.1: {} + yaml@2.8.1: {} yargs-parser@21.1.1: {} yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} + yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.1: {} + yoctocolors@2.1.2: {} diff --git a/src/animation.ts b/src/animation.ts index 3305074..b4e65da 100644 --- a/src/animation.ts +++ b/src/animation.ts @@ -1,10 +1,12 @@ +// import { getTimingFunction, mergeColorProgress } from '@lightningjs/renderer/utils'; import { getTimingFunction, mergeColorProgress } from './timings.js'; -//import { getTimingFunction, mergeColorProgress } from '@lightningjs/renderer/utils'; import { type ElementNode, LightningRendererNumberProps, } from './elementNode.js'; import { type IRendererStage } from './lightningInit.js'; +import { TimingFunction } from '@lightningjs/renderer'; +import { isFunc } from './utils.js'; /** * Simplified Animation Settings @@ -12,7 +14,7 @@ import { type IRendererStage } from './lightningInit.js'; export interface SimpleAnimationSettings { duration?: number; delay?: number; - easing?: string; + easing?: string | TimingFunction; } /** @@ -29,7 +31,7 @@ interface SimpleAnimationNodeConfig { node: ElementNode; duration: number; delay: number; - easing: string; + easing: string | TimingFunction; progress: number; delayFor: number; timingFunction: (t: number) => number | undefined; @@ -74,8 +76,7 @@ export class SimpleAnimation { const duration = settings.duration ?? 0; const delay = settings.delay ?? 0; const easing = settings.easing || 'linear'; - const timingFunction = getTimingFunction(easing); - + const timingFunction = isFunc(easing) ? easing : getTimingFunction(easing); const targetValue = value; const startValue = node[key] as number; diff --git a/src/domRenderer.ts b/src/domRenderer.ts index e41b0d9..dabb6cd 100644 --- a/src/domRenderer.ts +++ b/src/domRenderer.ts @@ -5,6 +5,7 @@ Experimental DOM renderer */ import * as lng from '@lightningjs/renderer'; +import { EventEmitter } from '@lightningjs/renderer/utils'; import { Config } from './config.js'; import { @@ -19,12 +20,19 @@ import { IRendererTextNode, IRendererTextNodeProps, } from './lightningInit.js'; -import { EventEmitter } from '@lightningjs/renderer/utils'; +import { isFunc } from './utils.js'; const colorToRgba = (c: number) => `rgba(${(c >> 24) & 0xff},${(c >> 16) & 0xff},${(c >> 8) & 0xff},${(c & 0xff) / 255})`; -function applyEasing(easing: string, progress: number): number { +function applyEasing( + easing: string | lng.TimingFunction, + progress: number, +): number { + if (isFunc(easing)) { + return easing(progress); + } + switch (easing) { case 'linear': default: @@ -104,9 +112,6 @@ function updateAnimations(time: number) { if (task.settings.loop || task.iteration < task.settings.repeat - 1) { task.iteration++; task.timeStart = time - task.settings.delay; - if (task.settings.repeatDelay > 0) { - task.timeStart += task.settings.repeatDelay; - } requestAnimationUpdate(); } // Animation complete @@ -163,7 +168,6 @@ class AnimationController implements lng.IAnimationController { easing: rawSettings.easing ?? 'linear', loop: rawSettings.loop ?? false, repeat: rawSettings.repeat ?? 1, - repeatDelay: rawSettings.repeatDelay ?? 0, stopMethod: false, }; @@ -276,11 +280,11 @@ function updateNodeStyles(node: DOMNode | DOMText) { let { x, y } = props; if (props.mountX != null) { - x -= (props.width ?? 0) * props.mountX; + x -= (props.w ?? 0) * props.mountX; } if (props.mountY != null) { - y -= (props.height ?? 0) * props.mountY; + y -= (props.h ?? 0) * props.mountY; } if (x !== 0) transform += `translateX(${x}px)`; @@ -320,9 +324,6 @@ function updateNodeStyles(node: DOMNode | DOMText) { if (textProps.fontWeight !== 'normal') { style += `font-weight: ${textProps.fontWeight};`; } - if (textProps.fontStretch !== 'normal') { - style += `font-stretch: ${textProps.fontStretch};`; - } if (textProps.lineHeight != null) { style += `line-height: ${textProps.lineHeight}px;`; } @@ -336,14 +337,14 @@ function updateNodeStyles(node: DOMNode | DOMText) { let maxLines = textProps.maxLines || Infinity; switch (textProps.contain) { case 'width': - style += `width: ${props.width}px; overflow: hidden;`; + style += `width: ${props.w}px; overflow: hidden;`; break; case 'both': { let lineHeight = getNodeLineHeight(textProps); - maxLines = Math.min(maxLines, Math.floor(props.height / lineHeight)); + maxLines = Math.min(maxLines, Math.floor(props.h / lineHeight)); maxLines = Math.max(1, maxLines); let height = maxLines * lineHeight; - style += `width: ${props.width}px; height: ${height}px; overflow: hidden;`; + style += `width: ${props.w}px; height: ${height}px; overflow: hidden;`; break; } case 'none': @@ -367,8 +368,8 @@ function updateNodeStyles(node: DOMNode | DOMText) { } // else { - if (props.width !== 0) style += `width: ${props.width}px;`; - if (props.height !== 0) style += `height: ${props.height}px;`; + if (props.w !== 0) style += `width: ${props.w}px;`; + if (props.h !== 0) style += `height: ${props.h}px;`; let vGradient = props.colorBottom !== props.colorTop @@ -445,39 +446,33 @@ function updateNodeStyles(node: DOMNode | DOMText) { bgStyle += `background-color: ${colorToRgba(props.color)};`; } - if (props.shader != null) { - let effects = props.shader.props?.effects; - if (Array.isArray(effects)) { - for (let effect of effects) { - switch (effect.type) { - case 'radius': { - let radius = effect.props?.radius; - if (typeof radius === 'number' && radius > 0) { - radiusStyle += `border-radius: ${radius}px;`; - } else if (Array.isArray(radius) && radius.length === 4) { - radiusStyle += `border-radius: ${radius[0]}px ${radius[1]}px ${radius[2]}px ${radius[3]}px;`; - } - break; - } - case 'border': { - let borderWidth = effect.props?.width; - let borderColor = effect.props?.color; - if ( - typeof borderWidth === 'number' && - borderWidth !== 0 && - typeof borderColor === 'number' && - borderColor !== 0 - ) { - // css border impacts the element's box size when box-shadow doesn't - borderStyle += `box-shadow: inset 0px 0px 0px ${borderWidth}px ${colorToRgba(borderColor)};`; - } - break; - } - default: - console.warn(`Unknown shader effect type: ${effect.type}`); - break; - } - } + if (props.shader?.props != null) { + let shader = props.shader.props; + + let borderWidth = shader['border-w']; + let borderColor = shader['border-color']; + let borderGap = shader['border-gap'] ?? 0; + let borderInset = shader['border-inset'] ?? true; + let radius = shader['radius']; + + // Border + if ( + typeof borderWidth === 'number' && + borderWidth !== 0 && + typeof borderColor === 'number' && + borderColor !== 0 + ) { + // Handle inset borders by making gap negative + let gap = borderInset ? -(borderWidth + borderGap) : borderGap; + + borderStyle += `outline: ${borderWidth}px solid ${colorToRgba(borderColor)};`; + borderStyle += `outline-offset: ${gap}px;`; + } + // Rounded + if (typeof radius === 'number' && radius > 0) { + radiusStyle += `border-radius: ${radius}px;`; + } else if (Array.isArray(radius) && radius.length === 4) { + radiusStyle += `border-radius: ${radius[0]}px ${radius[1]}px ${radius[2]}px ${radius[3]}px;`; } } @@ -544,20 +539,17 @@ function updateDOMTextSize(node: DOMText): void { switch (node.contain) { case 'width': size = getElSize(node); - if (node.props.height !== size.height) { - node.props.height = size.height; + if (node.props.h !== size.height) { + node.props.h = size.height; updateNodeStyles(node); node.emit('loaded'); } break; case 'none': size = getElSize(node); - if ( - node.props.height !== size.height || - node.props.width !== size.width - ) { - node.props.width = size.width; - node.props.height = size.height; + if (node.props.h !== size.height || node.props.w !== size.width) { + node.props.w = size.width; + node.props.h = size.height; updateNodeStyles(node); node.emit('loaded'); } @@ -609,8 +601,8 @@ function resolveNodeDefaults( return { x: props.x ?? 0, y: props.y ?? 0, - width: props.width ?? 0, - height: props.height ?? 0, + w: props.w ?? 0, + h: props.h ?? 0, alpha: props.alpha ?? 1, autosize: props.autosize ?? false, boundsMargin: props.boundsMargin ?? null, @@ -650,8 +642,6 @@ function resolveNodeDefaults( rtt: props.rtt ?? false, data: {}, imageType: props.imageType, - strictBounds: props.strictBounds ?? false, - preventCleanup: props.preventCleanup ?? false, }; } @@ -666,19 +656,18 @@ function resolveTextNodeDefaults( fontFamily: props.fontFamily ?? 'sans-serif', fontStyle: props.fontStyle ?? 'normal', fontWeight: props.fontWeight ?? 'normal', - fontStretch: props.fontStretch ?? 'normal', + forceLoad: props.forceLoad ?? false, textAlign: props.textAlign ?? 'left', contain: props.contain ?? 'none', - scrollable: props.scrollable ?? false, - scrollY: props.scrollY ?? 0, offsetY: props.offsetY ?? 0, letterSpacing: props.letterSpacing ?? 0, - lineHeight: props.lineHeight, // `undefined` is a valid value + lineHeight: props.lineHeight ?? 0, maxLines: props.maxLines ?? 0, - textBaseline: props.textBaseline ?? 'alphabetic', + maxWidth: props.maxWidth ?? 0, + maxHeight: props.maxHeight ?? 0, verticalAlign: props.verticalAlign ?? 'middle', overflowSuffix: props.overflowSuffix ?? '...', - debug: props.debug ?? {}, + wordBreak: props.wordBreak ?? 'normal', }; } @@ -698,8 +687,6 @@ class DOMNode extends EventEmitter implements IRendererNode { renderState: lng.CoreNodeRenderState = 0 /* Init */; - preventCleanup = true; - constructor( public stage: IRendererStage, public props: IRendererNodeProps, @@ -745,18 +732,32 @@ class DOMNode extends EventEmitter implements IRendererNode { this.props.y = v; updateNodeStyles(this); } + get w() { + return this.props.w; + } + set w(v) { + this.props.w = v; + updateNodeStyles(this); + } + get h() { + return this.props.h; + } + set h(v) { + this.props.h = v; + updateNodeStyles(this); + } get width() { - return this.props.width; + return this.props.w; } set width(v) { - this.props.width = v; + this.props.w = v; updateNodeStyles(this); } get height() { - return this.props.height; + return this.props.h; } set height(v) { - this.props.height = v; + this.props.h = v; updateNodeStyles(this); } get alpha() { @@ -962,14 +963,6 @@ class DOMNode extends EventEmitter implements IRendererNode { this.props.shader = v; updateNodeStyles(this); } - get strictBounds() { - return this.props.strictBounds; - } - set strictBounds(v) { - this.props.strictBounds = v; - updateNodeStyles(this); - } - get data(): IRendererNode['data'] { return this.props.data; } @@ -1069,12 +1062,11 @@ class DOMText extends DOMNode { this.props.fontWeight = v; updateNodeStyles(this); } - get fontStretch() { - return this.props.fontStretch; + get forceLoad() { + return this.props.forceLoad; } - set fontStretch(v) { - this.props.fontStretch = v; - updateNodeStyles(this); + set forceLoad(v) { + this.props.forceLoad = v; } get lineHeight() { return this.props.lineHeight; @@ -1083,6 +1075,20 @@ class DOMText extends DOMNode { this.props.lineHeight = v; updateNodeStyles(this); } + get maxWidth() { + return this.props.maxWidth; + } + set maxWidth(v) { + this.props.maxWidth = v; + updateNodeStyles(this); + } + get maxHeight() { + return this.props.maxHeight; + } + set maxHeight(v) { + this.props.maxHeight = v; + updateNodeStyles(this); + } get letterSpacing() { return this.props.letterSpacing; } @@ -1125,13 +1131,6 @@ class DOMText extends DOMNode { this.props.verticalAlign = v; updateNodeStyles(this); } - get textBaseline() { - return this.props.textBaseline; - } - set textBaseline(v) { - this.props.textBaseline = v; - updateNodeStyles(this); - } get textRendererOverride() { return this.props.textRendererOverride; } @@ -1139,20 +1138,6 @@ class DOMText extends DOMNode { this.props.textRendererOverride = v; updateNodeStyles(this); } - get scrollable() { - return this.props.scrollable; - } - set scrollable(v) { - this.props.scrollable = v; - updateNodeStyles(this); - } - get scrollY() { - return this.props.scrollY; - } - set scrollY(v) { - this.props.scrollY = v; - updateNodeStyles(this); - } get offsetY() { return this.props.offsetY; } @@ -1160,11 +1145,11 @@ class DOMText extends DOMNode { this.props.offsetY = v; updateNodeStyles(this); } - get debug() { - return this.props.debug; + get wordBreak() { + return this.props.wordBreak; } - set debug(v) { - this.props.debug = v; + set wordBreak(v) { + this.props.wordBreak = v; updateNodeStyles(this); } } @@ -1227,27 +1212,21 @@ export class DOMRendererMain implements IRendererMain { renderer: { mode: 'canvas', }, - fontManager: { - addFontFace: () => {}, - }, + loadFont: async () => {}, shManager: { registerShaderType() {}, }, animationManager: { - registerAnimation(anim) { - console.log('registerAnimation', anim); - }, - unregisterAnimation(anim) { - console.log('unregisterAnimation', anim); - }, + registerAnimation() {}, + unregisterAnimation() {}, }, }; this.root = new DOMNode( this.stage, resolveNodeDefaults({ - width: settings.appWidth ?? 1920, - height: settings.appHeight ?? 1080, + w: settings.appWidth ?? 1920, + h: settings.appHeight ?? 1080, shader: defaultShader, zIndex: 65534, }), @@ -1323,14 +1302,6 @@ export class DOMRendererMain implements IRendererMain { return { type, props }; } - createEffect( - type: keyof lng.EffectMap, - props: Record, - name?: string, - ): lng.EffectDescUnion { - return { type, props, name } as any; - } - on(name: string, callback: (target: any, data: any) => void) { console.log('on', name, callback); } diff --git a/src/elementNode.ts b/src/elementNode.ts index f38fb0f..f203949 100644 --- a/src/elementNode.ts +++ b/src/elementNode.ts @@ -35,17 +35,18 @@ import { isElementText, logRenderTree, isFunction, + spliceItem, } from './utils.js'; -import { Config, isDev, SHADERS_ENABLED } from './config.js'; +import { Config, DOM_RENDERING, isDev, SHADERS_ENABLED } from './config.js'; import type { RendererMain, INode, INodeAnimateProps, - LinearGradientEffectProps, IAnimationController, - EffectDescUnion, - RadialGradientEffectProps, - RadialProgressEffectProps, + LinearGradientProps, + RadialGradientProps, + ShadowProps, + CoreShaderNode, } from '@lightningjs/renderer'; import { assertTruthy } from '@lightningjs/renderer/utils'; import { NodeType } from './nodeTypes.js'; @@ -55,16 +56,6 @@ import simpleAnimation, { SimpleAnimationSettings } from './animation.js'; let layoutRunQueued = false; const layoutQueue = new Set(); -function runLayout() { - layoutRunQueued = false; - const queue = [...layoutQueue]; - layoutQueue.clear(); - for (let i = queue.length - 1; i >= 0; i--) { - const node = queue[i] as ElementNode; - node.updateLayout(); - } -} - function addToLayoutQueue(node: ElementNode) { layoutQueue.add(node); if (!layoutRunQueued) { @@ -73,45 +64,34 @@ function addToLayoutQueue(node: ElementNode) { } } -function convertEffectsToShader( - node: ElementNode, - styleEffects: StyleEffects, -): IRendererShader { - const effects: EffectDescUnion[] = []; - for (let type in styleEffects) { - const props = styleEffects[type as keyof StyleEffects]; - - if (type === 'rounded') { - type = 'radius'; - } - - if (typeof props === 'object') { - effects.push(renderer.createEffect(type as any, props, type)); - } +function runLayout() { + layoutRunQueued = false; + const queue = [...layoutQueue]; + layoutQueue.clear(); + for (let i = queue.length - 1; i >= 0; i--) { + const node = queue[i] as ElementNode; + node.updateLayout(); } - return renderer.createShader('DynamicShader', { effects }); } -function borderAccessor( - direction: '' | 'Top' | 'Right' | 'Bottom' | 'Left' = '', -) { - return { - set(this: ElementNode, value: BorderStyle) { - // Format: width || { width, color } - if (isNumber(value)) { - value = { width: value, color: 0x000000ff }; - } - this.effects = this.effects - ? { - ...(this.effects || {}), - ...{ [`border${direction}`]: value }, - } - : { [`border${direction}`]: value }; - }, - get(this: ElementNode): BorderStyle | undefined { - return this.effects?.[`border${direction}`]; - }, - }; +const parseAndAssignShaderProps = ( + prefix: string, + obj: Record, + props: Record = {}, +) => { + if (!obj) return; + props[prefix] = obj; + Object.entries(obj).forEach(([key, value]) => { + let transformedKey = key === 'width' ? 'w' : key; + props[`${prefix}-${transformedKey}`] = value; + }); +}; + +function convertToShader(_node: ElementNode, v: StyleEffects): IRendererShader { + let type = 'rounded'; + if (v.border) type += 'WithBorder'; + if (v.shadow) type += 'WithShadow'; + return renderer.createShader(type, v as IRendererShaderProps); } export const LightningRendererNumberProps = [ @@ -125,7 +105,7 @@ export const LightningRendererNumberProps = [ 'colorTr', 'colorBl', 'colorBr', - 'height', + 'h', 'fontSize', 'lineHeight', 'mount', @@ -138,7 +118,7 @@ export const LightningRendererNumberProps = [ 'scale', 'scaleX', 'scaleY', - 'width', + 'w', 'worldX', 'worldY', 'x', @@ -161,7 +141,9 @@ const LightningRendererNonAnimatingProps = [ 'fontWeight', 'imageType', 'letterSpacing', + 'maxHeight', 'maxLines', + 'maxWidth', 'offsetY', 'overflowSuffix', 'preventCleanup', @@ -199,7 +181,7 @@ export interface ElementNode extends RendererNode { // Properties _animationQueue?: | Array<{ - props: Partial; + props: Partial>; animationSettings?: AnimationSettings; }> | undefined; @@ -243,11 +225,7 @@ export interface ElementNode extends RendererNode { alignItems?: 'flexStart' | 'flexEnd' | 'center'; alignSelf?: 'flexStart' | 'flexEnd' | 'center'; border?: BorderStyle; - borderBottom?: BorderStyle; - borderLeft?: BorderStyle; borderRadius?: BorderRadius; - borderRight?: BorderStyle; - borderTop?: BorderStyle; center?: boolean; centerX?: boolean; centerY?: boolean; @@ -266,9 +244,8 @@ export interface ElementNode extends RendererNode { | 'spaceBetween' | 'spaceAround' | 'spaceEvenly'; - linearGradient?: LinearGradientEffectProps; - radialGradient?: RadialGradientEffectProps; - radialProgress?: RadialProgressEffectProps; + linearGradient?: LinearGradientProps; + radialGradient?: RadialGradientProps; marginBottom?: number; marginLeft?: number; marginRight?: number; @@ -277,8 +254,8 @@ export interface ElementNode extends RendererNode { x: number; y: number; throttleInput?: number; - width: number; - height: number; + w: number; + h: number; zIndex?: number; transition?: | Record @@ -354,17 +331,28 @@ export class ElementNode extends Object { } get effects(): StyleEffects | undefined { - return this._effects; + return this.lng.shader; } set effects(v: StyleEffects) { - this._effects = v; - if (SHADERS_ENABLED && this.rendered) { - this.lng.shader = convertEffectsToShader(this, v); - // if (this.lng.shader) { - // updateShaderEffects(this, v); - // } else { - // } + if (!SHADERS_ENABLED) return; + let target = this.lng.shader || {}; + if (this.lng.shader?.program) { + target = this.lng.shader.props; + } + if (v.rounded) target.radius = v.rounded.radius; + if (v.borderRadius) target.radius = v.borderRadius; + if (v.border) parseAndAssignShaderProps('border', v.border, target); + if (v.shadow) parseAndAssignShaderProps('shadow', v.shadow, target); + + if (this.rendered) { + if (!this.lng.shader) { + this.lng.shader = convertToShader(this, target); + } else if (DOM_RENDERING) { + this.lng.shader = this.lng.shader; // lng.shader is a setter, force style update + } + } else { + this.lng.shader = target; } } @@ -390,6 +378,31 @@ export class ElementNode extends Object { } } + get height() { + return this.h; + } + + set height(h) { + this.h = h; + } + + get width() { + return this.w; + } + + set width(w) { + this.w = w; + } + + set fontWeight(v) { + this._fontWeight = v; + this.fontFamily = `{${this.fontFamily}${v}`; + } + + get fontWeight() { + return this._fontWeight; + } + insertChild( node: ElementNode | ElementText | TextNode, beforeNode?: ElementNode | ElementText | TextNode | null, @@ -410,21 +423,21 @@ export class ElementNode extends Object { if (beforeNode) { // SolidJS can move nodes around in the children array. // We need to insert following DOM insertBefore which moves elements. - this.removeChild(node); - const index = this.children.indexOf(beforeNode as ElementNode); - if (index >= 0) { - this.children.splice(index, 0, node as ElementNode); + spliceItem(this.children, node as ElementNode, 1); + if (spliceItem(this.children, beforeNode as ElementNode, 0, node) > -1) { return; } } + this.children.push(node as ElementNode); } removeChild(node: ElementNode | ElementText | TextNode) { - const nodeIndexToRemove = this.children.indexOf(node as ElementNode); - if (nodeIndexToRemove >= 0) { - this.children.splice(nodeIndexToRemove, 1); + if (spliceItem(this.children, node, 1) > -1) { node.onRemove?.call(node, node); + if (this.requiresLayout()) { + addToLayoutQueue(this); + } } } @@ -501,7 +514,7 @@ export class ElementNode extends Object { } animate( - props: Partial, + props: Partial>, animationSettings?: AnimationSettings, ): IAnimationController { isDev && @@ -513,7 +526,7 @@ export class ElementNode extends Object { } chain( - props: Partial, + props: Partial>, animationSettings?: AnimationSettings, ) { if (this._animationRunning) { @@ -621,9 +634,6 @@ export class ElementNode extends Object { _destroy() { if (isINode(this.lng)) { this.lng.destroy(); - if (this.parent?.requiresLayout()) { - this.parent.updateLayout(); - } } } @@ -884,8 +894,8 @@ export class ElementNode extends Object { } const props = node.lng; - const parentWidth = parent.width || 0; - const parentHeight = parent.height || 0; + const parentWidth = parent.w || 0; + const parentHeight = parent.h || 0; props.x = props.x || 0; props.y = props.y || 0; @@ -932,28 +942,36 @@ export class ElementNode extends Object { // contain is either width or both if (textProps.contain) { - if (!textProps.width) { - textProps.width = + if (!textProps.w) { + textProps.w = parentWidth - textProps.x! - (textProps.marginRight || 0); } if ( textProps.contain === 'both' && - !textProps.height && + !textProps.h && !textProps.maxLines ) { - textProps.height = + textProps.h = parentHeight - textProps.y! - (textProps.marginBottom || 0); } else if (textProps.maxLines === 1) { - textProps.height = (textProps.height || + textProps.h = (textProps.h || textProps.lineHeight || textProps.fontSize) as number; } + + if (textProps.contain === 'both') { + textProps.maxWidth = textProps.w; + textProps.maxHeight = textProps.h; + } else if (textProps.contain === 'width') { + textProps.maxWidth = textProps.w; + textProps.maxLines = textProps.maxLines ?? 1; + } } // Can you put effects on Text nodes? Need to confirm... - if (SHADERS_ENABLED && node._effects) { - props.shader = convertEffectsToShader(node, node._effects); + if (SHADERS_ENABLED && props.shader && !props.shader.program) { + props.shader = convertToShader(node, props.shader); } isDev && log('Rendering: ', this, props); @@ -961,7 +979,7 @@ export class ElementNode extends Object { props as unknown as IRendererTextNodeProps, ); if (parent.requiresLayout()) { - if (!props.width || !props.height) { + if (!props.w || !props.h) { node._layoutOnLoad(); } } @@ -969,13 +987,13 @@ export class ElementNode extends Object { // If its not an image or texture apply some defaults if (!props.texture) { // Set width and height to parent less offset - if (isNaN(props.width as number)) { - props.width = node.flexGrow ? 0 : parentWidth - props.x; + if (isNaN(props.w as number)) { + props.w = node.flexGrow ? 0 : parentWidth - props.x; node._calcWidth = true; } - if (isNaN(props.height as number)) { - props.height = parentHeight - props.y; + if (isNaN(props.h as number)) { + props.h = parentHeight - props.y; node._calcHeight = true; } @@ -990,8 +1008,8 @@ export class ElementNode extends Object { } } - if (SHADERS_ENABLED && node._effects) { - props.shader = convertEffectsToShader(node, node._effects); + if (SHADERS_ENABLED && props.shader && !props.shader.program) { + props.shader = convertToShader(node, props.shader); } isDev && log('Rendering: ', this, props); @@ -1077,20 +1095,63 @@ for (const key of LightningRendererNonAnimatingProps) { }); } -// Add Border Helpers -function createEffectAccessor(key: keyof StyleEffects) { +function createRawShaderAccessor(key: keyof StyleEffects) { return { set(this: ElementNode, value: T) { - this.effects = this.effects - ? { - ...this.effects, - [key]: value, - } - : { [key]: value }; + this.shader = [key, value as unknown as IRendererShaderProps]; }, - get(this: ElementNode): T | undefined { - return this.effects?.[key] as T | undefined; + get(this: ElementNode) { + return this.shader; + }, + }; +} + +function shaderAccessor | number>( + key: 'border' | 'shadow' | 'rounded', +) { + return { + set(this: ElementNode, value: T) { + let target = this.lng.shader || {}; + + let animationSettings: AnimationSettings | undefined; + if (this.lng.shader?.program) { + target = this.lng.shader.props; + const transitionKey = key === 'rounded' ? 'borderRadius' : key; + if ( + this.transition && + (this.transition === true || this.transition[transitionKey]) + ) { + target = {}; + animationSettings = + this.transition === true || this.transition[transitionKey] === true + ? undefined + : (this.transition[transitionKey] as + | undefined + | AnimationSettings); + } + } + + if (key === 'rounded' || typeof value === 'number') { + target.radius = value; + } else { + parseAndAssignShaderProps(key, value, target); + } + + if (this.rendered) { + if (!this.lng.shader) { + this.lng.shader = convertToShader(this, target); + } + } else { + this.lng.shader = target; + } + + if (animationSettings) { + this.animate({ shaderProps: target }, animationSettings).start(); + } + }, + get(this: ElementNode) { + return this.effects?.[key]; }, }; } @@ -1102,44 +1163,13 @@ if (isDev) { } Object.defineProperties(ElementNode.prototype, { - border: borderAccessor(), - borderLeft: borderAccessor('Left'), - borderRight: borderAccessor('Right'), - borderTop: borderAccessor('Top'), - borderBottom: borderAccessor('Bottom'), + border: shaderAccessor('border'), + shadow: shaderAccessor('shadow'), + rounded: shaderAccessor('rounded'), + // Alias for rounded + borderRadius: shaderAccessor('rounded'), linearGradient: - createEffectAccessor('linearGradient'), + createRawShaderAccessor('linearGradient'), radialGradient: - createEffectAccessor('radialGradient'), - radialProgress: createEffectAccessor( - 'radialProgressGradient', - ), - rounded: { - set(this: ElementNode, radius: BorderRadius) { - this.effects = this.effects - ? { - ...this.effects, - radius: { radius }, - } - : { radius: { radius } }; - }, - - get(this: ElementNode): BorderRadius | undefined { - return this.effects?.radius?.radius; - }, - }, - borderRadius: { - set(this: ElementNode, radius: BorderRadius) { - this.effects = this.effects - ? { - ...this.effects, - radius: { radius }, - } - : { radius: { radius } }; - }, - - get(this: ElementNode): BorderRadius | undefined { - return this.effects?.radius?.radius; - }, - }, + createRawShaderAccessor('radialGradient'), }); diff --git a/src/index.ts b/src/index.ts index 0307185..74f41e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,9 +5,9 @@ export * from './utils.js'; export * from './intrinsicTypes.js'; export * from './focusKeyTypes.js'; export * from './config.js'; +export * from './shaders.js'; export type * from '@lightningjs/renderer'; export { type AnimationSettings } from './intrinsicTypes.js'; // hopefully fix up webpack error import { assertTruthy, deg2Rad } from '@lightningjs/renderer/utils'; export { assertTruthy, deg2Rad }; -// export type * from '@lightningjs/renderer/utils'; diff --git a/src/intrinsicTypes.ts b/src/intrinsicTypes.ts index d2be891..6e220de 100644 --- a/src/intrinsicTypes.ts +++ b/src/intrinsicTypes.ts @@ -1,21 +1,16 @@ -import { - type FadeOutEffectProps, - type GlitchEffectProps, - type GrayscaleEffectProps, - type AnimationSettings as RendererAnimationSettings, - type LinearGradientEffectProps, - type RadialGradientEffectProps, - type RadialProgressEffectProps, - type ITextNodeProps, - type HolePunchEffectProps, - type IAnimationController, - NodeLoadedPayload, - NodeFailedPayload, -} from '@lightningjs/renderer'; +import * as lngr from '@lightningjs/renderer'; import { ElementNode, type RendererNode } from './elementNode.js'; import { NodeStates } from './states.js'; +import { + ShaderBorderProps, + ShaderHolePunchProps, + ShaderLinearGradientProps, + ShaderRadialGradientProps, + ShaderRoundedProps, + ShaderShadowProps, +} from './shaders.js'; -export type AnimationSettings = Partial; +export type AnimationSettings = Partial; export type AddColorString = { [K in keyof T]: K extends `color${string}` ? string | number : T[K]; @@ -27,38 +22,20 @@ export interface BorderStyleObject { } export type DollarString = `$${string}`; -export type BorderStyle = number | BorderStyleObject; +export type BorderStyle = BorderStyleObject; export type BorderRadius = number | number[]; export interface Effects { - fadeOut?: FadeOutEffectProps; - linearGradient?: LinearGradientEffectProps; - radialGradient?: RadialGradientEffectProps; - radialProgressGradient?: RadialProgressEffectProps; - grayscale?: GrayscaleEffectProps; - glitch?: GlitchEffectProps; - radialProgress?: RadialProgressEffectProps; - holePunch?: HolePunchEffectProps; -} - -export interface BorderEffects { - radius?: { radius: BorderRadius }; - rounded?: { radius: BorderRadius }; - border?: BorderStyle; - borderTop?: BorderStyle; - borderRight?: BorderStyle; - borderBottom?: BorderStyle; - borderLeft?: BorderStyle; + linearGradient?: Partial; + radialGradient?: Partial; + holePunch?: Partial; + shadow?: Partial; + rounded?: Partial; + borderRadius?: Partial; + border?: Partial; } -export type StyleEffects = Effects & BorderEffects; - -// Renderer should export EffectDesc -export type ShaderEffectDesc = { - name?: string; - type: keyof StyleEffects; - props: StyleEffects[keyof StyleEffects]; -}; +export type StyleEffects = Effects; export type NewOmit = { [P in keyof T as Exclude]: T[P]; @@ -69,7 +46,7 @@ export type RemoveUnderscoreProps = { }; type RendererText = AddColorString< - Partial> + Partial> >; type CleanElementNode = NewOmit< @@ -100,7 +77,7 @@ export interface ElementText ElementNode, '_type' | 'parent' | 'children' | 'src' | 'scale' >, - NewOmit { + NewOmit { _type: 'textNode'; parent?: ElementNode; children: TextNode[]; @@ -165,6 +142,7 @@ export interface TextProps > > { states?: NodeStates; + fontWeight?: number | string; style?: TextStyles; } @@ -181,15 +159,15 @@ export interface IntrinsicTextNodeStyleProps extends TextStyles {} export type AnimationEvents = 'animating' | 'tick' | 'stopped'; export type AnimationEventHandler = ( - controller: IAnimationController, + controller: lngr.IAnimationController, name: string, endValue: number, props?: any, ) => void; type EventPayloadMap = { - loaded: NodeLoadedPayload; - failed: NodeFailedPayload; + loaded: lngr.NodeLoadedPayload; + failed: lngr.NodeFailedPayload; freed: Event; inBounds: Event; outOfBounds: Event; diff --git a/src/lightningInit.ts b/src/lightningInit.ts index e62c094..5a95385 100644 --- a/src/lightningInit.ts +++ b/src/lightningInit.ts @@ -1,6 +1,14 @@ import * as lng from '@lightningjs/renderer'; import { DOMRendererMain } from './domRenderer.js'; import { DOM_RENDERING } from './config.js'; +import { + ShaderBorderPrefixedProps, + ShaderHolePunchProps, + ShaderLinearGradientProps, + ShaderRadialGradientProps, + ShaderRoundedProps, + ShaderShadowPrefixedProps, +} from './shaders.js'; export type SdfFontType = 'ssdf' | 'msdf'; @@ -16,12 +24,12 @@ export interface IRendererFontManager { export interface IRendererStage { root: IRendererNode; renderer: IRendererCoreRenderer; - fontManager: IRendererFontManager; shManager: IRendererShaderManager; animationManager: { registerAnimation: (anim: any) => void; unregisterAnimation: (anim: any) => void; }; + loadFont(kind: string, props: any): Promise; } /** Based on {@link lng.CoreShaderManager} */ @@ -37,7 +45,12 @@ export interface IRendererShader { } /** Based on {@link lng.CoreShaderType} */ export interface IRendererShaderType {} -export type IRendererShaderProps = Record; +export type IRendererShaderProps = Partial & + Partial & + Partial & + Partial & + Partial & + Partial; /** Based on {@link lng.Texture} */ export interface IRendererTexture { @@ -63,7 +76,7 @@ export interface IRendererNodeShaded extends IEventEmitter { /** Based on {@link lng.INodeProps} */ export interface IRendererNodeProps - extends Omit { + extends Omit, 'shader' | 'parent'> { shader: IRendererShader | null; parent: IRendererNode | null; } @@ -79,6 +92,8 @@ export interface IRendererTextNodeProps extends Omit { shader: IRendererShader | null; parent: IRendererNode | null; + fontWeight?: string; + contain?: string; } /** Based on {@link lng.ITextNode} */ export interface IRendererTextNode @@ -100,11 +115,6 @@ export interface IRendererMain extends IEventEmitter { kind: keyof lng.TextureMap, props: IRendererTextureProps, ): IRendererTexture; - createEffect( - kind: keyof lng.EffectMap, - props: Record, - name?: string, - ): lng.EffectDescUnion; } export let renderer: IRendererMain; @@ -120,13 +130,7 @@ export function startLightningRenderer( : (new lng.RendererMain(options, rootId) as any as IRendererMain); return renderer; } - -export function loadFonts( - fonts: ( - | lng.WebTrFontFaceOptions - | (Partial & { type: SdfFontType }) - )[], -) { +export function loadFonts(fonts: any[]) { for (const font of fonts) { // WebGL — SDF if ( @@ -134,16 +138,11 @@ export function loadFonts( 'type' in font && (font.type === 'msdf' || font.type === 'ssdf') ) { - renderer.stage.fontManager.addFontFace( - new lng.SdfTrFontFace(font.type, { - ...font, - stage: renderer.stage as any, - } as lng.SdfTrFontFaceOptions), - ); + renderer.stage.loadFont('sdf', font); } // Canvas — Web - else if ('fontUrl' in font) { - renderer.stage.fontManager.addFontFace(new lng.WebTrFontFace(font)); + else if ('fontUrl' in font && renderer.stage.renderer.mode !== 'webgl') { + renderer.stage.loadFont('canvas', font); } } } diff --git a/src/shaders.ts b/src/shaders.ts new file mode 100644 index 0000000..6f939bf --- /dev/null +++ b/src/shaders.ts @@ -0,0 +1,567 @@ +import * as lngr from '@lightningjs/renderer'; +import * as lngr_shaders from '@lightningjs/renderer/webgl/shaders'; + +import type { + RoundedProps as ShaderRoundedProps, + ShadowProps as ShaderShadowProps, + HolePunchProps as ShaderHolePunchProps, + RadialGradientProps as ShaderRadialGradientProps, + LinearGradientProps as ShaderLinearGradientProps, +} from '@lightningjs/renderer'; +export { + ShaderRoundedProps, + ShaderShadowProps, + ShaderHolePunchProps, + ShaderRadialGradientProps, + ShaderLinearGradientProps, +}; + +import { type WebGlShaderType as WebGlShader } from '@lightningjs/renderer/webgl'; +export { WebGlShader }; + +import { type IRendererShaderManager } from './lightningInit.js'; +import { DOM_RENDERING, SHADERS_ENABLED } from './config.js'; + +export type Vec4 = [x: number, y: number, z: number, w: number]; + +export interface ShaderBorderProps extends lngr.BorderProps { + /** Distance between the border and element edges. */ + gap: number; + /** + * If `false`, the border is drawn outside the element. \ + * If `true`, the border is drawn inside the element. + * @default true + */ + inset: boolean; +} + +export type ShaderBorderPrefixedProps = { + [P in keyof ShaderBorderProps as `border-${P}`]: ShaderBorderProps[P]; +}; +export type ShaderShadowPrefixedProps = { + [P in keyof ShaderShadowProps as `shadow-${P}`]: ShaderShadowProps[P]; +}; + +export type ShaderRoundedWithShadowProps = ShaderRoundedProps & + ShaderShadowPrefixedProps; +export type ShaderRoundedWithBorderProps = ShaderRoundedProps & + ShaderBorderPrefixedProps; +export type ShaderRoundedWithBorderAndShadowProps = ShaderRoundedProps & + ShaderShadowPrefixedProps & + ShaderBorderPrefixedProps; + +export type ShaderRounded = WebGlShader; +export type ShaderShadow = WebGlShader; +export type ShaderRoundedWithBorder = WebGlShader; +export type ShaderRoundedWithShadow = WebGlShader; +export type ShaderRoundedWithBorderAndShadow = + WebGlShader; +export type ShaderHolePunch = WebGlShader; +export type ShaderRadialGradient = WebGlShader; +export type ShaderLinearGradient = WebGlShader; + +export const defaultShaderRounded: ShaderRounded = lngr_shaders.Rounded; +export const defaultShaderShadow: ShaderShadow = lngr_shaders.Shadow; +export const defaultShaderRoundedWithShadow: ShaderRoundedWithShadow = + lngr_shaders.RoundedWithShadow; +// TODO: lngr_shaders.RoundedWithBorderAndShadow doesn't support border-gap +export const defaultShaderRoundedWithBorderAndShadow = + lngr_shaders.RoundedWithBorderAndShadow as ShaderRoundedWithBorderAndShadow; +export const defaultShaderHolePunch: ShaderHolePunch = lngr_shaders.HolePunch; +export const defaultShaderRadialGradient: ShaderRadialGradient = + lngr_shaders.RadialGradient; +export const defaultShaderLinearGradient: ShaderLinearGradient = + lngr_shaders.LinearGradient; + +function calcFactoredRadiusArray( + radius: Vec4, + width: number, + height: number, + out: Vec4 = [0, 0, 0, 0], +): Vec4 { + [out[0], out[1], out[2], out[3]] = radius; + let factor = Math.min( + width / Math.max(width, radius[0] + radius[1]), + width / Math.max(width, radius[2] + radius[3]), + height / Math.max(height, radius[0] + radius[3]), + height / Math.max(height, radius[1] + radius[2]), + 1, + ); + out[0] *= factor; + out[1] *= factor; + out[2] *= factor; + out[3] *= factor; + return out; +} + +function toValidVec4(value: unknown): Vec4 { + if (typeof value === 'number') { + return [value, value, value, value]; + } + if (Array.isArray(value)) { + switch (value.length) { + default: + case 4: + return value as Vec4; + case 3: + return [value[0], value[1], value[2], value[0]]; + case 2: + return [value[0], value[1], value[0], value[1]]; + case 1: + return [value[0], value[0], value[0], value[0]]; + case 0: + break; + } + } + return [0, 0, 0, 0]; +} + +const roundedWithBorderProps: lngr.ShaderProps = { + radius: { + default: [0, 0, 0, 0], + resolve(value) { + return toValidVec4(value); + }, + }, + 'top-left': { + default: 0, + set(value, props) { + (props.radius as Vec4)[0] = value; + }, + get(props) { + return (props.radius as Vec4)[0]; + }, + }, + 'top-right': { + default: 0, + set(value, props) { + (props.radius as Vec4)[1] = value; + }, + get(props) { + return (props.radius as Vec4)[1]; + }, + }, + 'bottom-right': { + default: 0, + set(value, props) { + (props.radius as Vec4)[2] = value; + }, + get(props) { + return (props.radius as Vec4)[2]; + }, + }, + 'bottom-left': { + default: 0, + set(value, props) { + (props.radius as Vec4)[3] = value; + }, + get(props) { + return (props.radius as Vec4)[3]; + }, + }, + 'border-w': { + default: [0, 0, 0, 0], + resolve(value) { + return toValidVec4(value); + }, + }, + 'border-color': 0xffffffff, + 'border-gap': 0, + 'border-top': { + default: 0, + set(value, props) { + (props['border-w'] as Vec4)[0] = value; + }, + get(props) { + return (props['border-w'] as Vec4)[0]; + }, + }, + 'border-right': { + default: 0, + set(value, props) { + (props['border-w'] as Vec4)[1] = value; + }, + get(props) { + return (props['border-w'] as Vec4)[1]; + }, + }, + 'border-bottom': { + default: 0, + set(value, props) { + (props['border-w'] as Vec4)[2] = value; + }, + get(props) { + return (props['border-w'] as Vec4)[2]; + }, + }, + 'border-left': { + default: 0, + set(value, props) { + (props['border-w'] as Vec4)[3] = value; + }, + get(props) { + return (props['border-w'] as Vec4)[3]; + }, + }, + 'border-inset': true, +}; + +export const defaultShaderRoundedWithBorder: ShaderRoundedWithBorder = { + props: roundedWithBorderProps, + canBatch: () => false, + update(node) { + let props = this.props!; + let borderWidth = props['border-w'] as Vec4; + let borderGap = props['border-gap']; + let inset = props['border-inset']; + + let [b_t, b_r, b_b, b_l] = borderWidth; + + this.uniformRGBA('u_borderColor', props['border-color']); + this.uniform4fa('u_border', borderWidth); + this.uniform1f('u_gap', borderGap); + this.uniform1i('u_inset', inset ? 1 : 0); + + // Check if border is zero (no border widths) + let borderZero = b_t === 0 && b_r === 0 && b_b === 0 && b_l === 0; + this.uniform1i('u_borderZero', borderZero ? 1 : 0); + + let origWidth = node.w; + let origHeight = node.h; + this.uniform2f('u_dimensions_orig', origWidth, origHeight); + + let finalWidth = origWidth; + let finalHeight = origHeight; + if (!inset) { + // For outside borders, expand dimensions + finalWidth = origWidth + b_l + b_r + borderGap * 2; + finalHeight = origHeight + b_t + b_b + borderGap * 2; + } + + // u_dimensions for the shader's SDF functions + this.uniform2f('u_dimensions', finalWidth, finalHeight); + + // The `radius` property is for the content rectangle. + // Factor it against the appropriate dimensions to prevent self-intersection. + let contentRadius = calcFactoredRadiusArray( + props.radius as Vec4, + origWidth, + origHeight, + ); + + // Calculate the appropriate radius for the shader based on inset mode + let finalRadius = contentRadius; + if (!inset) { + // For each corner, the total radius is content radius + gap + border thickness. + // Border thickness at a corner is approximated as the max of the two adjacent border sides. + let outerRadius: Vec4 = [ + contentRadius[0] + borderGap + Math.max(b_t, b_l), // top-left + contentRadius[1] + borderGap + Math.max(b_t, b_r), // top-right + contentRadius[2] + borderGap + Math.max(b_b, b_r), // bottom-right + contentRadius[3] + borderGap + Math.max(b_b, b_l), // bottom-left + ]; + calcFactoredRadiusArray( + outerRadius, + finalWidth, + finalHeight, + finalRadius, + ); + } + + this.uniform4fa('u_radius', finalRadius); + }, + vertex: /*glsl*/ ` + # ifdef GL_FRAGMENT_PRECISION_HIGH + precision highp float; + # else + precision mediump float; + # endif + + /* Passed by lightning renderer */ + attribute vec2 a_position; + attribute vec2 a_textureCoords; + attribute vec4 a_color; + attribute vec2 a_nodeCoords; + + uniform vec2 u_resolution; + uniform float u_pixelRatio; + + /* Passed by shader setup */ + uniform vec2 u_dimensions; + uniform vec2 u_dimensions_orig; + uniform vec4 u_radius; + uniform vec4 u_border; + uniform float u_gap; + uniform bool u_inset; + uniform bool u_borderZero; + + varying vec4 v_color; + varying vec2 v_texcoords; + varying vec2 v_nodeCoords; + varying vec4 v_borderEndRadius; + varying vec2 v_borderEndSize; + + varying vec4 v_innerRadius; + varying vec2 v_innerSize; + varying vec2 v_halfDimensions; + + void main() { + vec2 screen_space = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y); + + v_color = a_color; + v_nodeCoords = a_nodeCoords; + + float b_t = u_border.x; + float b_r = u_border.y; + float b_b = u_border.z; + float b_l = u_border.w; + + // Calculate the offset to expand/contract the quad for border and gap + vec2 expansion_offset = vec2(0.0); + if (!u_inset) { + // Outside border: expand the quad + if (a_nodeCoords.x == 0.0) { // Left edge vertex + expansion_offset.x = -(b_l + u_gap); + } else { // Right edge vertex (a_nodeCoords.x == 1.0) + expansion_offset.x = (b_r + u_gap); + } + if (a_nodeCoords.y == 0.0) { // Top edge vertex + expansion_offset.y = -(b_t + u_gap); + } else { // Bottom edge vertex (a_nodeCoords.y == 1.0) + expansion_offset.y = (b_b + u_gap); + } + } + // For inset borders, no expansion needed - use original position + + // Texture coordinate calculation + v_texcoords = a_textureCoords; + if (!u_inset) { // For outside borders, adjust texture coordinates for expansion + v_texcoords *= u_dimensions; + v_texcoords.x -= b_l + u_gap; + v_texcoords.y -= b_t + u_gap; + v_texcoords /= u_dimensions_orig; + } + + v_halfDimensions = u_dimensions * 0.5; + if (!u_borderZero) { + + float gap_x2 = u_gap * 2.0; + + if (u_inset) { + // For inset borders, flip the meaning: + // v_borderEndRadius/Size represents the gap area + // v_innerRadius/Size represents the border area + + // Gap area (v_borderEnd represents gap boundary) - uniform gap + v_borderEndRadius = u_radius - u_gap - 0.5; + v_borderEndSize = (u_dimensions - gap_x2 - 1.0) * 0.5; + + // Border area (v_inner represents border boundary) - individual border widths + v_innerRadius.x = u_radius.x - u_gap - max(b_t, b_l) - 0.5; + v_innerRadius.y = u_radius.y - u_gap - max(b_t, b_r) - 0.5; + v_innerRadius.z = u_radius.z - u_gap - max(b_b, b_r) - 0.5; + v_innerRadius.w = u_radius.w - u_gap - max(b_b, b_l) - 0.5; + + v_innerSize = (u_dimensions - gap_x2 - vec2(b_l + b_r, b_t + b_b) - 1.0) * 0.5; + } else { + // For outside borders, calculate from expanded dimensions inward + v_borderEndRadius.x = u_radius.x - max(b_t, b_l) - 0.5; + v_borderEndRadius.y = u_radius.y - max(b_t, b_r) - 0.5; + v_borderEndRadius.z = u_radius.z - max(b_b, b_r) - 0.5; + v_borderEndRadius.w = u_radius.w - max(b_b, b_l) - 0.5; + + v_borderEndSize = (u_dimensions - vec2(b_l + b_r, b_t + b_b) - 1.0) * 0.5; + + v_innerRadius.x = u_radius.x - max(b_t, b_l) - u_gap - 0.5; + v_innerRadius.y = u_radius.y - max(b_t, b_r) - u_gap - 0.5; + v_innerRadius.z = u_radius.z - max(b_b, b_r) - u_gap - 0.5; + v_innerRadius.w = u_radius.w - max(b_b, b_l) - u_gap - 0.5; + + v_innerSize.x = u_dimensions.x - (b_l + b_r) - gap_x2 - 1.0; + v_innerSize.y = u_dimensions.y - (b_t + b_b) - gap_x2 - 1.0; + v_innerSize *= 0.5; + } + + v_borderEndRadius = max(v_borderEndRadius, vec4(0.0)); + v_innerRadius = max(v_innerRadius, vec4(0.0)); + } + + vec2 normalized = (a_position + expansion_offset) * u_pixelRatio; + + gl_Position = vec4(normalized.x * screen_space.x - 1.0, normalized.y * -abs(screen_space.y) + 1.0, 0.0, 1.0); + gl_Position.y = -sign(screen_space.y) * gl_Position.y; + } + `, + fragment: /*glsl*/ ` + # ifdef GL_FRAGMENT_PRECISION_HIGH + precision highp float; + # else + precision mediump float; + # endif + + /* Passed by lightning renderer */ + uniform vec2 u_resolution; + uniform float u_pixelRatio; + uniform float u_alpha; + uniform vec2 u_dimensions; + uniform sampler2D u_texture; + + /* Passed by shader setup */ + uniform vec4 u_radius; + + uniform vec4 u_border; + uniform vec4 u_borderColor; + uniform bool u_inset; + uniform bool u_borderZero; + + varying vec4 v_borderEndRadius; + varying vec2 v_borderEndSize; + + varying vec4 v_color; + varying vec2 v_texcoords; + varying vec2 v_nodeCoords; + + varying vec2 v_halfDimensions; + varying vec4 v_innerRadius; + varying vec2 v_innerSize; + + float roundedBox(vec2 p, vec2 s, vec4 r) { + r.xy = (p.x > 0.0) ? r.yz : r.xw; + r.x = (p.y > 0.0) ? r.y : r.x; + vec2 q = abs(p) - s + r.x; + return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x; + } + + void main() { + vec4 contentTexColor = texture2D(u_texture, v_texcoords) * v_color; + + vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions; + float outerShapeDist = roundedBox(boxUv, v_halfDimensions, u_radius); + float outerShapeAlpha = 1.0 - smoothstep(0.0, 1.0, outerShapeDist); // 1 inside, 0 outside + + if (u_borderZero) { // No border, effectively no gap from border logic + gl_FragColor = mix(vec4(0.0), contentTexColor, outerShapeAlpha) * u_alpha; + return; + } + + // Adjust boxUv for non-uniform borders + // This adjusted UV is used for calculating distances to border-end and content shapes + vec2 adjustedBoxUv = boxUv; + vec2 borderAdjustedBoxUv = boxUv; + + if (!u_inset) { + // For outside borders, use same adjustment for both calculations + adjustedBoxUv.x += (u_border.y - u_border.w) * 0.5; + adjustedBoxUv.y += (u_border.z - u_border.x) * 0.5; + borderAdjustedBoxUv = adjustedBoxUv; + } else { + // For inset borders, gap calculation uses no adjustment (uniform gap) + // Border calculation uses adjustment (non-uniform border) + borderAdjustedBoxUv.x += (u_border.y - u_border.w) * 0.5; + borderAdjustedBoxUv.y += (u_border.z - u_border.x) * 0.5; + } + + // Distance to the inner edge of the border (where the gap begins) + float borderEndDist = roundedBox(adjustedBoxUv, v_borderEndSize, v_borderEndRadius); + float borderEndAlpha = 1.0 - smoothstep(0.0, 1.0, borderEndDist); // 1 if inside gap or content, 0 if in border or outside + + // Distance to the content area (after the gap) + float contentDist = roundedBox(borderAdjustedBoxUv, v_innerSize, v_innerRadius); + float contentAlpha = 1.0 - smoothstep(0.0, 1.0, contentDist); // 1 if inside content, 0 if in gap, border or outside + + vec4 finalColor; + if (u_inset) { // For inset borders: border <- gap <- element + // flip the logic: borderEndAlpha becomes gap, contentAlpha becomes border+content + if (contentAlpha > 0.0) { // Pixel is inside the content area (innermost) + finalColor = contentTexColor; + } else if (borderEndAlpha > 0.0) { // Pixel is inside the border area (middle) + vec4 borderColor = u_borderColor; + finalColor = mix(contentTexColor, vec4(borderColor.rgb, 1.0), borderColor.a); + } else { // Pixel is in the gap area (outermost) - show content through gap + finalColor = contentTexColor; + } + } else { // For outside borders: element -> gap -> border + if (contentAlpha > 0.0) { // Pixel is inside the content area + finalColor = contentTexColor; + } else if (borderEndAlpha > 0.0) { // Pixel is inside the gap area + finalColor = vec4(0.0); // Transparent gap + } else { // Pixel is inside the border area + vec4 borderColor = u_borderColor; + finalColor = borderColor; + finalColor.rgb *= finalColor.a; + } + } + + gl_FragColor = mix(vec4(0.0), finalColor, outerShapeAlpha) * u_alpha; + } + `, +}; + +export function registerDefaultShaderRounded( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType('rounded', defaultShaderRounded); +} +export function registerDefaultShaderShadow(shManager: IRendererShaderManager) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType('shadow', defaultShaderShadow); +} +export function registerDefaultShaderRoundedWithBorder( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType( + 'roundedWithBorder', + defaultShaderRoundedWithBorder, + ); +} +export function registerDefaultShaderRoundedWithShadow( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType( + 'roundedWithShadow', + defaultShaderRoundedWithShadow, + ); +} +export function registerDefaultShaderRoundedWithBorderAndShadow( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType( + 'roundedWithBorderWithShadow', + defaultShaderRoundedWithBorderAndShadow, + ); +} +export function registerDefaultShaderHolePunch( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType('holePunch', defaultShaderHolePunch); +} +export function registerDefaultShaderRadialGradient( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType('radialGradient', defaultShaderRadialGradient); +} +export function registerDefaultShaderLinearGradient( + shManager: IRendererShaderManager, +) { + if (SHADERS_ENABLED && !DOM_RENDERING) + shManager.registerShaderType('linearGradient', defaultShaderLinearGradient); +} + +export function registerDefaultShaders(shManager: IRendererShaderManager) { + if (SHADERS_ENABLED && !DOM_RENDERING) { + registerDefaultShaderRounded(shManager); + registerDefaultShaderShadow(shManager); + registerDefaultShaderRoundedWithBorder(shManager); + registerDefaultShaderRoundedWithShadow(shManager); + registerDefaultShaderRoundedWithBorderAndShadow(shManager); + registerDefaultShaderHolePunch(shManager); + registerDefaultShaderRadialGradient(shManager); + registerDefaultShaderLinearGradient(shManager); + } +} diff --git a/src/tests/flex-perf-results.json b/tests/flex-perf-results.json similarity index 78% rename from src/tests/flex-perf-results.json rename to tests/flex-perf-results.json index 7834e34..5b6ce1e 100644 --- a/src/tests/flex-perf-results.json +++ b/tests/flex-perf-results.json @@ -1,494 +1,494 @@ { - "timestamp": "2025-06-12T03:18:23.863Z", + "timestamp": "2025-07-04T17:14:36.328Z", "results": [ { "id": "Row, FlexStart, NoGrow-3", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 3, - "durationMs": 0.06630566666475109, + "durationMs": 0.24479766666668942, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-5", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 5, - "durationMs": 0.058069000003645975, + "durationMs": 0.09870733333332282, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-10", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 10, - "durationMs": 0.026249999997768707, + "durationMs": 0.03500033333337645, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-15", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 15, - "durationMs": 0.004916666667365159, + "durationMs": 0.01494566666663862, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-20", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 20, - "durationMs": 0.0055000000017268276, + "durationMs": 0.016064666666693483, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-50", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 50, - "durationMs": 0.012986000001546927, + "durationMs": 0.03625333333335826, "containerUpdated": false }, { "id": "Row, FlexStart, NoGrow-100", "scenarioName": "Row, FlexStart, NoGrow", "numChildren": 100, - "durationMs": 0.028819666666095145, + "durationMs": 0.0696376666666841, "containerUpdated": false }, { "id": "Column, Center, WithGrow-3", "scenarioName": "Column, Center, WithGrow", "numChildren": 3, - "durationMs": 0.019042000002324738, + "durationMs": 0.08456633333336565, "containerUpdated": false }, { "id": "Column, Center, WithGrow-5", "scenarioName": "Column, Center, WithGrow", "numChildren": 5, - "durationMs": 0.0035276666676509194, + "durationMs": 0.014154333333256849, "containerUpdated": false }, { "id": "Column, Center, WithGrow-10", "scenarioName": "Column, Center, WithGrow", "numChildren": 10, - "durationMs": 0.004278000000340398, + "durationMs": 0.019897999999974065, "containerUpdated": false }, { "id": "Column, Center, WithGrow-15", "scenarioName": "Column, Center, WithGrow", "numChildren": 15, - "durationMs": 0.00615266666621513, + "durationMs": 0.03914366666663227, "containerUpdated": false }, { "id": "Column, Center, WithGrow-20", "scenarioName": "Column, Center, WithGrow", "numChildren": 20, - "durationMs": 0.009819333334841454, + "durationMs": 0.031068333333299353, "containerUpdated": false }, { "id": "Column, Center, WithGrow-50", "scenarioName": "Column, Center, WithGrow", "numChildren": 50, - "durationMs": 0.02070833333467211, + "durationMs": 0.08357366666666621, "containerUpdated": false }, { "id": "Column, Center, WithGrow-100", "scenarioName": "Column, Center, WithGrow", "numChildren": 100, - "durationMs": 0.04756933333313403, + "durationMs": 0.1421340000000555, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-3", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 3, - "durationMs": 0.007986000001740953, + "durationMs": 0.02381999999996272, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-5", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 5, - "durationMs": 0.0034860000014305115, + "durationMs": 0.011734666666673851, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-10", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 10, - "durationMs": 0.005138666667335201, + "durationMs": 0.022639666666653586, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-15", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 15, - "durationMs": 0.020680666668340564, + "durationMs": 0.05160399999999754, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-20", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 20, - "durationMs": 0.01058333332912298, + "durationMs": 0.05060033333336378, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-50", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 50, - "durationMs": 0.02327766666712705, + "durationMs": 0.11945166666665348, "containerUpdated": false }, { "id": "Row, SpaceBetween, MixedGrow-100", "scenarioName": "Row, SpaceBetween, MixedGrow", "numChildren": 100, - "durationMs": 0.056999999998273175, + "durationMs": 0.2521686666666862, "containerUpdated": false }, { "id": "Row, Wrap, FlexStart-3", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 3, - "durationMs": 0.01320833333011251, + "durationMs": 0.05415066666663885, "containerUpdated": false }, { "id": "Row, Wrap, FlexStart-5", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 5, - "durationMs": 0.0025693333324549408, - "containerUpdated": false + "durationMs": 0.022094333333332845, + "containerUpdated": true }, { "id": "Row, Wrap, FlexStart-10", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 10, - "durationMs": 0.004513666669178444, - "containerUpdated": false + "durationMs": 0.01997066666668464, + "containerUpdated": true }, { "id": "Row, Wrap, FlexStart-15", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 15, - "durationMs": 0.005222333335647515, - "containerUpdated": false + "durationMs": 0.018759666666634683, + "containerUpdated": true }, { "id": "Row, Wrap, FlexStart-20", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 20, - "durationMs": 0.006166666663678673, - "containerUpdated": false + "durationMs": 0.025255333333348062, + "containerUpdated": true }, { "id": "Row, Wrap, FlexStart-50", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 50, - "durationMs": 0.013792000000345675, - "containerUpdated": false + "durationMs": 0.05415866666673234, + "containerUpdated": true }, { "id": "Row, Wrap, FlexStart-100", "scenarioName": "Row, Wrap, FlexStart", "numChildren": 100, - "durationMs": 0.031916666666802485, - "containerUpdated": false + "durationMs": 0.10836366666664314, + "containerUpdated": true }, { "id": "Row, RTL, FlexEnd-3", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 3, - "durationMs": 0.003514000001208236, + "durationMs": 0.007669666666629382, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-5", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 5, - "durationMs": 0.0016526666659046896, + "durationMs": 0.00670966666662783, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-10", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 10, - "durationMs": 0.0027079999999841675, + "durationMs": 0.010900000000030255, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-15", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 15, - "durationMs": 0.003916666665948772, + "durationMs": 0.016606666666727204, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-20", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 20, - "durationMs": 0.00486099999640525, + "durationMs": 0.01916666666666818, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-50", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 50, - "durationMs": 0.011416666668083053, + "durationMs": 0.05021533333331263, "containerUpdated": false }, { "id": "Row, RTL, FlexEnd-100", "scenarioName": "Row, RTL, FlexEnd", "numChildren": 100, - "durationMs": 0.02391633333172649, + "durationMs": 0.16159300000000107, "containerUpdated": false }, { "id": "Row, WithOrder-3", "scenarioName": "Row, WithOrder", "numChildren": 3, - "durationMs": 0.016985999999936514, + "durationMs": 0.030483333333336304, "containerUpdated": false }, { "id": "Row, WithOrder-5", "scenarioName": "Row, WithOrder", "numChildren": 5, - "durationMs": 0.003236000001682745, + "durationMs": 0.01072599999997692, "containerUpdated": false }, { "id": "Row, WithOrder-10", "scenarioName": "Row, WithOrder", "numChildren": 10, - "durationMs": 0.003403000000010555, + "durationMs": 0.01293133333338877, "containerUpdated": false }, { "id": "Row, WithOrder-15", "scenarioName": "Row, WithOrder", "numChildren": 15, - "durationMs": 0.004597333335065438, + "durationMs": 0.019508333333305927, "containerUpdated": false }, { "id": "Row, WithOrder-20", "scenarioName": "Row, WithOrder", "numChildren": 20, - "durationMs": 0.006347333333299805, + "durationMs": 0.02293100000004718, "containerUpdated": false }, { "id": "Row, WithOrder-50", "scenarioName": "Row, WithOrder", "numChildren": 50, - "durationMs": 0.016722333333746064, + "durationMs": 0.08106500000000476, "containerUpdated": false }, { "id": "Row, WithOrder-100", "scenarioName": "Row, WithOrder", "numChildren": 100, - "durationMs": 0.03187500000058208, + "durationMs": 0.1687006666666472, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-3", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 3, - "durationMs": 0.007444333333599691, + "durationMs": 0.03431000000000495, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-5", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 5, - "durationMs": 0.0018056666691942762, + "durationMs": 0.016097333333353465, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-10", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 10, - "durationMs": 0.0034166666664532386, + "durationMs": 0.008877999999981512, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-15", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 15, - "durationMs": 0.004472333333978895, + "durationMs": 0.013968999999974585, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-20", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 20, - "durationMs": 0.005749666665603097, + "durationMs": 0.015760666666627305, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-50", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 50, - "durationMs": 0.013291999998424823, + "durationMs": 0.036235666666660414, "containerUpdated": false }, { "id": "Row, FlexStart, WithMargins-100", "scenarioName": "Row, FlexStart, WithMargins", "numChildren": 100, - "durationMs": 0.03045866666555715, + "durationMs": 0.07032799999994192, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-3", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 3, - "durationMs": 0.005277999999331466, + "durationMs": 0.009205000000027516, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-5", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 5, - "durationMs": 0.0017643333339947276, + "durationMs": 0.005585999999993874, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-10", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 10, - "durationMs": 0.002916666666957705, + "durationMs": 0.008997999999981706, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-15", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 15, - "durationMs": 0.003944333332280318, + "durationMs": 0.012427000000002408, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-20", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 20, - "durationMs": 0.005110999998578336, + "durationMs": 0.016192000000008495, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-50", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 50, - "durationMs": 0.012583000000934893, + "durationMs": 0.037464666666664925, "containerUpdated": false }, { "id": "Row, FlexStart, WithGap-100", "scenarioName": "Row, FlexStart, WithGap", "numChildren": 100, - "durationMs": 0.024082666665587265, + "durationMs": 0.08811900000000605, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-3", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 3, - "durationMs": 0.004736000002594665, + "durationMs": 0.011233666666650302, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-5", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 5, - "durationMs": 0.002236333333712537, + "durationMs": 0.00605566666664951, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-10", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 10, - "durationMs": 0.003666999999647184, + "durationMs": 0.009934666666633044, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-15", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 15, - "durationMs": 0.005083000001225931, + "durationMs": 0.014033999999962058, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-20", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 20, - "durationMs": 0.0066389999992679805, + "durationMs": 0.01789666666669139, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-50", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 50, - "durationMs": 0.01551366666778146, + "durationMs": 0.042219666666672616, "containerUpdated": false }, { "id": "Row, FlexStart, AlignCenter (Cross Axis)-100", "scenarioName": "Row, FlexStart, AlignCenter (Cross Axis)", "numChildren": 100, - "durationMs": 0.03463866666667551, + "durationMs": 0.09061466666670033, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-3", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 3, - "durationMs": 0.011444666667860778, + "durationMs": 0.01054133333335964, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-5", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 5, - "durationMs": 0.0023190000016863146, + "durationMs": 0.012765666666647727, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-10", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 10, - "durationMs": 0.0049726666693459265, + "durationMs": 0.024440000000026885, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-15", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 15, - "durationMs": 0.007097333334968425, + "durationMs": 0.04534233333333759, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-20", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 20, - "durationMs": 0.007027666664119654, + "durationMs": 0.04019666666666429, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-50", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 50, - "durationMs": 0.01498600000195438, + "durationMs": 0.09621533333332384, "containerUpdated": false }, { "id": "Row, FlexStart, AlignSelf (Cross Axis)-100", "scenarioName": "Row, FlexStart, AlignSelf (Cross Axis)", "numChildren": 100, - "durationMs": 0.03912500000296859, + "durationMs": 0.4757013333333286, "containerUpdated": false } ]