diff --git a/package.json b/package.json index 6ec401e..a7f3133 100644 --- a/package.json +++ b/package.json @@ -66,20 +66,20 @@ ], "license": "MIT", "dependencies": { - "@cto.af/wtf8": "0.0.3" + "@cto.af/wtf8": "0.0.4" }, "devDependencies": { - "@cto.af/eslint-config": "6.0.9", - "@eslint/markdown": "6.6.0", + "@cto.af/eslint-config": "6.0.12", + "@eslint/markdown": "7.1.0", "c8": "10.1.3", "cbor-edn": "0.2.2", - "eslint": "9.29.0", - "eslint-plugin-jsdoc": "51.2.3", - "package-extract": "3.1.0", + "eslint": "9.32.0", + "eslint-plugin-jsdoc": "52.0.2", + "package-extract": "3.1.3", "rimraf": "^6.0.1", "tsup": "8.5.0", - "typedoc": "0.28.5", - "typescript-eslint": "8.35.0" + "typedoc": "0.28.9", + "typescript-eslint": "8.38.0" }, "pnpm": { "overrides": { @@ -89,7 +89,7 @@ "esbuild" ] }, - "packageManager": "pnpm@10.12.3", + "packageManager": "pnpm@10.14.0", "engines": { "node": ">=20" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 652751e..7f83bd9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,15 +12,15 @@ importers: .: dependencies: '@cto.af/wtf8': - specifier: 0.0.3 - version: 0.0.3 + specifier: 0.0.4 + version: 0.0.4 devDependencies: '@cto.af/eslint-config': - specifier: 6.0.9 - version: 6.0.9(eslint@9.29.0)(typescript@5.8.3) + specifier: 6.0.12 + version: 6.0.12(eslint@9.32.0)(typescript@5.8.3) '@eslint/markdown': - specifier: 6.6.0 - version: 6.6.0 + specifier: 7.1.0 + version: 7.1.0 c8: specifier: 10.1.3 version: 10.1.3 @@ -28,14 +28,14 @@ importers: specifier: 0.2.2 version: 0.2.2 eslint: - specifier: 9.29.0 - version: 9.29.0 + specifier: 9.32.0 + version: 9.32.0 eslint-plugin-jsdoc: - specifier: 51.2.3 - version: 51.2.3(eslint@9.29.0) + specifier: 52.0.2 + version: 52.0.2(eslint@9.32.0) package-extract: - specifier: 3.1.0 - version: 3.1.0 + specifier: 3.1.3 + version: 3.1.3 rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -43,11 +43,11 @@ importers: specifier: 8.5.0 version: 8.5.0(typescript@5.8.3)(yaml@2.8.0) typedoc: - specifier: 0.28.5 - version: 0.28.5(typescript@5.8.3) + specifier: 0.28.9 + version: 0.28.9(typescript@5.8.3) typescript-eslint: - specifier: 8.35.0 - version: 8.35.0(eslint@9.29.0)(typescript@5.8.3) + specifier: 8.38.0 + version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) packages: @@ -55,164 +55,170 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@cto.af/eslint-config@6.0.9': - resolution: {integrity: sha512-ol24X+lWVV8bX2ZIxtgrNShurpKV5Woxq1MGyFILMgY2hKqyFuCh6vLCdlQcJ6ERiflp1eR3xE7p/PmRjbTKpg==} + '@cto.af/eslint-config@6.0.12': + resolution: {integrity: sha512-oYAL/QiBae945VWkT0SD+PevNsVJClxgTklaBZvMRCLkrVre0+sR/PaNQ4mDFxpvR84LrV7dTWTRqMx2R5C51Q==} engines: {node: '>=20'} - '@cto.af/wtf8@0.0.3': - resolution: {integrity: sha512-9JozdA3YMRzbWiB7GEFJVIdMzHmm3lh1nnV73aUAADutgO/HLMxmsuMakisE+WIoS7SUFSp4B088udF2cBWTiQ==} + '@cto.af/wtf8@0.0.4': + resolution: {integrity: sha512-GbVy/i3DNrlp6klsqA7MatSERqp338xeWdMDHSGMxUKE19hC2Yk2dydLL0LtNC9Kjbb5bXbdwHHKa/mtnIRTZw==} engines: {node: '>=20'} '@es-joy/jsdoccomment@0.52.0': resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==} engines: {node: '>=20.11.0'} - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -227,60 +233,44 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.3': - resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.12.0': - resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.0': - resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/json@0.12.0': - resolution: {integrity: sha512-n/7dz8HFStpEe4o5eYk0tdkBdGUS/ZGb0GQCeDWN1ZmRq67HMHK4vC33b0rQlTT6xdZoX935P4vstiWVk5Ying==} + '@eslint/json@0.13.1': + resolution: {integrity: sha512-AGzO7cR0QqSEfJdx9jT4SHQ6BJ5K0G8kN7WNGI1Hgy5AVbUhBKfFoN0gNo86j97aqkU57mqFUW9ytMPdEnVARA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/markdown@6.6.0': - resolution: {integrity: sha512-IsWPy2jU3gaQDlioDC4sT4I4kG1hX1OMWs/q2sWwJrPoMASHW/Z4SDw+6Aql6EsHejGbagYuJbFq9Zvx+Y1b1Q==} + '@eslint/markdown@7.1.0': + resolution: {integrity: sha512-Y+X1B1j+/zupKDVJfkKc8uYMjQkGzfnd8lt7vK3y8x9Br6H5dBuhAfFrQ6ff7HAMm/1BwgecyEiRFkYCWPRxmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.2': - resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@gerrit0/mini-shiki@3.7.0': - resolution: {integrity: sha512-7iY9wg4FWXmeoFJpUL2u+tsmh0d0jcEJHAIzVxl3TG4KL493JNnisdLAILZ77zcD+z3J0keEXZ+lFzUgzQzPDg==} + '@gerrit0/mini-shiki@3.9.1': + resolution: {integrity: sha512-quvtbDhNf528BkMHQQd8xGJMpmA5taDZuex/JDF8ETEjS2iypXzr1hnEUVh+lTUyffFJ0JCxysUsiuUoEGIz/Q==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -294,8 +284,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/momoa@3.3.8': - resolution: {integrity: sha512-/3PZzor2imi/RLLcnHztkwA79txiVvW145Ve2cp5dxRcH5qOUNJPToasqLFHniTfw4B4lT7jGDdBOPXbXYlIMQ==} + '@humanwhocodes/momoa@3.3.9': + resolution: {integrity: sha512-LHw6Op4bJb3/3KZgOgwflJx5zY9XOy0NU1NuyUFKGdTwHYmP+PbnQGCYQJ8NVNlulLfQish34b0VuUlLYP3AXA==} engines: {node: '>=18'} '@humanwhocodes/retry@0.3.1': @@ -322,23 +312,18 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -356,123 +341,123 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.44.0': - resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.44.0': - resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.44.0': - resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.44.0': - resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.44.0': - resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.44.0': - resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': - resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.44.0': - resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.44.0': - resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.44.0': - resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': - resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': - resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.44.0': - resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.44.0': - resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.44.0': - resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.44.0': - resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.44.0': - resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.44.0': - resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.44.0': - resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.44.0': - resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] - '@shikijs/engine-oniguruma@3.7.0': - resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==} + '@shikijs/engine-oniguruma@3.9.1': + resolution: {integrity: sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==} - '@shikijs/langs@3.7.0': - resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==} + '@shikijs/langs@3.9.1': + resolution: {integrity: sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==} - '@shikijs/themes@3.7.0': - resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==} + '@shikijs/themes@3.9.1': + resolution: {integrity: sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==} - '@shikijs/types@3.7.0': - resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==} + '@shikijs/types@3.9.1': + resolution: {integrity: sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@stylistic/eslint-plugin@4.4.1': - resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==} + '@stylistic/eslint-plugin@5.2.2': + resolution: {integrity: sha512-bE2DUjruqXlHYP3Q2Gpqiuj2bHq7/88FnuaS0FjeGGLCy+X6a07bGVuwtiOYnPSLHR6jmx5Bwdv+j7l8H+G97A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -501,63 +486,63 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.35.0': - resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.35.0 + '@typescript-eslint/parser': ^8.38.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.35.0': - resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.35.0': - resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.35.0': - resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.35.0': - resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.35.0': - resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.35.0': - resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.35.0': - resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.35.0': - resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.35.0': - resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -666,9 +651,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -734,8 +719,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} hasBin: true @@ -763,14 +748,14 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-jsdoc@51.2.3: - resolution: {integrity: sha512-pagzxFubOih+O6XSB1D8BkDkJjF4G4/v8s9pRg4FkXQJLu0e3QJg621ayhmnhyc5mNBpp3cYCNiUyeLQs7oz7w==} + eslint-plugin-jsdoc@52.0.2: + resolution: {integrity: sha512-fYrnc7OpRifxxKjH78Y9/D/EouQDYD3G++bpR1Y+A+fy+CMzKZAdGIiHTIxCd2U10hb2y1NxN5TJt9aupq1vmw==} engines: {node: '>=20.11.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-n@17.20.0: - resolution: {integrity: sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==} + eslint-plugin-n@17.21.3: + resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -793,8 +778,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.29.0: - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -920,10 +905,13 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1247,8 +1235,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-extract@3.1.0: - resolution: {integrity: sha512-QoyK/7ePGWaVXHqy6ZRqos/MKa0PCEsLX4pouP3JB5+0vRnNyIc0LaUh6ZqMly4ZL96iLHChFkVRAlcORPgw0w==} + package-extract@3.1.3: + resolution: {integrity: sha512-YUglkrDfEPbAARVpMlyJyr/BBJlzuIbxZUUNXLxyQQF6QJgWhb4zw2q+8WnLmS7Bz43peP9RG242l29zW86K8A==} engines: {node: '>=20'} hasBin: true @@ -1291,8 +1279,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pirates@4.0.7: @@ -1385,19 +1373,14 @@ packages: engines: {node: 20 || >=22} hasBin: true - rollup@4.44.0: - resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -1418,6 +1401,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} @@ -1527,15 +1511,15 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typedoc@0.28.5: - resolution: {integrity: sha512-5PzUddaA9FbaarUzIsEc4wNXCiO4Ot3bJNeMF2qKpYlTmM9TTaSHQ7162w756ERCkXER/+o2purRG6YOAv6EMA==} + typedoc@0.28.9: + resolution: {integrity: sha512-aw45vwtwOl3QkUAmWCnLV9QW1xY+FSX2zzlit4MAfE99wX+Jij4ycnpbAWgBXsRrxmfs9LaYktg/eX5Bpthd3g==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x - typescript-eslint@8.35.0: - resolution: {integrity: sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==} + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1622,111 +1606,113 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@cto.af/eslint-config@6.0.9(eslint@9.29.0)(typescript@5.8.3)': + '@cto.af/eslint-config@6.0.12(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@eslint/json': 0.12.0 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.29.0)(typescript@5.8.3) - eslint-plugin-n: 17.20.0(eslint@9.29.0)(typescript@5.8.3) - eslint-plugin-redos: 4.4.5(eslint@9.29.0) - globals: 16.2.0 + '@eslint/json': 0.13.1 + '@stylistic/eslint-plugin': 5.2.2(eslint@9.32.0) + eslint-plugin-n: 17.21.3(eslint@9.32.0)(typescript@5.8.3) + eslint-plugin-redos: 4.4.5(eslint@9.32.0) + globals: 16.3.0 transitivePeerDependencies: - eslint - - supports-color - typescript - '@cto.af/wtf8@0.0.3': {} + '@cto.af/wtf8@0.0.4': {} '@es-joy/jsdoccomment@0.52.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.25.5': + '@esbuild/aix-ppc64@0.25.8': + optional: true + + '@esbuild/android-arm64@0.25.8': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/android-arm@0.25.8': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-x64@0.25.8': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/darwin-arm64@0.25.8': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/darwin-x64@0.25.8': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/freebsd-arm64@0.25.8': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/freebsd-x64@0.25.8': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/linux-arm64@0.25.8': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/linux-arm@0.25.8': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/linux-ia32@0.25.8': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/linux-loong64@0.25.8': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/linux-mips64el@0.25.8': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/linux-ppc64@0.25.8': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/linux-riscv64@0.25.8': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/linux-s390x@0.25.8': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/linux-x64@0.25.8': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/netbsd-arm64@0.25.8': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/netbsd-x64@0.25.8': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/openbsd-arm64@0.25.8': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/openbsd-x64@0.25.8': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/openharmony-arm64@0.25.8': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/sunos-x64@0.25.8': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/win32-arm64@0.25.8': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/win32-ia32@0.25.8': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': dependencies: - eslint: 9.29.0 + eslint: 9.32.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.1': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 @@ -1734,21 +1720,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.3': {} - - '@eslint/core@0.12.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.13.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.15.0': + '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 @@ -1766,19 +1740,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.29.0': {} + '@eslint/js@9.32.0': {} - '@eslint/json@0.12.0': + '@eslint/json@0.13.1': dependencies: - '@eslint/core': 0.12.0 - '@eslint/plugin-kit': 0.2.8 - '@humanwhocodes/momoa': 3.3.8 + '@eslint/core': 0.15.1 + '@eslint/plugin-kit': 0.3.4 + '@humanwhocodes/momoa': 3.3.9 natural-compare: 1.4.0 - '@eslint/markdown@6.6.0': + '@eslint/markdown@7.1.0': dependencies: - '@eslint/core': 0.14.0 - '@eslint/plugin-kit': 0.3.2 + '@eslint/core': 0.15.1 + '@eslint/plugin-kit': 0.3.4 github-slugger: 2.0.0 mdast-util-from-markdown: 2.0.2 mdast-util-frontmatter: 2.0.1 @@ -1790,22 +1764,17 @@ snapshots: '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': - dependencies: - '@eslint/core': 0.13.0 - levn: 0.4.1 - - '@eslint/plugin-kit@0.3.2': + '@eslint/plugin-kit@0.3.4': dependencies: - '@eslint/core': 0.15.0 + '@eslint/core': 0.15.1 levn: 0.4.1 - '@gerrit0/mini-shiki@3.7.0': + '@gerrit0/mini-shiki@3.9.1': dependencies: - '@shikijs/engine-oniguruma': 3.7.0 - '@shikijs/langs': 3.7.0 - '@shikijs/themes': 3.7.0 - '@shikijs/types': 3.7.0 + '@shikijs/engine-oniguruma': 3.9.1 + '@shikijs/langs': 3.9.1 + '@shikijs/themes': 3.9.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@humanfs/core@0.19.1': {} @@ -1817,7 +1786,7 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/momoa@3.3.8': {} + '@humanwhocodes/momoa@3.3.9': {} '@humanwhocodes/retry@0.3.1': {} @@ -1840,22 +1809,19 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1872,97 +1838,95 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.44.0': + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.44.0': + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.44.0': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.44.0': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.44.0': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.44.0': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.44.0': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.44.0': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.44.0': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.44.0': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.44.0': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.44.0': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.44.0': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.44.0': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.44.0': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.44.0': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.44.0': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@shikijs/engine-oniguruma@3.7.0': + '@shikijs/engine-oniguruma@3.9.1': dependencies: - '@shikijs/types': 3.7.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.7.0': + '@shikijs/langs@3.9.1': dependencies: - '@shikijs/types': 3.7.0 + '@shikijs/types': 3.9.1 - '@shikijs/themes@3.7.0': + '@shikijs/themes@3.9.1': dependencies: - '@shikijs/types': 3.7.0 + '@shikijs/types': 3.9.1 - '@shikijs/types@3.7.0': + '@shikijs/types@3.9.1': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 '@shikijs/vscode-textmate@10.0.2': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.29.0)(typescript@5.8.3)': + '@stylistic/eslint-plugin@5.2.2(eslint@9.32.0)': dependencies: - '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - eslint: 9.29.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@typescript-eslint/types': 8.38.0 + eslint: 9.32.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.2 - transitivePeerDependencies: - - supports-color - - typescript + picomatch: 4.0.3 '@types/debug@4.1.12': dependencies: @@ -1986,15 +1950,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/type-utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.0 - eslint: 9.29.0 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -2003,55 +1967,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.29.0 + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3) - '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.35.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/visitor-keys': 8.35.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.35.0(eslint@9.29.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) debug: 4.4.1 - eslint: 9.29.0 + eslint: 9.32.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.35.0': {} + '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3) - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/visitor-keys': 8.35.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -2062,20 +2027,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.35.0(eslint@9.29.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - eslint: 9.29.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.35.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 acorn-jsx@5.3.2(acorn@8.15.0): @@ -2122,9 +2087,9 @@ snapshots: dependencies: fill-range: 7.1.1 - bundle-require@5.1.0(esbuild@0.25.5): + bundle-require@5.1.0(esbuild@0.25.8): dependencies: - esbuild: 0.25.5 + esbuild: 0.25.8 load-tsconfig: 0.2.5 c8@10.1.3: @@ -2174,7 +2139,7 @@ snapshots: color-name@1.1.4: {} - commander@13.1.0: {} + commander@14.0.0: {} commander@4.1.1: {} @@ -2223,33 +2188,34 @@ snapshots: entities@4.5.0: {} - esbuild@0.25.5: + esbuild@0.25.8: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 escalade@3.2.0: {} @@ -2257,26 +2223,26 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.29.0): + eslint-compat-utils@0.5.1(eslint@9.32.0): dependencies: - eslint: 9.29.0 + eslint: 9.32.0 semver: 7.7.2 - eslint-plugin-es-x@7.8.0(eslint@9.29.0): + eslint-plugin-es-x@7.8.0(eslint@9.32.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@eslint-community/regexpp': 4.12.1 - eslint: 9.29.0 - eslint-compat-utils: 0.5.1(eslint@9.29.0) + eslint: 9.32.0 + eslint-compat-utils: 0.5.1(eslint@9.32.0) - eslint-plugin-jsdoc@51.2.3(eslint@9.29.0): + eslint-plugin-jsdoc@52.0.2(eslint@9.32.0): dependencies: '@es-joy/jsdoccomment': 0.52.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint: 9.29.0 + eslint: 9.32.0 espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -2285,26 +2251,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.20.0(eslint@9.29.0)(typescript@5.8.3): + eslint-plugin-n@17.21.3(eslint@9.32.0)(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) - '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) enhanced-resolve: 5.18.2 - eslint: 9.29.0 - eslint-plugin-es-x: 7.8.0(eslint@9.29.0) + eslint: 9.32.0 + eslint-plugin-es-x: 7.8.0(eslint@9.32.0) get-tsconfig: 4.10.1 globals: 15.15.0 + globrex: 0.1.2 ignore: 5.3.2 - minimatch: 9.0.5 semver: 7.7.2 ts-declaration-location: 1.0.7(typescript@5.8.3) transitivePeerDependencies: - - supports-color - typescript - eslint-plugin-redos@4.4.5(eslint@9.29.0): + eslint-plugin-redos@4.4.5(eslint@9.32.0): dependencies: - eslint: 9.29.0 + eslint: 9.32.0 recheck: 4.4.5 eslint-scope@8.4.0: @@ -2316,16 +2280,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.29.0: + eslint@9.32.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.3 - '@eslint/core': 0.14.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.29.0 - '@eslint/plugin-kit': 0.3.2 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -2396,9 +2360,9 @@ snapshots: dependencies: format: 0.2.2 - fdir@6.4.6(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 file-entry-cache@8.0.0: dependencies: @@ -2417,7 +2381,7 @@ snapshots: dependencies: magic-string: 0.30.17 mlly: 1.7.4 - rollup: 4.44.0 + rollup: 4.46.2 flat-cache@4.0.1: dependencies: @@ -2474,7 +2438,9 @@ snapshots: globals@15.15.0: {} - globals@16.2.0: {} + globals@16.3.0: {} + + globrex@0.1.2: {} graceful-fs@4.2.11: {} @@ -2581,7 +2547,7 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 make-dir@4.0.0: dependencies: @@ -2968,10 +2934,10 @@ snapshots: dependencies: p-limit: 3.1.0 - package-extract@3.1.0: + package-extract@3.1.3: dependencies: - commander: 13.1.0 - semver: 7.7.1 + commander: 14.0.0 + semver: 7.7.2 package-json-from-dist@1.0.1: {} @@ -3005,7 +2971,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pirates@4.0.7: {} @@ -3065,38 +3031,36 @@ snapshots: glob: 11.0.3 package-json-from-dist: 1.0.1 - rollup@4.44.0: + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.44.0 - '@rollup/rollup-android-arm64': 4.44.0 - '@rollup/rollup-darwin-arm64': 4.44.0 - '@rollup/rollup-darwin-x64': 4.44.0 - '@rollup/rollup-freebsd-arm64': 4.44.0 - '@rollup/rollup-freebsd-x64': 4.44.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 - '@rollup/rollup-linux-arm-musleabihf': 4.44.0 - '@rollup/rollup-linux-arm64-gnu': 4.44.0 - '@rollup/rollup-linux-arm64-musl': 4.44.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-musl': 4.44.0 - '@rollup/rollup-linux-s390x-gnu': 4.44.0 - '@rollup/rollup-linux-x64-gnu': 4.44.0 - '@rollup/rollup-linux-x64-musl': 4.44.0 - '@rollup/rollup-win32-arm64-msvc': 4.44.0 - '@rollup/rollup-win32-ia32-msvc': 4.44.0 - '@rollup/rollup-win32-x64-msvc': 4.44.0 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - semver@7.7.1: {} - semver@7.7.2: {} shebang-command@2.0.0: @@ -3144,7 +3108,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.12 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -3176,8 +3140,8 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 to-regex-range@5.0.1: dependencies: @@ -3195,25 +3159,25 @@ snapshots: ts-declaration-location@1.0.7(typescript@5.8.3): dependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 typescript: 5.8.3 ts-interface-checker@0.1.13: {} tsup@8.5.0(typescript@5.8.3)(yaml@2.8.0): dependencies: - bundle-require: 5.1.0(esbuild@0.25.5) + bundle-require: 5.1.0(esbuild@0.25.8) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.25.5 + esbuild: 0.25.8 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(yaml@2.8.0) resolve-from: 5.0.0 - rollup: 4.44.0 + rollup: 4.46.2 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 @@ -3231,21 +3195,22 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typedoc@0.28.5(typescript@5.8.3): + typedoc@0.28.9(typescript@5.8.3): dependencies: - '@gerrit0/mini-shiki': 3.7.0 + '@gerrit0/mini-shiki': 3.9.1 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 typescript: 5.8.3 yaml: 2.8.0 - typescript-eslint@8.35.0(eslint@9.29.0)(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) - eslint: 9.29.0 + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -3281,7 +3246,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 diff --git a/src/container.ts b/src/container.ts index f9a01c7..c263021 100644 --- a/src/container.ts +++ b/src/container.ts @@ -8,13 +8,13 @@ import { RequiredEncodeOptions, } from './options.js'; import {type KeyValueEncoded, sortCoreDeterministic} from './sorts.js'; +import {NAN, checkSubnormal} from './float.js'; import {box, getEncoded, saveEncoded} from './box.js'; import {defaultEncodeOptions, encode} from './encoder.js'; import {stringToHex, u8concat, u8toHex} from './utils.js'; import {DecodeStream} from './decodeStream.js'; import {Simple} from './simple.js'; import {Tag} from './tag.js'; -import {checkSubnormal} from './float.js'; const LENGTH_FOR_AI = new Map([ [NUMBYTES.ZERO, 1], @@ -56,6 +56,7 @@ export class CBORcontainer { diagnosticSizes: DiagnosticSizes.PREFERRED, convertUnsafeIntsToFloat: false, createObject, + keepNanPayloads: false, pretty: false, preferMap: false, rejectLargeNegatives: false, @@ -204,16 +205,30 @@ export class CBORcontainer { } case MT.SIMPLE_FLOAT: if (ai > NUMBYTES.ONE) { + if (typeof value === 'symbol') { + return value; // BREAK + } if (opts.rejectFloats) { throw new Error(`Decoding unwanted floating point number: ${value}`); } if (opts.rejectNegativeZero && Object.is(value, -0)) { throw new Error('Decoding negative zero'); } - if (opts.rejectLongLoundNaN && isNaN(value as number)) { + if (isNaN(value as number)) { const buf = stream.toHere(offset); - if (buf.length !== 3 || buf[1] !== 0x7e || buf[2] !== 0) { - throw new Error(`Invalid NaN encoding: "${u8toHex(buf)}"`); + const val = new NAN(buf); + if (opts.rejectLongLoundNaN) { + // If not quiet, there will be a payload. + if (val.payload || (buf.length > 3)) { + throw new Error(`Invalid NaN encoding: "${u8toHex(buf)}"`); + } + } else if (opts.keepNanPayloads) { + if (val.payload) { + if (opts.rejectLongFloats && !val.isShortestEncoding) { + throw new Error(`NaN should have been encoded shorter: ${value}`); + } + return val; + } } } if (opts.rejectSubnormals) { diff --git a/src/float.ts b/src/float.ts index f544948..afb4e0c 100644 --- a/src/float.ts +++ b/src/float.ts @@ -1,3 +1,356 @@ +import type {ToCBOR, Writer} from './writer.js'; + +// 1, 5, 10 +const F16_SIGN = 1n << 15n; +const F16_EXPONENT = 0b11111n << 10n; +const F16_QUIET = 1n << 9n; +const F16_PAYLOAD = F16_QUIET - 1n; +const F16_SIGNIFICAND = F16_QUIET | F16_PAYLOAD; + +// 1, 8, 23 +const F32_SIGN = 1n << 31n; +const F32_EXPONENT = 0b11111111n << 23n; +const F32_QUIET = 1n << 22n; +const F32_PAYLOAD = F32_QUIET - 1n; +const F32_SIGNIFICAND = F32_QUIET | F32_PAYLOAD; + +// 1, 11, 52 +const F64_SIGN = 1n << 63n; +const F64_EXPONENT = 0b11111111111n << 52n; +const F64_QUIET = 1n << 51n; +const F64_PAYLOAD = F64_QUIET - 1n; +const F64_SIGNIFICAND = F64_QUIET | F64_PAYLOAD; + +const IS_F16 = F64_PAYLOAD - (F16_PAYLOAD << 42n); +const IS_F32 = F64_PAYLOAD - (F32_PAYLOAD << 29n); + +const RADIX_PREFIX: { + [key: number]: string; +} = { + 2: '0b', + 8: '0o', + 16: '0x', +}; + +export enum NAN_SIZE { + /** Only used for bigint constructor, means use the size of the bigint */ + NATURAL = -2, + + /** Size not known, use the preferred size */ + UNKNOWN = -1, + F16 = 2, + F32 = 4, + F64 = 8, +} + +function formatNAN( + nan: NAN, + _depth: number, + inspectOptions: object, + inspect: (val: unknown, opts: object) => unknown +): string { + let ret = 'NaN('; + if (nan.sign === -1) { + ret += '-'; + } + if (!nan.quiet) { + ret += '!'; + } + ret += inspect(Math.abs(nan.payload), inspectOptions); + ret += ')'; + ret += nan.encodingIndicator; + return ret; +} + +/** + * Wrapper for NaN with payload. + */ +export class NAN extends Number implements ToCBOR { + // Full f64 as unsigned. + #value: bigint; + #size = NAN_SIZE.UNKNOWN; + + /** + * Create a boxed NaN. + * + * @param bytes Full CBOR encoding of the NaN, including leading MT/AI byte. + */ + public constructor(bytes: Uint8Array); + + /** + * Create a boxed NaN from constituent parts. + * + * @param payload Integer with absolute value < 2**52 - 1. If negative, + * sign will be promoted to the float, and the absolute value will be used + * as the payload. + * @param quiet True if quiet. + * @param size Encoded size of the resulting CBOR bytes, as from encoding + * indicator. 1 = 3 bytes, 2 = 5 bytes, 3 = 9 bytes. -1 (the default) + * means to use the payload to pick the minimum size. + */ + public constructor( + payload: number, + quiet?: boolean, + size?: NAN_SIZE + ); + + /** + * Create a boxed NaN from a raw integer equivalent. + * + * @param raw Raw integer, such as 0x7e00n. Can be 16-, 32- or 64-bits wide, + * but the exponent bits must be set correctly. + * @param ignored This parameter is ignored in bigint mode. + * @param size Use NAN_SIZE.NATURAL to copy the bigint size. + */ + public constructor( + raw: bigint, + ignored?: boolean, + size?: NAN_SIZE + ); + public constructor( + bytes: Uint8Array | number | bigint, + quiet = true, + size = NAN_SIZE.UNKNOWN + ) { + super(NaN); + const orig = bytes; + if (typeof bytes === 'number') { + if (!Number.isSafeInteger(bytes)) { + throw new Error(`Invalid NAN payload: ${bytes}`); + } + bytes = BigInt(bytes); + + if (bytes === 0n) { + throw new Error('Use NaN or Infinity instead of NAN for 0 payload.'); + } + let s = 0n; + if (bytes < 0) { + s = F64_SIGN; + bytes = -bytes; + } + if (bytes >= F64_QUIET) { + throw new Error(`Payload too large: ${orig}`); + } + const q = quiet ? F64_QUIET : 0n; + this.#value = s | F64_EXPONENT | q | bytes; + + switch (size) { + case NAN_SIZE.NATURAL: + throw new Error('NAN_SIZE.NATURAL only valid for bigint constructor'); + case NAN_SIZE.UNKNOWN: + size = this.preferredSize; + break; + case NAN_SIZE.F16: + if (this.#value & IS_F16) { + throw new Error('Invalid size for payload'); + } + break; + case NAN_SIZE.F32: + if (this.#value & IS_F32) { + throw new Error('Invalid size for payload'); + } + break; + case NAN_SIZE.F64: + break; + default: + throw new Error(`Invalid size: ${size}`); + } + this.#size = size; + } else if (typeof bytes === 'bigint') { + let nat = NAN_SIZE.UNKNOWN; + if ((bytes & F64_EXPONENT) === F64_EXPONENT) { + this.#value = bytes; + nat = NAN_SIZE.F64; + } else if ((bytes & F32_EXPONENT) === F32_EXPONENT) { + const s = (bytes & F32_SIGN) << 32n; + this.#value = s | F64_EXPONENT | ((bytes & F32_SIGNIFICAND) << 29n); + nat = NAN_SIZE.F32; + } else { + if ((bytes & F16_EXPONENT) !== F16_EXPONENT) { + throw new Error(`Invalid raw NaN value: ${bytes}`); + } + const s = (bytes & F16_SIGN) << 48n; + this.#value = s | F64_EXPONENT | ((bytes & F16_SIGNIFICAND) << 42n); + nat = NAN_SIZE.F16; + } + if (size === NAN_SIZE.UNKNOWN) { + this.#size = this.preferredSize; + } else if (size === NAN_SIZE.NATURAL) { + this.#size = nat; + } else { + if (size < nat) { + throw new Error('Invalid bigint NaN size'); + } + this.#size = size; + } + } else { + const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + switch (bytes.length) { + case 3: { + if (bytes[0] !== 0xf9) { + throw new Error('Invalid CBOR encoding for half float'); + } + const val = BigInt(dv.getUint16(1, false)); + if ((val & F16_EXPONENT) !== F16_EXPONENT) { + throw new Error('Not a NaN'); + } + const s = (val & F16_SIGN) << 48n; + this.#value = s | F64_EXPONENT | ((val & F16_SIGNIFICAND) << 42n); + this.#size = NAN_SIZE.F16; + break; + } + case 5: { + if (bytes[0] !== 0xfa) { + throw new Error('Invalid CBOR encoding for single float'); + } + const val = BigInt(dv.getUint32(1, false)); + if ((val & F32_EXPONENT) !== F32_EXPONENT) { + throw new Error('Not a NaN'); + } + const s = (val & F32_SIGN) << 48n; + this.#value = s | F64_EXPONENT | ((val & F32_SIGNIFICAND) << 29n); + this.#size = NAN_SIZE.F32; + break; + } + case 9: { + if (bytes[0] !== 0xfb) { + throw new Error('Invalid CBOR encoding for double float'); + } + this.#value = dv.getBigUint64(1, false); + if ((this.#value & F64_EXPONENT) !== F64_EXPONENT) { + throw new Error('Not a NaN'); + } + this.#size = NAN_SIZE.F64; + break; + } + default: + throw new RangeError(`Invalid NAN size (should be 2, 4, or 8): ${bytes.length - 1}`); + } + } + } + + /** + * Get the CBOR bytes for this NaN. + */ + public get bytes(): Uint8Array { + const buf = new ArrayBuffer(this.#size + 1); + const dv = new DataView(buf); + switch (this.#size) { + case NAN_SIZE.F16: { + dv.setUint8(0, 0xf9); + const s = (this.#value & F64_SIGN) ? F16_SIGN : 0n; + const val = s | F16_EXPONENT | ((this.#value & F64_SIGNIFICAND) >> 42n); + dv.setUint16(1, Number(val), false); + break; + } + case NAN_SIZE.F32: { + dv.setUint8(0, 0xfa); + const s = (this.#value & F64_SIGN) ? F32_SIGN : 0n; + const val = s | F32_EXPONENT | ((this.#value & F64_SIGNIFICAND) >> 29n); + dv.setUint32(1, Number(val), false); + break; + } + case NAN_SIZE.F64: + dv.setUint8(0, 0xfb); + dv.setBigUint64(1, this.#value); + break; + } + return new Uint8Array(buf); + } + + /** + * Is the quiet bit set? + */ + public get quiet(): boolean { + return Boolean(this.#value & F64_QUIET); + } + + /** + * -1 if negative, otherwise 1. Should never be 0, since you should use + * a real NaN or Infinity for those. + */ + public get sign(): number { + return (this.#value & F64_SIGN) ? -1 : 1; + } + + /** + * Payload, as in IEEE754-2019. + */ + public get payload(): number { + return Number(this.#value & F64_PAYLOAD) * this.sign; + } + + /** + * Full 64-bit encoding, with sign and quiet bit intact. + */ + public get raw(): bigint { + return this.#value; + } + + /** + * Encoding indicator, based on the preferred size. + */ + public get encodingIndicator(): string { + switch (this.#size) { + case NAN_SIZE.F16: + return '_1'; + case NAN_SIZE.F32: + return '_2'; + } + return '_3'; + } + + public get size(): NAN_SIZE { + return this.#size; + } + + public get preferredSize(): NAN_SIZE { + if ((this.#value & IS_F16) === 0n) { + return NAN_SIZE.F16; + } + if ((this.#value & IS_F32) === 0n) { + return NAN_SIZE.F32; + } + return NAN_SIZE.F64; + } + + /** + * Could this in preferred encoding? + */ + public get isShortestEncoding(): boolean { + return this.preferredSize === this.#size; + } + + /** + * Write to a CBOR stream. + */ + public toCBOR(w: Writer): undefined { + w.write(this.bytes); + } + + /** + * Convert to a string in the given radix. + * + * @param {number} radix Base for output. Valid values: 2, 8, 10, and 16. + */ + public toString(radix = 10): string { + return formatNAN( + this, + 1, + {}, + n => (RADIX_PREFIX[radix] ?? '') + (n as number).toString(radix) + ); + } + + public [Symbol.for('nodejs.util.inspect.custom')]( + depth: number, + inspectOptions: object, + inspect: (val: unknown, opts: object) => unknown + ): string { + return formatNAN(this, depth, inspectOptions, inspect); + } +} + /** * Parse a big endian float16 from a buffer. * diff --git a/src/index.ts b/src/index.ts index 73d281e..5d8d074 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,3 +64,4 @@ export { type TypeEncoder, TypeEncoderMap, } from './typeEncoderMap.js'; +export {NAN, NAN_SIZE} from './float.js'; diff --git a/src/options.ts b/src/options.ts index f4d6232..c07b796 100644 --- a/src/options.ts +++ b/src/options.ts @@ -158,6 +158,12 @@ export interface DecodeOptions extends DecodeStreamOptions { */ ParentType?: ParentConstructor; + /** + * Keep NaN payloads by creating an instance of NAN when needed. Ignored if + * rejectLongLoundNaN is true. + */ + keepNanPayloads?: boolean; + /** * Should numbers and strings be created as boxed instances, which retain * their original encoding for round-tripping? If this is true, diff --git a/test/decoder.test.js b/test/decoder.test.js index c144b81..40e005e 100644 --- a/test/decoder.test.js +++ b/test/decoder.test.js @@ -62,6 +62,7 @@ test('decode with dCBOR', () => { '0xa280008001', '0xa200010002', '0x6345cc88', + '0xFB7FF0000000000001', // Not shortest ], {dcbor: true}); }); @@ -225,3 +226,9 @@ test('local tags decode', () => { 'foo' ); }); + +test('keep nan payloads', () => { + failAll([ + '0xFB7FF1000000000000', + ], {rejectLongFloats: true, keepNanPayloads: true}); +}); diff --git a/test/float.test.js b/test/float.test.js index 05759fe..ad37424 100644 --- a/test/float.test.js +++ b/test/float.test.js @@ -1,6 +1,11 @@ -import {checkSubnormal, flushToZero, halfToUint} from '../lib/float.js'; +import {NAN, NAN_SIZE, checkSubnormal, flushToZero, halfToUint} from '../lib/float.js'; +import {hexToU8, u8toHex} from '../lib/utils.js'; +import {Buffer} from 'node:buffer'; import assert from 'node:assert/strict'; +import {decode} from '../lib/decoder.js'; +import {encode} from '../lib/encoder.js'; import test from 'node:test'; +import util from 'node:util'; test('flushToZero', () => { assert.equal(flushToZero(0), 0); @@ -50,3 +55,152 @@ test('checkSubnormal', () => { assert.doesNotThrow(() => checkSubnormal(numBuf(Number.EPSILON, 8))); assert.doesNotThrow(() => checkSubnormal(numBuf(-Number.EPSILON, 8))); }); + +test('NAN', () => { + const n2 = new NAN(-0x100000000000); + assert.equal(n2.sign, -1); + assert.equal(n2.payload, -0x100000000000); + assert.equal(n2.quiet, true); + assert.equal(n2.isShortestEncoding, true); + assert.deepEqual(n2.bytes, hexToU8('f9fe04')); + assert.equal(Number(n2), NaN); + assert.deepEqual(encode(n2), hexToU8('f9fe04')); + assert.equal(n2.toString(), 'NaN(-17592186044416)_1'); + assert.equal(n2.toString(2), 'NaN(-0b100000000000000000000000000000000000000000000)_1'); + assert.equal(n2.toString(8), 'NaN(-0o400000000000000)_1'); + assert.equal(n2.toString(10), 'NaN(-17592186044416)_1'); + assert.equal(n2.toString(16), 'NaN(-0x100000000000)_1'); + assert.equal(util.inspect(n2), 'NaN(-17592186044416)_1'); + assert.deepEqual(encode(new NAN(0x100000000000, false, NAN_SIZE.F16)), hexToU8('f97c04')); + assert.deepEqual(encode(new NAN(0x100000000000, false, NAN_SIZE.F32)), hexToU8('fa7f808000')); + assert.deepEqual(encode(new NAN(0x100000000000, false, NAN_SIZE.F64)), hexToU8('fb7ff0100000000000')); + assert.equal(new NAN(0xfe04n).payload, -0x100000000000); + assert.equal(new NAN(0xfe04n).size, NAN_SIZE.F16); + assert.equal(new NAN(0xfe04n, null, NAN_SIZE.F64).size, NAN_SIZE.F64); + assert.equal( + new NAN(0xfff8100000000000n, null, NAN_SIZE.NATURAL).size, + NAN_SIZE.F64 + ); + + const n4 = new NAN(0x40000000, false); + assert.equal(n4.sign, 1); + assert.equal(n4.payload, 0x40000000); + assert.equal(n4.quiet, false); + assert.equal(n4.isShortestEncoding, true); + assert.deepEqual(n4.bytes, hexToU8('fa7f800002')); + assert.deepEqual(new NAN(-0x40000000).bytes, hexToU8('faffc00002')); + assert.equal(Number(n4), NaN); + assert.deepEqual(encode(n4), hexToU8('fa7f800002')); + assert.equal(n4.toString(), 'NaN(!1073741824)_2'); + assert.equal(util.inspect(n4), 'NaN(!1073741824)_2'); + assert.equal(new NAN(0x7f800002n).payload, 0x40000000); + assert.equal(new NAN(0x7f800002n).size, NAN_SIZE.F32); + + const n8 = new NAN(1); + assert.equal(n8.sign, 1); + assert.equal(n8.payload, 1); + assert.equal(n8.quiet, true); + assert.deepEqual(n8.bytes, hexToU8('fb7ff8000000000001')); + assert.equal(n8.isShortestEncoding, true); + assert.equal(Number(n8), NaN); + assert.deepEqual(encode(n8), hexToU8('fb7ff8000000000001')); + assert.equal(n8.toString(), 'NaN(1)_3'); + assert.equal(n8.raw, 0x7ff8000000000001n); + assert.equal(decode(hexToU8('fb7ff8000000000001'), {keepNanPayloads: true}).constructor, NAN); + assert.equal(decode(hexToU8('f97e00'), {keepNanPayloads: true}), NaN); + assert.equal(decode(hexToU8('f97e01'), {keepNanPayloads: false}), NaN); + assert.equal(new NAN(0x7ff8000000000001n).payload, 1); + assert.equal(new NAN(0x7ff8000000000001n).size, NAN_SIZE.F64); + + assert.equal(new NAN(0x40000000).toString(), 'NaN(1073741824)_2'); + assert.equal(new NAN(hexToU8('FB7FF0000400000000')).isShortestEncoding, false); + assert.deepEqual(encode(new NAN(0x40000000, true, NAN_SIZE.F64)), hexToU8('fb7ff8000040000000')); + assert.deepEqual(encode(new NAN(-0x40000000, true, NAN_SIZE.F64)), hexToU8('fbfff8000040000000')); + assert.deepEqual(encode(new NAN(0x100000000000, false)), hexToU8('f97c04')); + assert.deepEqual(encode(new NAN(-0x100000000000, false)), hexToU8('f9fc04')); + assert.deepEqual(encode(new NAN(0x100000000000, false, NAN_SIZE.F64)), hexToU8('fb7ff0100000000000')); + assert.deepEqual(encode(new NAN(-0x100000000000, false, NAN_SIZE.F64)), hexToU8('fbfff0100000000000')); + + assert.throws(() => new NAN(0, true)); + assert.throws(() => new NAN(0, false)); + assert.throws(() => new NAN('')); + assert.throws(() => new NAN(0x8000000000000)); + assert.throws(() => new NAN(-0x8000000000000)); + assert.throws(() => new NAN(new Uint8Array())); + assert.throws(() => new NAN(1, true, 19)); + + assert.throws(() => new NAN(1, true, NAN_SIZE.F16)); + assert.throws(() => new NAN(1, true, NAN_SIZE.F32)); + assert.throws(() => new NAN(1, true, NAN_SIZE.NATURAL)); + assert.throws(() => new NAN(0x7ff8000000000001n, null, NAN_SIZE.F16)); + assert.throws(() => new NAN(0x40000000, false, NAN_SIZE.F16)); + assert.throws(() => new NAN(9.3)); + assert.throws(() => new NAN(Infinity)); + assert.throws(() => new NAN(-Infinity)); + assert.throws(() => new NAN(NaN)); + assert.throws(() => new NAN(2 ** 53)); + assert.throws(() => new NAN(new Uint8Array([0xff, 0, 0]))); + assert.throws(() => new NAN(new Uint8Array([0xf9, 0, 0]))); + assert.throws(() => new NAN(new Uint8Array([0xff, 0, 0, 0, 0]))); + assert.throws(() => new NAN(new Uint8Array([0xfa, 0, 0, 0, 0]))); + assert.throws(() => new NAN(new Uint8Array([0xff, 0, 0, 0, 0, 0, 0, 0, 0]))); + assert.throws(() => new NAN(new Uint8Array([0xfb, 0, 0, 0, 0, 0, 0, 0, 0]))); + assert.throws(() => new NAN(0n)); + assert.throws(() => new NAN(1n)); +}); + +test('LL', () => { + // Tests from Laurence Lundblade + + const tests = [ + /* Double qNaN -- shortens to half */ + [0x7ff8000000000000n, '\xf9\x7e\x00'], + + /* Double sNaN with payload of rightmost bit set -- no shorter encoding */ + [0x7ff0000000000001n, '\xfb\x7f\xf0\x00\x00\x00\x00\x00\x01'], + + /* Double qNaN with 9 leftmost payload bits set -- shortens to half */ + [0x7ffffc0000000000n, '\xf9\x7f\xff'], + + /* Double sNaN with 10 rightmost payload bits set -- no shorter encoding */ + [0x7ff00000000003ffn, '\xfb\x7f\xf0\x00\x00\x00\x00\x03\xff'], + + /* Double qNaN with 22 leftmost payload bits set -- shortens to single */ + [0x7fffffffe0000000n, '\xfa\x7f\xff\xff\xff'], + + /* Double sNaN with 23rd leftmost payload bit set -- shortens to single */ + [0x7ff0000020000000n, '\xfa\x7f\x80\x00\x01'], + + /* Double sNaN with randomly chosen bit pattern -- shortens to single */ + [0x7ff43d7c40000000n, '\xfa\x7f\xa1\xeb\xe2'], + + /* Double sNaN with 23 leftmost payload bits set -- no shorter encoding */ + [0x7ff7fffff0000000n, '\xfb\x7f\xf7\xff\xff\xf0\x00\x00\x00'], + + /* Double qNaN with all bits set -- no shorter encoding */ + [0x7fffffffffffffffn, '\xfb\x7f\xff\xff\xff\xff\xff\xff\xff'], + + /* Single qNaN with payload 0x00 -- shortens to half */ + [0x7fc00000n, '\xf9\x7e\x00'], + + /* Single sNan with payload 0x01 -- no shorter encoding */ + [0x7f800001n, '\xfa\x7f\x80\x00\x01'], + + /* Single qNaN with 9 bit payload -- shortens to half */ + [0x7fffe000n, '\xf9\x7f\xff'], + + /* Single qNaN with 10 bit payload -- no shorter encoding */ + [0x7ffff000n, '\xfa\x7f\xff\xf0\x00'], + + /* Single qNaN with 9 bit payload -- shortens to half */ + [0x7fbfe000n, '\xf9\x7d\xff'], + + /* Single sNaN with 10 bit payload -- no shorter encoding */ + [0x7fbff000n, '\xfa\x7f\xbf\xf0\x00'], + ]; + + for (const [raw, s] of tests) { + const n = new NAN(raw); + assert.deepEqual(u8toHex(n.bytes), Buffer.from(s, 'ascii').toString('hex'), raw.toString(16)); + } +}); diff --git a/test/test-vectors.test.js b/test/test-vectors.test.js index 5bdf417..66e2f5b 100644 --- a/test/test-vectors.test.js +++ b/test/test-vectors.test.js @@ -84,7 +84,7 @@ function applesauce(v, opts) { return res; } -test('vectors', async() => { +test('vectors', async () => { const vectors = await loadVectors('..', 'test-vectors', 'appendix_a.json'); for (const v of vectors) { @@ -114,7 +114,7 @@ test('vectors', async() => { } }); -test('errors', async() => { +test('errors', async () => { const failures = await loadVectors('..', 'test-vectors', 'fail.json'); let count = 0; @@ -129,7 +129,7 @@ test('errors', async() => { assert.equal(count, failures.length); }); -test('dcbor valid', async() => { +test('dcbor valid', async () => { const tests = await loadVectors('..', 'dcbor-test-vectors', 'valid.json'); for (const v of tests) { @@ -155,7 +155,7 @@ test('dcbor valid', async() => { } }); -test('dcbor invalid', async() => { +test('dcbor invalid', async () => { const failures = await loadVectors('..', 'dcbor-test-vectors', 'invalid.json'); let count = 0; diff --git a/web/package.json b/web/package.json index 1a1a2bd..94aa3d9 100644 --- a/web/package.json +++ b/web/package.json @@ -12,15 +12,15 @@ "author": "Joe Hildebrand ", "license": "MIT", "devDependencies": { - "@playwright/test": "1.53.1", + "@playwright/test": "1.54.2", "cbor-edn": "0.2.2", "cbor2": "link:..", "css-loader": "7.1.2", "hostlocal": "2.1.3", "html-webpack-plugin": "5.6.3", - "node-inspect-extracted": "3.1.0", + "node-inspect-extracted": "3.2.0", "style-loader": "4.0.0", - "webpack": "5.99.9", + "webpack": "5.101.0", "webpack-cli": "6.0.1" }, "pnpm": { diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 5cabc49..98967d4 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: devDependencies: '@playwright/test': - specifier: 1.53.1 - version: 1.53.1 + specifier: 1.54.2 + version: 1.54.2 cbor-edn: specifier: 0.2.2 version: 0.2.2 @@ -22,25 +22,25 @@ importers: version: link:.. css-loader: specifier: 7.1.2 - version: 7.1.2(webpack@5.99.9) + version: 7.1.2(webpack@5.101.0) hostlocal: specifier: 2.1.3 version: 2.1.3 html-webpack-plugin: specifier: 5.6.3 - version: 5.6.3(webpack@5.99.9) + version: 5.6.3(webpack@5.101.0) node-inspect-extracted: - specifier: 3.1.0 - version: 3.1.0 + specifier: 3.2.0 + version: 3.2.0 style-loader: specifier: 4.0.0 - version: 4.0.0(webpack@5.99.9) + version: 4.0.0(webpack@5.101.0) webpack: - specifier: 5.99.9 - version: 5.99.9(webpack-cli@6.0.1) + specifier: 5.101.0 + version: 5.101.0(webpack-cli@6.0.1) webpack-cli: specifier: 6.0.1 - version: 6.0.1(webpack@5.99.9) + version: 6.0.1(webpack@5.101.0) packages: @@ -65,26 +65,21 @@ packages: resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} engines: {node: '>=14.17.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.10': + resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -98,8 +93,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@playwright/test@1.53.1': - resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} engines: {node: '>=18'} hasBin: true @@ -118,8 +113,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@24.0.4': - resolution: {integrity: sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==} + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -197,6 +192,12 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -236,8 +237,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.0: - resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -251,8 +252,8 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - caniuse-lite@1.0.30001724: - resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==} + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} cbor-edn@0.2.2: resolution: {integrity: sha512-/zu3hPQmrkHtHoW1Bp73pYRlIg1R34rNiP4L87FMI2EbBf7l0cO3B2W/rBx3W8mvqDh3Qc4cJy3DcAnVaamQPQ==} @@ -312,8 +313,8 @@ packages: css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} cssesc@3.0.0: @@ -355,8 +356,8 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - electron-to-chromium@1.5.173: - resolution: {integrity: sha512-2bFhXP2zqSfQHugjqJIDFVwa+qIxyNApenmXTp9EjaKtdPrES5Qcn9/aSFy/NaP2E+fWG/zxKu/LBvY36p5VNQ==} + electron-to-chromium@1.5.194: + resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==} end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -655,8 +656,8 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-inspect-extracted@3.1.0: - resolution: {integrity: sha512-TBwc+A3mo6exvSvYyxt7RmeL0PDMPaH+fHII3wwGnAxgGPTqTOABtBZIkFIp22L+SZssH/gIW1zFqEWv3xp15A==} + node-inspect-extracted@3.2.0: + resolution: {integrity: sha512-/n4TVgpL2w+3eiOdElLW1quuLq1JOQoCjrEth3EVux/jHCz5M/8BuofbWzYPOxUPtXZYp4LKNiJA9HhlLeyhZw==} engines: {node: '>=14'} node-releases@2.0.19: @@ -730,13 +731,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.53.1: - resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} engines: {node: '>=18'} hasBin: true - playwright@1.53.1: - resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} engines: {node: '>=18'} hasBin: true @@ -997,8 +998,8 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.99.9: - resolution: {integrity: sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==} + webpack@5.101.0: + resolution: {integrity: sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -1051,27 +1052,24 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.10': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1085,9 +1083,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@playwright/test@1.53.1': + '@playwright/test@1.54.2': dependencies: - playwright: 1.53.1 + playwright: 1.54.2 '@types/eslint-scope@3.7.7': dependencies: @@ -1105,7 +1103,7 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@24.0.4': + '@types/node@24.1.0': dependencies: undici-types: 7.8.0 @@ -1185,25 +1183,29 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': dependencies: - webpack: 5.99.9(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.99.9) + webpack: 5.101.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.101.0) - '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': dependencies: - webpack: 5.99.9(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.99.9) + webpack: 5.101.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.101.0) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': dependencies: - webpack: 5.99.9(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.99.9) + webpack: 5.101.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.101.0) '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} + acorn-import-phases@1.0.4(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn@8.15.0: {} ajv-formats@2.1.1(ajv@8.17.1): @@ -1234,12 +1236,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.0: + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001724 - electron-to-chromium: 1.5.173 + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.194 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.0) + update-browserslist-db: 1.1.3(browserslist@4.25.1) buffer-from@1.1.2: {} @@ -1252,7 +1254,7 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 - caniuse-lite@1.0.30001724: {} + caniuse-lite@1.0.30001731: {} cbor-edn@0.2.2: dependencies: @@ -1290,7 +1292,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.2(webpack@5.99.9): + css-loader@7.1.2(webpack@5.101.0): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -1301,17 +1303,17 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.2 optionalDependencies: - webpack: 5.99.9(webpack-cli@6.0.1) + webpack: 5.101.0(webpack-cli@6.0.1) css-select@4.3.0: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 4.3.1 domutils: 2.8.0 nth-check: 2.1.1 - css-what@6.1.0: {} + css-what@6.2.2: {} cssesc@3.0.0: {} @@ -1353,7 +1355,7 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - electron-to-chromium@1.5.173: {} + electron-to-chromium@1.5.194: {} end-of-stream@1.4.5: dependencies: @@ -1483,7 +1485,7 @@ snapshots: relateurl: 0.2.7 terser: 5.43.1 - html-webpack-plugin@5.6.3(webpack@5.99.9): + html-webpack-plugin@5.6.3(webpack@5.101.0): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -1491,7 +1493,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.2 optionalDependencies: - webpack: 5.99.9(webpack-cli@6.0.1) + webpack: 5.101.0(webpack-cli@6.0.1) htmlparser2@6.1.0: dependencies: @@ -1543,7 +1545,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.0.4 + '@types/node': 24.1.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -1616,7 +1618,7 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-inspect-extracted@3.1.0: {} + node-inspect-extracted@3.2.0: {} node-releases@2.0.19: {} @@ -1707,11 +1709,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.53.1: {} + playwright-core@1.54.2: {} - playwright@1.53.1: + playwright@1.54.2: dependencies: - playwright-core: 1.53.1 + playwright-core: 1.54.2 optionalDependencies: fsevents: 2.3.2 @@ -1861,9 +1863,9 @@ snapshots: strip-json-comments@3.1.1: {} - style-loader@4.0.0(webpack@5.99.9): + style-loader@4.0.0(webpack@5.101.0): dependencies: - webpack: 5.99.9(webpack-cli@6.0.1) + webpack: 5.101.0(webpack-cli@6.0.1) supports-color@8.1.1: dependencies: @@ -1873,18 +1875,18 @@ snapshots: tapable@2.2.2: {} - terser-webpack-plugin@5.3.14(webpack@5.99.9): + terser-webpack-plugin@5.3.14(webpack@5.101.0): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.99.9(webpack-cli@6.0.1) + webpack: 5.101.0(webpack-cli@6.0.1) terser@5.43.1: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.10 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -1903,9 +1905,9 @@ snapshots: undici-types@7.8.0: {} - update-browserslist-db@1.1.3(browserslist@4.25.0): + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - browserslist: 4.25.0 + browserslist: 4.25.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -1918,12 +1920,12 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - webpack-cli@6.0.1(webpack@5.99.9): + webpack-cli@6.0.1(webpack@5.101.0): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 @@ -1932,7 +1934,7 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.99.9(webpack-cli@6.0.1) + webpack: 5.101.0(webpack-cli@6.0.1) webpack-merge: 6.0.1 webpack-merge@6.0.1: @@ -1943,7 +1945,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.99.9(webpack-cli@6.0.1): + webpack@5.101.0(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -1952,7 +1954,8 @@ snapshots: '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 - browserslist: 4.25.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.25.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.2 es-module-lexer: 1.7.0 @@ -1966,11 +1969,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.99.9) + terser-webpack-plugin: 5.3.14(webpack@5.101.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 6.0.1(webpack@5.99.9) + webpack-cli: 6.0.1(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild diff --git a/web/src/index.html b/web/src/index.html index 52b4c93..2f17fc0 100644 --- a/web/src/index.html +++ b/web/src/index.html @@ -166,6 +166,10 @@

Output

+
  • + + +
  • diff --git a/web/src/index.js b/web/src/index.js index bc88983..2fe577a 100644 --- a/web/src/index.js +++ b/web/src/index.js @@ -3,6 +3,8 @@ import './style.css'; import * as monaco from 'https://cdn.jsdelivr.net/npm/monaco-editor@0.52.2/+esm'; import { + NAN, + NAN_SIZE, Simple, Tag, version as cbor2version, @@ -180,12 +182,17 @@ function input() { if (txt.trim().length > 0) { // eslint-disable-next-line no-new-func const fun = new Function( + 'NAN', + 'NAN_SIZE', 'Simple', 'Tag', 'encodedNumber', `"use strict";return ${txt}` ); - return encode(fun(Simple, Tag, encodedNumber), state.encodeOpts); + return encode( + fun(NAN, NAN_SIZE, Simple, Tag, encodedNumber), + state.encodeOpts + ); } return new Uint8Array(0); } @@ -422,7 +429,7 @@ for (let i = 0; i < acc.length; i++) { }); } -(async() => { +(async () => { const u = new URL(window.location.href); if (u.hash) { const jsonState = await decompressString(u.hash.replace(/^#/, '')); diff --git a/web/test/playground.spec.ts b/web/test/playground.spec.ts index 5308e10..1799a9e 100644 --- a/web/test/playground.spec.ts +++ b/web/test/playground.spec.ts @@ -19,14 +19,14 @@ const b64url = 'oWR0eXBlZGhlcmU'; async function checkMonacoText( page: Page, modelName: string, value: string ): Promise { - await expect.poll(async() => page.evaluate( + await expect.poll(async () => page.evaluate( // @ts-expect-error _cbor2testing added just for testability. (name: string) => window._cbor2testing[name].getValue(), modelName )).toBe(value); } -test.beforeEach(async({page}) => { +test.beforeEach(async ({page}) => { await page.goto('playground/'); await expect(page).toHaveTitle(/cbor2 playground/); }); @@ -48,7 +48,7 @@ async function checkOutputs(page: Page): Promise { await checkMonacoText(page, 'outModel', input); } -test('Conversions', async({page}) => { +test('Conversions', async ({page}) => { await expect(page.locator('#input-fmt')).toHaveValue('JSON'); await checkMonacoText(page, 'inModel', input); await expect(page.locator('#output-fmt')).toHaveValue('commented'); @@ -85,7 +85,7 @@ test('Conversions', async({page}) => { await checkOutputs(page); }); -test('Encode Options', async({page}) => { +test('Encode Options', async ({page}) => { await page.getByRole('button', {name: 'Encoding Options \u2795'}).click(); await page.locator('#dcborEncode').check(); await expect(page.getByLabel('avoidInts')).not.toBeChecked(); @@ -105,7 +105,7 @@ test('Encode Options', async({page}) => { await expect(page.locator('#sortKeysEncode')).toHaveValue('coreDeterministic'); }); -test('Decode Options', async({page}) => { +test('Decode Options', async ({page}) => { await page.getByRole('button', {name: 'Decoding Options \u2795'}).click(); await page.locator('#dcbor').check(); await expect(page.getByLabel('boxed')).not.toBeChecked();