diff --git a/.changeset/funky-turkeys-wink.md b/.changeset/funky-turkeys-wink.md new file mode 100644 index 00000000..da4840aa --- /dev/null +++ b/.changeset/funky-turkeys-wink.md @@ -0,0 +1,6 @@ +--- +"@adbayb/stack": minor +"@adbayb/create": minor +--- + +Update templates to enable automatic detection of variabilized template files. diff --git a/.changeset/renovate-e6b1c30.md b/.changeset/renovate-e6b1c30.md new file mode 100644 index 00000000..38120c9f --- /dev/null +++ b/.changeset/renovate-e6b1c30.md @@ -0,0 +1,16 @@ +--- +"@adbayb/stack": minor +--- + +Updated dependency `@commitlint/cli` to `^21.2.0`. +Updated dependency `@commitlint/config-conventional` to `^21.2.0`. +Updated dependency `@eslint-react/eslint-plugin` to `^5.10.0`. +Updated dependency `eslint` to `^10.6.0`. +Updated dependency `eslint-plugin-import-x` to `^4.17.1`. +Updated dependency `eslint-plugin-jsdoc` to `^63.0.10`. +Updated dependency `eslint-plugin-n` to `^18.2.1`. +Updated dependency `globals` to `^17.7.0`. +Updated dependency `prettier` to `^3.9.4`. +Updated dependency `turbo` to `^2.10.2`. +Updated dependency `typescript-eslint` to `^8.62.1`. +Updated dependency `tsx` to `4.22.4`. diff --git a/eslint.config.js b/eslint.config.js index 3f573300..e1adf781 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1 +1,13 @@ -export { default } from "@adbayb/stack/eslint"; +import baseConfig from "@adbayb/stack/eslint"; + +export default [ + ...baseConfig, + { + files: ["**/templates/**"], + rules: { + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "sonarjs/no-implicit-dependencies": "off", + }, + }, +]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d4bb388..1c54cbad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,83 +220,80 @@ importers: specifier: ^2.31.0 version: 2.31.0(@types/node@24.13.2) '@commitlint/cli': - specifier: ^21.0.2 - version: 21.0.2(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + specifier: ^21.2.0 + version: 21.2.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.2.0 + version: 21.2.0 '@eslint-react/eslint-plugin': - specifier: ^5.9.1 - version: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + specifier: ^5.10.0 + version: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) '@eslint/compat': specifier: ^2.1.0 - version: 2.1.0(eslint@10.5.0(jiti@2.6.1)) + version: 2.1.0(eslint@10.6.0(jiti@2.6.1)) '@stylistic/eslint-plugin': specifier: ^5.10.0 - version: 5.10.0(eslint@10.5.0(jiti@2.6.1)) + version: 5.10.0(eslint@10.6.0(jiti@2.6.1)) '@vitest/eslint-plugin': specifier: ^1.6.20 - version: 1.6.20(@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + version: 1.6.20(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) eslint: - specifier: ^10.5.0 - version: 10.5.0(jiti@2.6.1) + specifier: ^10.6.0 + version: 10.6.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.5.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.6.0(jiti@2.6.1)) eslint-import-resolver-typescript: specifier: ^4.4.5 - version: 4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1)) + version: 4.4.5(eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1)))(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-depend: specifier: ^1.5.0 - version: 1.5.0(eslint@10.5.0(jiti@2.6.1)) + version: 1.5.0(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-import-x: - specifier: ^4.16.2 - version: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1)) + specifier: ^4.17.1 + version: 4.17.1(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-jsdoc: - specifier: ^63.0.6 - version: 63.0.6(eslint@10.5.0(jiti@2.6.1)) + specifier: ^63.0.10 + version: 63.0.10(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-mdx: specifier: ^3.8.1 - version: 3.8.1(eslint@10.5.0(jiti@2.6.1)) + version: 3.8.1(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-n: - specifier: ^18.1.0 - version: 18.1.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + specifier: ^18.2.1 + version: 18.2.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) eslint-plugin-perfectionist: specifier: ^5.9.1 - version: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + version: 5.9.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) eslint-plugin-prettier: specifier: ^5.5.6 - version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1))(prettier@3.8.4) + version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.6.0(jiti@2.6.1)))(eslint@10.6.0(jiti@2.6.1))(prettier@3.9.4) eslint-plugin-sonarjs: specifier: ^4.1.0 - version: 4.1.0(eslint@10.5.0(jiti@2.6.1)) + version: 4.1.0(eslint@10.6.0(jiti@2.6.1)) eslint-plugin-unicorn: specifier: ^68.0.0 - version: 68.0.0(eslint@10.5.0(jiti@2.6.1)) - fdir: - specifier: ^6.5.0 - version: 6.5.0(picomatch@4.0.4) + version: 68.0.0(eslint@10.6.0(jiti@2.6.1)) globals: - specifier: ^17.6.0 - version: 17.6.0 + specifier: ^17.7.0 + version: 17.7.0 prettier: - specifier: ^3.8.4 - version: 3.8.4 + specifier: ^3.9.4 + version: 3.9.4 prettier-plugin-packagejson: specifier: ^3.0.2 - version: 3.0.2(prettier@3.8.4) + version: 3.0.2(prettier@3.9.4) termost: specifier: ^1.9.1 version: 1.9.1 turbo: - specifier: ^2.9.18 - version: 2.9.18 + specifier: ^2.10.2 + version: 2.10.3 typescript: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.61.1 - version: 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + specifier: ^8.62.1 + version: 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) devDependencies: '@types/node': specifier: 24.13.2 @@ -419,73 +416,73 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@commitlint/cli@21.0.2': - resolution: {integrity: sha512-YMmfLbqBg+ZRvvmPhc+cilSQFrh/AgzVgCT1U/OifmUZEwPbvCtA8rN//YNaF9d5eoZphxVMGYtmwA2QgQORgg==} + '@commitlint/cli@21.2.0': + resolution: {integrity: sha512-4GLVIhUaT3c3GBlQ0GB80/5H3xXdn/Tgw4lrsuoOQVDu2wl4Xw0GuzSar8xZKSMv4H3xaKaQXmvH91GmdyYBZA==} engines: {node: '>=22.12.0'} hasBin: true - '@commitlint/config-conventional@21.0.2': - resolution: {integrity: sha512-P/ZRhryQmkj0Z0dY9FOoRwe3xkwJyyAdtXwt01NT2kuZttcG2CNYp1q5Ci3u+nDT2jcbJRw2kt13Czl1qKNPfg==} + '@commitlint/config-conventional@21.2.0': + resolution: {integrity: sha512-Qf8WRDVcyVd14if6VTWenebxFbKnVnbzPUJjlzjkyJGeHK2xCGd63Dr1XZzj0plXKQb9P0BfOxoc1HVeCo2BWQ==} engines: {node: '>=22.12.0'} - '@commitlint/config-validator@21.0.1': - resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==} + '@commitlint/config-validator@21.2.0': + resolution: {integrity: sha512-t7AzNHAKeIdo/3NRGwzpufKHsKkPHmFs/56N2Fnsh0/r0rGtnQzTxk6vnFgjaGr4hdSQKNB50/KAhR9Yk4LJKA==} engines: {node: '>=22.12.0'} - '@commitlint/ensure@21.0.1': - resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==} + '@commitlint/ensure@21.2.0': + resolution: {integrity: sha512-76IF9vDNS13lAzEEik9eKwzt8f9hYhWiwVXZ2AnyLCz5/f511FsEQ3pw1X3/zSQpdRLQU7i5qDMVKyXi1GWjSg==} engines: {node: '>=22.12.0'} '@commitlint/execute-rule@21.0.1': resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} engines: {node: '>=22.12.0'} - '@commitlint/format@21.0.1': - resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==} + '@commitlint/format@21.2.0': + resolution: {integrity: sha512-c4q64xaav2U83t7k7RyzJerBZurPer7FxUOY0RL5L/6CZijZ7K+s6HIBGIghj0ey1P2+seRX0J9XQYtDued6tg==} engines: {node: '>=22.12.0'} - '@commitlint/is-ignored@21.0.2': - resolution: {integrity: sha512-H5z4t8PC9tUsmZ/o+EptM3Nq8sTFtskAShdcqxCoyzklW5eaVT5xbrDAET2uypzir9Vsj4ZZmBtyKjYe2XqgeQ==} + '@commitlint/is-ignored@21.2.0': + resolution: {integrity: sha512-4/eB0vBN7L88O/oC4ajAEqi7j2ZfNgxl/+11RfAV9YosejZgDXhY2C9VcHnHJhOzPLoSy5P3Mg/46kqeyJfXKw==} engines: {node: '>=22.12.0'} - '@commitlint/lint@21.0.2': - resolution: {integrity: sha512-PnUmLYGeGLfW8oVatR9KpNxSHYAnJOEWlMZzfdeFOUq6WUrFx1fGQaWCWJqMoIll/xPM+GdfJV+tKHZVHhl0Fg==} + '@commitlint/lint@21.2.0': + resolution: {integrity: sha512-ceO5dp9pLjEZ6y6qbq/uXWXDPykqqlTsyzoQ0NzecpisSJhK3kTy9qzQoPeJuWG/IMNdV1lO0RgmzqoAlSi1uw==} engines: {node: '>=22.12.0'} - '@commitlint/load@21.0.2': - resolution: {integrity: sha512-lwUE70hN0/qE/ZRROhbaX65ly/FF12DrqfReLCESo37M0OQCFAf2jRS+2tSCSORq+bm4Kdju7qNDj46uc1QzTA==} + '@commitlint/load@21.2.0': + resolution: {integrity: sha512-RjlzWQqruRwIenJEfZtq7kG97co97nKoHpflE5YnF61tDLXxHPrdWImgzw6VL6MlFyaOcVlk74eBV8ZQmc3oIA==} engines: {node: '>=22.12.0'} - '@commitlint/message@21.0.2': - resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==} + '@commitlint/message@21.2.0': + resolution: {integrity: sha512-YxGoiXD/HXNXLJPrQwE5poXa+XH0CBEm+mdvbHQP0g6MV/dmJyUFCzPNzZbxL93GvZ70TmtTK0Z0/IBpAqHv8g==} engines: {node: '>=22.12.0'} - '@commitlint/parse@21.0.2': - resolution: {integrity: sha512-QVZJhGHTm+oiuWyEKOCTQ0ZM3mfJ0eGWFeHuj7WzSKEth+UukcCHac9GD8pgdFlg/qGkFWOtyaNd1T8REgagaw==} + '@commitlint/parse@21.2.0': + resolution: {integrity: sha512-QHWxG4d0PLTF634/AdyZ0MQS+CLn5YOuJlCFhMMlSGKFxzYGUetkHBj18xgBD+6fVzUrA2lrCdi/vlS2f/oYXg==} engines: {node: '>=22.12.0'} - '@commitlint/read@21.0.2': - resolution: {integrity: sha512-BtsrnLVycSSKf4Q0gMch4giCj5NNlmcbhc8ra5vONgGtP2IjRDo33bEFtr5Pm+2N+5fXGWb2MksWPrspPfdhdw==} + '@commitlint/read@21.2.0': + resolution: {integrity: sha512-ELx8Ovh/JoAw5lpvDgxc6Y0We9skf2IPI2RFN+gnYgDGjRdMSF8zeodxhZmcclLWzfUIF7hXLOa8gOlllYcvBA==} engines: {node: '>=22.12.0'} - '@commitlint/resolve-extends@21.0.1': - resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==} + '@commitlint/resolve-extends@21.2.0': + resolution: {integrity: sha512-4O/1j51+79Wth9s/MGxt/5gs0XYLDgNlYpltQfhAvLE0itusLKs9zruxbiNg1oOkmkb9L9L4USYGjEj7n87NxA==} engines: {node: '>=22.12.0'} - '@commitlint/rules@21.0.2': - resolution: {integrity: sha512-k6tQ69Td7t2qUSIbik8D3TL1q3ZJpkEbV+yLogDzCRAdOxJm4ndhtBNREsLA1/puRfWvzS9eioF2w43WT+hHgQ==} + '@commitlint/rules@21.2.0': + resolution: {integrity: sha512-C2yXMNpiB8ETZKfx5JD8+ExgF8vTU1VQMKPSUUYwqKpw9oJWQBrlXBpdU038mj2WPjof7o9UzFpmTyBeGMZwZg==} engines: {node: '>=22.12.0'} '@commitlint/to-lines@21.0.1': resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} engines: {node: '>=22.12.0'} - '@commitlint/top-level@21.0.2': - resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==} + '@commitlint/top-level@21.2.0': + resolution: {integrity: sha512-Y5gmQ+KxzqCrBFJfLvFEPvvwD3LDiNZoTT2yeFBm96M8qhmqSzQc5DvX3rheAaAMjyIvMXOCLS/mWfdpONsjyQ==} engines: {node: '>=22.12.0'} - '@commitlint/types@21.0.1': - resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==} + '@commitlint/types@21.2.0': + resolution: {integrity: sha512-7zVFCDB2reMvJH5dmbKnOQPjZEvjdJTH8jc0U/PIPU1r3/+vf5pD1HlfitV2MWsWXrvu7u39iY1lyLUPOaN0Gw==} engines: {node: '>=22.12.0'} '@conventional-changelog/git-client@2.7.0': @@ -500,6 +497,10 @@ packages: conventional-commits-parser: optional: true + '@conventional-changelog/template@1.2.0': + resolution: {integrity: sha512-12qHxvlKjHmP0PQ+17EREgC7lWyLwbph1RKcZQZ7k7ZWGmrxfxC9gadHGfvzr0g0u8BhiBGg3tks93txodlyRQ==} + engines: {node: '>=22'} + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -527,50 +528,50 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@5.9.1': - resolution: {integrity: sha512-PEBHBKxuKGrseO828u5/HFo89TdOa946q5veEjdDR+BjxlMuxhZxIqHkPyoS93dh6E+9mkZkcDerSGY5nCsm8Q==} + '@eslint-react/ast@5.10.2': + resolution: {integrity: sha512-4wM+nfSHu+I4pEZ8imB2o2OS6quDEvgF9FXeNRPAFuR5+LnCS7PCgxrdx7scZbbamWDv6pqQvldnmDA3cii/Sg==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/core@5.9.1': - resolution: {integrity: sha512-CQ7ZQCRoqaHSBxld2zzfvjPBWuH0R6Op9FvCq+Nfennv/k6gbecA7IV47SlaXC7TKVB7zxiiwD3kD8ftaL8+xA==} + '@eslint-react/core@5.10.2': + resolution: {integrity: sha512-zn0qjn1ZkIJsc+0lZwbj6JEqCMR+qTXqhh5BfR5HApyutDPlxxxwn2NX+gE9b3mM730PxeY0Yy0bfoPvZEQFbg==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/eslint-plugin@5.9.1': - resolution: {integrity: sha512-UVkd9g/NzpyoBIJb8O1OcjNLKe5BNGg+IZH5Pns/aPFdkdXqzmVHpgTtLg+w2fDNzv+hivqjUdWw99EQ7kC0fA==} + '@eslint-react/eslint-plugin@5.10.2': + resolution: {integrity: sha512-z1sX4ZevKI/ErjYNuYlTlmkQuUJvV3qPW91tnO7cxsTyuFDZNH0a+qwvkKt6qtCL/zVnMP7wsGZiqIHsG63vaw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/eslint@5.9.1': - resolution: {integrity: sha512-YJVfj1Z0+uaYI+KmdNDQpLT8KceLRjf8UH3gd/fJJ+Ye3jBuS5sXDxBBoG74OF61/mtTugrc9aBCes4hlouwBg==} + '@eslint-react/eslint@5.10.2': + resolution: {integrity: sha512-UyRJ2x//smpHphc9zJBTgBS3L7BD7h07iLv7bA7JrEjT04gTNjfG3FXmnClQ414W/EVuhb6/YKq18drzvEwIVQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/jsx@5.9.1': - resolution: {integrity: sha512-rZVIWotHLOYdbsmBEMJCQlu2gUeHcU8dYa7EkhWPwuh3p1q1ydV+Jfn4whJwHVb/mTI8zy4957RnFbGGWVLa6g==} + '@eslint-react/jsx@5.10.2': + resolution: {integrity: sha512-4ytqghGgPXBUbHRMV7UQw6exykgoHrNOSUWk6IbyzIqNt4hkVPWkIpP6VfzYUb4Mx2Inj1nS/2XIBALAe0u5wg==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/shared@5.9.1': - resolution: {integrity: sha512-6VBZo5KTlyUrn27aW6u6nqVvX9igWxzQX0vVNCv/ObnCA6ElOn1TBC9ENwRoK73FJ86PcT25PWyz1LJRgwnefw==} + '@eslint-react/shared@5.10.2': + resolution: {integrity: sha512-KPU63BPdtVwRGiTnsmFggQzGIa9x5TtJd+DkC63aE35WylcHW1HRoTMVt2H1zFDRs3T6WxH699tMjE+A0GN7MQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/var@5.9.1': - resolution: {integrity: sha512-s+hb4H+6CzFsL2E6Yw6/c3bzSFfNc2XNOP2Q60k4G05VCbUew30Aqcf0Ehiac5wgGmpDZ9/9wkJiNanW2M1viA==} + '@eslint-react/var@5.10.2': + resolution: {integrity: sha512-Q9fVLjRLLBp8DfVwznLH0x7wwQJawl6kkrR/OlLGueAbHjslyWhj5JMoYXGxC3FQjMrETouLs3thR9QqUlapMw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' @@ -702,9 +703,6 @@ packages: '@oxc-project/types@0.132.0': resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} - '@package-json/types@0.0.12': - resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -837,6 +835,10 @@ packages: resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} + '@simple-libs/stream-utils@2.0.0': + resolution: {integrity: sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==} + engines: {node: '>=22'} + '@sindresorhus/base62@1.0.0': resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} @@ -847,33 +849,33 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@turbo/darwin-64@2.9.18': - resolution: {integrity: sha512-9f27peFu16ur8c0v9nUFUEyBnbKuuFsUTjHFWfmwGfzySBXbHwzU44QhZon6Mznz0cHsIr3984NQj/bVrnGSRw==} + '@turbo/darwin-64@2.10.3': + resolution: {integrity: sha512-guuiO2kKc7yUQFU2jhWyM/BrYGD/brqb0+JvJIXTQ/QI1NlWfHZ1id50kkkOWqxmBiDc8DgW2orfY85pQIc7gw==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.9.18': - resolution: {integrity: sha512-9A6TMRq/Ib+QnbhLlgkhOm+624wO4pzSQ/yQviQfWHOlFvaYxdnIAYmu2H6TS6y7kSVL0DvzNe04NbESTOzFVQ==} + '@turbo/darwin-arm64@2.10.3': + resolution: {integrity: sha512-UglEDl/r1/h5Vw6oS6cEE29Jugz2sDLxHCSupNznKatj1fDMRXFqYKFcbvm8RTFhtYPI45NxkrPNo9BqNychBg==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.9.18': - resolution: {integrity: sha512-zCdIDtz69AnbYh913elJRRoF3QY5aa2HNnf+4rAkc7bQ+tWujiDkCNV7stazOUPggaDvhKIf2Z87qHftTeXSkw==} + '@turbo/linux-64@2.10.3': + resolution: {integrity: sha512-KuQxaPWD7OBmwEZqO0sgijwcuXR5eMWbo7BEt2m1D2Q3RylJDj7WMcJ0Btv2VJA0QC+khzAaTAm1yWowJ0CWAw==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.18': - resolution: {integrity: sha512-Va1kXI04naMgYwqv/5Dfa36dTDx8015U7oaQAjrXa45ua9OoFjSV4OmvkML4EmXvUclQHCiBRbY8bvd0jV7eAg==} + '@turbo/linux-arm64@2.10.3': + resolution: {integrity: sha512-DPkIKQ+6p0sho3Cx/e/A3F+AKgXQJA+z//cHsTcyyM1YWRGSYA0UTP8NUpb4iS2tVBSniGwmjRUr73hpq8kcDg==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.9.18': - resolution: {integrity: sha512-m0kDhZANxSNz9ck1ybogFscHabriAsp4eDFNrN/1H5WrgTF7b3VlcPZnhuO3v2+E2KnCbeAc+UUT10BZZHdDKw==} + '@turbo/windows-64@2.10.3': + resolution: {integrity: sha512-8NvFAze9D4PsosZAnK3aGqHz2vLzREz9lNIxLgfE0jRchq2sZQE190cwFm7WX17yg3ftPvwCvWH3rhLbG1UHCQ==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.18': - resolution: {integrity: sha512-nUdR8WqoomUys9iIQmG45TMiizJ+5BV8egSeLLZba/AWblyp3fVBcIH1kSE58OtK4g2YzbMJEth6Ttv9w5rqMA==} + '@turbo/windows-arm64@2.10.3': + resolution: {integrity: sha512-AqjqV5cHbFa0YRaQ+Dyw6lSm6as4h/Uf8LcZ7VN8i+Odr23ShFD5SUvVAR1d3rZqibFVs9c0VdtXdfQfkdcs3A==} cpu: [arm64] os: [win32] @@ -931,16 +933,16 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.61.1': - resolution: {integrity: sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ==} + '@typescript-eslint/eslint-plugin@8.62.1': + resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.61.1 + '@typescript-eslint/parser': ^8.62.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.61.1': - resolution: {integrity: sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg==} + '@typescript-eslint/parser@8.62.1': + resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -952,18 +954,34 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.62.1': + resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@8.61.1': resolution: {integrity: sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.62.1': + resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.61.1': resolution: {integrity: sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.61.1': - resolution: {integrity: sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw==} + '@typescript-eslint/tsconfig-utils@8.62.1': + resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.62.1': + resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -973,12 +991,22 @@ packages: resolution: {integrity: sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.62.1': + resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.61.1': resolution: {integrity: sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/typescript-estree@8.62.1': + resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.61.1': resolution: {integrity: sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -986,10 +1014,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.62.1': + resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@8.61.1': resolution: {integrity: sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.62.1': + resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.12.2': resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} cpu: [arm] @@ -1180,9 +1219,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1342,9 +1378,6 @@ packages: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} @@ -1352,19 +1385,24 @@ packages: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} - conventional-changelog-angular@8.3.1: - resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} - engines: {node: '>=18'} + conventional-changelog-angular@9.2.0: + resolution: {integrity: sha512-2EihZvM1KmbBGwuUow8lNXLe+ECRFsyOcV8X0197/WI7Rvvgfi55Oicfw0wxJTXGGIVXSfj+xBoNj+cxLlIiVw==} + engines: {node: '>=22'} - conventional-changelog-conventionalcommits@9.3.1: - resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} - engines: {node: '>=18'} + conventional-changelog-conventionalcommits@10.2.0: + resolution: {integrity: sha512-UtlM9GqolY7OmlQh5L/UEVoKsTUpTgUVy1PU8JN5gl5Ydaejb7WRklGliG1SKPxxj7hzA173eG3Kt5fYWE2pmg==} + engines: {node: '>=22'} conventional-commits-parser@6.4.0: resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} engines: {node: '>=18'} hasBin: true + conventional-commits-parser@7.0.0: + resolution: {integrity: sha512-dZe/p+FgGQLNJFqaCgNdl8j6a7gI8xuaN30Wy5g7nvyK3jqOpNUEUZ3pGJ5D68h89uRh038FtkeOk/bnGmYkmg==} + engines: {node: '>=22'} + hasBin: true + core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} @@ -1457,10 +1495,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -1603,8 +1637,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.16.2: - resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} + eslint-plugin-import-x@4.17.1: + resolution: {integrity: sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.56.0 @@ -1616,8 +1650,8 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-jsdoc@63.0.6: - resolution: {integrity: sha512-qXMUdwQf+igjSLe/DZqyY1baVR0+snEJ3l/+2odJjeoAG43PrcpA0tSaLw2dC1iHvfKzo1YnZLGvgxrvAViyfQ==} + eslint-plugin-jsdoc@63.0.10: + resolution: {integrity: sha512-A9UIWsCquaKnit7rasXxYf12hhGIdDRjv65/RUE3AxbT6rdKBvr3MjH37g3gP+g4ipQMXuMn9slFKjO+vqNfkg==} engines: {node: ^22.13.0 || >=24} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 @@ -1628,8 +1662,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-n@18.1.0: - resolution: {integrity: sha512-hkUm9EtnFV2h2fE16jNVUfCVUqvPzI7fGLsFdun5lFt/pbmf2kCgDx6ymi9rx+NCUSggBmurJCZOfG20JBs/kg==} + eslint-plugin-n@18.2.1: + resolution: {integrity: sha512-aO3C9//yq8JIvYOi/T+jPvcZ9hZzpwzbR8esrYpFtgE9vpbyM8kn42AQOtIqYspVmpaSWr8X+nrlQuAJYxXAaw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: '>=8.57.1' @@ -1661,43 +1695,43 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-dom@5.9.1: - resolution: {integrity: sha512-e0NpfKZOOvdTkYQEDJT7qLKoTX4jAjH8/qcCuOrp8zqX1LMKPrKgPe8DXGyXG5T+Bt4b81/ZQ/s3S2zkJLFuNg==} + eslint-plugin-react-dom@5.10.2: + resolution: {integrity: sha512-3SAwyojuoDdkm5eNSW2VncysV05TKa2HykZrs/WiTirZlJT0F3jIkXfa5F2JS9lEyXaV4ywClbBhU/OLBoQBZA==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-jsx@5.9.1: - resolution: {integrity: sha512-zzhCRbuXFiGMhvCrjpcwKsob0Gos8o7d28EnhGw28YapHXx1KYt0fzUDuWDoRZ2bhYhlDHzeU+l+jEgemPpaaw==} + eslint-plugin-react-jsx@5.10.2: + resolution: {integrity: sha512-k6JMo1uCKur9G/CX+/8W3tRap9CBw1Lw+29o0ISDxPgyL2SmYj/sFbm6dVmcTf1TjUQHUSDiYK4mcsJ/KkYTcw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-naming-convention@5.9.1: - resolution: {integrity: sha512-Ce1oAL4Et3RB+3akTSiFIZIYCexyG+oYrGYGKps0dky5iaRy8MUskh4EXcq4yI109IkBCVt52gtybmR3Te0lrQ==} + eslint-plugin-react-naming-convention@5.10.2: + resolution: {integrity: sha512-T+XyuBYyYqWiwVXTpeQ3zKg4qIaZp5Q02bVWxrkOo8u2veKgf5UiW0RleDY0fj0SIOPBLUCXE4vQhRC+SuU+jw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-rsc@5.9.1: - resolution: {integrity: sha512-+XNAuJeGZ6ld1jknOPOeJ8gdTINZeQjw2sbBP213+QdTmwJqZLV+CrwaAN63O+8D+EIGtdnSkfpYDBcm3jiSGg==} + eslint-plugin-react-rsc@5.10.2: + resolution: {integrity: sha512-WJfnsr3YSaHDlOIM3J9QzuZKOtfAlr/aUy36pvgwRxJyjzcJHF9BTioQANmlM3eriCJeZCTT+W7ayoQaFA/Uuw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-web-api@5.9.1: - resolution: {integrity: sha512-D9M6wKT1fPxAy70YebHbfU+gzYv8k9RUtODXjUJYLjxrXoq2Z7o5kjB1yAZ1vi31EzbLJ+UYzGKi4hw98iwPjg==} + eslint-plugin-react-web-api@5.10.2: + resolution: {integrity: sha512-d9THoa0c0I7NhaWv2dhkq7XeGIfROhzIKJqt+9Dn1mzlljcDXiToV5wnqMRD5XkcMBrf1Cf3QCbnMqPp5JQI1A==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-x@5.9.1: - resolution: {integrity: sha512-0GwMpLdYx3HWMbDd1vqNr9VImkq34x/lQaLch2qDQmPOmi1DULL3yndl347wFhH4SbE6OUoJV2z0KCA72qnv5g==} + eslint-plugin-react-x@5.10.2: + resolution: {integrity: sha512-tFPaPYwl8ViSSew3b9iA6bwkoCdTxP7Ch4s2YH5JEyrXb6xeoG1KKRyoYpGgFzmj17Cvsg1JthYzVO/cm1kNmg==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' @@ -1730,8 +1764,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.5.0: - resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + eslint@10.6.0: + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1921,6 +1955,7 @@ packages: git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true glob-parent@5.1.2: @@ -1944,8 +1979,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@17.6.0: - resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} + globals@17.7.0: + resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} globby@11.1.0: @@ -2089,10 +2124,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -2264,6 +2295,10 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} + meow@14.1.0: + resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} + engines: {node: '>=20'} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2598,8 +2633,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.8.4: - resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + prettier@3.9.4: + resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} engines: {node: '>=14'} hasBin: true @@ -2952,8 +2987,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo@2.9.18: - resolution: {integrity: sha512-bwabv6PupzeavybzEoArBAkwq5fnzwf8OFnRtpHwnviFWuwJPFxtyH+aVp36TmIqK3aYYgtTJ3J0m2ysxxSzQg==} + turbo@2.10.3: + resolution: {integrity: sha512-uZIqzfgtWbyqu1Tqwdd0giRnPGgL0ejbcdF8eZLJhtTTVSrOgArZGzYeXTD6XNcc7ANgdhqex11Y9bHBeyiQLQ==} hasBin: true type-check@0.4.0: @@ -2971,8 +3006,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.61.1: - resolution: {integrity: sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw==} + typescript-eslint@8.62.1: + resolution: {integrity: sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3333,13 +3368,14 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 - '@commitlint/cli@21.0.2(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.2.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: - '@commitlint/format': 21.0.1 - '@commitlint/lint': 21.0.2 - '@commitlint/load': 21.0.2(@types/node@24.13.2)(typescript@6.0.3) - '@commitlint/read': 21.0.2(conventional-commits-parser@6.4.0) - '@commitlint/types': 21.0.1 + '@commitlint/config-conventional': 21.2.0 + '@commitlint/format': 21.2.0 + '@commitlint/lint': 21.2.0 + '@commitlint/load': 21.2.0(@types/node@24.13.2)(typescript@6.0.3) + '@commitlint/read': 21.2.0(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.2.0 tinyexec: 1.1.2 yargs: 18.0.0 transitivePeerDependencies: @@ -3348,46 +3384,46 @@ snapshots: - conventional-commits-parser - typescript - '@commitlint/config-conventional@21.0.2': + '@commitlint/config-conventional@21.2.0': dependencies: - '@commitlint/types': 21.0.1 - conventional-changelog-conventionalcommits: 9.3.1 + '@commitlint/types': 21.2.0 + conventional-changelog-conventionalcommits: 10.2.0 - '@commitlint/config-validator@21.0.1': + '@commitlint/config-validator@21.2.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.2.0 ajv: 8.20.0 - '@commitlint/ensure@21.0.1': + '@commitlint/ensure@21.2.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.2.0 es-toolkit: 1.46.1 '@commitlint/execute-rule@21.0.1': {} - '@commitlint/format@21.0.1': + '@commitlint/format@21.2.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.2.0 picocolors: 1.1.1 - '@commitlint/is-ignored@21.0.2': + '@commitlint/is-ignored@21.2.0': dependencies: - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.2.0 semver: 7.8.5 - '@commitlint/lint@21.0.2': + '@commitlint/lint@21.2.0': dependencies: - '@commitlint/is-ignored': 21.0.2 - '@commitlint/parse': 21.0.2 - '@commitlint/rules': 21.0.2 - '@commitlint/types': 21.0.1 + '@commitlint/is-ignored': 21.2.0 + '@commitlint/parse': 21.2.0 + '@commitlint/rules': 21.2.0 + '@commitlint/types': 21.2.0 - '@commitlint/load@21.0.2(@types/node@24.13.2)(typescript@6.0.3)': + '@commitlint/load@21.2.0(@types/node@24.13.2)(typescript@6.0.3)': dependencies: - '@commitlint/config-validator': 21.0.1 + '@commitlint/config-validator': 21.2.0 '@commitlint/execute-rule': 21.0.1 - '@commitlint/resolve-extends': 21.0.1 - '@commitlint/types': 21.0.1 + '@commitlint/resolve-extends': 21.2.0 + '@commitlint/types': 21.2.0 cosmiconfig: 9.0.1(typescript@6.0.3) cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) es-toolkit: 1.46.1 @@ -3397,48 +3433,48 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@21.0.2': {} + '@commitlint/message@21.2.0': {} - '@commitlint/parse@21.0.2': + '@commitlint/parse@21.2.0': dependencies: - '@commitlint/types': 21.0.1 - conventional-changelog-angular: 8.3.1 - conventional-commits-parser: 6.4.0 + '@commitlint/types': 21.2.0 + conventional-changelog-angular: 9.2.0 + conventional-commits-parser: 7.0.0 - '@commitlint/read@21.0.2(conventional-commits-parser@6.4.0)': + '@commitlint/read@21.2.0(conventional-commits-parser@6.4.0)': dependencies: - '@commitlint/top-level': 21.0.2 - '@commitlint/types': 21.0.1 + '@commitlint/top-level': 21.2.0 + '@commitlint/types': 21.2.0 git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0) tinyexec: 1.1.2 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@21.0.1': + '@commitlint/resolve-extends@21.2.0': dependencies: - '@commitlint/config-validator': 21.0.1 - '@commitlint/types': 21.0.1 + '@commitlint/config-validator': 21.2.0 + '@commitlint/types': 21.2.0 es-toolkit: 1.46.1 global-directory: 5.0.0 resolve-from: 5.0.0 - '@commitlint/rules@21.0.2': + '@commitlint/rules@21.2.0': dependencies: - '@commitlint/ensure': 21.0.1 - '@commitlint/message': 21.0.2 + '@commitlint/ensure': 21.2.0 + '@commitlint/message': 21.2.0 '@commitlint/to-lines': 21.0.1 - '@commitlint/types': 21.0.1 + '@commitlint/types': 21.2.0 '@commitlint/to-lines@21.0.1': {} - '@commitlint/top-level@21.0.2': + '@commitlint/top-level@21.2.0': dependencies: escalade: 3.2.0 - '@commitlint/types@21.0.1': + '@commitlint/types@21.2.0': dependencies: - conventional-commits-parser: 6.4.0 + conventional-commits-parser: 7.0.0 picocolors: 1.1.1 '@conventional-changelog/git-client@2.7.0(conventional-commits-parser@6.4.0)': @@ -3449,6 +3485,8 @@ snapshots: optionalDependencies: conventional-commits-parser: 6.4.0 + '@conventional-changelog/template@1.2.0': {} + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -3475,105 +3513,105 @@ snapshots: '@es-joy/resolve.exports@1.2.0': {} - '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.6.1))': dependencies: - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/ast@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) string-ts: 2.3.1 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint-react/core@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': - dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/jsx': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/core@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint-react/eslint-plugin@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/eslint-plugin@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) - eslint-plugin-react-dom: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint-plugin-react-jsx: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint-plugin-react-naming-convention: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint-plugin-react-rsc: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint-plugin-react-web-api: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint-plugin-react-x: 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) + eslint-plugin-react-dom: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-jsx: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-naming-convention: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-rsc: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-web-api: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-x: 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint-react/eslint@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/eslint@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint-react/jsx@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/jsx@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint-react/shared@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/shared@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 zod: 4.4.3 transitivePeerDependencies: - supports-color - '@eslint-react/var@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@eslint-react/var@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint/compat@2.1.0(eslint@10.5.0(jiti@2.6.1))': + '@eslint/compat@2.1.0(eslint@10.6.0(jiti@2.6.1))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) '@eslint/config-array@0.23.5': dependencies: @@ -3733,8 +3771,6 @@ snapshots: '@oxc-project/types@0.132.0': {} - '@package-json/types@0.0.12': {} - '@pkgjs/parseargs@0.11.0': optional: true @@ -3809,34 +3845,36 @@ snapshots: '@simple-libs/stream-utils@1.2.0': {} + '@simple-libs/stream-utils@2.0.0': {} + '@sindresorhus/base62@1.0.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) '@typescript-eslint/types': 8.61.1 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.4 - '@turbo/darwin-64@2.9.18': + '@turbo/darwin-64@2.10.3': optional: true - '@turbo/darwin-arm64@2.9.18': + '@turbo/darwin-arm64@2.10.3': optional: true - '@turbo/linux-64@2.9.18': + '@turbo/linux-64@2.10.3': optional: true - '@turbo/linux-arm64@2.9.18': + '@turbo/linux-arm64@2.10.3': optional: true - '@turbo/windows-64@2.9.18': + '@turbo/windows-64@2.10.3': optional: true - '@turbo/windows-arm64@2.9.18': + '@turbo/windows-arm64@2.10.3': optional: true '@tybys/wasm-util@0.10.2': @@ -3892,15 +3930,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/type-utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.61.1 - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.1 + eslint: 10.6.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -3908,14 +3946,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.61.1 + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -3929,22 +3967,40 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.62.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.61.1': dependencies: '@typescript-eslint/types': 8.61.1 '@typescript-eslint/visitor-keys': 8.61.1 + '@typescript-eslint/scope-manager@8.62.1': + dependencies: + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 + '@typescript-eslint/tsconfig-utils@8.61.1(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.62.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -3952,6 +4008,8 @@ snapshots: '@typescript-eslint/types@8.61.1': {} + '@typescript-eslint/types@8.62.1': {} + '@typescript-eslint/typescript-estree@8.61.1(typescript@6.0.3)': dependencies: '@typescript-eslint/project-service': 8.61.1(typescript@6.0.3) @@ -3967,13 +4025,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.62.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.61.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.61.1 '@typescript-eslint/types': 8.61.1 '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -3983,6 +4067,11 @@ snapshots: '@typescript-eslint/types': 8.61.1 eslint-visitor-keys: 5.0.1 + '@typescript-eslint/visitor-keys@8.62.1': + dependencies: + '@typescript-eslint/types': 8.62.1 + eslint-visitor-keys: 5.0.1 + '@unrs/resolver-binding-android-arm-eabi@1.12.2': optional: true @@ -4053,13 +4142,13 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true - '@vitest/eslint-plugin@1.6.20(@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': + '@vitest/eslint-plugin@1.6.20(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.61.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -4110,8 +4199,6 @@ snapshots: argparse@2.0.1: {} - array-ify@1.0.0: {} - array-union@2.1.0: {} ast-kit@3.0.0-beta.1: @@ -4253,11 +4340,6 @@ snapshots: comment-parser@1.4.7: {} - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - compare-versions@6.1.1: {} concat-stream@2.0.0: @@ -4267,18 +4349,24 @@ snapshots: readable-stream: 3.6.2 typedarray: 0.0.6 - conventional-changelog-angular@8.3.1: + conventional-changelog-angular@9.2.0: dependencies: - compare-func: 2.0.0 + '@conventional-changelog/template': 1.2.0 - conventional-changelog-conventionalcommits@9.3.1: + conventional-changelog-conventionalcommits@10.2.0: dependencies: - compare-func: 2.0.0 + '@conventional-changelog/template': 1.2.0 conventional-commits-parser@6.4.0: dependencies: '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 + optional: true + + conventional-commits-parser@7.0.0: + dependencies: + '@simple-libs/stream-utils': 2.0.0 + meow: 14.1.0 core-js-compat@3.49.0: dependencies: @@ -4380,10 +4468,6 @@ snapshots: dependencies: path-type: 4.0.0 - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - dotenv@8.6.0: {} dts-resolver@3.0.0: {} @@ -4446,14 +4530,14 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.5.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@10.6.0(jiti@2.6.1)): dependencies: - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) semver: 7.8.5 - eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.6.0(jiti@2.6.1)): dependencies: - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.12.2): dependencies: @@ -4462,10 +4546,10 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1)))(eslint@10.6.0(jiti@2.6.1)): dependencies: debug: 4.4.3 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) get-tsconfig: 4.14.0 is-bun-module: 2.0.0 @@ -4473,15 +4557,15 @@ snapshots: tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-mdx@3.8.1(eslint@10.5.0(jiti@2.6.1)): + eslint-mdx@3.8.1(eslint@10.6.0(jiti@2.6.1)): dependencies: acorn: 8.17.0 acorn-jsx: 5.3.2(acorn@8.17.0) - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) espree: 11.2.0 estree-util-visit: 2.0.0 remark-mdx: 3.1.1 @@ -4496,27 +4580,26 @@ snapshots: - bluebird - supports-color - eslint-plugin-depend@1.5.0(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-depend@1.5.0(eslint@10.6.0(jiti@2.6.1)): dependencies: empathic: 2.0.0 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) module-replacements: 2.11.0 semver: 7.8.5 - eslint-plugin-es-x@7.8.0(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@10.6.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.5.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@10.5.0(jiti@2.6.1)) + eslint: 10.6.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@10.6.0(jiti@2.6.1)) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1)): dependencies: - '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.61.1 comment-parser: 1.4.7 debug: 4.4.3 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -4524,11 +4607,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@63.0.6(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-jsdoc@63.0.10(eslint@10.6.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.87.0 '@es-joy/resolve.exports': 1.2.0 @@ -4536,7 +4619,7 @@ snapshots: comment-parser: 1.4.7 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) espree: 11.2.0 esquery: 1.7.0 html-entities: 2.6.0 @@ -4548,10 +4631,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-mdx@3.8.1(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-mdx@3.8.1(eslint@10.6.0(jiti@2.6.1)): dependencies: - eslint: 10.5.0(jiti@2.6.1) - eslint-mdx: 3.8.1(eslint@10.5.0(jiti@2.6.1)) + eslint: 10.6.0(jiti@2.6.1) + eslint-mdx: 3.8.1(eslint@10.6.0(jiti@2.6.1)) mdast-util-from-markdown: 2.0.3 mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -4566,12 +4649,12 @@ snapshots: - remark-lint-file-extension - supports-color - eslint-plugin-n@18.1.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-n@18.2.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) enhanced-resolve: 5.24.0 - eslint: 10.5.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@10.5.0(jiti@2.6.1)) + eslint: 10.6.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@10.6.0(jiti@2.6.1)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -4580,111 +4663,111 @@ snapshots: optionalDependencies: typescript: 6.0.3 - eslint-plugin-perfectionist@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-perfectionist@5.9.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.61.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1))(prettier@3.8.4): + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.6.0(jiti@2.6.1)))(eslint@10.6.0(jiti@2.6.1))(prettier@3.9.4): dependencies: - eslint: 10.5.0(jiti@2.6.1) - prettier: 3.8.4 + eslint: 10.6.0(jiti@2.6.1) + prettier: 3.9.4 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.5.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.6.0(jiti@2.6.1)) - eslint-plugin-react-dom@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-react-dom@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/jsx': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) compare-versions: 6.1.1 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-jsx@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-react-jsx@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/core': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/jsx': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/core': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-naming-convention@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-react-naming-convention@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/core': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/core': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-rsc@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-react-rsc@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/core': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/core': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + eslint-plugin-react-web-api@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/core': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/core': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) birecord: 0.1.1 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): - dependencies: - '@eslint-react/ast': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/core': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/eslint': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/jsx': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/shared': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@eslint-react/var': 5.9.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/type-utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-x@5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): + dependencies: + '@eslint-react/ast': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/core': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/shared': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@eslint-react/var': 5.10.2(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) compare-versions: 6.1.1 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) string-ts: 2.3.1 ts-api-utils: 2.5.0(typescript@6.0.3) ts-pattern: 5.9.0 @@ -4692,14 +4775,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-sonarjs@4.1.0(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-sonarjs@4.1.0(eslint@10.6.0(jiti@2.6.1)): dependencies: '@eslint-community/regexpp': 4.12.2 builtin-modules: 3.3.0 bytes: 3.1.2 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) functional-red-black-tree: 1.0.1 - globals: 17.6.0 + globals: 17.7.0 jsx-ast-utils-x: 0.1.0 lodash.merge: 4.6.2 minimatch: 10.2.5 @@ -4709,18 +4792,18 @@ snapshots: typescript: 6.0.3 yaml: 2.9.0 - eslint-plugin-unicorn@68.0.0(eslint@10.5.0(jiti@2.6.1)): + eslint-plugin-unicorn@68.0.0(eslint@10.6.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.29.7 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) browserslist: 4.28.2 change-case: 5.4.4 ci-info: 4.4.0 core-js-compat: 3.49.0 detect-indent: 7.0.2 - eslint: 10.5.0(jiti@2.6.1) + eslint: 10.6.0(jiti@2.6.1) find-up-simple: 1.0.1 - globals: 17.6.0 + globals: 17.7.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -4742,9 +4825,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.5.0(jiti@2.6.1): + eslint@10.6.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -4982,7 +5065,7 @@ snapshots: globals@15.15.0: {} - globals@17.6.0: {} + globals@17.7.0: {} globby@11.1.0: dependencies: @@ -5095,8 +5178,6 @@ snapshots: is-number@7.0.0: {} - is-obj@2.0.0: {} - is-plain-obj@4.1.0: {} is-stream@1.1.0: {} @@ -5311,6 +5392,8 @@ snapshots: meow@13.2.0: {} + meow@14.1.0: {} + merge2@1.4.1: {} micromark-core-commonmark@2.0.3: @@ -5719,15 +5802,15 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-packagejson@3.0.2(prettier@3.8.4): + prettier-plugin-packagejson@3.0.2(prettier@3.9.4): dependencies: sort-package-json: 3.6.1 optionalDependencies: - prettier: 3.8.4 + prettier: 3.9.4 prettier@2.8.8: {} - prettier@3.8.4: {} + prettier@3.9.4: {} proc-log@4.2.0: {} @@ -6104,14 +6187,14 @@ snapshots: tslib@2.8.1: optional: true - turbo@2.9.18: + turbo@2.10.3: optionalDependencies: - '@turbo/darwin-64': 2.9.18 - '@turbo/darwin-arm64': 2.9.18 - '@turbo/linux-64': 2.9.18 - '@turbo/linux-arm64': 2.9.18 - '@turbo/windows-64': 2.9.18 - '@turbo/windows-arm64': 2.9.18 + '@turbo/darwin-64': 2.10.3 + '@turbo/darwin-arm64': 2.10.3 + '@turbo/linux-64': 2.10.3 + '@turbo/linux-arm64': 2.10.3 + '@turbo/windows-64': 2.10.3 + '@turbo/windows-arm64': 2.10.3 type-check@0.4.0: dependencies: @@ -6127,13 +6210,13 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): + typescript-eslint@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fa609211..5bab199a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,3 +14,4 @@ publicHoistPattern: - "*turbo*" - "*typescript*" - "*types*" +verifyDepsBeforeRun: "warn" diff --git a/stack/package.json b/stack/package.json index 48f5d9bd..d23cc88d 100644 --- a/stack/package.json +++ b/stack/package.json @@ -48,32 +48,31 @@ "dependencies": { "@changesets/changelog-github": "^0.7.0", "@changesets/cli": "^2.31.0", - "@commitlint/cli": "^21.0.2", - "@commitlint/config-conventional": "^21.0.2", - "@eslint-react/eslint-plugin": "^5.9.1", + "@commitlint/cli": "^21.2.0", + "@commitlint/config-conventional": "^21.2.0", + "@eslint-react/eslint-plugin": "^5.10.0", "@eslint/compat": "^2.1.0", "@stylistic/eslint-plugin": "^5.10.0", "@vitest/eslint-plugin": "^1.6.20", - "eslint": "^10.5.0", + "eslint": "^10.6.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.5", "eslint-plugin-depend": "^1.5.0", - "eslint-plugin-import-x": "^4.16.2", - "eslint-plugin-jsdoc": "^63.0.6", + "eslint-plugin-import-x": "^4.17.1", + "eslint-plugin-jsdoc": "^63.0.10", "eslint-plugin-mdx": "^3.8.1", - "eslint-plugin-n": "^18.1.0", + "eslint-plugin-n": "^18.2.1", "eslint-plugin-perfectionist": "^5.9.1", "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-sonarjs": "^4.1.0", "eslint-plugin-unicorn": "^68.0.0", - "fdir": "^6.5.0", - "globals": "^17.6.0", - "prettier": "^3.8.4", + "globals": "^17.7.0", + "prettier": "^3.9.4", "prettier-plugin-packagejson": "^3.0.2", "termost": "^1.9.1", - "turbo": "^2.9.18", + "turbo": "^2.10.2", "typescript": "^6.0.3", - "typescript-eslint": "^8.61.1" + "typescript-eslint": "^8.62.1" }, "devDependencies": { "@types/node": "24.13.2", diff --git a/stack/src/commands/clean.ts b/stack/src/commands/clean.ts index bea5c5aa..a6dcbd70 100644 --- a/stack/src/commands/clean.ts +++ b/stack/src/commands/clean.ts @@ -4,7 +4,7 @@ import { helpers } from "termost"; import type { CommandFactory } from "../types"; -import { resolveFromProjectDirectory } from "../helpers"; +import { resolveFromWorkingDirectory } from "../helpers"; type CommandContext = { files: string[]; @@ -23,7 +23,7 @@ export const createCleanCommand: CommandFactory = (program) => { if ( isDirectoryExistAndNotEmpty( - resolveFromProjectDirectory(cachePath), + resolveFromWorkingDirectory(cachePath), ) ) { files.push(cachePath); diff --git a/stack/src/commands/create.ts b/stack/src/commands/create.ts index 27ff1f3a..c0b21745 100644 --- a/stack/src/commands/create.ts +++ b/stack/src/commands/create.ts @@ -1,7 +1,15 @@ -import { fdir } from "fdir"; -import { cpSync, readFileSync, renameSync, writeFileSync } from "node:fs"; -import { mkdir, symlink } from "node:fs/promises"; -import { join, resolve } from "node:path"; +import { existsSync } from "node:fs"; +import { + cp, + mkdir, + readdir, + readFile, + rename, + rm, + symlink, + writeFile, +} from "node:fs/promises"; +import { basename, join, resolve } from "node:path"; import { helpers } from "termost"; import type { CommandFactory } from "../types"; @@ -10,32 +18,37 @@ import { VERSION } from "../constants"; import { botMessage, createError, - getNpmVersion, + getPnpmVersion, request, - resolveFromProjectDirectory, - resolveFromStackDirectory, + resolveFromPackageDirectory, + resolveFromWorkingDirectory, setPackageManager, } from "../helpers"; type CommandContext = { + canRemoveExistingDirectoryInput: boolean; data: Record< | "licenseYear" | "nodeVersion" - | "npmVersion" + | "pnpmVersion" | "projectDescription" | "projectName" | "projectUrl" - | "repoId", + | "repoId" + | "templatePath" + | "workingPath", string >; inputDescription: string; inputName: string; inputTemplate: Template; inputUrl: string; + templateEngine: TemplateEngine; }; type Template = "multi-projects" | "single-project"; +// eslint-disable-next-line sonarjs/max-lines-per-function export const createCreateCommand: CommandFactory = (program) => { program .command({ @@ -55,7 +68,7 @@ export const createCreateCommand: CommandFactory = (program) => { .task({ async handler() { // Check pnpm availability by verifying its version - await getNpmVersion(); + await getPnpmVersion(); }, label: label("Check pre-requisites"), }) @@ -83,7 +96,12 @@ export const createCreateCommand: CommandFactory = (program) => { type: "select", }) .task({ - async handler({ inputDescription, inputName, inputUrl }) { + async handler({ + inputDescription, + inputName, + inputTemplate, + inputUrl, + }) { if (!inputName) { throw createError( "stack create", @@ -109,63 +127,115 @@ export const createCreateCommand: CommandFactory = (program) => { "text", ); - const { version: npmVersion } = await request.get( + const { version: pnpmVersion } = await request.get( "https://registry.npmjs.org/pnpm/latest", "json", ); + const projectName = slugify(inputName); + return { licenseYear: new Date().getFullYear().toString(), nodeVersion: nodeVersion.replace("v", ""), - npmVersion: String(npmVersion), - projectDescription: - inputDescription.charAt(0).toUpperCase() + - inputDescription.slice(1), // Enforce upper case for the first letter - projectName: inputName.toLowerCase(), // Enforce lower case for folder and package name + pnpmVersion: String(pnpmVersion), + projectDescription: toCapitalLetter(inputDescription), + projectName, projectUrl: inputUrl, repoId: `${repoOwner}/${repoName}`, + templatePath: resolveFromPackageDirectory( + "templates", + inputTemplate, + ), + workingPath: resolveFromWorkingDirectory(projectName), }; }, key: "data", label: label("Check and format input"), }) - .task({ - async handler({ data }) { - const projectPath = resolve(process.cwd(), data.projectName); - - await mkdir(projectPath); - process.chdir(projectPath); + .input({ + defaultValue: true, + key: "canRemoveExistingDirectoryInput", + label({ data: { projectName } }) { + return label( + `\`${projectName}\` directory already exists, do you want to remove it?`, + ); + }, + skip({ data: { workingPath } }) { + return !existsSync(workingPath); }, - label({ data }) { - return label(`Create \`${data.projectName}\` folder`); + type: "confirm", + validate({ + canRemoveExistingDirectoryInput, + data: { projectName }, + }) { + if (canRemoveExistingDirectoryInput) return; + + return createError( + "mkdir", + `Remove or rename the \`${projectName}\` existing directory to apply the template from a clean state.`, + ); }, }) .task({ - async handler({ data }) { - await helpers.exec("git init"); - await helpers.exec(`git remote add origin ${data.projectUrl}`); + async handler({ + canRemoveExistingDirectoryInput, + data: { + licenseYear, + nodeVersion, + pnpmVersion, + projectDescription, + projectName, + projectUrl, + repoId, + templatePath, + workingPath, + }, + inputTemplate, + }) { + if (canRemoveExistingDirectoryInput) { + await rm(workingPath, { + force: true, + recursive: true, + }); + } + + return createTemplateEngine(workingPath, { + projectName, + templateModel: { + licenseYear, + nodeVersion, + pnpmVersion, + projectDescription, + projectName, + projectUrl, + repoId, + }, + templateName: inputTemplate, + templatePath, + }); + }, + key: "templateEngine", + label({ data: { projectName }, inputTemplate }) { + return label( + `Copy \`${inputTemplate}\` template to \`${projectName}\` directory`, + ); }, - label: label("Initialize `git`"), }) .task({ - handler({ data, inputTemplate }) { - applyTemplate(inputTemplate, data); + async handler({ templateEngine }) { + await templateEngine.processContents(); + await templateEngine.processPaths(); + }, + label() { + return label("Process template"); }, - label: label("Apply template"), }) .task({ - async handler({ data: { projectName }, inputTemplate }) { - await symlink( - join( - inputTemplate === "single-project" - ? projectName - : join("libraries", projectName), - "README.md", - ), - "./README.md", - ); + async handler({ data: { projectUrl } }) { + await helpers.exec("git init"); + await helpers.exec(`git remote add origin ${projectUrl}`); }, - label: label("Create a symlink to `README.md` file"), + label: label("Initialize `git`"), }) .task({ async handler() { @@ -174,7 +244,7 @@ export const createCreateCommand: CommandFactory = (program) => { label: label("Set up the package manager"), }) .task({ - async handler({ data }) { + async handler({ data: { projectName } }) { const localDevelopmentDependencies = ["quickbundle", "vitest"]; const globalDevelopmentDependencies = ["@adbayb/stack"]; @@ -188,7 +258,7 @@ export const createCreateCommand: CommandFactory = (program) => { await helpers.exec( `pnpm add ${localDevelopmentDependencies.join( " ", - )} --save-dev --filter ${data.projectName}`, + )} --save-dev --filter ${projectName}`, ); await helpers.exec("pnpm install"); @@ -212,9 +282,9 @@ export const createCreateCommand: CommandFactory = (program) => { label: label("Commit"), }) .task({ - handler({ data }) { + handler({ data: { projectName } }) { botMessage({ - description: `Run \`cd ./${data.projectName}\` and Enjoy 🚀`, + description: `Run \`cd ./${projectName}\` and Enjoy 🚀`, title: "The project was successfully created", type: "success", }); @@ -224,78 +294,185 @@ export const createCreateCommand: CommandFactory = (program) => { const label = (message: string) => `${message} 🔨`; -/** - * A simple template engine to evaluate dynamic expressions and apply side effets (such as hydrating a content with values from an input object) on impacted template files. - * @param template - The selected template. - * @param dataModel - Data model mapping the template expression key with its corresponding value. - * @example - * applyTemplate( - * { toReplace: "value" }, - * ); - */ -const applyTemplate = ( - template: Template, - dataModel: CommandContext["data"], -) => { - const templateExtension = ".tmpl"; +const slugify = (input: string) => { + return input + .toLowerCase() + .replaceAll(/[^a-z0-9\s-]/g, "") + .trim() + .replaceAll(/\s+/g, "-") + .replaceAll(/-+/g, "-"); +}; - const templateRootPath = resolveFromStackDirectory( - join("./templates", template), - ); +const toCapitalLetter = (input: string) => { + return input.charAt(0).toUpperCase() + input.slice(1); +}; + +type TemplateEngine = { + processContents: () => Promise; + processPaths: () => Promise; +}; - const projectRootPath = resolveFromProjectDirectory("./"); - const templateExpressionRegExp = /{{(.*?)}}/g; +type TemplateEntry = { + content: string; + path: string; + type: "content" | "path.directory" | "path.file"; +}; - const evaluate = (content: string) => { - return content.replaceAll( - templateExpressionRegExp, - (_, key: keyof CommandContext["data"]) => dataModel[key] || "", - ); - }; +type TemplateMetadata = { + projectName: string; + templateModel: Record; + templateName: string; + templatePath: string; +}; - /** Copy the template before mutations. */ - cpSync(templateRootPath, projectRootPath, { +export const createTemplateEngine = async ( + workingPath: string, + { + projectName, + templateModel, + templateName, + templatePath, + }: TemplateMetadata, +): Promise => { + if (!existsSync(workingPath)) { + await mkdir(workingPath); + } + + // Copy the selected template before mutation + await cp(templatePath, workingPath, { force: true, recursive: true, }); - /** Template file mutations. */ - new fdir() - .withBasePath() - .glob(`**/*${templateExtension}`) - .crawl(projectRootPath) - .sync() - .forEach((templateFilePath) => { - const projectFilePath = templateFilePath.slice( - 0, - templateFilePath.lastIndexOf(templateExtension), + // Rename back `.gitignore` if available (since NPM prevents its inclusion during publication: https://docs.npmjs.com/cli/v10/using-npm/developers#keeping-files-out-of-your-package) + const gitignoreFile = join(workingPath, "gitignore"); + + if (existsSync(gitignoreFile)) { + await rename(gitignoreFile, join(workingPath, ".gitignore")); + } + + // Rename back `eslint.config.js` (since eslint use the nearest config file found to prevent false positives) + const eslintConfigFile = join(workingPath, "eslint.config.js.tmpl"); + + if (existsSync(eslintConfigFile)) { + await rename(eslintConfigFile, join(workingPath, "eslint.config.js")); + } + + const templateEntries = await getTemplateEntries(workingPath); + + process.chdir(workingPath); + + return { + async processContents() { + await Promise.all( + templateEntries + .filter(({ type }) => type === "content") + .map(async (entry) => { + return writeFile( + entry.path, + setTemplateVariables(entry, templateModel), + ); + }), ); + }, + async processPaths() { + const sortedDirectoryEntries = templateEntries + .filter(({ content, type }) => { + if (type === "path.directory" || type === "path.file") { + // Process only the basename to avoid renaming errors in deeply nested paths that rely on the original, non-computed template variable. + return hasTemplateVariable(basename(content)); + } + + return false; + }) + .toSorted( + // Re-order from longest to lowest path length to rename deepest directory paths first + ({ path: pathA }, { path: pathB }) => + pathB.length - pathA.length, + ); - const content = evaluate(readFileSync(templateFilePath, "utf8")); + for (const entry of sortedDirectoryEntries) { + const newPath = setTemplateVariables(entry, templateModel); - renameSync(templateFilePath, projectFilePath); - writeFileSync(projectFilePath, content, "utf8"); - }); + await rename(entry.path, newPath); + } - /** Template folder mutations. */ - new fdir() - .withBasePath() - .onlyDirs() - .filter((path) => { - return templateExpressionRegExp.test(path); - }) - .crawl(projectRootPath) - .sync() - // Re-order from longest to lowest path length to apply first renaming operations on deepest file structure - .toSorted((a, b) => b.length - a.length) - .forEach((templateFolderPath) => { - const newPath = templateFolderPath.replaceAll( - templateExpressionRegExp, - (_, dataModelKey) => { - return dataModel[dataModelKey as keyof typeof dataModel]; - }, + await symlink( + join( + templateName === "single-project" + ? projectName + : join("libraries", projectName), + "README.md", + ), + "./README.md", ); + }, + }; +}; - renameSync(templateFolderPath, newPath); - }); +const getTemplateEntries = async (path: string) => { + const entries = await readdir(path, { + recursive: true, + withFileTypes: true, + }); + + const templateEntries = await Promise.all( + entries.map(async (entry): Promise => { + const isDirectory = entry.isDirectory(); + + if (!isDirectory && !entry.isFile()) return []; + + const entryPath = resolve(entry.parentPath, entry.name); + + const processableItems: Pick[] = + isDirectory + ? [{ content: entryPath, type: "path.directory" }] + : [ + { content: entryPath, type: "path.file" }, + { + content: await readFile(entryPath, "utf8"), + type: "content", + }, + ]; + + return processableItems + .map(({ content, type }) => { + if (!hasTemplateVariable(content)) return undefined; + + return { + content, + path: entryPath, + type, + }; + }) + .filter((input): input is TemplateEntry => Boolean(input)); + }), + ); + + return templateEntries.flat(); +}; + +const setTemplateVariables = ( + entry: TemplateEntry, + model: TemplateMetadata["templateModel"], +) => { + return entry.content.replaceAll( + TEMPLATE_VARIABLE_MATCHER, + (match, dataModelKey: string) => { + return model[dataModelKey] ?? match; + }, + ); +}; + +const TEMPLATE_VARIABLE_MATCHER = new RegExp(/{{(.*?)}}/g, "gi"); + +const hasTemplateVariable = (input: string) => { + /** + * TemplateVariableMatcher.test() is not used since the `RegExp` is stateful when the global is used leading to some unstable results + * (relying on latest `lastIndex` set (lastIndex specifies the index at which to start the next match)). + * String.search is stateless. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test MDN documentation}. + */ + // eslint-disable-next-line unicorn/prefer-regexp-test + return input.search(TEMPLATE_VARIABLE_MATCHER) >= 0; }; diff --git a/stack/src/commands/fix/fixFormatting.ts b/stack/src/commands/fix/fixFormatting.ts index 33b007ba..08057a3c 100644 --- a/stack/src/commands/fix/fixFormatting.ts +++ b/stack/src/commands/fix/fixFormatting.ts @@ -3,7 +3,7 @@ import { helpers } from "termost"; import type { Filenames } from "../../types"; -import { createError, resolveFromProjectDirectory } from "../../helpers"; +import { createError, resolveFromWorkingDirectory } from "../../helpers"; const PRETTIER_IGNORE_FILES = ["pnpm-lock.yaml"]; @@ -24,7 +24,7 @@ export const fixFormatting = async (files: Filenames) => { const arguments_ = [...prettierFiles]; - if (existsSync(resolveFromProjectDirectory(".gitignore"))) { + if (existsSync(resolveFromWorkingDirectory(".gitignore"))) { arguments_.push("--ignore-path .gitignore"); } diff --git a/stack/src/commands/install.ts b/stack/src/commands/install.ts index 50208fc8..1ba8cf41 100644 --- a/stack/src/commands/install.ts +++ b/stack/src/commands/install.ts @@ -2,7 +2,7 @@ import { chmod, writeFile } from "node:fs/promises"; import type { CommandFactory } from "../types"; -import { getStackCommand, resolveFromProjectDirectory } from "../helpers"; +import { getStackCommand, resolveFromWorkingDirectory } from "../helpers"; export const createInstallCommand: CommandFactory = (program) => { program @@ -42,7 +42,7 @@ const installGitHook = async ( hook: "commit-msg" | "pre-commit", content: string, ) => { - const filename = resolveFromProjectDirectory(`.git/hooks/${hook}`); + const filename = resolveFromWorkingDirectory(`.git/hooks/${hook}`); await writeFile(filename, content); diff --git a/stack/src/helpers.ts b/stack/src/helpers.ts index 2c15f8e9..d928f577 100644 --- a/stack/src/helpers.ts +++ b/stack/src/helpers.ts @@ -74,10 +74,10 @@ ${input.body} * @param path - The relative path. * @returns The resolved absolute path. * @example - * resolveFromProjectDirectory(".gitignore"); + * resolveFromWorkingDirectory(".gitignore"); */ -export const resolveFromProjectDirectory = (path: string) => { - return resolve(process.cwd(), path); +export const resolveFromWorkingDirectory = (...path: string[]) => { + return resolve(process.cwd(), ...path); }; /** @@ -85,10 +85,10 @@ export const resolveFromProjectDirectory = (path: string) => { * @param path - The relative path. * @returns The resolved absolute path. * @example - * resolveFromStackDirectory("./templates"); + * resolveFromPackageDirectory("./templates"); */ -export const resolveFromStackDirectory = (path: string) => { - return resolve(import.meta.dirname, "../", path); +export const resolveFromPackageDirectory = (...path: string[]) => { + return resolve(import.meta.dirname, "../", ...path); }; export const createError = (bin: string, error: Error | string) => { @@ -117,7 +117,7 @@ export const getRepositoryUrl = async () => { } }; -export const getNpmVersion = async () => { +export const getPnpmVersion = async () => { try { return await helpers.exec("pnpm -v"); } catch { @@ -187,7 +187,7 @@ export const eslint = const arguments_ = [ ...eslintFiles, "--cache", - `--cache-location ${resolveFromProjectDirectory( + `--cache-location ${resolveFromWorkingDirectory( "node_modules/.cache/.eslintcache", )}`, "--no-error-on-unmatched-pattern", diff --git a/stack/templates/multi-projects/.changeset/config.json.tmpl b/stack/templates/multi-projects/.changeset/config.json similarity index 100% rename from stack/templates/multi-projects/.changeset/config.json.tmpl rename to stack/templates/multi-projects/.changeset/config.json diff --git a/stack/templates/multi-projects/.changeset/welcome.md.tmpl b/stack/templates/multi-projects/.changeset/welcome.md similarity index 100% rename from stack/templates/multi-projects/.changeset/welcome.md.tmpl rename to stack/templates/multi-projects/.changeset/welcome.md diff --git a/stack/templates/multi-projects/.github/PULL_REQUEST_TEMPLATE.md.tmpl b/stack/templates/multi-projects/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from stack/templates/multi-projects/.github/PULL_REQUEST_TEMPLATE.md.tmpl rename to stack/templates/multi-projects/.github/PULL_REQUEST_TEMPLATE.md diff --git a/stack/templates/multi-projects/.npmrc.tmpl b/stack/templates/multi-projects/.npmrc similarity index 100% rename from stack/templates/multi-projects/.npmrc.tmpl rename to stack/templates/multi-projects/.npmrc diff --git a/stack/templates/multi-projects/.nvmrc.tmpl b/stack/templates/multi-projects/.nvmrc similarity index 100% rename from stack/templates/multi-projects/.nvmrc.tmpl rename to stack/templates/multi-projects/.nvmrc diff --git a/stack/templates/multi-projects/CONTRIBUTING.md.tmpl b/stack/templates/multi-projects/CONTRIBUTING.md similarity index 100% rename from stack/templates/multi-projects/CONTRIBUTING.md.tmpl rename to stack/templates/multi-projects/CONTRIBUTING.md diff --git a/stack/templates/multi-projects/LICENSE.tmpl b/stack/templates/multi-projects/LICENSE similarity index 100% rename from stack/templates/multi-projects/LICENSE.tmpl rename to stack/templates/multi-projects/LICENSE diff --git a/stack/templates/multi-projects/examples/default/package.json.tmpl b/stack/templates/multi-projects/examples/default/package.json similarity index 91% rename from stack/templates/multi-projects/examples/default/package.json.tmpl rename to stack/templates/multi-projects/examples/default/package.json index 94502e2d..41b74d37 100644 --- a/stack/templates/multi-projects/examples/default/package.json.tmpl +++ b/stack/templates/multi-projects/examples/default/package.json @@ -9,6 +9,6 @@ "{{projectName}}": "workspace:^" }, "devDependencies": { - "tsx": "4.19.1" + "tsx": "4.22.4" } } diff --git a/stack/templates/multi-projects/examples/default/src/index.ts.tmpl b/stack/templates/multi-projects/examples/default/src/index.ts similarity index 100% rename from stack/templates/multi-projects/examples/default/src/index.ts.tmpl rename to stack/templates/multi-projects/examples/default/src/index.ts diff --git a/stack/templates/multi-projects/.gitignore.tmpl b/stack/templates/multi-projects/gitignore similarity index 100% rename from stack/templates/multi-projects/.gitignore.tmpl rename to stack/templates/multi-projects/gitignore diff --git a/stack/templates/multi-projects/libraries/{{projectName}}/README.md.tmpl b/stack/templates/multi-projects/libraries/{{projectName}}/README.md similarity index 100% rename from stack/templates/multi-projects/libraries/{{projectName}}/README.md.tmpl rename to stack/templates/multi-projects/libraries/{{projectName}}/README.md diff --git a/stack/templates/multi-projects/libraries/{{projectName}}/package.json.tmpl b/stack/templates/multi-projects/libraries/{{projectName}}/package.json similarity index 100% rename from stack/templates/multi-projects/libraries/{{projectName}}/package.json.tmpl rename to stack/templates/multi-projects/libraries/{{projectName}}/package.json diff --git a/stack/templates/multi-projects/libraries/{{projectName}}/src/index.test.ts.tmpl b/stack/templates/multi-projects/libraries/{{projectName}}/src/index.test.ts similarity index 100% rename from stack/templates/multi-projects/libraries/{{projectName}}/src/index.test.ts.tmpl rename to stack/templates/multi-projects/libraries/{{projectName}}/src/index.test.ts diff --git a/stack/templates/single-project/package.json.tmpl b/stack/templates/multi-projects/package.json similarity index 89% rename from stack/templates/single-project/package.json.tmpl rename to stack/templates/multi-projects/package.json index 19be332e..b3d7e60b 100644 --- a/stack/templates/single-project/package.json.tmpl +++ b/stack/templates/multi-projects/package.json @@ -17,12 +17,12 @@ "watch": "stack watch" }, "prettier": "@adbayb/stack/prettier", - "packageManager": "pnpm@{{npmVersion}}", + "packageManager": "pnpm@{{pnpmVersion}}", "devEngines": { "packageManager": [ { "name": "pnpm", - "version": "{{npmVersion}}", + "version": "{{pnpmVersion}}", "onFail": "download" }, { diff --git a/stack/templates/multi-projects/pnpm-workspace.yaml.tmpl b/stack/templates/multi-projects/pnpm-workspace.yaml similarity index 77% rename from stack/templates/multi-projects/pnpm-workspace.yaml.tmpl rename to stack/templates/multi-projects/pnpm-workspace.yaml index 5902ad4e..c483e853 100644 --- a/stack/templates/multi-projects/pnpm-workspace.yaml.tmpl +++ b/stack/templates/multi-projects/pnpm-workspace.yaml @@ -1,3 +1,6 @@ +allowBuilds: + esbuild: true + unrs-resolver: true minimumReleaseAgeExclude: - "@adbayb/*" packages: @@ -13,3 +16,4 @@ publicHoistPattern: - "*turbo*" - "*typescript*" - "*types*" +verifyDepsBeforeRun: "warn" diff --git a/stack/templates/single-project/.changeset/config.json.tmpl b/stack/templates/single-project/.changeset/config.json similarity index 100% rename from stack/templates/single-project/.changeset/config.json.tmpl rename to stack/templates/single-project/.changeset/config.json diff --git a/stack/templates/single-project/.changeset/welcome.md.tmpl b/stack/templates/single-project/.changeset/welcome.md similarity index 100% rename from stack/templates/single-project/.changeset/welcome.md.tmpl rename to stack/templates/single-project/.changeset/welcome.md diff --git a/stack/templates/single-project/.github/PULL_REQUEST_TEMPLATE.md.tmpl b/stack/templates/single-project/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from stack/templates/single-project/.github/PULL_REQUEST_TEMPLATE.md.tmpl rename to stack/templates/single-project/.github/PULL_REQUEST_TEMPLATE.md diff --git a/stack/templates/single-project/.npmrc.tmpl b/stack/templates/single-project/.npmrc similarity index 100% rename from stack/templates/single-project/.npmrc.tmpl rename to stack/templates/single-project/.npmrc diff --git a/stack/templates/single-project/.nvmrc.tmpl b/stack/templates/single-project/.nvmrc similarity index 100% rename from stack/templates/single-project/.nvmrc.tmpl rename to stack/templates/single-project/.nvmrc diff --git a/stack/templates/single-project/CONTRIBUTING.md.tmpl b/stack/templates/single-project/CONTRIBUTING.md similarity index 100% rename from stack/templates/single-project/CONTRIBUTING.md.tmpl rename to stack/templates/single-project/CONTRIBUTING.md diff --git a/stack/templates/single-project/LICENSE.tmpl b/stack/templates/single-project/LICENSE similarity index 100% rename from stack/templates/single-project/LICENSE.tmpl rename to stack/templates/single-project/LICENSE diff --git a/stack/templates/single-project/examples/default/package.json.tmpl b/stack/templates/single-project/examples/default/package.json similarity index 91% rename from stack/templates/single-project/examples/default/package.json.tmpl rename to stack/templates/single-project/examples/default/package.json index 94502e2d..41b74d37 100644 --- a/stack/templates/single-project/examples/default/package.json.tmpl +++ b/stack/templates/single-project/examples/default/package.json @@ -9,6 +9,6 @@ "{{projectName}}": "workspace:^" }, "devDependencies": { - "tsx": "4.19.1" + "tsx": "4.22.4" } } diff --git a/stack/templates/single-project/examples/default/src/index.ts.tmpl b/stack/templates/single-project/examples/default/src/index.ts similarity index 100% rename from stack/templates/single-project/examples/default/src/index.ts.tmpl rename to stack/templates/single-project/examples/default/src/index.ts diff --git a/stack/templates/single-project/.gitignore.tmpl b/stack/templates/single-project/gitignore similarity index 100% rename from stack/templates/single-project/.gitignore.tmpl rename to stack/templates/single-project/gitignore diff --git a/stack/templates/multi-projects/package.json.tmpl b/stack/templates/single-project/package.json similarity index 89% rename from stack/templates/multi-projects/package.json.tmpl rename to stack/templates/single-project/package.json index 19be332e..b3d7e60b 100644 --- a/stack/templates/multi-projects/package.json.tmpl +++ b/stack/templates/single-project/package.json @@ -17,12 +17,12 @@ "watch": "stack watch" }, "prettier": "@adbayb/stack/prettier", - "packageManager": "pnpm@{{npmVersion}}", + "packageManager": "pnpm@{{pnpmVersion}}", "devEngines": { "packageManager": [ { "name": "pnpm", - "version": "{{npmVersion}}", + "version": "{{pnpmVersion}}", "onFail": "download" }, { diff --git a/stack/templates/single-project/pnpm-workspace.yaml.tmpl b/stack/templates/single-project/pnpm-workspace.yaml similarity index 76% rename from stack/templates/single-project/pnpm-workspace.yaml.tmpl rename to stack/templates/single-project/pnpm-workspace.yaml index 3dce1d9d..a1f9a2e3 100644 --- a/stack/templates/single-project/pnpm-workspace.yaml.tmpl +++ b/stack/templates/single-project/pnpm-workspace.yaml @@ -1,3 +1,6 @@ +allowBuilds: + esbuild: true + unrs-resolver: true minimumReleaseAgeExclude: - "@adbayb/*" packages: @@ -12,3 +15,4 @@ publicHoistPattern: - "*turbo*" - "*typescript*" - "*types*" +verifyDepsBeforeRun: "warn" diff --git a/stack/templates/single-project/{{projectName}}/README.md.tmpl b/stack/templates/single-project/{{projectName}}/README.md similarity index 100% rename from stack/templates/single-project/{{projectName}}/README.md.tmpl rename to stack/templates/single-project/{{projectName}}/README.md diff --git a/stack/templates/single-project/{{projectName}}/package.json.tmpl b/stack/templates/single-project/{{projectName}}/package.json similarity index 100% rename from stack/templates/single-project/{{projectName}}/package.json.tmpl rename to stack/templates/single-project/{{projectName}}/package.json diff --git a/stack/templates/single-project/{{projectName}}/src/index.test.ts.tmpl b/stack/templates/single-project/{{projectName}}/src/index.test.ts similarity index 100% rename from stack/templates/single-project/{{projectName}}/src/index.test.ts.tmpl rename to stack/templates/single-project/{{projectName}}/src/index.test.ts diff --git a/stack/tsconfig.json b/stack/tsconfig.json index edb7d6cf..e6e08413 100644 --- a/stack/tsconfig.json +++ b/stack/tsconfig.json @@ -1,8 +1,9 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "outDir": "bin" + "outDir": "bin", + "types": ["node"] }, "include": ["config", "src", "templates", "package.json"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "templates"] }