diff --git a/deno.json b/deno.json new file mode 100644 index 00000000..cbe0fa35 --- /dev/null +++ b/deno.json @@ -0,0 +1,3 @@ +{ + "workspace": ["packages/core", "packages/jose"] +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 00000000..ab64f4fa --- /dev/null +++ b/deno.lock @@ -0,0 +1,1636 @@ +{ + "version": "5", + "specifiers": { + "npm:@aura-stack/router@0.5": "0.5.0", + "npm:@vitest/coverage-v8@^4.0.14": "4.0.18_vitest@4.0.18__@types+node@20.19.33__jsdom@27.4.0__vite@7.3.1___@types+node@20.19.33___tsx@4.21.0___picomatch@4.0.3___jiti@2.6.1__tsx@4.21.0_@types+node@20.19.33_jsdom@27.4.0_tsx@4.21.0", + "npm:eslint@^9.35.0": "9.39.3_jiti@2.6.1", + "npm:jose@^6.1.2": "6.1.3", + "npm:prettier@^3.6.2": "3.8.1", + "npm:tsup@^8.5.1": "8.5.1_typescript@5.9.3_esbuild@0.27.3_tsx@4.21.0", + "npm:turbo@^2.7.5": "2.8.10", + "npm:vitest@^4.0.14": "4.0.18_@types+node@20.19.33_jsdom@27.4.0_vite@7.3.1__@types+node@20.19.33__tsx@4.21.0__picomatch@4.0.3__jiti@2.6.1_tsx@4.21.0", + "npm:zod@^4.3.5": "4.3.6" + }, + "npm": { + "@acemir/cssom@0.9.31": { + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==" + }, + "@asamuzakjp/css-color@4.1.2_@csstools+css-parser-algorithms@4.0.0__@csstools+css-tokenizer@4.0.0_@csstools+css-tokenizer@4.0.0": { + "integrity": "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==", + "dependencies": [ + "@csstools/css-calc", + "@csstools/css-color-parser", + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer", + "lru-cache" + ] + }, + "@asamuzakjp/dom-selector@6.8.1": { + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "dependencies": [ + "@asamuzakjp/nwsapi", + "bidi-js", + "css-tree", + "is-potential-custom-element-name", + "lru-cache" + ] + }, + "@asamuzakjp/nwsapi@2.3.9": { + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==" + }, + "@aura-stack/router@0.5.0": { + "integrity": "sha512-CuiBaoJz8C035rfwHI+V1GYQhVYA6rA0LrMJMJeIBb/il5XfG/Xb0lrMGJQNfneGmwc6KgbNPVLyMiksGvOAYA==", + "dependencies": [ + "cookie" + ] + }, + "@babel/helper-string-parser@7.27.1": { + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier@7.28.5": { + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/parser@7.29.0": { + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dependencies": [ + "@babel/types" + ], + "bin": true + }, + "@babel/types@7.29.0": { + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dependencies": [ + "@babel/helper-string-parser", + "@babel/helper-validator-identifier" + ] + }, + "@bcoe/v8-coverage@1.0.2": { + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==" + }, + "@csstools/color-helpers@6.0.2": { + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==" + }, + "@csstools/css-calc@3.1.1_@csstools+css-parser-algorithms@4.0.0__@csstools+css-tokenizer@4.0.0_@csstools+css-tokenizer@4.0.0": { + "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "dependencies": [ + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-color-parser@4.0.2_@csstools+css-parser-algorithms@4.0.0__@csstools+css-tokenizer@4.0.0_@csstools+css-tokenizer@4.0.0": { + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", + "dependencies": [ + "@csstools/color-helpers", + "@csstools/css-calc", + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-parser-algorithms@4.0.0_@csstools+css-tokenizer@4.0.0": { + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dependencies": [ + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-syntax-patches-for-csstree@1.0.28": { + "integrity": "sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==" + }, + "@csstools/css-tokenizer@4.0.0": { + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==" + }, + "@esbuild/aix-ppc64@0.27.3": { + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "os": ["aix"], + "cpu": ["ppc64"] + }, + "@esbuild/android-arm64@0.27.3": { + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@esbuild/android-arm@0.27.3": { + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "os": ["android"], + "cpu": ["arm"] + }, + "@esbuild/android-x64@0.27.3": { + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "os": ["android"], + "cpu": ["x64"] + }, + "@esbuild/darwin-arm64@0.27.3": { + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@esbuild/darwin-x64@0.27.3": { + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@esbuild/freebsd-arm64@0.27.3": { + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@esbuild/freebsd-x64@0.27.3": { + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@esbuild/linux-arm64@0.27.3": { + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@esbuild/linux-arm@0.27.3": { + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@esbuild/linux-ia32@0.27.3": { + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "os": ["linux"], + "cpu": ["ia32"] + }, + "@esbuild/linux-loong64@0.27.3": { + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@esbuild/linux-mips64el@0.27.3": { + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "os": ["linux"], + "cpu": ["mips64el"] + }, + "@esbuild/linux-ppc64@0.27.3": { + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@esbuild/linux-riscv64@0.27.3": { + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@esbuild/linux-s390x@0.27.3": { + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@esbuild/linux-x64@0.27.3": { + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-arm64@0.27.3": { + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, + "@esbuild/netbsd-x64@0.27.3": { + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "os": ["netbsd"], + "cpu": ["x64"] + }, + "@esbuild/openbsd-arm64@0.27.3": { + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, + "@esbuild/openbsd-x64@0.27.3": { + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@esbuild/openharmony-arm64@0.27.3": { + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@esbuild/sunos-x64@0.27.3": { + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "os": ["sunos"], + "cpu": ["x64"] + }, + "@esbuild/win32-arm64@0.27.3": { + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@esbuild/win32-ia32@0.27.3": { + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@esbuild/win32-x64@0.27.3": { + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@eslint-community/eslint-utils@4.9.1_eslint@9.39.3__jiti@2.6.1_jiti@2.6.1": { + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dependencies": [ + "eslint", + "eslint-visitor-keys@3.4.3" + ] + }, + "@eslint-community/regexpp@4.12.2": { + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==" + }, + "@eslint/config-array@0.21.1": { + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dependencies": [ + "@eslint/object-schema", + "debug", + "minimatch" + ] + }, + "@eslint/config-helpers@0.4.2": { + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dependencies": [ + "@eslint/core" + ] + }, + "@eslint/core@0.17.0": { + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dependencies": [ + "@types/json-schema" + ] + }, + "@eslint/eslintrc@3.3.3": { + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dependencies": [ + "ajv", + "debug", + "espree", + "globals", + "ignore", + "import-fresh", + "js-yaml", + "minimatch", + "strip-json-comments" + ] + }, + "@eslint/js@9.39.3": { + "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==" + }, + "@eslint/object-schema@2.1.7": { + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==" + }, + "@eslint/plugin-kit@0.4.1": { + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dependencies": [ + "@eslint/core", + "levn" + ] + }, + "@exodus/bytes@1.14.1": { + "integrity": "sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==" + }, + "@humanfs/core@0.19.1": { + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==" + }, + "@humanfs/node@0.16.7": { + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dependencies": [ + "@humanfs/core", + "@humanwhocodes/retry" + ] + }, + "@humanwhocodes/module-importer@1.0.1": { + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/retry@0.4.3": { + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==" + }, + "@jridgewell/gen-mapping@0.3.13": { + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": [ + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec@1.5.5": { + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping@0.3.31": { + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@rollup/rollup-android-arm-eabi@4.59.0": { + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@rollup/rollup-android-arm64@4.59.0": { + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-arm64@4.59.0": { + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-x64@4.59.0": { + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@rollup/rollup-freebsd-arm64@4.59.0": { + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@rollup/rollup-freebsd-x64@4.59.0": { + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-arm-gnueabihf@4.59.0": { + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm-musleabihf@4.59.0": { + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm64-gnu@4.59.0": { + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-arm64-musl@4.59.0": { + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-loong64-gnu@4.59.0": { + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-loong64-musl@4.59.0": { + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-ppc64-gnu@4.59.0": { + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-ppc64-musl@4.59.0": { + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-riscv64-gnu@4.59.0": { + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-riscv64-musl@4.59.0": { + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-s390x-gnu@4.59.0": { + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@rollup/rollup-linux-x64-gnu@4.59.0": { + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-x64-musl@4.59.0": { + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-openbsd-x64@4.59.0": { + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-openharmony-arm64@4.59.0": { + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-arm64-msvc@4.59.0": { + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-ia32-msvc@4.59.0": { + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@rollup/rollup-win32-x64-gnu@4.59.0": { + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@rollup/rollup-win32-x64-msvc@4.59.0": { + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@standard-schema/spec@1.1.0": { + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" + }, + "@types/chai@5.2.3": { + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dependencies": [ + "@types/deep-eql", + "assertion-error" + ] + }, + "@types/deep-eql@4.0.2": { + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==" + }, + "@types/estree@1.0.8": { + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "@types/json-schema@7.0.15": { + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "@types/node@20.19.33": { + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "dependencies": [ + "undici-types" + ] + }, + "@vitest/coverage-v8@4.0.18_vitest@4.0.18__@types+node@20.19.33__jsdom@27.4.0__vite@7.3.1___@types+node@20.19.33___tsx@4.21.0___picomatch@4.0.3___jiti@2.6.1__tsx@4.21.0_@types+node@20.19.33_jsdom@27.4.0_tsx@4.21.0": { + "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "dependencies": [ + "@bcoe/v8-coverage", + "@vitest/utils", + "ast-v8-to-istanbul", + "istanbul-lib-coverage", + "istanbul-lib-report", + "istanbul-reports", + "magicast", + "obug", + "std-env", + "tinyrainbow", + "vitest" + ] + }, + "@vitest/expect@4.0.18": { + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "dependencies": [ + "@standard-schema/spec", + "@types/chai", + "@vitest/spy", + "@vitest/utils", + "chai", + "tinyrainbow" + ] + }, + "@vitest/mocker@4.0.18_vite@7.3.1__@types+node@20.19.33__tsx@4.21.0__picomatch@4.0.3__jiti@2.6.1_@types+node@20.19.33_tsx@4.21.0": { + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "dependencies": [ + "@vitest/spy", + "estree-walker", + "magic-string", + "vite" + ], + "optionalPeers": [ + "vite" + ] + }, + "@vitest/pretty-format@4.0.18": { + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "dependencies": [ + "tinyrainbow" + ] + }, + "@vitest/runner@4.0.18": { + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "dependencies": [ + "@vitest/utils", + "pathe" + ] + }, + "@vitest/snapshot@4.0.18": { + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "dependencies": [ + "@vitest/pretty-format", + "magic-string", + "pathe" + ] + }, + "@vitest/spy@4.0.18": { + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==" + }, + "@vitest/utils@4.0.18": { + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "dependencies": [ + "@vitest/pretty-format", + "tinyrainbow" + ] + }, + "acorn-jsx@5.3.2_acorn@8.16.0": { + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dependencies": [ + "acorn" + ] + }, + "acorn@8.16.0": { + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "bin": true + }, + "agent-base@7.1.4": { + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==" + }, + "ajv@6.14.0": { + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dependencies": [ + "fast-deep-equal", + "fast-json-stable-stringify", + "json-schema-traverse", + "uri-js" + ] + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert" + ] + }, + "any-promise@1.3.0": { + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "assertion-error@2.0.1": { + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==" + }, + "ast-v8-to-istanbul@0.3.11": { + "integrity": "sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==", + "dependencies": [ + "@jridgewell/trace-mapping", + "estree-walker", + "js-tokens" + ] + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "bidi-js@1.0.3": { + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dependencies": [ + "require-from-string" + ] + }, + "brace-expansion@1.1.12": { + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dependencies": [ + "balanced-match", + "concat-map" + ] + }, + "bundle-require@5.1.0_esbuild@0.27.3": { + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "dependencies": [ + "esbuild", + "load-tsconfig" + ] + }, + "cac@6.7.14": { + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==" + }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chai@6.2.2": { + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==" + }, + "chalk@4.1.2": { + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": [ + "ansi-styles", + "supports-color" + ] + }, + "chokidar@4.0.3": { + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": [ + "readdirp" + ] + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander@4.1.1": { + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "concat-map@0.0.1": { + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "confbox@0.1.8": { + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "consola@3.4.2": { + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==" + }, + "cookie@1.1.1": { + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==" + }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which" + ] + }, + "css-tree@3.1.0": { + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dependencies": [ + "mdn-data", + "source-map-js" + ] + }, + "cssstyle@5.3.7": { + "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==", + "dependencies": [ + "@asamuzakjp/css-color", + "@csstools/css-syntax-patches-for-csstree", + "css-tree", + "lru-cache" + ] + }, + "data-urls@6.0.1": { + "integrity": "sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==", + "dependencies": [ + "whatwg-mimetype@5.0.0", + "whatwg-url" + ] + }, + "debug@4.4.3": { + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": [ + "ms" + ] + }, + "decimal.js@10.6.0": { + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" + }, + "deep-is@0.1.4": { + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "entities@6.0.1": { + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, + "es-module-lexer@1.7.0": { + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "esbuild@0.27.3": { + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "optionalDependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/openharmony-arm64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ], + "scripts": true, + "bin": true + }, + "escape-string-regexp@4.0.0": { + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint-scope@8.4.0": { + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dependencies": [ + "esrecurse", + "estraverse" + ] + }, + "eslint-visitor-keys@3.4.3": { + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + }, + "eslint-visitor-keys@4.2.1": { + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==" + }, + "eslint@9.39.3_jiti@2.6.1": { + "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", + "dependencies": [ + "@eslint-community/eslint-utils", + "@eslint-community/regexpp", + "@eslint/config-array", + "@eslint/config-helpers", + "@eslint/core", + "@eslint/eslintrc", + "@eslint/js", + "@eslint/plugin-kit", + "@humanfs/node", + "@humanwhocodes/module-importer", + "@humanwhocodes/retry", + "@types/estree", + "ajv", + "chalk", + "cross-spawn", + "debug", + "escape-string-regexp", + "eslint-scope", + "eslint-visitor-keys@4.2.1", + "espree", + "esquery", + "esutils", + "fast-deep-equal", + "file-entry-cache", + "find-up", + "glob-parent", + "ignore", + "imurmurhash", + "is-glob", + "jiti", + "json-stable-stringify-without-jsonify", + "lodash.merge", + "minimatch", + "natural-compare", + "optionator" + ], + "optionalPeers": [ + "jiti" + ], + "bin": true + }, + "espree@10.4.0_acorn@8.16.0": { + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dependencies": [ + "acorn", + "acorn-jsx", + "eslint-visitor-keys@4.2.1" + ] + }, + "esquery@1.7.0": { + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dependencies": [ + "estraverse" + ] + }, + "esrecurse@4.3.0": { + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": [ + "estraverse" + ] + }, + "estraverse@5.3.0": { + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "estree-walker@3.0.3": { + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": [ + "@types/estree" + ] + }, + "esutils@2.0.3": { + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "expect-type@1.3.0": { + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==" + }, + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify@2.1.0": { + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein@2.0.6": { + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fdir@6.5.0_picomatch@4.0.3": { + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dependencies": [ + "picomatch" + ], + "optionalPeers": [ + "picomatch" + ] + }, + "file-entry-cache@8.0.0": { + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dependencies": [ + "flat-cache" + ] + }, + "find-up@5.0.0": { + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": [ + "locate-path", + "path-exists" + ] + }, + "fix-dts-default-cjs-exports@1.0.1": { + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dependencies": [ + "magic-string", + "mlly", + "rollup" + ] + }, + "flat-cache@4.0.1": { + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dependencies": [ + "flatted", + "keyv" + ] + }, + "flatted@3.3.3": { + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "os": ["darwin"], + "scripts": true + }, + "get-tsconfig@4.13.6": { + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", + "dependencies": [ + "resolve-pkg-maps" + ] + }, + "glob-parent@6.0.2": { + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": [ + "is-glob" + ] + }, + "globals@14.0.0": { + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==" + }, + "has-flag@4.0.0": { + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "html-encoding-sniffer@6.0.0": { + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dependencies": [ + "@exodus/bytes" + ] + }, + "html-escaper@2.0.2": { + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "http-proxy-agent@7.0.2": { + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": [ + "agent-base", + "debug" + ] + }, + "https-proxy-agent@7.0.6": { + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": [ + "agent-base", + "debug" + ] + }, + "ignore@5.3.2": { + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" + }, + "import-fresh@3.3.1": { + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": [ + "parent-module", + "resolve-from@4.0.0" + ] + }, + "imurmurhash@0.1.4": { + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-potential-custom-element-name@1.0.1": { + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "istanbul-lib-coverage@3.2.2": { + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==" + }, + "istanbul-lib-report@3.0.1": { + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": [ + "istanbul-lib-coverage", + "make-dir", + "supports-color" + ] + }, + "istanbul-reports@3.2.0": { + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dependencies": [ + "html-escaper", + "istanbul-lib-report" + ] + }, + "jiti@2.6.1": { + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "bin": true + }, + "jose@6.1.3": { + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==" + }, + "joycon@3.1.1": { + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" + }, + "js-tokens@10.0.0": { + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==" + }, + "js-yaml@4.1.1": { + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dependencies": [ + "argparse" + ], + "bin": true + }, + "jsdom@27.4.0": { + "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", + "dependencies": [ + "@acemir/cssom", + "@asamuzakjp/dom-selector", + "@exodus/bytes", + "cssstyle", + "data-urls", + "decimal.js", + "html-encoding-sniffer", + "http-proxy-agent", + "https-proxy-agent", + "is-potential-custom-element-name", + "parse5", + "saxes", + "symbol-tree", + "tough-cookie", + "w3c-xmlserializer", + "webidl-conversions", + "whatwg-mimetype@4.0.0", + "whatwg-url", + "ws", + "xml-name-validator" + ] + }, + "json-buffer@3.0.1": { + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema-traverse@0.4.1": { + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify@1.0.1": { + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "keyv@4.5.4": { + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": [ + "json-buffer" + ] + }, + "levn@0.4.1": { + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": [ + "prelude-ls", + "type-check" + ] + }, + "lilconfig@3.1.3": { + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==" + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "load-tsconfig@0.2.5": { + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==" + }, + "locate-path@6.0.0": { + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": [ + "p-locate" + ] + }, + "lodash.merge@4.6.2": { + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lru-cache@11.2.6": { + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==" + }, + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "magicast@0.5.2": { + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "dependencies": [ + "@babel/parser", + "@babel/types", + "source-map-js" + ] + }, + "make-dir@4.0.0": { + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": [ + "semver" + ] + }, + "mdn-data@2.12.2": { + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==" + }, + "minimatch@3.1.3": { + "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==", + "dependencies": [ + "brace-expansion" + ] + }, + "mlly@1.8.0": { + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dependencies": [ + "acorn", + "pathe", + "pkg-types", + "ufo" + ] + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "mz@2.7.0": { + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": [ + "any-promise", + "object-assign", + "thenify-all" + ] + }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true + }, + "natural-compare@1.4.0": { + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "object-assign@4.1.1": { + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "obug@2.1.1": { + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==" + }, + "optionator@0.9.4": { + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": [ + "deep-is", + "fast-levenshtein", + "levn", + "prelude-ls", + "type-check", + "word-wrap" + ] + }, + "p-limit@3.1.0": { + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": [ + "yocto-queue" + ] + }, + "p-locate@5.0.0": { + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": [ + "p-limit" + ] + }, + "parent-module@1.0.1": { + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": [ + "callsites" + ] + }, + "parse5@8.0.0": { + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dependencies": [ + "entities" + ] + }, + "path-exists@4.0.0": { + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pathe@2.0.3": { + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@4.0.3": { + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "pirates@4.0.7": { + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==" + }, + "pkg-types@1.3.1": { + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dependencies": [ + "confbox", + "mlly", + "pathe" + ] + }, + "postcss-load-config@6.0.1_tsx@4.21.0": { + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dependencies": [ + "lilconfig", + "tsx" + ], + "optionalPeers": [ + "tsx" + ] + }, + "postcss@8.5.6": { + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "prelude-ls@1.2.1": { + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prettier@3.8.1": { + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "bin": true + }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "readdirp@4.1.2": { + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" + }, + "require-from-string@2.0.2": { + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve-from@4.0.0": { + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-from@5.0.0": { + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-pkg-maps@1.0.0": { + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" + }, + "rollup@4.59.0": { + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dependencies": [ + "@types/estree" + ], + "optionalDependencies": [ + "@rollup/rollup-android-arm-eabi", + "@rollup/rollup-android-arm64", + "@rollup/rollup-darwin-arm64", + "@rollup/rollup-darwin-x64", + "@rollup/rollup-freebsd-arm64", + "@rollup/rollup-freebsd-x64", + "@rollup/rollup-linux-arm-gnueabihf", + "@rollup/rollup-linux-arm-musleabihf", + "@rollup/rollup-linux-arm64-gnu", + "@rollup/rollup-linux-arm64-musl", + "@rollup/rollup-linux-loong64-gnu", + "@rollup/rollup-linux-loong64-musl", + "@rollup/rollup-linux-ppc64-gnu", + "@rollup/rollup-linux-ppc64-musl", + "@rollup/rollup-linux-riscv64-gnu", + "@rollup/rollup-linux-riscv64-musl", + "@rollup/rollup-linux-s390x-gnu", + "@rollup/rollup-linux-x64-gnu", + "@rollup/rollup-linux-x64-musl", + "@rollup/rollup-openbsd-x64", + "@rollup/rollup-openharmony-arm64", + "@rollup/rollup-win32-arm64-msvc", + "@rollup/rollup-win32-ia32-msvc", + "@rollup/rollup-win32-x64-gnu", + "@rollup/rollup-win32-x64-msvc", + "fsevents" + ], + "bin": true + }, + "saxes@6.0.0": { + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": [ + "xmlchars" + ] + }, + "semver@7.7.4": { + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "bin": true + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "siginfo@2.0.0": { + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==" + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "source-map@0.7.6": { + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" + }, + "stackback@0.0.2": { + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==" + }, + "std-env@3.10.0": { + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==" + }, + "strip-json-comments@3.1.1": { + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "sucrase@3.35.1": { + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dependencies": [ + "@jridgewell/gen-mapping", + "commander", + "lines-and-columns", + "mz", + "pirates", + "tinyglobby", + "ts-interface-checker" + ], + "bin": true + }, + "supports-color@7.2.0": { + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": [ + "has-flag" + ] + }, + "symbol-tree@3.2.4": { + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "thenify-all@1.6.0": { + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": [ + "thenify" + ] + }, + "thenify@3.3.1": { + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": [ + "any-promise" + ] + }, + "tinybench@2.9.0": { + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==" + }, + "tinyexec@0.3.2": { + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "tinyexec@1.0.2": { + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==" + }, + "tinyglobby@0.2.15_picomatch@4.0.3": { + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dependencies": [ + "fdir", + "picomatch" + ] + }, + "tinyrainbow@3.0.3": { + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==" + }, + "tldts-core@7.0.23": { + "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==" + }, + "tldts@7.0.23": { + "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", + "dependencies": [ + "tldts-core" + ], + "bin": true + }, + "tough-cookie@6.0.0": { + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dependencies": [ + "tldts" + ] + }, + "tr46@6.0.0": { + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dependencies": [ + "punycode" + ] + }, + "tree-kill@1.2.2": { + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": true + }, + "ts-interface-checker@0.1.13": { + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "tsup@8.5.1_typescript@5.9.3_esbuild@0.27.3_tsx@4.21.0": { + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dependencies": [ + "bundle-require", + "cac", + "chokidar", + "consola", + "debug", + "esbuild", + "fix-dts-default-cjs-exports", + "joycon", + "picocolors", + "postcss-load-config", + "resolve-from@5.0.0", + "rollup", + "source-map", + "sucrase", + "tinyexec@0.3.2", + "tinyglobby", + "tree-kill", + "typescript" + ], + "optionalPeers": [ + "typescript" + ], + "bin": true + }, + "tsx@4.21.0": { + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dependencies": [ + "esbuild", + "get-tsconfig" + ], + "optionalDependencies": [ + "fsevents" + ], + "bin": true + }, + "turbo-darwin-64@2.8.10": { + "integrity": "sha512-A03fXh+B7S8mL3PbdhTd+0UsaGrhfyPkODvzBDpKRY7bbeac4MDFpJ7I+Slf2oSkCEeSvHKR7Z4U71uKRUfX7g==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "turbo-darwin-arm64@2.8.10": { + "integrity": "sha512-sidzowgWL3s5xCHLeqwC9M3s9M0i16W1nuQF3Mc7fPHpZ+YPohvcbVFBB2uoRRHYZg6yBnwD4gyUHKTeXfwtXA==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "turbo-linux-64@2.8.10": { + "integrity": "sha512-YK9vcpL3TVtqonB021XwgaQhY9hJJbKKUhLv16osxV0HkcQASQWUqR56yMge7puh6nxU67rQlTq1b7ksR1T3KA==", + "os": ["linux"], + "cpu": ["x64"] + }, + "turbo-linux-arm64@2.8.10": { + "integrity": "sha512-3+j2tL0sG95iBJTm+6J8/45JsETQABPqtFyYjVjBbi6eVGdtNTiBmHNKrbvXRlQ3ZbUG75bKLaSSDHSEEN+btQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "turbo-windows-64@2.8.10": { + "integrity": "sha512-hdeF5qmVY/NFgiucf8FW0CWJWtyT2QPm5mIsX0W1DXAVzqKVXGq+Zf+dg4EUngAFKjDzoBeN6ec2Fhajwfztkw==", + "os": ["win32"], + "cpu": ["x64"] + }, + "turbo-windows-arm64@2.8.10": { + "integrity": "sha512-QGdr/Q8LWmj+ITMkSvfiz2glf0d7JG0oXVzGL3jxkGqiBI1zXFj20oqVY0qWi+112LO9SVrYdpHS0E/oGFrMbQ==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "turbo@2.8.10": { + "integrity": "sha512-OxbzDES66+x7nnKGg2MwBA1ypVsZoDTLHpeaP4giyiHSixbsiTaMyeJqbEyvBdp5Cm28fc+8GG6RdQtic0ijwQ==", + "optionalDependencies": [ + "turbo-darwin-64", + "turbo-darwin-arm64", + "turbo-linux-64", + "turbo-linux-arm64", + "turbo-windows-64", + "turbo-windows-arm64" + ], + "bin": true + }, + "type-check@0.4.0": { + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": [ + "prelude-ls" + ] + }, + "typescript@5.9.3": { + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "bin": true + }, + "ufo@1.6.3": { + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==" + }, + "undici-types@6.21.0": { + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "uri-js@4.4.1": { + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": [ + "punycode" + ] + }, + "vite@7.3.1_@types+node@20.19.33_tsx@4.21.0_picomatch@4.0.3_jiti@2.6.1": { + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dependencies": [ + "@types/node", + "esbuild", + "fdir", + "jiti", + "picomatch", + "postcss", + "rollup", + "tinyglobby", + "tsx" + ], + "optionalDependencies": [ + "fsevents" + ], + "optionalPeers": [ + "@types/node", + "jiti", + "tsx" + ], + "bin": true + }, + "vitest@4.0.18_@types+node@20.19.33_jsdom@27.4.0_vite@7.3.1__@types+node@20.19.33__tsx@4.21.0__picomatch@4.0.3__jiti@2.6.1_tsx@4.21.0": { + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "dependencies": [ + "@types/node", + "@vitest/expect", + "@vitest/mocker", + "@vitest/pretty-format", + "@vitest/runner", + "@vitest/snapshot", + "@vitest/spy", + "@vitest/utils", + "es-module-lexer", + "expect-type", + "jsdom", + "magic-string", + "obug", + "pathe", + "picomatch", + "std-env", + "tinybench", + "tinyexec@1.0.2", + "tinyglobby", + "tinyrainbow", + "vite", + "why-is-node-running" + ], + "optionalPeers": [ + "@types/node", + "jsdom" + ], + "bin": true + }, + "w3c-xmlserializer@5.0.0": { + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": [ + "xml-name-validator" + ] + }, + "webidl-conversions@8.0.1": { + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==" + }, + "whatwg-mimetype@4.0.0": { + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" + }, + "whatwg-mimetype@5.0.0": { + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==" + }, + "whatwg-url@15.1.0": { + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "dependencies": [ + "tr46", + "webidl-conversions" + ] + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ], + "bin": true + }, + "why-is-node-running@2.3.0": { + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dependencies": [ + "siginfo", + "stackback" + ], + "bin": true + }, + "word-wrap@1.2.5": { + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "ws@8.19.0": { + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==" + }, + "xml-name-validator@5.0.0": { + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" + }, + "xmlchars@2.2.0": { + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "yocto-queue@0.1.0": { + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "zod@4.3.6": { + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==" + } + }, + "workspace": { + "packageJson": { + "dependencies": [ + "npm:@vitest/coverage-v8@^4.0.14", + "npm:eslint@^9.35.0", + "npm:prettier@^3.6.2", + "npm:tsup@^8.5.1", + "npm:turbo@^2.7.5", + "npm:vitest@^4.0.14" + ] + }, + "members": { + "packages/core": { + "dependencies": [ + "npm:@aura-stack/router@0.5", + "npm:zod@^4.3.5" + ], + "packageJson": { + "dependencies": [ + "npm:@aura-stack/router@0.5", + "npm:zod@^4.3.5" + ] + } + }, + "packages/jose": { + "dependencies": [ + "npm:jose@^6.1.2" + ], + "packageJson": { + "dependencies": [ + "npm:jose@^6.1.2" + ] + } + } + } + } +} diff --git a/packages/core/deno.json b/packages/core/deno.json new file mode 100644 index 00000000..1e672e36 --- /dev/null +++ b/packages/core/deno.json @@ -0,0 +1,22 @@ +{ + "name": "@aura-stack/auth", + "version": "0.4.0", + "license": "MIT", + "tasks": { + "dev": "deno run --watch src/index.ts" + }, + "exports": { + ".": "./src/index.ts", + "./oauth": "./src/oauth/*.ts", + "./types": "./src/@types/index.ts" + }, + "imports": { + "@/": "./src/", + "@aura-stack/router": "npm:@aura-stack/router@^0.5.0", + "zod": "npm:zod@^4.3.5" + }, + "publish": { + "include": ["src/**/*.ts", "README.md", "CHANGELOG.md"] + }, + "exclude": ["dist", "node_modules"] +} diff --git a/packages/core/src/@types/index.ts b/packages/core/src/@types/index.ts index e862e749..8c4e82ea 100644 --- a/packages/core/src/@types/index.ts +++ b/packages/core/src/@types/index.ts @@ -1,12 +1,12 @@ import { z } from "zod" -import { createLogEntry } from "@/logger.js" -import { OAuthAccessTokenErrorResponse, OAuthAuthorizationErrorResponse, OAuthEnvSchema } from "@/schemas.js" -import { createJoseInstance, type JWTPayload } from "@/jose.js" +import { createLogEntry } from "@/logger.ts" +import { OAuthAccessTokenErrorResponse, OAuthAuthorizationErrorResponse, OAuthEnvSchema } from "@/schemas.ts" +import { createJoseInstance, type JWTPayload } from "@/jose.ts" import type { SerializeOptions } from "@aura-stack/router/cookie" -import type { BuiltInOAuthProvider } from "@/oauth/index.js" -import type { LiteralUnion, Prettify } from "@/@types/utility.js" +import type { BuiltInOAuthProvider } from "@/oauth/index.ts" +import type { LiteralUnion, Prettify } from "@/@types/utility.ts" -export * from "./utility.js" +export * from "./utility.ts" /** * Standard JWT claims that are managed internally by the token system. diff --git a/packages/core/src/actions/callback/access-token.ts b/packages/core/src/actions/callback/access-token.ts index 88dd2027..b3512bd3 100644 --- a/packages/core/src/actions/callback/access-token.ts +++ b/packages/core/src/actions/callback/access-token.ts @@ -1,7 +1,7 @@ -import { fetchAsync } from "@/request.js" -import { AuthInternalError, OAuthProtocolError } from "@/errors.js" -import { OAuthAccessToken, OAuthAccessTokenErrorResponse, OAuthAccessTokenResponse } from "@/schemas.js" -import type { InternalLogger, OAuthProviderCredentials } from "@/@types/index.js" +import { fetchAsync } from "@/request.ts" +import { AuthInternalError, OAuthProtocolError } from "@/errors.ts" +import { OAuthAccessToken, OAuthAccessTokenErrorResponse, OAuthAccessTokenResponse } from "@/schemas.ts" +import type { InternalLogger, OAuthProviderCredentials } from "@/@types/index.ts" /** * Make a request to the OAuth provider to the token endpoint to exchange the authorization code provided diff --git a/packages/core/src/actions/callback/callback.ts b/packages/core/src/actions/callback/callback.ts index 38366f78..c3c1ff22 100644 --- a/packages/core/src/actions/callback/callback.ts +++ b/packages/core/src/actions/callback/callback.ts @@ -1,16 +1,16 @@ import { z } from "zod" import { createEndpoint, createEndpointConfig, HeadersBuilder } from "@aura-stack/router" -import { createCSRF } from "@/secure.js" -import { cacheControl } from "@/headers.js" -import { isRelativeURL, isSameOrigin, isTrustedOrigin, timingSafeEqual } from "@/assert.js" -import { getUserInfo } from "@/actions/callback/userinfo.js" -import { OAuthAuthorizationErrorResponse } from "@/schemas.js" -import { AuthSecurityError, OAuthProtocolError } from "@/errors.js" -import { getOriginURL, getTrustedOrigins } from "@/actions/signIn/authorization.js" -import { createAccessToken } from "@/actions/callback/access-token.js" -import { createSessionCookie, getCookie, expiredCookieAttributes } from "@/cookie.js" -import type { JWTPayload } from "@/jose.js" -import type { OAuthProviderRecord } from "@/@types/index.js" +import { createCSRF } from "@/secure.ts" +import { cacheControl } from "@/headers.ts" +import { isRelativeURL, isSameOrigin, isTrustedOrigin, timingSafeEqual } from "@/assert.ts" +import { getUserInfo } from "@/actions/callback/userinfo.ts" +import { OAuthAuthorizationErrorResponse } from "@/schemas.ts" +import { AuthSecurityError, OAuthProtocolError } from "@/errors.ts" +import { getOriginURL, getTrustedOrigins } from "@/actions/signIn/authorization.ts" +import { createAccessToken } from "@/actions/callback/access-token.ts" +import { createSessionCookie, getCookie, expiredCookieAttributes } from "@/cookie.ts" +import type { JWTPayload } from "@/jose.ts" +import type { OAuthProviderRecord } from "@/@types/index.ts" const callbackConfig = (oauth: OAuthProviderRecord) => { return createEndpointConfig("/callback/:oauth", { diff --git a/packages/core/src/actions/callback/userinfo.ts b/packages/core/src/actions/callback/userinfo.ts index 25c97867..9e8c2d5e 100644 --- a/packages/core/src/actions/callback/userinfo.ts +++ b/packages/core/src/actions/callback/userinfo.ts @@ -1,8 +1,8 @@ -import { fetchAsync } from "@/request.js" -import { generateSecure } from "@/secure.js" -import { OAuthErrorResponse } from "@/schemas.js" -import { isNativeError, isOAuthProtocolError, OAuthProtocolError } from "@/errors.js" -import type { InternalLogger, OAuthProviderCredentials, User } from "@/@types/index.js" +import { fetchAsync } from "@/request.ts" +import { generateSecure } from "@/secure.ts" +import { OAuthErrorResponse } from "@/schemas.ts" +import { isNativeError, isOAuthProtocolError, OAuthProtocolError } from "@/errors.ts" +import type { InternalLogger, OAuthProviderCredentials, User } from "@/@types/index.ts" /** * Map the default user information fields from the OAuth provider's userinfo response diff --git a/packages/core/src/actions/csrfToken/csrfToken.ts b/packages/core/src/actions/csrfToken/csrfToken.ts index a7473744..6f4e514f 100644 --- a/packages/core/src/actions/csrfToken/csrfToken.ts +++ b/packages/core/src/actions/csrfToken/csrfToken.ts @@ -1,7 +1,7 @@ import { createEndpoint } from "@aura-stack/router" -import { createCSRF } from "@/secure.js" -import { secureApiHeaders } from "@/headers.js" -import { setCookie, getCookie } from "@/cookie.js" +import { createCSRF } from "@/secure.ts" +import { secureApiHeaders } from "@/headers.ts" +import { setCookie, getCookie } from "@/cookie.ts" const getCSRFToken = (request: Request, cookieName: string) => { try { diff --git a/packages/core/src/actions/index.ts b/packages/core/src/actions/index.ts index 56398977..450289c0 100644 --- a/packages/core/src/actions/index.ts +++ b/packages/core/src/actions/index.ts @@ -1,5 +1,5 @@ -export { signInAction } from "./signIn/signIn.js" -export { callbackAction } from "./callback/callback.js" -export { sessionAction } from "./session/session.js" -export { signOutAction } from "./signOut/signOut.js" -export { csrfTokenAction } from "./csrfToken/csrfToken.js" +export { signInAction } from "./signIn/signIn.ts" +export { callbackAction } from "./callback/callback.ts" +export { sessionAction } from "./session/session.ts" +export { signOutAction } from "./signOut/signOut.ts" +export { csrfTokenAction } from "./csrfToken/csrfToken.ts" diff --git a/packages/core/src/actions/session/session.ts b/packages/core/src/actions/session/session.ts index 8783cf9f..ab3c5757 100644 --- a/packages/core/src/actions/session/session.ts +++ b/packages/core/src/actions/session/session.ts @@ -1,8 +1,8 @@ import { createEndpoint, HeadersBuilder } from "@aura-stack/router" -import { secureApiHeaders } from "@/headers.js" -import { getErrorName, toISOString } from "@/utils.js" -import { expiredCookieAttributes, getCookie } from "@/cookie.js" -import type { JWTStandardClaims, Session, User } from "@/@types/index.js" +import { secureApiHeaders } from "@/headers.ts" +import { getErrorName, toISOString } from "@/utils.ts" +import { expiredCookieAttributes, getCookie } from "@/cookie.ts" +import type { JWTStandardClaims, Session, User } from "@/@types/index.ts" export const sessionAction = createEndpoint("GET", "/session", async (ctx) => { const { diff --git a/packages/core/src/actions/signIn/authorization.ts b/packages/core/src/actions/signIn/authorization.ts index 9abca70f..b06d94a4 100644 --- a/packages/core/src/actions/signIn/authorization.ts +++ b/packages/core/src/actions/signIn/authorization.ts @@ -1,9 +1,9 @@ -import { AuthInternalError } from "@/errors.js" -import { OAuthAuthorization } from "@/schemas.js" -import { equals, extractPath, toCastCase } from "@/utils.js" -import { isRelativeURL, isSameOrigin, isValidURL, isTrustedOrigin, patternToRegex } from "@/assert.js" +import { AuthInternalError } from "@/errors.ts" +import { OAuthAuthorization } from "@/schemas.ts" +import { equals, extractPath, toCastCase } from "@/utils.ts" +import { isRelativeURL, isSameOrigin, isValidURL, isTrustedOrigin, patternToRegex } from "@/assert.ts" import type { GlobalContext } from "@aura-stack/router" -import type { AuthConfig, InternalLogger, OAuthProviderCredentials } from "@/@types/index.js" +import type { AuthConfig, InternalLogger, OAuthProviderCredentials } from "@/@types/index.ts" /** * Constructs the request URI for the Authorization Request to the third-party OAuth service. It includes diff --git a/packages/core/src/actions/signIn/signIn.ts b/packages/core/src/actions/signIn/signIn.ts index 7da85bbf..5749ab0c 100644 --- a/packages/core/src/actions/signIn/signIn.ts +++ b/packages/core/src/actions/signIn/signIn.ts @@ -1,9 +1,9 @@ import { z } from "zod" import { createEndpoint, createEndpointConfig, HeadersBuilder } from "@aura-stack/router" -import { cacheControl } from "@/headers.js" -import { createPKCE, generateSecure } from "@/secure.js" -import { createAuthorizationURL, createRedirectURI, createRedirectTo } from "@/actions/signIn/authorization.js" -import type { OAuthProviderRecord } from "@/@types/index.js" +import { cacheControl } from "@/headers.ts" +import { createPKCE, generateSecure } from "@/secure.ts" +import { createAuthorizationURL, createRedirectURI, createRedirectTo } from "@/actions/signIn/authorization.ts" +import type { OAuthProviderRecord } from "@/@types/index.ts" const signInConfig = (oauth: OAuthProviderRecord) => { return createEndpointConfig("/signIn/:oauth", { diff --git a/packages/core/src/actions/signOut/signOut.ts b/packages/core/src/actions/signOut/signOut.ts index a548eab9..a6efddd4 100644 --- a/packages/core/src/actions/signOut/signOut.ts +++ b/packages/core/src/actions/signOut/signOut.ts @@ -1,11 +1,11 @@ import { z } from "zod" import { createEndpoint, createEndpointConfig, HeadersBuilder, statusCode } from "@aura-stack/router" -import { verifyCSRF } from "@/secure.js" -import { secureApiHeaders } from "@/headers.js" -import { AuthSecurityError } from "@/errors.js" -import { getBaseURL, getErrorName } from "@/utils.js" -import { expiredCookieAttributes } from "@/cookie.js" -import { createRedirectTo } from "@/actions/signIn/authorization.js" +import { verifyCSRF } from "@/secure.ts" +import { secureApiHeaders } from "@/headers.ts" +import { AuthSecurityError } from "@/errors.ts" +import { getBaseURL, getErrorName } from "@/utils.ts" +import { expiredCookieAttributes } from "@/cookie.ts" +import { createRedirectTo } from "@/actions/signIn/authorization.ts" const config = createEndpointConfig({ schemas: { diff --git a/packages/core/src/assert.ts b/packages/core/src/assert.ts index 4b81b3a0..6fed6a76 100644 --- a/packages/core/src/assert.ts +++ b/packages/core/src/assert.ts @@ -1,6 +1,6 @@ -import { equals } from "@/utils.js" +import { equals } from "@/utils.ts" import { encoder } from "@aura-stack/jose/crypto" -import type { JWTPayloadWithToken } from "@/@types/index.js" +import type { JWTPayloadWithToken } from "@/@types/index.ts" export const isFalsy = (value: unknown): boolean => { return value === false || value === 0 || value === "" || value === null || value === undefined || Number.isNaN(value) @@ -126,12 +126,10 @@ export const isTrustedOrigin = (url: string, trustedOrigins: string[]): boolean export const timingSafeEqual = (a: string, b: string): boolean => { const bufferA = encoder.encode(a) const bufferB = encoder.encode(b) - if(bufferA.length !== bufferB.length) { - return false - } + const len = Math.max(bufferA.length, bufferB.length) let diff = 0 - for(let i = 0; i < bufferA.length; i++) { - diff |= bufferA[i] ^ bufferB[i] + for (let i = 0; i < len; i++) { + diff |= (bufferA[i] ?? 0) ^ (bufferB[i] ?? 0) } - return diff === 0 + return diff === 0 && bufferA.length === bufferB.length } diff --git a/packages/core/src/cookie.ts b/packages/core/src/cookie.ts index 2d4f66d5..468a73e2 100644 --- a/packages/core/src/cookie.ts +++ b/packages/core/src/cookie.ts @@ -1,7 +1,8 @@ +import { env } from "@/env.ts" import { parse, parseSetCookie, serialize, type SerializeOptions } from "@aura-stack/router/cookie" -import { AuthInternalError } from "@/errors.js" -import type { JWTPayload } from "@/jose.js" -import type { AuthRuntimeConfig, CookieStoreConfig, CookieConfig, InternalLogger } from "@/@types/index.js" +import { AuthInternalError } from "@/errors.ts" +import type { JWTPayload } from "@/jose.ts" +import type { AuthRuntimeConfig, CookieStoreConfig, CookieConfig, InternalLogger } from "@/@types/index.ts" /** * Prefix for all cookies set by Aura Auth. @@ -160,7 +161,7 @@ export const defineSecureCookieOptions = ( attributes.sameSite = "lax" logger?.log("COOKIE_SAMESITE_NONE_WITHOUT_SECURE") } - if (process.env.NODE_ENV === "production") { + if (env.NODE_ENV === "production") { logger?.log("COOKIE_INSECURE_IN_PRODUCTION") } if (strategy === "host") { diff --git a/packages/core/src/errors.ts b/packages/core/src/errors.ts index 2ce722b0..265f58f0 100644 --- a/packages/core/src/errors.ts +++ b/packages/core/src/errors.ts @@ -1,4 +1,4 @@ -import type { AuthInternalErrorCode, AuthSecurityErrorCode, ErrorType, LiteralUnion } from "@/@types/index.js" +import type { AuthInternalErrorCode, AuthSecurityErrorCode, ErrorType, LiteralUnion } from "@/@types/index.ts" /** * The object returned by the class to users its: diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 47c48dc1..327362d2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,11 +1,11 @@ import { createRouter, type RouterConfig } from "@aura-stack/router" -import { createJoseInstance } from "@/jose.js" -import { createCookieStore } from "@/cookie.js" -import { createErrorHandler, useSecureCookies } from "@/utils.js" -import { createBuiltInOAuthProviders } from "@/oauth/index.js" -import { signInAction, callbackAction, sessionAction, signOutAction, csrfTokenAction } from "@/actions/index.js" -import { createLogEntry, logMessages } from "@/logger.js" -import type { AuthConfig, AuthInstance, InternalLogger, Logger, LogLevel, SyslogOptions } from "@/@types/index.js" +import { createJoseInstance } from "@/jose.ts" +import { createCookieStore } from "@/cookie.ts" +import { createErrorHandler, useSecureCookies } from "@/utils.ts" +import { createBuiltInOAuthProviders } from "@/oauth/index.ts" +import { signInAction, callbackAction, sessionAction, signOutAction, csrfTokenAction } from "@/actions/index.ts" +import { createLogEntry, logMessages } from "@/logger.ts" +import type { AuthConfig, AuthInstance, InternalLogger, Logger, LogLevel, SyslogOptions } from "@/@types/index.ts" export type { AuthConfig, @@ -21,7 +21,7 @@ export type { Logger, LogLevel, TrustedOrigin, -} from "@/@types/index.js" +} from "@/@types/index.ts" /** * Maps LogLevel to Severity hierarchically per RFC 5424. diff --git a/packages/core/src/jose.ts b/packages/core/src/jose.ts index f016a16c..aecbea2d 100644 --- a/packages/core/src/jose.ts +++ b/packages/core/src/jose.ts @@ -1,4 +1,4 @@ -import { env } from "@/env.js" +import { env } from "@/env.ts" import { createJWT, createJWS, @@ -8,7 +8,7 @@ import { type JWTVerifyOptions, type DecodedJWTPayloadOptions, } from "@aura-stack/jose" -import { AuthInternalError } from "@/errors.js" +import { AuthInternalError } from "@/errors.ts" export { base64url, type JWTPayload } from "@aura-stack/jose/jose" export { encoder, getRandomBytes, getSubtleCrypto } from "@aura-stack/jose/crypto" diff --git a/packages/core/src/logger.ts b/packages/core/src/logger.ts index 75991aac..0afdef4e 100644 --- a/packages/core/src/logger.ts +++ b/packages/core/src/logger.ts @@ -1,4 +1,4 @@ -import type { SyslogOptions } from "@/@types/index.js" +import type { SyslogOptions } from "@/@types/index.ts" /** * Log message definitions organized by category. diff --git a/packages/core/src/oauth/bitbucket.ts b/packages/core/src/oauth/bitbucket.ts index e6674c19..f3e54d16 100644 --- a/packages/core/src/oauth/bitbucket.ts +++ b/packages/core/src/oauth/bitbucket.ts @@ -1,4 +1,4 @@ -import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.js" +import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Get current user](https://developer.atlassian.com/cloud/bitbucket/rest/api-group-users/#api-user-get) diff --git a/packages/core/src/oauth/discord.ts b/packages/core/src/oauth/discord.ts index a58a5687..d4bdfa9f 100644 --- a/packages/core/src/oauth/discord.ts +++ b/packages/core/src/oauth/discord.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Discord - Nameplate Object](https://discord.com/developers/docs/resources/user#nameplate-nameplate-structure) diff --git a/packages/core/src/oauth/figma.ts b/packages/core/src/oauth/figma.ts index 42aa5fe4..a7e841c5 100644 --- a/packages/core/src/oauth/figma.ts +++ b/packages/core/src/oauth/figma.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Figma API - Users](https://developers.figma.com/docs/rest-api/users-types/) diff --git a/packages/core/src/oauth/github.ts b/packages/core/src/oauth/github.ts index 483968d5..478f613a 100644 --- a/packages/core/src/oauth/github.ts +++ b/packages/core/src/oauth/github.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Get the authenticated user](https://docs.github.com/en/rest/users/users?apiVersion=2022-11-28#get-the-authenticated-user) diff --git a/packages/core/src/oauth/gitlab.ts b/packages/core/src/oauth/gitlab.ts index 37ebed5d..c756f747 100644 --- a/packages/core/src/oauth/gitlab.ts +++ b/packages/core/src/oauth/gitlab.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [GitLab - User Structure](https://docs.gitlab.com/ee/api/users.html#external-user-structure) diff --git a/packages/core/src/oauth/index.ts b/packages/core/src/oauth/index.ts index 86660291..25743327 100644 --- a/packages/core/src/oauth/index.ts +++ b/packages/core/src/oauth/index.ts @@ -3,32 +3,32 @@ * * This modules re-exports OAuth providers available in Aura Auth to be used in the Auth instance configuration. */ -import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.js" -import { env } from "@/env.js" -import { github } from "./github.js" -import { bitbucket } from "./bitbucket.js" -import { figma } from "./figma.js" -import { discord } from "./discord.js" -import { gitlab } from "./gitlab.js" -import { spotify } from "./spotify.js" -import { x } from "./x.js" -import { strava } from "./strava.js" -import { mailchimp } from "./mailchimp.js" -import { pinterest } from "./pinterest.js" -import { OAuthEnvSchema, OAuthProviderCredentialsSchema } from "@/schemas.js" -import { AuthInternalError } from "@/errors.js" -import { formatZodError } from "@/utils.js" +import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.ts" +import { env } from "@/env.ts" +import { github } from "./github.ts" +import { bitbucket } from "./bitbucket.ts" +import { figma } from "./figma.ts" +import { discord } from "./discord.ts" +import { gitlab } from "./gitlab.ts" +import { spotify } from "./spotify.ts" +import { x } from "./x.ts" +import { strava } from "./strava.ts" +import { mailchimp } from "./mailchimp.ts" +import { pinterest } from "./pinterest.ts" +import { OAuthEnvSchema, OAuthProviderCredentialsSchema } from "@/schemas.ts" +import { AuthInternalError } from "@/errors.ts" +import { formatZodError } from "@/utils.ts" -export * from "./github.js" -export * from "./bitbucket.js" -export * from "./figma.js" -export * from "./discord.js" -export * from "./gitlab.js" -export * from "./spotify.js" -export * from "./x.js" -export * from "./strava.js" -export * from "./mailchimp.js" -export * from "./pinterest.js" +export * from "./github.ts" +export * from "./bitbucket.ts" +export * from "./figma.ts" +export * from "./discord.ts" +export * from "./gitlab.ts" +export * from "./spotify.ts" +export * from "./x.ts" +export * from "./strava.ts" +export * from "./mailchimp.ts" +export * from "./pinterest.ts" export const builtInOAuthProviders = { github, diff --git a/packages/core/src/oauth/mailchimp.ts b/packages/core/src/oauth/mailchimp.ts index 41105ab5..0121e514 100644 --- a/packages/core/src/oauth/mailchimp.ts +++ b/packages/core/src/oauth/mailchimp.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" export interface Login { email: string diff --git a/packages/core/src/oauth/pinterest.ts b/packages/core/src/oauth/pinterest.ts index 43d1dd3f..5fb4a64e 100644 --- a/packages/core/src/oauth/pinterest.ts +++ b/packages/core/src/oauth/pinterest.ts @@ -1,4 +1,4 @@ -import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.js" +import type { LiteralUnion, OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Pinterest - Get User Account](https://developers.pinterest.com/docs/api/v5/user_account-get) diff --git a/packages/core/src/oauth/spotify.ts b/packages/core/src/oauth/spotify.ts index f7334839..ad764edc 100644 --- a/packages/core/src/oauth/spotify.ts +++ b/packages/core/src/oauth/spotify.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" export interface SpotifyImage { url: string diff --git a/packages/core/src/oauth/strava.ts b/packages/core/src/oauth/strava.ts index 248d3741..d12cf2e2 100644 --- a/packages/core/src/oauth/strava.ts +++ b/packages/core/src/oauth/strava.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [Strava - SummaryClub](https://developers.strava.com/docs/reference/#api-models-SummaryClub) diff --git a/packages/core/src/oauth/x.ts b/packages/core/src/oauth/x.ts index 1959e119..a5fa99b0 100644 --- a/packages/core/src/oauth/x.ts +++ b/packages/core/src/oauth/x.ts @@ -1,4 +1,4 @@ -import type { OAuthProviderCredentials } from "@/@types/index.js" +import type { OAuthProviderCredentials } from "@/@types/index.ts" /** * @see [X - Get my User](https://docs.x.com/x-api/users/get-my-user) diff --git a/packages/core/src/secure.ts b/packages/core/src/secure.ts index 0c41ad88..46e92eaa 100644 --- a/packages/core/src/secure.ts +++ b/packages/core/src/secure.ts @@ -1,8 +1,8 @@ -import { equals } from "@/utils.js" -import { AuthSecurityError } from "@/errors.js" -import { isJWTPayloadWithToken, timingSafeEqual } from "@/assert.js" -import { jwtVerificationOptions, base64url, encoder, getRandomBytes, getSubtleCrypto } from "@/jose.js" -import type { AuthRuntimeConfig } from "@/@types/index.js" +import { equals } from "@/utils.ts" +import { AuthSecurityError } from "@/errors.ts" +import { isJWTPayloadWithToken, timingSafeEqual } from "@/assert.ts" +import { jwtVerificationOptions, base64url, encoder, getRandomBytes, getSubtleCrypto } from "@/jose.ts" +import type { AuthRuntimeConfig } from "@/@types/index.ts" export const generateSecure = (length: number = 32) => { return base64url.encode(getRandomBytes(length)) diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index e48bb11a..2e400787 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -1,7 +1,7 @@ import { isInvalidZodSchemaError, isRouterError, RouterConfig } from "@aura-stack/router" -import { isAuthInternalError, isAuthSecurityError, isOAuthProtocolError } from "@/errors.js" +import { isAuthInternalError, isAuthSecurityError, isOAuthProtocolError } from "@/errors.ts" import type { ZodError } from "zod" -import type { APIErrorMap, InternalLogger } from "@/@types/index.js" +import type { APIErrorMap, InternalLogger } from "@/@types/index.ts" export const toSnakeCase = (str: string) => { return str diff --git a/packages/core/test/actions/callback/access-token.test.ts b/packages/core/test/actions/callback/access-token.test.ts index 5488a346..3befbeaa 100644 --- a/packages/core/test/actions/callback/access-token.test.ts +++ b/packages/core/test/actions/callback/access-token.test.ts @@ -1,8 +1,8 @@ import { describe, test, expect, vi } from "vitest" -import { AuthInternalError } from "@/errors.js" -import { createPKCE } from "@/secure.js" -import { oauthCustomService } from "@test/presets.js" -import { createAccessToken } from "@/actions/callback/access-token.js" +import { AuthInternalError } from "@/errors.ts" +import { createPKCE } from "@/secure.ts" +import { oauthCustomService } from "@test/presets.ts" +import { createAccessToken } from "@/actions/callback/access-token.ts" describe("createAccessToken", async () => { const { codeVerifier } = await createPKCE() diff --git a/packages/core/test/actions/callback/callback.test.ts b/packages/core/test/actions/callback/callback.test.ts index c8888d42..21c10e3a 100644 --- a/packages/core/test/actions/callback/callback.test.ts +++ b/packages/core/test/actions/callback/callback.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect, vi } from "vitest" -import { GET } from "@test/presets.js" -import { createPKCE } from "@/secure.js" -import { setCookie, getSetCookie } from "@/cookie.js" +import { GET } from "@test/presets.ts" +import { createPKCE } from "@/secure.ts" +import { setCookie, getSetCookie } from "@/cookie.ts" describe("callbackAction", () => { test("invalid endpoint", async () => { diff --git a/packages/core/test/actions/callback/userinfo.test.ts b/packages/core/test/actions/callback/userinfo.test.ts index ddf969ee..92deb34e 100644 --- a/packages/core/test/actions/callback/userinfo.test.ts +++ b/packages/core/test/actions/callback/userinfo.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect, vi } from "vitest" -import { getUserInfo } from "@/actions/callback/userinfo.js" -import { OAuthProviderConfig, OAuthProviderCredentials } from "@/@types/index.js" -import { oauthCustomService } from "@test/presets.js" +import { getUserInfo } from "@/actions/callback/userinfo.ts" +import { OAuthProviderConfig, OAuthProviderCredentials } from "@/@types/index.ts" +import { oauthCustomService } from "@test/presets.ts" describe("getUserInfo", () => { test("get user info", async () => { diff --git a/packages/core/test/actions/csrfToken/csrfToken.test.ts b/packages/core/test/actions/csrfToken/csrfToken.test.ts index f4928fc3..7f13fc1a 100644 --- a/packages/core/test/actions/csrfToken/csrfToken.test.ts +++ b/packages/core/test/actions/csrfToken/csrfToken.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect } from "vitest" -import { GET } from "@test/presets.js" -import { setCookie } from "@/cookie.js" +import { GET } from "@test/presets.ts" +import { setCookie } from "@/cookie.ts" describe("csrfTokenAction", () => { test("generates a CSRF token and sets it in a cookie", async () => { diff --git a/packages/core/test/actions/session/session.test.ts b/packages/core/test/actions/session/session.test.ts index 4bc324df..7159bea4 100644 --- a/packages/core/test/actions/session/session.test.ts +++ b/packages/core/test/actions/session/session.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect, vi, afterEach } from "vitest" -import { createPKCE } from "@/secure.js" -import { GET, jose, sessionPayload } from "@test/presets.js" -import { setCookie, getSetCookie, createCookieStore } from "@/cookie.js" +import { createPKCE } from "@/secure.ts" +import { GET, jose, sessionPayload } from "@test/presets.ts" +import { setCookie, getSetCookie, createCookieStore } from "@/cookie.ts" afterEach(() => { vi.restoreAllMocks() diff --git a/packages/core/test/actions/signIn/authorization.test.ts b/packages/core/test/actions/signIn/authorization.test.ts index edd84615..af1b7485 100644 --- a/packages/core/test/actions/signIn/authorization.test.ts +++ b/packages/core/test/actions/signIn/authorization.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "vitest" -import { oauthCustomService } from "@test/presets.js" -import { createAuthorizationURL, createRedirectTo, createRedirectURI, getOriginURL } from "@/actions/signIn/authorization.js" -import type { OAuthProviderCredentials } from "@/index.js" +import { oauthCustomService } from "@test/presets.ts" +import { createAuthorizationURL, createRedirectTo, createRedirectURI, getOriginURL } from "@/actions/signIn/authorization.ts" +import type { OAuthProviderCredentials } from "@/index.ts" import type { GlobalContext } from "@aura-stack/router/types" describe("createRedirectURI", () => { diff --git a/packages/core/test/actions/signIn/signIn.test.ts b/packages/core/test/actions/signIn/signIn.test.ts index f3dfe3c8..1ab1d057 100644 --- a/packages/core/test/actions/signIn/signIn.test.ts +++ b/packages/core/test/actions/signIn/signIn.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from "vitest" -import { createAuth } from "@/index.js" -import { getSetCookie } from "@/cookie.js" -import { GET, oauthCustomService } from "@test/presets.js" +import { createAuth } from "@/index.ts" +import { getSetCookie } from "@/cookie.ts" +import { GET, oauthCustomService } from "@test/presets.ts" describe("signIn action", () => { test("rejects unsupported OAuth provider", async () => { diff --git a/packages/core/test/actions/signOut/signOut.test.ts b/packages/core/test/actions/signOut/signOut.test.ts index 4c34da15..0e72187d 100644 --- a/packages/core/test/actions/signOut/signOut.test.ts +++ b/packages/core/test/actions/signOut/signOut.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect, vi } from "vitest" -import { createCSRF } from "@/secure.js" -import { POST, jose, sessionPayload } from "@test/presets.js" +import { createCSRF } from "@/secure.ts" +import { POST, jose, sessionPayload } from "@test/presets.ts" describe("signOut action", async () => { const csrf = await createCSRF(jose) @@ -41,7 +41,7 @@ describe("signOut action", async () => { }) test("expired sessionToken cookie", async () => { - const decodeJWTMock = vi.spyOn(await import("@/jose.js"), "createJoseInstance").mockImplementation(() => { + const decodeJWTMock = vi.spyOn(await import("@/jose.ts"), "createJoseInstance").mockImplementation(() => { throw new Error("Token expired") }) diff --git a/packages/core/test/assert.test.ts b/packages/core/test/assert.test.ts index 938e4a48..6df4975a 100644 --- a/packages/core/test/assert.test.ts +++ b/packages/core/test/assert.test.ts @@ -1,4 +1,4 @@ -import { isRelativeURL, isValidURL, isTrustedOrigin } from "@/assert.js" +import { isRelativeURL, isValidURL, isTrustedOrigin } from "@/assert.ts" import { describe, test, expect } from "vitest" describe("isRelativeURL", () => { diff --git a/packages/core/test/cookie.test.ts b/packages/core/test/cookie.test.ts index 9ab1351f..e0394e48 100644 --- a/packages/core/test/cookie.test.ts +++ b/packages/core/test/cookie.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest" -import { setCookie, createCookieStore, getCookie, getSetCookie, defineSecureCookieOptions } from "@/cookie.js" +import { setCookie, createCookieStore, getCookie, getSetCookie, defineSecureCookieOptions } from "@/cookie.ts" import type { SerializeOptions } from "@aura-stack/router/cookie" const cookieStore = createCookieStore(true) diff --git a/packages/core/test/instance.test.ts b/packages/core/test/instance.test.ts index 698361a0..46052fd2 100644 --- a/packages/core/test/instance.test.ts +++ b/packages/core/test/instance.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest" -import { createAuth } from "@/index.js" +import { createAuth } from "@/index.ts" describe("createAuth", () => { describe("add custom basePath config", () => { diff --git a/packages/core/test/oauth.test.ts b/packages/core/test/oauth.test.ts index be0c417c..542259f6 100644 --- a/packages/core/test/oauth.test.ts +++ b/packages/core/test/oauth.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect } from "vitest" -import { createBuiltInOAuthProviders, builtInOAuthProviders, GitHubProfile } from "@/oauth/index.js" -import { OAuthProviderCredentials, User } from "@/@types/index.js" +import { createBuiltInOAuthProviders, builtInOAuthProviders, GitHubProfile } from "@/oauth/index.ts" +import { OAuthProviderCredentials, User } from "@/@types/index.ts" describe("createBuiltInOAuthProviders", () => { test("create oauth config for github", () => { diff --git a/packages/core/test/presets.ts b/packages/core/test/presets.ts index 79a3ac2b..0e340f4e 100644 --- a/packages/core/test/presets.ts +++ b/packages/core/test/presets.ts @@ -1,7 +1,7 @@ -import { createAuth } from "@/index.js" -import { createStructuredData } from "@/utils.js" -import { OAuthProviderCredentials } from "@/@types/index.js" -import type { JWTPayload } from "@/jose.js" +import { createAuth } from "@/index.ts" +import { createStructuredData } from "@/utils.ts" +import type { OAuthProviderCredentials } from "@/@types/index.ts" +import type { JWTPayload } from "@/jose.ts" export const oauthCustomService: OAuthProviderCredentials = { id: "oauth-provider", diff --git a/packages/core/test/request.test.ts b/packages/core/test/request.test.ts index ff926956..bbd1c8f0 100644 --- a/packages/core/test/request.test.ts +++ b/packages/core/test/request.test.ts @@ -1,4 +1,4 @@ -import { fetchAsync } from "@/request.js" +import { fetchAsync } from "@/request.ts" import { describe, expect, test, vi } from "vitest" describe("fetchAsync", () => { @@ -31,7 +31,7 @@ describe("fetchAsync", () => { vi.useRealTimers() }) - test("fetch with abort is triggered at the correct timeout", async () => { + test("fetch with abort is triggered at the correct timeout", () => { vi.useFakeTimers() const abortSpy = vi.spyOn(AbortController.prototype, "abort") @@ -52,7 +52,7 @@ describe("fetchAsync", () => { test("clears timeout after successful fetch", async () => { vi.useFakeTimers() - const clearSpy = vi.spyOn(global, "clearTimeout") + const clearSpy = vi.spyOn(globalThis, "clearTimeout") vi.stubGlobal("fetch", vi.fn().mockResolvedValue("OK")) await fetchAsync("https://example.com/timeout", {}, 1000) diff --git a/packages/core/test/secure.test.ts b/packages/core/test/secure.test.ts index c3ac7627..b0b567b5 100644 --- a/packages/core/test/secure.test.ts +++ b/packages/core/test/secure.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest" -import { createPKCE } from "@/secure.js" +import { createPKCE } from "@/secure.ts" describe("createPKCE", () => { test("generates a valid code verifier and code challenge", async () => { diff --git a/packages/core/test/utils.test.ts b/packages/core/test/utils.test.ts index 30c048d9..032f960a 100644 --- a/packages/core/test/utils.test.ts +++ b/packages/core/test/utils.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "vitest" -import { toCastCase, toSnakeCase } from "@/utils.js" -import { OAuthAuthorizationErrorResponse } from "@/schemas.js" +import { toCastCase, toSnakeCase } from "@/utils.ts" +import { OAuthAuthorizationErrorResponse } from "@/schemas.ts" describe("toSnakeCase", () => { const testCases = [ diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 0d63f1ae..3080f82a 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -5,7 +5,9 @@ "@/*": ["./src/*"], "@test/*": ["./test/*"] }, - "baseUrl": "." + "baseUrl": ".", + "allowImportingTsExtensions": true, + "noEmit": true }, "include": ["src", "test"], "exclude": ["dist", "node_modules"] diff --git a/packages/jose/deno.json b/packages/jose/deno.json new file mode 100644 index 00000000..3c2338f4 --- /dev/null +++ b/packages/jose/deno.json @@ -0,0 +1,26 @@ +{ + "name": "@aura-stack/jose", + "version": "0.3.0", + "license": "MIT", + "tasks": { + "dev": "deno run --watch src/index.ts", + "type-check": "deno check", + "lint": "deno lint" + }, + "exports": { + ".": "./src/index.ts", + "./encrypt": "./src/encrypt.ts", + "./sign": "./src/sign.ts", + "./jose": "./src/jose.ts", + "./hkdf": "./src/deriveKey.ts", + "./crypto": "./src/crypto.ts" + }, + "imports": { + "jose": "npm:jose@^6.1.2", + "@/": "./src/" + }, + "publish": { + "include": ["src/**/*.ts", "README.md", "CHANGELOG.md"] + }, + "exclude": ["dist", "node_modules"] +} diff --git a/packages/jose/src/assert.ts b/packages/jose/src/assert.ts index 83f56c31..fb3aa832 100644 --- a/packages/jose/src/assert.ts +++ b/packages/jose/src/assert.ts @@ -1,4 +1,4 @@ -import { AuraJoseError, InvalidSecretError } from "./errors.js" +import { AuraJoseError, InvalidSecretError } from "@/errors.ts" export const isAuraJoseError = (error: unknown): error is AuraJoseError => { return error instanceof AuraJoseError diff --git a/packages/jose/src/deriveKey.ts b/packages/jose/src/deriveKey.ts index 42881652..bfdb1855 100644 --- a/packages/jose/src/deriveKey.ts +++ b/packages/jose/src/deriveKey.ts @@ -1,7 +1,7 @@ -import { createSecret } from "@/secret.js" -import { KeyDerivationError } from "@/errors.js" -import { encoder, getSubtleCrypto } from "@/crypto.js" -import type { SecretInput } from "@/index.js" +import { createSecret } from "@/secret.ts" +import { KeyDerivationError } from "@/errors.ts" +import { encoder, getSubtleCrypto } from "@/crypto.ts" +import type { SecretInput } from "@/index.ts" /** * Generate a derived key using HKDF (HMAC-based Extract-and-Expand Key Derivation Function) diff --git a/packages/jose/src/encrypt.ts b/packages/jose/src/encrypt.ts index 64efcd8d..35df2ed5 100644 --- a/packages/jose/src/encrypt.ts +++ b/packages/jose/src/encrypt.ts @@ -1,9 +1,9 @@ import { base64url, EncryptJWT, jwtDecrypt, type JWTDecryptOptions } from "jose" -import { createSecret } from "@/secret.js" -import { getRandomBytes } from "@/crypto.js" -import { isAuraJoseError, isFalsy } from "@/assert.js" -import { InvalidPayloadError, JWEDecryptionError, JWEEncryptionError } from "@/errors.js" -import type { SecretInput } from "@/index.js" +import { createSecret } from "@/secret.ts" +import { getRandomBytes } from "@/crypto.ts" +import { isAuraJoseError, isFalsy } from "@/assert.ts" +import { InvalidPayloadError, JWEDecryptionError, JWEEncryptionError } from "@/errors.ts" +import type { SecretInput } from "@/index.ts" export type { JWTDecryptOptions } from "jose" @@ -35,7 +35,7 @@ export const encryptJWE = async (payload: string, secret: SecretInput, options?: const secretKey = createSecret(secret) const jti = base64url.encode(getRandomBytes(32)) - return new EncryptJWT({ payload }) + return await new EncryptJWT({ payload }) .setProtectedHeader({ alg: "dir", enc: "A256GCM", typ: "JWT", cty: "JWT" }) .setIssuedAt() .setNotBefore(options?.nbf ?? "0s") diff --git a/packages/jose/src/index.ts b/packages/jose/src/index.ts index fc01119a..ca5dd78c 100644 --- a/packages/jose/src/index.ts +++ b/packages/jose/src/index.ts @@ -1,18 +1,18 @@ /** * @module @aura-stack/jose */ -import { JWTDecryptOptions, JWTPayload, JWTVerifyOptions } from "jose" -import { createJWS } from "@/sign.js" -import { getSecrets } from "@/secret.js" -import { createJWE } from "@/encrypt.js" -import { isAuraJoseError } from "@/assert.js" -import { JWTDecodingError, JWTEncodingError } from "./errors.js" +import type { JWTDecryptOptions, JWTPayload, JWTVerifyOptions } from "jose" +import { createJWS } from "@/sign.ts" +import { getSecrets } from "@/secret.ts" +import { createJWE } from "@/encrypt.ts" +import { isAuraJoseError } from "@/assert.ts" +import { JWTDecodingError, JWTEncodingError } from "./errors.ts" -export * from "@/sign.js" -export * from "@/encrypt.js" -export * from "@/deriveKey.js" -export * from "@/secret.js" -export * from "@/crypto.js" +export * from "@/sign.ts" +export * from "@/encrypt.ts" +export * from "@/deriveKey.ts" +export * from "@/secret.ts" +export * from "@/crypto.ts" /** * Secret input can be: @@ -90,7 +90,7 @@ export const decodeJWT = async (token: string, secret: SecretInput | DerivedKeyI */ export const createJWT = (secret: SecretInput | DerivedKeyInput) => { return { - encodeJWT: async (payload: JWTPayload) => encodeJWT(payload, secret), - decodeJWT: async (token: string) => decodeJWT(token, secret), + encodeJWT: async (payload: JWTPayload) => await encodeJWT(payload, secret), + decodeJWT: async (token: string) => await decodeJWT(token, secret), } } diff --git a/packages/jose/src/secret.ts b/packages/jose/src/secret.ts index fd0ac798..42e0667b 100644 --- a/packages/jose/src/secret.ts +++ b/packages/jose/src/secret.ts @@ -1,7 +1,7 @@ -import { isObject } from "@/assert.js" -import { InvalidSecretError } from "@/errors.js" -import { encoder } from "@/crypto.js" -import type { DerivedKeyInput, SecretInput } from "@/index.js" +import { isObject } from "@/assert.ts" +import { InvalidSecretError } from "@/errors.ts" +import { encoder } from "@/crypto.ts" +import type { DerivedKeyInput, SecretInput } from "@/index.ts" export const MIN_SECRET_ENTROPY_BITS = 4.5 diff --git a/packages/jose/src/sign.ts b/packages/jose/src/sign.ts index f39c6482..7072e63d 100644 --- a/packages/jose/src/sign.ts +++ b/packages/jose/src/sign.ts @@ -1,9 +1,9 @@ import { base64url, jwtVerify, SignJWT, type JWTPayload, type JWTVerifyOptions } from "jose" -import { createSecret } from "@/secret.js" -import { getRandomBytes } from "@/crypto.js" -import { isAuraJoseError, isFalsy, isInvalidPayload } from "@/assert.js" -import { JWSSigningError, JWSVerificationError, InvalidPayloadError } from "./errors.js" -import type { SecretInput } from "@/index.js" +import { createSecret } from "@/secret.ts" +import { getRandomBytes } from "@/crypto.ts" +import { isAuraJoseError, isFalsy, isInvalidPayload } from "@/assert.ts" +import { JWSSigningError, JWSVerificationError, InvalidPayloadError } from "@/errors.ts" +import type { SecretInput } from "@/index.ts" export type { JWTVerifyOptions } from "jose" @@ -28,7 +28,7 @@ export const signJWS = async (payload: JWTPayload, secret: SecretInput): Promise const secretKey = createSecret(secret) const jti = base64url.encode(getRandomBytes(32)) - return new SignJWT(payload) + return await new SignJWT(payload) .setProtectedHeader({ alg: "HS256", typ: "JWT" }) .setIssuedAt() .setNotBefore(payload.nbf ?? "0s") diff --git a/packages/jose/test/index.test.ts b/packages/jose/test/index.test.ts index 8ec37392..bf9dd011 100644 --- a/packages/jose/test/index.test.ts +++ b/packages/jose/test/index.test.ts @@ -1,10 +1,10 @@ import { describe, test, expect } from "vitest" -import { createSecret } from "@/secret.js" -import { encoder, getRandomBytes } from "@/crypto.js" -import { createJWS, signJWS, verifyJWS } from "@/sign.js" -import { deriveKey, createDeriveKey } from "@/deriveKey.js" -import { createJWE, encryptJWE, decryptJWE } from "@/encrypt.js" -import { createJWT, MIN_SECRET_ENTROPY_BITS, SecretInput } from "@/index.js" +import { createSecret } from "@/secret.ts" +import { encoder, getRandomBytes } from "@/crypto.ts" +import { createJWS, signJWS, verifyJWS } from "@/sign.ts" +import { deriveKey, createDeriveKey } from "@/deriveKey.ts" +import { createJWE, encryptJWE, decryptJWE } from "@/encrypt.ts" +import { createJWT, MIN_SECRET_ENTROPY_BITS, type SecretInput } from "@/index.ts" import type { JWTPayload } from "jose" const payload: JWTPayload = { @@ -58,10 +58,10 @@ describe("JWSs", () => { await expect(verifyJWS(jws)).rejects.toThrow("Secret string must be at least 32 bytes long") }) - test("fail JWT with invalid format JWS", async () => { + test("fail JWT with invalid format JWS", () => { const secretKey = getRandomBytes(32) const { signJWS } = createJWS(secretKey) - await expect(signJWS(undefined as unknown as JWTPayload)).rejects.toThrow("The payload must be a non-empty object") + expect(() => signJWS(undefined as unknown as JWTPayload)).toThrow("The payload must be a non-empty object") }) test("set audience in a JWS and verify it", async () => { diff --git a/packages/jose/tsconfig.json b/packages/jose/tsconfig.json index 70366bf1..9976e16e 100644 --- a/packages/jose/tsconfig.json +++ b/packages/jose/tsconfig.json @@ -3,7 +3,10 @@ "compilerOptions": { "paths": { "@/*": ["./src/*"] - } + }, + "baseUrl": ".", + "allowImportingTsExtensions": true, + "noEmit": true }, "include": ["src", "tsup.config.ts", "test"], "exclude": ["dist", "node_modules"]