From 3df5a3e7a50d27efaae3ad35c418a3891fac25f6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 1 Jul 2026 19:54:11 +0000 Subject: [PATCH 1/7] Update Remix to 3.0.0-beta.5 --- bun.lock | 346 +++++++++++++++++++++--- client/agent-multi-select-combobox.tsx | 2 +- client/app-session-refresh.test.ts | 2 +- client/app.tsx | 40 ++- client/client-router.tsx | 23 +- client/counter.tsx | 6 +- client/double-check.ts | 2 +- client/editable-text.tsx | 7 +- client/entry.tsx | 2 +- client/notifications.tsx | 2 +- client/remix-ui-compat/jsx-runtime.ts | 96 +++++++ client/routes/account.tsx | 2 +- client/routes/admin-agents.tsx | 2 +- client/routes/chat.tsx | 16 +- client/routes/home.tsx | 2 +- client/routes/index.tsx | 2 +- client/routes/login.tsx | 6 +- client/routes/oauth-authorize.tsx | 2 +- client/routes/oauth-callback.tsx | 2 +- client/routes/reset-password.tsx | 4 +- client/spin-delay.ts | 2 +- package.json | 7 +- server/handlers/account.ts | 9 +- server/handlers/admin-agents.ts | 38 +-- server/handlers/auth-handler.test.ts | 2 +- server/handlers/auth-page.ts | 2 +- server/handlers/auth.ts | 6 +- server/handlers/chat-agents.ts | 9 +- server/handlers/chat-threads.ts | 30 +- server/handlers/chat.ts | 6 +- server/handlers/health-handler.test.ts | 4 +- server/handlers/health.ts | 9 +- server/handlers/home.ts | 6 +- server/handlers/login.ts | 7 +- server/handlers/logout.ts | 9 +- server/handlers/password-reset.ts | 16 +- server/handlers/session-handler.test.ts | 4 +- server/handlers/session.ts | 9 +- server/handlers/signup.ts | 7 +- types/tsconfig-client.json | 2 +- worker/d1-data-table-adapter.ts | 120 ++++++-- worker/db.ts | 109 ++++---- 42 files changed, 687 insertions(+), 292 deletions(-) create mode 100644 client/remix-ui-compat/jsx-runtime.ts diff --git a/bun.lock b/bun.lock index 90268d9..19b7a56 100644 --- a/bun.lock +++ b/bun.lock @@ -13,7 +13,7 @@ "@modelcontextprotocol/sdk": "1.26.0", "agents": "^0.7.6", "get-port": "^7.1.0", - "remix": "3.0.0-alpha.3", + "remix": "3.0.0-beta.5", "workers-ai-provider": "^3.1.2", "zod": "^4.3.6", }, @@ -76,11 +76,11 @@ "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], - "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], "@epic-web/config": ["@epic-web/config@1.24.1", "", { "dependencies": { "@oxlint/plugins": "^1.43.0", "@total-typescript/ts-reset": "^0.6.1", "@vitest/eslint-plugin": "^1.3.4", "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-jest-dom": "^5.5.0", "eslint-plugin-playwright": "^2.2.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-testing-library": "^7.6.1", "globals": "^16.3.0", "prettier-plugin-tailwindcss": "^0.6.14", "tslib": "^2.8.1", "typescript-eslint": "^8.38.0" } }, "sha512-rJFMoCVAs2A4GDKRXLPzvzOQw0w32o2Nij71/qFGmaTgtn2YerMij3ix9mD5mjwNcv/JdwzR3VxLIN0rICMg0A=="], @@ -260,6 +260,168 @@ "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.8", "", { "os": "win32", "cpu": "x64" }, "sha512-K6qBUKAZLXsjAwFxGTG87dsWlDjyDl2fqjJr7+x7lmv2m+aSEzmLOK+Z5pSvGkpjBp3LXV35UUgj8G0UTd0pPg=="], + "@oxc-minify/binding-android-arm-eabi": ["@oxc-minify/binding-android-arm-eabi@0.121.0", "", { "os": "android", "cpu": "arm" }, "sha512-RcQXLj3JLLVm41n80/6+7OUion2PSQWOH5EUvlD9kCWSF1fWLXCNX1A6t/+nFNjeyaCXZ3YbIWwCTiGXhxxHEw=="], + + "@oxc-minify/binding-android-arm64": ["@oxc-minify/binding-android-arm64@0.121.0", "", { "os": "android", "cpu": "arm64" }, "sha512-VnFvB9DgADWpgwQb6LmeRv302xwdgpD/45WlQNWI380YUgWVXmhoZoNOgnaCSbuFEz+ElQDb/iE2U2LADkfu8w=="], + + "@oxc-minify/binding-darwin-arm64": ["@oxc-minify/binding-darwin-arm64@0.121.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0EKcroW5oMgJ27DOUWD724nQmLhV1PLArkXW5F4t7cUoRZy81OlFMqS97AOWIrQPlNPaC/1MYfCtIoZIW8OElQ=="], + + "@oxc-minify/binding-darwin-x64": ["@oxc-minify/binding-darwin-x64@0.121.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-DvsiLCZQ7KvufItkGuU45ovM4paB99M3/J5ZqpzjSnHpyFmcWUx19gwG9RTDOmHHA+7TPCq3b02aQoCiX6xiaA=="], + + "@oxc-minify/binding-freebsd-x64": ["@oxc-minify/binding-freebsd-x64@0.121.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-b+ngbloTvuei3HxfOz6nCwWkIl8dhgp42W1TREBUVRRe80iKe4bclrpZHxacFQYmVZ/bDjIV7ePPRSCSKM93RA=="], + + "@oxc-minify/binding-linux-arm-gnueabihf": ["@oxc-minify/binding-linux-arm-gnueabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Vj1xJ46zDTJlnF4UQgAVqX4xb2uv6hpmtHkypCMiaNbuop7bJ+VbqSfs7SCKvg23fygK530XTUxr+A7YDbkEzQ=="], + + "@oxc-minify/binding-linux-arm-musleabihf": ["@oxc-minify/binding-linux-arm-musleabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-lVhZ/y6Piqi+TlM+VB3UdRWWtqm7ks2He5VrYmZfO0a8A/wBE7KTpIK+RoUFGW3ii3wr4Hc8AEWZNEjU4fs38Q=="], + + "@oxc-minify/binding-linux-arm64-gnu": ["@oxc-minify/binding-linux-arm64-gnu@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-FMEtjwWKVRehcs4ebsmM8nj7F7/kVH54dcFZodNFsk1iUsVdqPrOWhzanMcU55AYrGmXHeKFx7PlrimDOz2ZdA=="], + + "@oxc-minify/binding-linux-arm64-musl": ["@oxc-minify/binding-linux-arm64-musl@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZFCqQWU7TP4oCiu9q0q9xg1wg78Et4bRSCv9LzMAn/N9zJezPa+u3kVqKXkQnvAgrA7fBo9VPSaEx0XMpXsPhA=="], + + "@oxc-minify/binding-linux-ppc64-gnu": ["@oxc-minify/binding-linux-ppc64-gnu@0.121.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WSV2TNT7a6wfwfWHHvpaOoHVKwB0tKyJpMjj3P401k8tFEZpH/xNqDNofdvXQznKqJ3nyYxIC4llvNGCXUtTzQ=="], + + "@oxc-minify/binding-linux-riscv64-gnu": ["@oxc-minify/binding-linux-riscv64-gnu@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-hTToDA4mEd4P4HdwnmULtyyWP6CsNwuxdiToGZ5LjQvznpF5acRi9KEAqF8zmNXQ9r1RbrbGbYHATfRWogEbfw=="], + + "@oxc-minify/binding-linux-riscv64-musl": ["@oxc-minify/binding-linux-riscv64-musl@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-zhgxjY8IkVZ2MpuElCiK37DjEwX2uk9r7fawRh0J4yjkYWVQR5kmmMEo5oMPbBMtri61vnSiqLZmD25cTFP1vw=="], + + "@oxc-minify/binding-linux-s390x-gnu": ["@oxc-minify/binding-linux-s390x-gnu@0.121.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-YruvsabXqUdhtfe9Qjv2F1tb0u1PqqNBnf0jFhC8K4qJLctgveH/2rBYE8WAqdahxfdR59ByFZd0u6dqwDCKPg=="], + + "@oxc-minify/binding-linux-x64-gnu": ["@oxc-minify/binding-linux-x64-gnu@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-OOUpoGKeGN6D9bP9dr2lczK3SgOFeMLFiJuldPxOcY21VAxlemEiTPFTPXp4VWzw65sy3bCx0k8R6wyE8TA3EQ=="], + + "@oxc-minify/binding-linux-x64-musl": ["@oxc-minify/binding-linux-x64-musl@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ixdrFcKUdRXsavlAe+ttKQHtR6nUyXSrCjLTkB4eiy8U/5f5A1BQXAKDdw9rUNoPkLc4vrKohG8frI0pjg7S6g=="], + + "@oxc-minify/binding-openharmony-arm64": ["@oxc-minify/binding-openharmony-arm64@0.121.0", "", { "os": "none", "cpu": "arm64" }, "sha512-P52luYhm78qAPjACwHEMWJQag4hgX3InczjXazLqSWJPf5ismBWDmrSiccVWi2B6nPGSuYd4YQVR3j0h2IELyA=="], + + "@oxc-minify/binding-wasm32-wasi": ["@oxc-minify/binding-wasm32-wasi@0.121.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-1XDHPrAJa6W8dGqaDnlt+0k5In5JzGE0EOI87cJnOkSGsUAb1Sk8mKNhUe3/PuGiBDDat8eZ0wlq/VcUeOmsoA=="], + + "@oxc-minify/binding-win32-arm64-msvc": ["@oxc-minify/binding-win32-arm64-msvc@0.121.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-FvUEX7eTfSh1OBB+/AGSWhkNX/8jPFGM2jvMwrrAZ5vj8kTtnETNTkJdkkPMUEiIEVupxoARKc5UFU2/k+3THw=="], + + "@oxc-minify/binding-win32-ia32-msvc": ["@oxc-minify/binding-win32-ia32-msvc@0.121.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-ZNcMq+yy9QBgekrBP/NxTD4RW1sZKHOWO+aH5SgqRvfU035Bldvns7zHC8VdaY4Sz3PcaChfmSeapfUoUGqT5w=="], + + "@oxc-minify/binding-win32-x64-msvc": ["@oxc-minify/binding-win32-x64-msvc@0.121.0", "", { "os": "win32", "cpu": "x64" }, "sha512-/0qRGvYnBVhzwSXHcJ6sF+2rb2QpotbJeAr1wmADgq/hm7JjdRukktngmwXQuIILmC+UELYLoVpa0PTBoEqwrg=="], + + "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.121.0", "", { "os": "android", "cpu": "arm" }, "sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A=="], + + "@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.121.0", "", { "os": "android", "cpu": "arm64" }, "sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA=="], + + "@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.121.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ=="], + + "@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.121.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA=="], + + "@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.121.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw=="], + + "@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ=="], + + "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw=="], + + "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA=="], + + "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw=="], + + "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.121.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw=="], + + "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w=="], + + "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ=="], + + "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.121.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ=="], + + "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A=="], + + "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw=="], + + "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.121.0", "", { "os": "none", "cpu": "arm64" }, "sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw=="], + + "@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.121.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw=="], + + "@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.121.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw=="], + + "@oxc-parser/binding-win32-ia32-msvc": ["@oxc-parser/binding-win32-ia32-msvc@0.121.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw=="], + + "@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.121.0", "", { "os": "win32", "cpu": "x64" }, "sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA=="], + + "@oxc-project/runtime": ["@oxc-project/runtime@0.121.0", "", {}, "sha512-p0bQukD8OEHxzY4T9OlANBbEFGnOnjo1CYi50HES7OD36UO2yPh6T+uOJKLtlg06eclxroipRCpQGMpeH8EJ/g=="], + + "@oxc-project/types": ["@oxc-project/types@0.121.0", "", {}, "sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw=="], + + "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.22.0", "", { "os": "android", "cpu": "arm" }, "sha512-il+0FB7BBUfuQaE0Lgd9zlgSjzu88ErN8vr4hintuTt1qRDcPtmzLyurail1gJZpJ1ljo7zA0cid/a/PaWMyZg=="], + + "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.22.0", "", { "os": "android", "cpu": "arm64" }, "sha512-rWCyvcoiMxb5JRsGMXI22DFAlsddZHOTBWp/zz48E85Yh/KWQRFko18Gf5xsRdcN0pz65VFnJoisz/B2LWoaGg=="], + + "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.22.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eDx1up8xhb6OH58RfcADHAKWQY3yatNAbrOF2QEqDN2ml0DsOlHBNgj7E5NB3kU62yam2VEYnFTMO8meOYEe1w=="], + + "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.22.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-4YUMAsVqqQGzkq7eDWEZXUvzm1L7eZFd4jghnoDv76fPF2IisedcBjkJY3iwcAlWQNtZLgc5Od/cL0Z2ogEwaQ=="], + + "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.22.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-I7qjjmCzrqPme94B9b9deHID6YiggKQRy3s9mTjnUuYlpgDx5YgC1G00W2S/Cchrjz5I8VOik17/3uO4joPULw=="], + + "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.22.0", "", { "os": "linux", "cpu": "arm" }, "sha512-VsI6Vnsyg9O5jLv+bkYP15yHv924i63fLbROZAZfwAAUJ611FF8OE4aCX2KzsG70yRlcn4n7Zh0fyHT5L4myGA=="], + + "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.22.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Imedx3sbderR0w8HHZ+vH7PqrY7eL3H7cj666Yrg+erelaRCVzXlJjQD5w0vNk+RtGDqhmnP5R18WIowFCI+uA=="], + + "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.22.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-a9L5IxPBpiSXcvEPGNWOpD5pKbcE0VgC5smcaYn0t/oMaJxHwejrJ1qRoXZLj767HAo+nq9FNEpZ9WFW91lP8g=="], + + "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.22.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-4AFo9hX0AbA/o7qWrsrAHbRGsZpthcUEZiuMHlxqZsR4JNgvFmeuLtMXUV+KPHWo+gfefFmiQ0UdUx8GPBCrXQ=="], + + "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.22.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-QVPpxFDkLxWAnfAqN0DA1TH4agOPL1bxg7dwUZ7goQKU5IfaPoL/ZcPClMol4+Dwb30g2nPNxbr0BPyFmcVV3A=="], + + "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.22.0", "", { "os": "linux", "cpu": "none" }, "sha512-saQJeKGMCrtW5DH8uY9N9pPE4/8Hs+DpZ4hJg1+SzvISSKhTf3V6/jOROxluU14ftz5KNd8G/NXRgj9vTS0Emg=="], + + "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.22.0", "", { "os": "linux", "cpu": "none" }, "sha512-/p6aCGRKot+Je44l+WoL+zkizRXY4ApQcvRXlLw8lRM305tmmEqNtAyekDLMCzn8DUt81lS3ZsiUpdn0bL533A=="], + + "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.22.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-ZYfI5CG/W1C+HXDWkJ5+JPjiuwVQw6HBD1jUTneAzJVWImRDjstQPKmixCa1fTkthCM1OCkn2D8fdX+q37kMXQ=="], + + "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.22.0", "", { "os": "linux", "cpu": "x64" }, "sha512-IR2juRKWbR6TmFZTn6plHFm5iXWD8Szw/fGeKhaGWzwTPN/Oq4CCV6ZVp8Bq8ih2easVh7Mwom2A5CGkB+QVxg=="], + + "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.22.0", "", { "os": "linux", "cpu": "x64" }, "sha512-TCE/wgDr3EaxQrwQrU9MbRK35cFsYAVwMT2Du0lbyjmlaXV03uPLnCKIDDmxUPyQUdPgZirM+k26GDR3LNs+hw=="], + + "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.22.0", "", { "os": "none", "cpu": "arm64" }, "sha512-uhNpwQzWnYVBZ6ZZomIQN2X/jUDLp3HYjLSVbdsZqA4hNpYSFENSF8JV6I6gdvvV9TLQr1rC/viDsxhvE/5/Ww=="], + + "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.22.0", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-nn8NCiQhh3rgwrGMf8msky7MjPd0W8Vwmo7oZr5cs7TOJby2IRMZYPPgb+NTz8vVG6VjjjcLPriIMxHE1aAx1A=="], + + "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.22.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-kHx9KiAKQKeSW/yVmt5tUa7oAHUd9OsoB5fdpQjSBDaKtHSQpPIXxNJ1E9q8cnaxS9NNWANR6w3osEHBD+5lSg=="], + + "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.22.0", "", { "os": "win32", "cpu": "x64" }, "sha512-gZKq7BTQBdAmvFYGQfqkuz3zeoytmAkluFjajToSkWUTed0DsJ3GdCoXpPdpGSElBLLIeAgKM3ju6XdPvKOr0A=="], + + "@oxc-transform/binding-android-arm-eabi": ["@oxc-transform/binding-android-arm-eabi@0.121.0", "", { "os": "android", "cpu": "arm" }, "sha512-NNYkyDjTID7oVW0LUZ04kDShtyY6hgsTakd2u3mz/hN765JviCuyBIi5qT9dDOmgX0t1y74nuS7FwiLgaCcZ4g=="], + + "@oxc-transform/binding-android-arm64": ["@oxc-transform/binding-android-arm64@0.121.0", "", { "os": "android", "cpu": "arm64" }, "sha512-zO5az3E5JUmF/k7xOOL9TCipqaVn/d8QHK5T8/bcw6qTWAPVFJjQRK8+5MSmp2ItO2Dmxed5DdWMSxG2NNfA5w=="], + + "@oxc-transform/binding-darwin-arm64": ["@oxc-transform/binding-darwin-arm64@0.121.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3vcZdmL8OAdYzXfPDeXrO9KagTgUbXPSFXotoww9N0jVNbdCvSpKJHia1aqdltyevrCWF4KqJyOeeUfGcw7AJw=="], + + "@oxc-transform/binding-darwin-x64": ["@oxc-transform/binding-darwin-x64@0.121.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-R63ZXF4Fuer3FEZYX9UmzIKAENSEYQZTglTkzWoyNPyuHDhSfyJIK+X+wgy2Wc1lTad1XquCUq5SDuRSd37fcQ=="], + + "@oxc-transform/binding-freebsd-x64": ["@oxc-transform/binding-freebsd-x64@0.121.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0krk8L6iOJ6fobs3f9XHo4RSgEas0yLq9/xGZMuwxFs+rI/rnpYPX+1LLSmreHqeZM77a7r+UF12WjwI1odVUA=="], + + "@oxc-transform/binding-linux-arm-gnueabihf": ["@oxc-transform/binding-linux-arm-gnueabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-cNkTaw77UaNiGOCIv2R1kHZ3OkTVlr/059agLCUaeQmZGl76Ad7DrDcDyhC0Iugw0jEdWZ9zeUS5VLmzblnTXQ=="], + + "@oxc-transform/binding-linux-arm-musleabihf": ["@oxc-transform/binding-linux-arm-musleabihf@0.121.0", "", { "os": "linux", "cpu": "arm" }, "sha512-eDwTIN0UUCQePgFR41doxorzsxoMoUTbXo6bEbvdFH7P4ZoaUXgHYN10Qjd9K6k0x/bBnU6oC4YPSWYKvQDr9Q=="], + + "@oxc-transform/binding-linux-arm64-gnu": ["@oxc-transform/binding-linux-arm64-gnu@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UthSp+L23xeV0lIVloiRDU1d3aOvq0KRif3s6vszeSGnWf69+EVcZcondqLuX9optUhKV0/L8xwe2wLr9WkaDA=="], + + "@oxc-transform/binding-linux-arm64-musl": ["@oxc-transform/binding-linux-arm64-musl@0.121.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-J5vKUF8Jml1m9Fl48fKp2/wPl8LhGdjJWZ3PrrT+S16SbW7yEKixq5upzO2arhrky5elRYMXWwfi60ex1tBi6g=="], + + "@oxc-transform/binding-linux-ppc64-gnu": ["@oxc-transform/binding-linux-ppc64-gnu@0.121.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ya+/TL/YH/VcfWeRs95pMIgEj1eQgKg3kR/9AkQgSi8i9jIDEXrgrcQ8cwRYSZ3THlT6cxe3KGJa6vwcHG6JEg=="], + + "@oxc-transform/binding-linux-riscv64-gnu": ["@oxc-transform/binding-linux-riscv64-gnu@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-XhUBS/6bxL3maLMvkyY5jM23jFCORl+noYc7KkMydpb0Ot08XSu+8c2o7QpGVHWf85eTH/1Tx0aOTrcWek7EAw=="], + + "@oxc-transform/binding-linux-riscv64-musl": ["@oxc-transform/binding-linux-riscv64-musl@0.121.0", "", { "os": "linux", "cpu": "none" }, "sha512-kAcZZrU2Wxopcpt38D1u5OeLUwV78EXyOu3VfFNkP/vrMiKB4Tbca8ZxBq+XTkpijuKE4DdCQaLZylsFj7L00w=="], + + "@oxc-transform/binding-linux-s390x-gnu": ["@oxc-transform/binding-linux-s390x-gnu@0.121.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-jHyHS+NwPAlUEuY6BzFBDoT4LfSBEW/Ne2FeMzdK8LXOvgHFrJiBf6x8FgekatrTGrDpy1hLiACNnPA81Hs2pQ=="], + + "@oxc-transform/binding-linux-x64-gnu": ["@oxc-transform/binding-linux-x64-gnu@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-KedV2jkFxeMvUqfh6SgXjCnO5SBZ+SorTUxSBeql7zp59ONZgAcehWAqDX+YWsK8wEpt23Q8ydC/0d6ebJIAzQ=="], + + "@oxc-transform/binding-linux-x64-musl": ["@oxc-transform/binding-linux-x64-musl@0.121.0", "", { "os": "linux", "cpu": "x64" }, "sha512-jFAZwvgjsswiHET2xxxNvxhKCI74yVmewl0F00i3vzt9C088ZVaUvvWlqDS1GRvD4ORBmpJWOYkHdscpIJijEA=="], + + "@oxc-transform/binding-openharmony-arm64": ["@oxc-transform/binding-openharmony-arm64@0.121.0", "", { "os": "none", "cpu": "arm64" }, "sha512-xn9nxaq31f19PUyGh1xKMOSs8MVPImeaESWNOHtAIznckE+qa5/oHtYALzF3z8uvy1EC/eZODWcHrsYOVNaWug=="], + + "@oxc-transform/binding-wasm32-wasi": ["@oxc-transform/binding-wasm32-wasi@0.121.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-7lj6FBMX8zLfTqIY4YHHTE/b6oyCzZaUwqi2n9KX4FkgjtBpfmq5KSUgi/I+YiE7JJHu1g8Bd3uWJq1lbehL8Q=="], + + "@oxc-transform/binding-win32-arm64-msvc": ["@oxc-transform/binding-win32-arm64-msvc@0.121.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-+ve3UajNq2ldcCEEmpMVn7Ic3v/qCykPTSx3lZfe0iCW6tisIWvkYiXpf6B5dvwSY7SDyrdt9EyPMS75b41iPA=="], + + "@oxc-transform/binding-win32-ia32-msvc": ["@oxc-transform/binding-win32-ia32-msvc@0.121.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-9ZUHa4bXWlPRLzbjYsU3VBSvqwSVHAknQlN+nUO1DVu6j958Ui9ux0I9pZHwxb07I26VMdDhd7AjJyz1ZtZlkg=="], + + "@oxc-transform/binding-win32-x64-msvc": ["@oxc-transform/binding-win32-x64-msvc@0.121.0", "", { "os": "win32", "cpu": "x64" }, "sha512-vV/rzJsmJeeXI1q/xuy93PnoL/IYMwCCyYMX9MmIgMx2a4Lu3vIjUNBLJx1R5CqP/NnvAelsuz05sKlO017FmQ=="], + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.55.0", "", { "os": "android", "cpu": "arm" }, "sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ=="], "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.55.0", "", { "os": "android", "cpu": "arm64" }, "sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA=="], @@ -308,71 +470,93 @@ "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], - "@remix-run/async-context-middleware": ["@remix-run/async-context-middleware@0.1.3", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0" } }, "sha512-z2hTnQspCWsKka1QxAu5qf+IRbMYwTBmwL28zCk8nIPcYxG19rDbBeRmfQZ9hxHes72XVDu3Fd3ArLTy8bivdw=="], + "@remix-run/assert": ["@remix-run/assert@0.3.0", "", {}, "sha512-GBA9klvJdG5YSTwRNur54LQcfqDOtir+x1TDbv3dzB9FS2Li9CEiRLp1EpBcaYrj4ByO03WJCWFBiY8bTMy4vQ=="], + + "@remix-run/assets": ["@remix-run/assets@0.4.4", "", { "dependencies": { "@oxc-project/runtime": "^0.121.0", "@remix-run/file-storage": "0.13.7", "@remix-run/headers": "0.21.1", "@remix-run/mime": "0.4.2", "@remix-run/route-pattern": "0.23.0", "chokidar": "^5.0.0", "es-module-lexer": "^2.0.0", "get-tsconfig": "^4.13.6", "lightningcss": "^1.32.0", "magic-string": "^0.30.21", "oxc-minify": "^0.121.0", "oxc-parser": "^0.121.0", "oxc-resolver": "^11.19.1", "oxc-transform": "^0.121.0", "picomatch": "^4.0.4", "source-map-js": "^1.2.1" } }, "sha512-RvENzqsz4avj+PuBRy4AarY0JVGzacy7v9VH/LQuP14xpLPjC134hvKcQJNPkc8vV83d7r8WA/5JXcEESqyiUQ=="], + + "@remix-run/async-context-middleware": ["@remix-run/async-context-middleware@0.3.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1" } }, "sha512-AxFFj2z4z7xdSedRIbtD9WUXLlWDeUox1v6d4x/SInbkiUF+C9LoTZyqh4QSI15bOUrpK1NNVCUCTCgfw4LR0A=="], + + "@remix-run/auth": ["@remix-run/auth@0.2.6", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/session": "^0.4.2" } }, "sha512-7oRSZftQPvYN5vSk89vSZlJHR8iWyLLYTO1Hh6DZ4PI7nCO4V3i4WuHBzog3QajLJCCVhQnEt/o2SuPTBOTXGQ=="], + + "@remix-run/auth-middleware": ["@remix-run/auth-middleware@0.2.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/session": "^0.4.2" } }, "sha512-REesK8+OiX+kVwSvwSnpEzLWxQnekTGASNU049ygfGxDh9ow/2jC5BZ445muHenkV0qcCIsSlQYiUj5dDXIAYw=="], - "@remix-run/component": ["@remix-run/component@0.5.0", "", { "dependencies": { "@remix-run/interaction": "^0.5.0" } }, "sha512-xRLOcgwWKZxFdj63bWi3/snC2uxkm978B49EGEv1/G43iBFksYjS4ADanfYxREvQjMlaCqSUH0ZTZsJbGsz3PQ=="], + "@remix-run/cli": ["@remix-run/cli@0.3.4", "", { "dependencies": { "@remix-run/terminal": "^0.1.1", "@remix-run/test": "^0.5.0", "semver": "^7.7.4" } }, "sha512-1yzvqQyuBLAK+I8oNiY5Vxz5M2+oqUrkFtR2F6aEu45lVI5iSsvSw/XQicuvAHJg970aIpu2FlYUc7ZhZOKylw=="], - "@remix-run/compression-middleware": ["@remix-run/compression-middleware@0.1.3", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0", "@remix-run/mime": "^0.4.0", "@remix-run/response": "^0.3.2" } }, "sha512-pKsKtIzW/yjCbftSQRYfvnKKdq65Nu+YEhbQooiXtmd1Ub4inHSrzeA/vca3sQkBnBr/eRA9uujxIszRe+6LAg=="], + "@remix-run/compression-middleware": ["@remix-run/compression-middleware@0.1.12", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/mime": "^0.4.2", "@remix-run/response": "^0.3.7" } }, "sha512-jThJMui3ca0vvXNTOIiozpyeFVTrabU5bhCjIjQuFKevCtMf9BJi3u+MDABzwxxyH+ztW59rv8R+IJ5O4/nMFA=="], - "@remix-run/cookie": ["@remix-run/cookie@0.5.1", "", { "dependencies": { "@remix-run/headers": "^0.19.0" } }, "sha512-gbeZfVd1AKRlFj3IJWcIcR6zqVGz2XGJhR+mcqYiWnYt6KM8oUGtc82dsc4qZnWWA1f0nM4/He9wrU4GjB0pag=="], + "@remix-run/cookie": ["@remix-run/cookie@0.5.4", "", { "dependencies": { "@remix-run/headers": "^0.21.1" } }, "sha512-QxV2yo0umBXxwMub8kZFC+nOFnGMVpGo3jQ1Gvs4p1n2N7/0LAKhPgKsWbsk5ab6EqVhpr0S+v9gSQON1nuyoA=="], - "@remix-run/data-schema": ["@remix-run/data-schema@0.1.0", "", { "dependencies": { "@standard-schema/spec": "^1.1.0" } }, "sha512-PzpYP9P19cb8bS7Y9+MSxyAWGy0n13sx1lYOMoKI+iEx7pdB2ZLaiidwcn1l6AeR6gjVIpuzyM6/UONG3bzboA=="], + "@remix-run/cop-middleware": ["@remix-run/cop-middleware@0.1.7", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1" } }, "sha512-B3UEE2ob4GNG6eQilEhqUygCK7t7oPqpNfAtCqhoN+R+LBsdi+9+re5wHaT3xNTa4eeT6YqyXnQsQX6A4otzyg=="], - "@remix-run/data-table": ["@remix-run/data-table@0.1.0", "", { "dependencies": { "@remix-run/data-schema": "^0.1.0" } }, "sha512-u70INxiF9pThV2LcP7y37G7eq16OXWrA+HXS8qNplQgJJd1zhwZrODOtfF9U+PKLiWQkBj+bEeh7QhOlvGsVDg=="], + "@remix-run/cors-middleware": ["@remix-run/cors-middleware@0.1.7", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/headers": "^0.21.1" } }, "sha512-zbjwCFDwtHDSjyt6sgVVPkFiFfSkmkYPT74nrHClbF+pZx1ra+q93Rpcthbok0cv4IH1f0cagLbf8Jh+IEWNwA=="], - "@remix-run/data-table-mysql": ["@remix-run/data-table-mysql@0.1.0", "", { "dependencies": { "@remix-run/data-table": "^0.1.0" }, "peerDependencies": { "mysql2": "^3.15.3" }, "optionalPeers": ["mysql2"] }, "sha512-lzghxTYZDHODNisIJWkq4IkcGsb1pUrp9WGtlNEVWrXWC6aArOiojR3PW4arFwNG5ddKJPRfwot+ySc2YZy5RQ=="], + "@remix-run/csrf-middleware": ["@remix-run/csrf-middleware@0.1.7", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/session": "^0.4.2" } }, "sha512-+AUUVIlDEEp62JCyLWC6+pQ7BqaZ2lSkxrBFK/l3t3YYsuA30yk6aPpbQXBXLBtHI12eWA2PHAFZxeRrCPHphQ=="], - "@remix-run/data-table-postgres": ["@remix-run/data-table-postgres@0.1.0", "", { "dependencies": { "@remix-run/data-table": "^0.1.0" }, "peerDependencies": { "pg": "^8.16.3" }, "optionalPeers": ["pg"] }, "sha512-mqzARY5tOFVLjFAArryuLQ93M8IdjVnLKnD1VQyJHFbHQF7Zbr8+exv7Hp2hZ1TIGAhZiepGjjC8Re631yJ1Jw=="], + "@remix-run/data-schema": ["@remix-run/data-schema@0.3.0", "", { "dependencies": { "@standard-schema/spec": "^1.1.0" } }, "sha512-rjGaFJduzO3iMFOKwA5URpZDuGbUxgBwcX9myBglfqbax8dBlhRcxurydepq+xi+XBE+bPrT9V57Jur6p1igow=="], - "@remix-run/data-table-sqlite": ["@remix-run/data-table-sqlite@0.1.0", "", { "dependencies": { "@remix-run/data-table": "^0.1.0" }, "peerDependencies": { "better-sqlite3": "^12.4.1" }, "optionalPeers": ["better-sqlite3"] }, "sha512-hFtmz9haMr3p/aFWL5D1zpJsgAnNdLVCF6HvXBmtK4m3NdLmM1eNhblpB/SfPGNEODsmx4Jvcaof57dfaLuKgA=="], + "@remix-run/data-table": ["@remix-run/data-table@0.3.0", "", {}, "sha512-2Ikjlm3T2qtMTeWm5v/76iXEP2fqqdJGxjTZ6OFre5b5BFoRyaq/iBmDc0lkXPoOGvkeOxNuRo7L0dRkMTXwJQ=="], - "@remix-run/fetch-proxy": ["@remix-run/fetch-proxy@0.7.1", "", { "dependencies": { "@remix-run/headers": "^0.19.0" } }, "sha512-rPLfOpAaCXtm1dLI45uIPKERNbXbrh0P9AJc1sliz8pWd/McaFYjdr5KzB4QrFSfPvEt/Wmy6F2521qB1kK0ug=="], + "@remix-run/data-table-mysql": ["@remix-run/data-table-mysql@0.4.0", "", { "dependencies": { "@remix-run/data-table": "^0.3.0" }, "peerDependencies": { "mysql2": "^3.15.3" }, "optionalPeers": ["mysql2"] }, "sha512-1HUCmQ7mj0tbkzku8X4z7Y7TaaYMf45Eyh5iqnKB4qT9Jb44XEOjAVveALZ1QchIb0T/72cZ2Gx9YXY7okad+A=="], - "@remix-run/fetch-router": ["@remix-run/fetch-router@0.17.0", "", { "dependencies": { "@remix-run/route-pattern": "^0.19.0", "@remix-run/session": "^0.4.1" } }, "sha512-3FeJGrTqrKKCvZdQWijbCXTEHKcdttkLFbI2ogfpZ+iDYSNZ9036wgDXuuoZqg6d+D0E8Unhk5ZwrLKDCd/hOw=="], + "@remix-run/data-table-postgres": ["@remix-run/data-table-postgres@0.4.0", "", { "dependencies": { "@remix-run/data-table": "^0.3.0" }, "peerDependencies": { "pg": "^8.16.3" }, "optionalPeers": ["pg"] }, "sha512-aOcAYhdgJ99J+BUNrgBrD/RapQt43UbzkGUihm5zhK8S0G5I/gd+TBAw1t8vuutvSw0Zjg1cfDCBihkjMJ4uGQ=="], - "@remix-run/file-storage": ["@remix-run/file-storage@0.13.3", "", { "dependencies": { "@remix-run/fs": "^0.4.2", "@remix-run/lazy-file": "^5.0.2" } }, "sha512-HBDz9RRsFRvI6EoeasklxH/NleGy0QZBXBcA4gQBW8ueucop21TQI4wvGlhZmXcnJ3nP4RkhdF2Gff2/HD5eiA=="], + "@remix-run/data-table-sqlite": ["@remix-run/data-table-sqlite@0.5.1", "", { "dependencies": { "@remix-run/data-table": "^0.3.0" } }, "sha512-YgpUz49eeddYHOY3ebWi4Xeu94KWICRPrmsotkWpTIQdnf/sV+Ddx8BS4kUs+y9JJ/efrjAeHl/LNH6swpvM8g=="], - "@remix-run/file-storage-s3": ["@remix-run/file-storage-s3@0.1.0", "", { "dependencies": { "@remix-run/file-storage": "^0.13.3", "aws4fetch": "^1.0.20" } }, "sha512-r80An7nSFidK/0xn9O9/HxfUcgxVpM4kprnTGr6pGhKdgbaTCEtA+U5ETYGfeedFxhDcT+7ue+4Fv/VxeIvFwQ=="], + "@remix-run/fetch-proxy": ["@remix-run/fetch-proxy@0.8.4", "", { "dependencies": { "@remix-run/headers": "^0.21.1" } }, "sha512-5Vy8EnRgkboQFpGpVL9TNUEFauh94Cq8Vh9pI1g5jQ3C5OnnMuDKtZV0xR0B7plrI3537ZDFbMRaTG8crKAenA=="], - "@remix-run/form-data-middleware": ["@remix-run/form-data-middleware@0.1.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0", "@remix-run/form-data-parser": "^0.15.0" } }, "sha512-WZfP1U6lDoipkfjcd0V39HJeTPMTX2WyaPcOBTbBHS0kapIZiHYm6RpGLhE8U58652i3TBh/zzvAczJIbFV2AA=="], + "@remix-run/fetch-router": ["@remix-run/fetch-router@0.20.1", "", { "dependencies": { "@remix-run/route-pattern": "^0.23.0" } }, "sha512-vxlIu4LHY5KyqOdlXFjJeUefUJxgc7499/cSsBl2bzhQnU5DayPHN/dklBOiG+U7GIYQMmObAinmubkwzaXyuw=="], - "@remix-run/form-data-parser": ["@remix-run/form-data-parser@0.15.0", "", { "dependencies": { "@remix-run/multipart-parser": "^0.14.2" } }, "sha512-sQP4r9218TWmow6Nt252VjKE674dRi4Z8WTnWUxJJG8I/qNfnGZubZ8LgyE0dR9z1gfaEpkd19MfYMLiOTOkJQ=="], + "@remix-run/file-storage": ["@remix-run/file-storage@0.13.7", "", { "dependencies": { "@remix-run/fs": "^0.4.6", "@remix-run/lazy-file": "^5.0.6" } }, "sha512-7tDgyzs1v0dQgfMt+lpbIzEVkrgrcKJLGbBeXrpJITuCeWoc0XgFfDTp6gghS3s8aWQTm5XHbgnldLoQCEU9Mw=="], - "@remix-run/fs": ["@remix-run/fs@0.4.2", "", { "dependencies": { "@remix-run/lazy-file": "^5.0.2", "@remix-run/mime": "^0.4.0" } }, "sha512-z3W2L+iUwgZ7i0S379SYQ8veOe2Weqs+JajmyTCqSVzbmMUniH3qQ6SAYr3FjbrKtLLWHN3SpK4XtFv57VzbLA=="], + "@remix-run/file-storage-s3": ["@remix-run/file-storage-s3@0.1.4", "", { "dependencies": { "@remix-run/file-storage": "^0.13.7", "aws4fetch": "^1.0.20" } }, "sha512-n1Z97PpaDIE5tOiRBJTy864ieZtWO1laqdz4pvKbr9KdfUxLRaWmk5gj+UaH7nC+e0sB3wBK9QhjfyoFuGOY6A=="], - "@remix-run/headers": ["@remix-run/headers@0.19.0", "", {}, "sha512-+62NbkXuXm9r/NdG6KfH9OCKofCWm8VjkrVPICiHKtRl8Gf2Vi6eFTN4mGgBlZRhd5mmEVRV4hTIn/JUSHDAOw=="], + "@remix-run/form-data-middleware": ["@remix-run/form-data-middleware@0.3.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/form-data-parser": "^0.17.4" } }, "sha512-i/bnBzvXl4qkslVjy/h7r7ODuYiGJ548wDqql757p2eaZCW8h+y8T0/NXh+GcRfleBPYBxst0is6XDEHzt+I6w=="], - "@remix-run/html-template": ["@remix-run/html-template@0.3.0", "", {}, "sha512-aAMx68udtIk0fmCpCXHYscVeCDsRVEmEgh4XvtusPr3vkHu3jn4gx5oAxgsPXPdDmmD/d75SYyI0m/F+aLz5iQ=="], + "@remix-run/form-data-parser": ["@remix-run/form-data-parser@0.17.4", "", { "dependencies": { "@remix-run/multipart-parser": "^0.16.3" } }, "sha512-mqWVpD2OaJTFEW2i+M49/iWoUp2Cai6WD606/iynZ+NIlzVdkty3bbGb8g7vTjXeV/sQRmPbg3SJypgvQitvJg=="], - "@remix-run/interaction": ["@remix-run/interaction@0.5.0", "", {}, "sha512-Z2ja9/7TfMHt/wzWq425GI2xj6QxW4E3OHZ8In81uytZKIuWaI6Pn3v8qyMrInwnBEaLcfcbeQVCiExgHU8D4A=="], + "@remix-run/fs": ["@remix-run/fs@0.4.6", "", { "dependencies": { "@remix-run/lazy-file": "^5.0.6", "@remix-run/mime": "^0.4.2" } }, "sha512-xxvixX/WyufRr6YrjPLGXvyE5Lzb5G/Y4tygk6McJ6nr59f3hO9w3aVc/lvsVPD7liYfM1EyMnmd4qIByJq9bg=="], - "@remix-run/lazy-file": ["@remix-run/lazy-file@5.0.2", "", { "dependencies": { "@remix-run/mime": "^0.4.0" } }, "sha512-52Bo5dTV+EDwrUMS3mjeR+Sly85aHeN3fnNTeaflqzlCMWJwr2pX+y6/3mTDtRdxmTWF1MGQAoeayzfPb4zZJg=="], + "@remix-run/headers": ["@remix-run/headers@0.21.1", "", {}, "sha512-DRhRveigepAQDUIi0MrOFhpcl3/KTv/fkpIhulv7Asv1pUwM8RpY2ENjdI8lfii6Z3MEsWtYhGt6If8bi6bYpQ=="], - "@remix-run/logger-middleware": ["@remix-run/logger-middleware@0.1.3", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0" } }, "sha512-6gxz1XC2lJYQS3Oz1pZzxpuoLowwd2PSpimMaQnkk0fZ7hHYxx7uV+FSs2Z3fue6kYvZ+IxSUe8Wy52V2r4LxA=="], + "@remix-run/html-template": ["@remix-run/html-template@0.3.1", "", {}, "sha512-4yhaBtfh1iVC1razTr+ehu1xmKia0zvE4GWQ6JF2IRiA3kmw+DlrdNFEFqx5Wn1eXAM0vxxcJLdLD7e0XMzH5A=="], - "@remix-run/method-override-middleware": ["@remix-run/method-override-middleware@0.1.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0" } }, "sha512-gYFsdY0eIStTpsqGnF/22YracUmS8cZlef6KsBKOVf1nOI9wwwbRrj/DWLMQsWt22YSBMuPYZW5NLKEmXvJRZw=="], + "@remix-run/lazy-file": ["@remix-run/lazy-file@5.0.6", "", { "dependencies": { "@remix-run/mime": "^0.4.2" } }, "sha512-jIeeqkqR+AgTEKls5WMPbiGyXhrkAJugN4ot/K9X74CLzO9uMbcFDKef7CWCfjN1s+551u+5LxNWLJx1nztuVg=="], - "@remix-run/mime": ["@remix-run/mime@0.4.0", "", {}, "sha512-O6TcTL6CtuX82Q8BHqAere5O+0hYcrzSgY9whsDOBuqbW753Rczprs2jYw3qCDSo0kLxykW4ys3qgZcdgZ+chw=="], + "@remix-run/logger-middleware": ["@remix-run/logger-middleware@0.3.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/terminal": "^0.1.1" } }, "sha512-hHCZKt1mzqm+pxl/TlkFnaMCSbnLRdad6G9ZWsM0V/hpNPvCYuPjL5eEHiHl8QQeio9xXVOpdefL0X6vDpwRAg=="], - "@remix-run/multipart-parser": ["@remix-run/multipart-parser@0.14.2", "", { "dependencies": { "@remix-run/headers": "^0.19.0" } }, "sha512-yDq9ql4Xz92bRG/Sgl4cg2dRlxxC6A40XBy/oyDhy76hJtTQvgyzx9sfPXYPxcfL1BtqljC+sYHE0PvjmQhSfw=="], + "@remix-run/method-override-middleware": ["@remix-run/method-override-middleware@0.1.12", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1" } }, "sha512-B4bzxpbvNKcr0cAQCWYTqYq1YFujkGP233vousmj9LjKOuz03Svn9pt9kA03Ps8ZFSoW/usTfOPJ3MckAB9BJw=="], - "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.13.0", "", {}, "sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA=="], + "@remix-run/mime": ["@remix-run/mime@0.4.2", "", {}, "sha512-KpZZxBYIrLsvUtt2ZdwK+E2ClVmyvW11Nej6fPgwJpohBMpbCHtR78wtCTv0vqvK5ckLZ7ks2q4pV5dMYFypiA=="], - "@remix-run/response": ["@remix-run/response@0.3.2", "", { "dependencies": { "@remix-run/headers": "^0.19.0", "@remix-run/html-template": "^0.3.0", "@remix-run/mime": "^0.4.0" } }, "sha512-GkFqVq5E7Do6rMKTBjgoNyJlrsLrqYg+TDlCDrXoZ3v8O2RlSI14+bCF8lGQHy15DWX2pizVj6R0e6NmjcuLuA=="], + "@remix-run/multipart-parser": ["@remix-run/multipart-parser@0.16.3", "", { "dependencies": { "@remix-run/headers": "^0.21.1" } }, "sha512-XvMYPIyDTuquR7s1YF4wo4CqMPDrBkpWY0zHSa7SpX0F+t9awg7FWd5mJywc6vTn4oWeS7nQYQQarZ9CuoC/RQ=="], - "@remix-run/route-pattern": ["@remix-run/route-pattern@0.19.0", "", {}, "sha512-RXKaIJ2Lx01uyZc0iw+yLzowFCa1/NuB8jN7QTo4QUe2CaUGtvPGdhgrTUp75lyNNCSJIrM9SaAJ6c1pjZdmoA=="], + "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.14.0", "", {}, "sha512-s46HS2YuZwCJxwXIrcWdKTfIXWf2G2S20bXeYR2BqBoUkmc4RSiC+VRely6pqNvSUIio8piaI+uLN40IvoFN/A=="], - "@remix-run/session": ["@remix-run/session@0.4.1", "", {}, "sha512-Bm6aKYgutb/raHZ3laloz8g/Qu7f3CeK3o4gUVDMxtEiAdWCzJamwHoTpGOc5+g1Kuy7z85v4M6nGrF06MFDSg=="], + "@remix-run/node-tsx": ["@remix-run/node-tsx@0.1.1", "", { "dependencies": { "get-tsconfig": "^4.13.6", "oxc-transform": "^0.121.0" } }, "sha512-k9Oi2gML1E7c1PLj+kX+Hsumkjg9tpps7+ufpy7ugsiRTe6fDfZOyEmlYOIkfR2K2Nf8D33+967EMlInm9Nvvg=="], - "@remix-run/session-middleware": ["@remix-run/session-middleware@0.1.4", "", { "dependencies": { "@remix-run/cookie": "^0.5.1", "@remix-run/fetch-router": "^0.17.0", "@remix-run/session": "^0.4.1" } }, "sha512-qqLmf7mG88h+Ge8pWiJMO8+t9nfQMuO/Zx2W68IwB7Cpt+b6PDpB++i3dd/KLlsjJ43XPMoT2ydmo+eQMgBX3g=="], + "@remix-run/render-middleware": ["@remix-run/render-middleware@0.1.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1" } }, "sha512-v+RL5T5hDEMNjQyrV/UwODu/x6BUUkpt5EHGixXc00j74KP1g07rtPJvFeeZM6/Yq42I0Ej/4OqsMBiLDjt3dA=="], - "@remix-run/session-storage-memcache": ["@remix-run/session-storage-memcache@0.1.0", "", { "dependencies": { "@remix-run/session": "^0.4.1" } }, "sha512-k853rpHncdTJUwdk0hqd+gZ2OONZLNdOUJBKdJB+MehxrVv1TtacDnA+Xs3kh+IVwUrsTmBhED+GHSUocMATUg=="], + "@remix-run/response": ["@remix-run/response@0.3.7", "", { "dependencies": { "@remix-run/headers": "^0.21.1", "@remix-run/html-template": "^0.3.1", "@remix-run/mime": "^0.4.2" } }, "sha512-f3VWP4NNxgBt+oJfRbgqLYaMXonMdeHhbzAyLfqMzZAwe/ukUwwGoTtER2xlRPDxFlr9Tqa3NFC8PrSmp+rfmA=="], - "@remix-run/session-storage-redis": ["@remix-run/session-storage-redis@0.1.0", "", { "dependencies": { "@remix-run/session": "^0.4.1" }, "peerDependencies": { "redis": "^5.10.0" }, "optionalPeers": ["redis"] }, "sha512-MovUS1E98wDHP8zsESJGm3ySB7iiOhd+3usxyXXM2sbF9gIe6r1bdAXXirGIoC8AEq1v8IiFE5u5ipo7PX0UHQ=="], + "@remix-run/route-pattern": ["@remix-run/route-pattern@0.23.0", "", {}, "sha512-8eZfG9owfdvC1OqWemjyIqbFTjWbKTW8RrcbppXrnv1GHMIpFOQx9Ly6F1OXNM03aK1c923JypacoRjamyfVEw=="], - "@remix-run/static-middleware": ["@remix-run/static-middleware@0.4.4", "", { "dependencies": { "@remix-run/fetch-router": "^0.17.0", "@remix-run/fs": "^0.4.2", "@remix-run/html-template": "^0.3.0", "@remix-run/mime": "^0.4.0", "@remix-run/response": "^0.3.2" } }, "sha512-aL5ngFG57uPXTEDaH0uP/cKDpYkLMTtmPjK+SR1ugS654ORk8WTD4Ajf56QekMykCvCnO6PkgFAruUyKkwDNMg=="], + "@remix-run/session": ["@remix-run/session@0.4.2", "", {}, "sha512-NGzu6/gC5xD/tq40W0WqzTt4JhCdSCIwDHM1aa13JBqb4Ml/Mb0kmXqjfOe/gBYfu6AA11nRQ/BJyr+VduTodA=="], - "@remix-run/tar-parser": ["@remix-run/tar-parser@0.7.0", "", {}, "sha512-PW8JxEUzaGcnqxC5hBI8L9lK/Qz3oad6IGKZ+NExI3L7urVJUux+yCBrsme79DMBgS6hL+lgd/5LPFA5fSwF9A=="], + "@remix-run/session-middleware": ["@remix-run/session-middleware@0.3.4", "", { "dependencies": { "@remix-run/cookie": "^0.5.4", "@remix-run/fetch-router": "^0.20.1", "@remix-run/session": "^0.4.2" } }, "sha512-vFZ70F75Zj1o+UhJ9IJrPlaiFoItwGPrNTY4k5bVKpe4KdwNEat/z3HtfNG2NuBeUys8XhCE3yCT13SM50NkiQ=="], + + "@remix-run/session-storage-memcache": ["@remix-run/session-storage-memcache@0.1.2", "", { "dependencies": { "@remix-run/session": "^0.4.2" } }, "sha512-VIJnz+DcJFo+vM1SRKy/8kbJHefVQtGyKS+V1AOMCk8OAMGCCyS+f4ERxmu3as48T/L55oBPsTxQX+rcPchDtQ=="], + + "@remix-run/session-storage-redis": ["@remix-run/session-storage-redis@0.1.1", "", { "dependencies": { "@remix-run/session": "^0.4.2" }, "peerDependencies": { "redis": "^5.10.0" }, "optionalPeers": ["redis"] }, "sha512-y/dhJq5hs4rs1zCCPbPJp+i0/EBcYkwQLnwQ4mYtJbSjYIUklSqD3Z7+K8V/MJtl7B4fq8RD1m20lLjLSESMLw=="], + + "@remix-run/static-middleware": ["@remix-run/static-middleware@0.4.13", "", { "dependencies": { "@remix-run/fetch-router": "^0.20.1", "@remix-run/fs": "^0.4.6", "@remix-run/html-template": "^0.3.1", "@remix-run/mime": "^0.4.2", "@remix-run/response": "^0.3.7" } }, "sha512-32oI2hbVR+GN/sduxOZSY1WNaEasKDm7X7o79eBGG5E78dV5mi0ijGLldHfAEazyRQyqeYzvG292RWUfkFJetA=="], + + "@remix-run/tar-parser": ["@remix-run/tar-parser@0.7.1", "", {}, "sha512-NZKTuA66rj0zqpljWAb6v147cNu5BtRCiv8FY5kn64ZPvLmoI62Ehm2hoUh0g0wJHeCNmgS5QZg1xhw6FX67SA=="], + + "@remix-run/terminal": ["@remix-run/terminal@0.1.1", "", {}, "sha512-M8JNcsYp/mWZ0yOB12Ir+Ud1eLxodPr8YSKQcG2PTPeiq9p9c59D9gvF9m6EU2Hmd4esJMiTyy6lJHc/VKKvcw=="], + + "@remix-run/test": ["@remix-run/test@0.5.0", "", { "dependencies": { "@remix-run/node-tsx": "^0.1.1", "@remix-run/terminal": "^0.1.1", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.1", "get-tsconfig": "^4.13.6", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magic-string": "^0.30.21", "oxc-resolver": "^11.19.1", "source-map-js": "^1.2.1", "v8-to-istanbul": "^9.3.0" }, "peerDependencies": { "playwright": "^1.60.0" }, "optionalPeers": ["playwright"], "bin": { "remix-test": "dist/cli-entry.js" } }, "sha512-jaJLJi7+YXFh4JblWe3hjqve8tkiZ1Nzsog1j6EwCEv814bHldCqBbFrajI69DUULd3nNCs3Mk3rz96lt83xYA=="], + + "@remix-run/ui": ["@remix-run/ui@0.4.0", "", { "dependencies": { "@types/dom-navigation": "^1.0.7" } }, "sha512-0whpy2s0V5ZHsErcEPESUZ7McmKQ3Nn1Ut5j4CkQVeos5VT3e1z/+osERMywUNTo2nyeUMpEMte5bFmaoleI3g=="], "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg=="], @@ -398,8 +582,12 @@ "@types/bun": ["@types/bun@1.3.10", "", { "dependencies": { "bun-types": "1.3.10" } }, "sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ=="], + "@types/dom-navigation": ["@types/dom-navigation@1.0.7", "", {}, "sha512-Di4W+i2faYquHUnyWUg3bBQp5pTNvjDDA7mIYfD/1WlLgan6sKkeVjGbdL78K0CuNEk5Pfc/c0rfelwkz10mnQ=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/lodash": ["@types/lodash@4.17.23", "", {}, "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="], @@ -534,6 +722,8 @@ "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], @@ -558,6 +748,8 @@ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], @@ -612,6 +804,8 @@ "es-iterator-helpers": ["es-iterator-helpers@1.2.2", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" } }, "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w=="], + "es-module-lexer": ["es-module-lexer@2.2.0", "", {}, "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ=="], + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], @@ -746,6 +940,8 @@ "hono": ["hono@4.11.8", "", {}, "sha512-eVkB/CYCCei7K2WElZW9yYQFWssG0DhaDhVvr7wy5jJ22K+ck8fWW0EsLpB0sITUTvPnc97+rrbQqIr5iqiy9Q=="], + "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], @@ -822,6 +1018,12 @@ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + + "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], + + "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], + "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], "jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], @@ -852,6 +1054,30 @@ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], @@ -866,6 +1092,10 @@ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], @@ -920,6 +1150,14 @@ "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + "oxc-minify": ["oxc-minify@0.121.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm-eabi": "0.121.0", "@oxc-minify/binding-android-arm64": "0.121.0", "@oxc-minify/binding-darwin-arm64": "0.121.0", "@oxc-minify/binding-darwin-x64": "0.121.0", "@oxc-minify/binding-freebsd-x64": "0.121.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.121.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.121.0", "@oxc-minify/binding-linux-arm64-gnu": "0.121.0", "@oxc-minify/binding-linux-arm64-musl": "0.121.0", "@oxc-minify/binding-linux-ppc64-gnu": "0.121.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.121.0", "@oxc-minify/binding-linux-riscv64-musl": "0.121.0", "@oxc-minify/binding-linux-s390x-gnu": "0.121.0", "@oxc-minify/binding-linux-x64-gnu": "0.121.0", "@oxc-minify/binding-linux-x64-musl": "0.121.0", "@oxc-minify/binding-openharmony-arm64": "0.121.0", "@oxc-minify/binding-wasm32-wasi": "0.121.0", "@oxc-minify/binding-win32-arm64-msvc": "0.121.0", "@oxc-minify/binding-win32-ia32-msvc": "0.121.0", "@oxc-minify/binding-win32-x64-msvc": "0.121.0" } }, "sha512-XziD0au8etayM2zJnqcSiW+Pn3hEpqHsbwfL7G4Ej0SwqfvbIjiEF1/uNqONuHl0n9LkLI1ez378vSWZRJZWAQ=="], + + "oxc-parser": ["oxc-parser@0.121.0", "", { "dependencies": { "@oxc-project/types": "^0.121.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm-eabi": "0.121.0", "@oxc-parser/binding-android-arm64": "0.121.0", "@oxc-parser/binding-darwin-arm64": "0.121.0", "@oxc-parser/binding-darwin-x64": "0.121.0", "@oxc-parser/binding-freebsd-x64": "0.121.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.121.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.121.0", "@oxc-parser/binding-linux-arm64-gnu": "0.121.0", "@oxc-parser/binding-linux-arm64-musl": "0.121.0", "@oxc-parser/binding-linux-ppc64-gnu": "0.121.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.121.0", "@oxc-parser/binding-linux-riscv64-musl": "0.121.0", "@oxc-parser/binding-linux-s390x-gnu": "0.121.0", "@oxc-parser/binding-linux-x64-gnu": "0.121.0", "@oxc-parser/binding-linux-x64-musl": "0.121.0", "@oxc-parser/binding-openharmony-arm64": "0.121.0", "@oxc-parser/binding-wasm32-wasi": "0.121.0", "@oxc-parser/binding-win32-arm64-msvc": "0.121.0", "@oxc-parser/binding-win32-ia32-msvc": "0.121.0", "@oxc-parser/binding-win32-x64-msvc": "0.121.0" } }, "sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg=="], + + "oxc-resolver": ["oxc-resolver@11.22.0", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.22.0", "@oxc-resolver/binding-android-arm64": "11.22.0", "@oxc-resolver/binding-darwin-arm64": "11.22.0", "@oxc-resolver/binding-darwin-x64": "11.22.0", "@oxc-resolver/binding-freebsd-x64": "11.22.0", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.22.0", "@oxc-resolver/binding-linux-arm-musleabihf": "11.22.0", "@oxc-resolver/binding-linux-arm64-gnu": "11.22.0", "@oxc-resolver/binding-linux-arm64-musl": "11.22.0", "@oxc-resolver/binding-linux-ppc64-gnu": "11.22.0", "@oxc-resolver/binding-linux-riscv64-gnu": "11.22.0", "@oxc-resolver/binding-linux-riscv64-musl": "11.22.0", "@oxc-resolver/binding-linux-s390x-gnu": "11.22.0", "@oxc-resolver/binding-linux-x64-gnu": "11.22.0", "@oxc-resolver/binding-linux-x64-musl": "11.22.0", "@oxc-resolver/binding-openharmony-arm64": "11.22.0", "@oxc-resolver/binding-wasm32-wasi": "11.22.0", "@oxc-resolver/binding-win32-arm64-msvc": "11.22.0", "@oxc-resolver/binding-win32-x64-msvc": "11.22.0" } }, "sha512-F3VuQRlu5uaMN9ffo2ufEa8D/SKykx1a2KaLtBa2JEmbtulRaTZKwQrrLsNLGfvBeLW8M/J0CE47KN3s0VdcmQ=="], + + "oxc-transform": ["oxc-transform@0.121.0", "", { "optionalDependencies": { "@oxc-transform/binding-android-arm-eabi": "0.121.0", "@oxc-transform/binding-android-arm64": "0.121.0", "@oxc-transform/binding-darwin-arm64": "0.121.0", "@oxc-transform/binding-darwin-x64": "0.121.0", "@oxc-transform/binding-freebsd-x64": "0.121.0", "@oxc-transform/binding-linux-arm-gnueabihf": "0.121.0", "@oxc-transform/binding-linux-arm-musleabihf": "0.121.0", "@oxc-transform/binding-linux-arm64-gnu": "0.121.0", "@oxc-transform/binding-linux-arm64-musl": "0.121.0", "@oxc-transform/binding-linux-ppc64-gnu": "0.121.0", "@oxc-transform/binding-linux-riscv64-gnu": "0.121.0", "@oxc-transform/binding-linux-riscv64-musl": "0.121.0", "@oxc-transform/binding-linux-s390x-gnu": "0.121.0", "@oxc-transform/binding-linux-x64-gnu": "0.121.0", "@oxc-transform/binding-linux-x64-musl": "0.121.0", "@oxc-transform/binding-openharmony-arm64": "0.121.0", "@oxc-transform/binding-wasm32-wasi": "0.121.0", "@oxc-transform/binding-win32-arm64-msvc": "0.121.0", "@oxc-transform/binding-win32-ia32-msvc": "0.121.0", "@oxc-transform/binding-win32-x64-msvc": "0.121.0" } }, "sha512-Kf243wJU/vWF/ThV+ZyfLMQIrViVFRSyYO7UPKpZMMPGGMzxxcHgsNGWy0Uy+pcXD78+jdUnxVTR9rYT73Qw3A=="], + "oxlint": ["oxlint@1.55.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.55.0", "@oxlint/binding-android-arm64": "1.55.0", "@oxlint/binding-darwin-arm64": "1.55.0", "@oxlint/binding-darwin-x64": "1.55.0", "@oxlint/binding-freebsd-x64": "1.55.0", "@oxlint/binding-linux-arm-gnueabihf": "1.55.0", "@oxlint/binding-linux-arm-musleabihf": "1.55.0", "@oxlint/binding-linux-arm64-gnu": "1.55.0", "@oxlint/binding-linux-arm64-musl": "1.55.0", "@oxlint/binding-linux-ppc64-gnu": "1.55.0", "@oxlint/binding-linux-riscv64-gnu": "1.55.0", "@oxlint/binding-linux-riscv64-musl": "1.55.0", "@oxlint/binding-linux-s390x-gnu": "1.55.0", "@oxlint/binding-linux-x64-gnu": "1.55.0", "@oxlint/binding-linux-x64-musl": "1.55.0", "@oxlint/binding-openharmony-arm64": "1.55.0", "@oxlint/binding-win32-arm64-msvc": "1.55.0", "@oxlint/binding-win32-ia32-msvc": "1.55.0", "@oxlint/binding-win32-x64-msvc": "1.55.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.15.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], @@ -976,11 +1214,13 @@ "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "remix": ["remix@3.0.0-alpha.3", "", { "dependencies": { "@remix-run/async-context-middleware": "^0.1.3", "@remix-run/component": "^0.5.0", "@remix-run/compression-middleware": "^0.1.3", "@remix-run/cookie": "^0.5.1", "@remix-run/data-schema": "^0.1.0", "@remix-run/data-table": "^0.1.0", "@remix-run/data-table-mysql": "^0.1.0", "@remix-run/data-table-postgres": "^0.1.0", "@remix-run/data-table-sqlite": "^0.1.0", "@remix-run/fetch-proxy": "^0.7.1", "@remix-run/fetch-router": "^0.17.0", "@remix-run/file-storage": "^0.13.3", "@remix-run/file-storage-s3": "^0.1.0", "@remix-run/form-data-middleware": "^0.1.4", "@remix-run/form-data-parser": "^0.15.0", "@remix-run/fs": "^0.4.2", "@remix-run/headers": "^0.19.0", "@remix-run/html-template": "^0.3.0", "@remix-run/interaction": "^0.5.0", "@remix-run/lazy-file": "^5.0.2", "@remix-run/logger-middleware": "^0.1.3", "@remix-run/method-override-middleware": "^0.1.4", "@remix-run/mime": "^0.4.0", "@remix-run/multipart-parser": "^0.14.2", "@remix-run/node-fetch-server": "^0.13.0", "@remix-run/response": "^0.3.2", "@remix-run/route-pattern": "^0.19.0", "@remix-run/session": "^0.4.1", "@remix-run/session-middleware": "^0.1.4", "@remix-run/session-storage-memcache": "^0.1.0", "@remix-run/session-storage-redis": "^0.1.0", "@remix-run/static-middleware": "^0.4.4", "@remix-run/tar-parser": "^0.7.0" } }, "sha512-RIctAYR7OW3oYzAGclLhgltrRtKviIdnCVwoLcPDicOjV4I2mJ9AEi8YXl2+hGPupzNNEUcrDtoICd7xNuMptg=="], + "remix": ["remix@3.0.0-beta.5", "", { "dependencies": { "@remix-run/assert": "^0.3.0", "@remix-run/assets": "^0.4.4", "@remix-run/async-context-middleware": "^0.3.4", "@remix-run/auth": "^0.2.6", "@remix-run/auth-middleware": "^0.2.4", "@remix-run/cli": "^0.3.4", "@remix-run/compression-middleware": "^0.1.12", "@remix-run/cookie": "^0.5.4", "@remix-run/cop-middleware": "^0.1.7", "@remix-run/cors-middleware": "^0.1.7", "@remix-run/csrf-middleware": "^0.1.7", "@remix-run/data-schema": "^0.3.0", "@remix-run/data-table": "^0.3.0", "@remix-run/data-table-mysql": "^0.4.0", "@remix-run/data-table-postgres": "^0.4.0", "@remix-run/data-table-sqlite": "^0.5.1", "@remix-run/fetch-proxy": "^0.8.4", "@remix-run/fetch-router": "^0.20.1", "@remix-run/file-storage": "^0.13.7", "@remix-run/file-storage-s3": "^0.1.4", "@remix-run/form-data-middleware": "^0.3.4", "@remix-run/form-data-parser": "^0.17.4", "@remix-run/fs": "^0.4.6", "@remix-run/headers": "^0.21.1", "@remix-run/html-template": "^0.3.1", "@remix-run/lazy-file": "^5.0.6", "@remix-run/logger-middleware": "^0.3.4", "@remix-run/method-override-middleware": "^0.1.12", "@remix-run/mime": "^0.4.2", "@remix-run/multipart-parser": "^0.16.3", "@remix-run/node-fetch-server": "^0.14.0", "@remix-run/node-tsx": "^0.1.1", "@remix-run/render-middleware": "^0.1.4", "@remix-run/response": "^0.3.7", "@remix-run/route-pattern": "^0.23.0", "@remix-run/session": "^0.4.2", "@remix-run/session-middleware": "^0.3.4", "@remix-run/session-storage-memcache": "^0.1.2", "@remix-run/session-storage-redis": "^0.1.1", "@remix-run/static-middleware": "^0.4.13", "@remix-run/tar-parser": "^0.7.1", "@remix-run/terminal": "^0.1.1", "@remix-run/test": "^0.5.0", "@remix-run/ui": "^0.4.0" }, "peerDependencies": { "mysql2": "^3.15.3", "pg": "^8.16.3", "playwright": "^1.60.0", "redis": "^5.10.0" }, "optionalPeers": ["mysql2", "pg", "playwright", "redis"], "bin": { "remix": "dist/cli-entry.js" } }, "sha512-X3l2jLV8vQ4PQigVC1GXtvbopFlfPaP56OC1c9xNilJPw/9QN8UCZRHu43IvAeR4sdNW+j72p5AKDFbiUTrvVw=="], "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], @@ -1046,6 +1286,8 @@ "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "stable-hash-x": ["stable-hash-x@0.2.0", "", {}, "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ=="], "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], @@ -1122,6 +1364,8 @@ "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -1182,8 +1426,22 @@ "@mcp-ui/server/@modelcontextprotocol/ext-apps": ["@modelcontextprotocol/ext-apps@0.3.1", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "^1.2.21", "@oven/bun-darwin-x64": "^1.2.21", "@oven/bun-darwin-x64-baseline": "^1.2.21", "@oven/bun-linux-aarch64": "^1.2.21", "@oven/bun-linux-aarch64-musl": "^1.2.21", "@oven/bun-linux-x64": "^1.2.21", "@oven/bun-linux-x64-baseline": "^1.2.21", "@oven/bun-linux-x64-musl": "^1.2.21", "@oven/bun-linux-x64-musl-baseline": "^1.2.21", "@oven/bun-windows-x64": "^1.2.21", "@oven/bun-windows-x64-baseline": "^1.2.21", "@rollup/rollup-darwin-arm64": "^4.53.3", "@rollup/rollup-darwin-x64": "^4.53.3", "@rollup/rollup-linux-arm64-gnu": "^4.53.3", "@rollup/rollup-linux-x64-gnu": "^4.53.3", "@rollup/rollup-win32-arm64-msvc": "^4.53.3", "@rollup/rollup-win32-x64-msvc": "^4.53.3" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.24.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-Iivz2KwWK8xlRbiWwFB/C4NXqE8VJBoRCbBkJCN98ST2UbQvA6kfyebcLsypiqylJS467XOOaBcI9DeQ3t+zqA=="], + "@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@oxc-minify/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + + "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + + "@oxc-resolver/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], + + "@oxc-resolver/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + + "@oxc-transform/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + "@poppinss/dumper/supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], + "@remix-run/assets/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -1206,6 +1464,8 @@ "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "log-update/slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], "log-update/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], @@ -1220,6 +1480,8 @@ "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + "v8-to-istanbul/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "wrangler/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], @@ -1234,6 +1496,16 @@ "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@oxc-minify/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + + "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + + "@oxc-resolver/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + + "@oxc-transform/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "agents/yargs/cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], diff --git a/client/agent-multi-select-combobox.tsx b/client/agent-multi-select-combobox.tsx index 47e8129..df3b28a 100644 --- a/client/agent-multi-select-combobox.tsx +++ b/client/agent-multi-select-combobox.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { colors, radius, diff --git a/client/app-session-refresh.test.ts b/client/app-session-refresh.test.ts index 99bfb36..c2dfa21 100644 --- a/client/app-session-refresh.test.ts +++ b/client/app-session-refresh.test.ts @@ -1,6 +1,6 @@ /// import { expect, mock, test } from 'bun:test' -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' type QueueTask = Parameters[0] diff --git a/client/app.tsx b/client/app.tsx index cbf41a2..af43310 100644 --- a/client/app.tsx +++ b/client/app.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { clientRoutes } from './routes/index.tsx' import { getPathname, @@ -150,26 +150,24 @@ export function App(handle: Handle) { ) : null} -

- Not Found -

-

- That route does not exist. -

- - ), - }} + routes={clientRoutes} + fallback={ +
+

+ Not Found +

+

+ That route does not exist. +

+
+ } /> ) diff --git a/client/client-router.tsx b/client/client-router.tsx index 813fdf4..da18750 100644 --- a/client/client-router.tsx +++ b/client/client-router.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' type RouterSetup = { routes: Record @@ -249,11 +249,18 @@ function ensureRouter() { document.addEventListener('submit', handleDocumentSubmit) } -export function listenToRouterNavigation(handle: Handle, listener: () => void) { +export function listenToRouterNavigation( + handle: Pick, + listener: () => void, +) { ensureRouter() - handle.on(routerEvents, { - navigate: () => listener(), - }) + const onNavigate = () => listener() + routerEvents.addEventListener('navigate', onNavigate) + handle.signal.addEventListener( + 'abort', + () => routerEvents.removeEventListener('navigate', onNavigate), + { once: true }, + ) } export function getPathname() { @@ -281,15 +288,15 @@ export function navigate(to: string) { notify() } -export function Router(handle: Handle, setup: RouterSetup) { +export function Router(handle: Handle) { listenToRouterNavigation(handle, () => { void handle.update() }) return () => { const path = getPathname() - const routeElement = matchRoute(path, setup.routes) + const routeElement = matchRoute(path, handle.props.routes) if (routeElement) return routeElement - return setup.fallback ?? null + return handle.props.fallback ?? null } } diff --git a/client/counter.tsx b/client/counter.tsx index f7fcea9..17bd17a 100644 --- a/client/counter.tsx +++ b/client/counter.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { colors, radius, @@ -11,8 +11,8 @@ type CounterSetup = { initial?: number } -export function Counter(handle: Handle, setup: CounterSetup = {}) { - let count = setup.initial ?? 0 +export function Counter(handle: Handle) { + let count = handle.props.initial ?? 0 function increment() { count += 1 diff --git a/client/double-check.ts b/client/double-check.ts index e4bf7c0..f3bb626 100644 --- a/client/double-check.ts +++ b/client/double-check.ts @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' type BlurHandler = (event: FocusEvent) => void type ClickHandler = (event: MouseEvent) => void diff --git a/client/editable-text.tsx b/client/editable-text.tsx index 468baf3..d0852ef 100644 --- a/client/editable-text.tsx +++ b/client/editable-text.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' type EditableTextProps = { id: string @@ -20,7 +20,7 @@ const inheritTextStyles = { color: 'inherit', } as const -export function EditableText(handle: Handle) { +export function EditableText(handle: Handle) { let isEditing = false let draftValue = '' let isSaving = false @@ -42,7 +42,8 @@ export function EditableText(handle: Handle) { }) } - return (props: EditableTextProps) => { + return () => { + const props = handle.props const buttonId = `${props.id}-button` function startEditing() { diff --git a/client/entry.tsx b/client/entry.tsx index 4b0ed1a..3cd4ede 100644 --- a/client/entry.tsx +++ b/client/entry.tsx @@ -1,4 +1,4 @@ -import { createRoot } from 'remix/component' +import { createRoot } from 'remix/ui' import { App } from './app.tsx' const rootElement = document.getElementById('root') ?? document.body diff --git a/client/notifications.tsx b/client/notifications.tsx index 0bd6243..92fbca6 100644 --- a/client/notifications.tsx +++ b/client/notifications.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { colors, radius, diff --git a/client/remix-ui-compat/jsx-runtime.ts b/client/remix-ui-compat/jsx-runtime.ts new file mode 100644 index 0000000..2594a0e --- /dev/null +++ b/client/remix-ui-compat/jsx-runtime.ts @@ -0,0 +1,96 @@ +import { css as cssMixin, Fragment, on as onMixin } from 'remix/ui' +import { + jsx as remixJsx, + jsxDEV as remixJsxDev, + jsxs as remixJsxs, +} from 'remix/ui/jsx-runtime' +import { type Handle, type RemixElement, type RemixNode } from 'remix/ui' + +type LegacyEventHandler = { + bivarianceHack(event: event, signal: AbortSignal): void +}['bivarianceHack'] +type LegacyEventMap = Record +type RenderFn = () => RemixNode + +type LegacyProps = Record & { + children?: RemixNode + css?: Record + key?: unknown + mix?: unknown + on?: LegacyEventMap +} + +type ElementType = string | ((handle: Handle) => RenderFn) + +function normalizeProps(props: Record | null | undefined) { + if (!props) return {} + const { css, mix, on, ...rest } = props + const nextMix = [] + if (css && typeof css === 'object') { + nextMix.push(cssMixin(css as any)) + } + if (on && typeof on === 'object') { + for (const [eventName, handler] of Object.entries(on as LegacyEventMap)) { + nextMix.push(onMixin(eventName as never, handler as never)) + } + } + if (Array.isArray(mix)) { + nextMix.push(...mix) + } else if (mix) { + nextMix.push(mix) + } + if (nextMix.length === 0) { + return props + } + return { + ...rest, + mix: nextMix, + } +} + +export function jsx( + type: ElementType, + props: Record | null | undefined, + key?: string, +) { + return remixJsx(type, normalizeProps(props), key) +} + +export function jsxs( + type: ElementType, + props: Record | null | undefined, + key?: string, +) { + return remixJsxs(type, normalizeProps(props), key) +} + +export function jsxDEV( + type: ElementType, + props: Record | null | undefined, + key?: string, +) { + return remixJsxDev(type, normalizeProps(props), key) +} + +export { Fragment } + +export namespace JSX { + export type Element = RemixElement + export type ElementType = string | ((handle: Handle) => RenderFn) + export type ElementChildrenAttribute = { + children: unknown + } + export interface IntrinsicAttributes { + key?: unknown + } + export type LibraryManagedAttributes = component extends ( + handle: Handle, + ) => RenderFn + ? componentProps extends Record + ? { key?: unknown } + : componentProps & { key?: unknown } + : props + export interface IntrinsicElements { + [elementName: string]: LegacyProps + } +} diff --git a/client/routes/account.tsx b/client/routes/account.tsx index 28418c7..bbb5b5b 100644 --- a/client/routes/account.tsx +++ b/client/routes/account.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { isAdminEmail } from '#shared/admin.ts' import { colors, spacing, typography } from '#client/styles/tokens.ts' diff --git a/client/routes/admin-agents.tsx b/client/routes/admin-agents.tsx index b35a4ba..1b4d8ea 100644 --- a/client/routes/admin-agents.tsx +++ b/client/routes/admin-agents.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { createNotifications } from '#client/notifications.tsx' import { colors, diff --git a/client/routes/chat.tsx b/client/routes/chat.tsx index 7f2ca7c..e03513f 100644 --- a/client/routes/chat.tsx +++ b/client/routes/chat.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { AgentMultiSelectCombobox } from '#client/agent-multi-select-combobox.tsx' import { ChatClient, type ChatClientSnapshot } from '#client/chat-client.ts' import { navigate, routerEvents } from '#client/client-router.tsx' @@ -1094,11 +1094,15 @@ export function ChatRoute(handle: Handle) { } } - handle.on(routerEvents, { - navigate: () => { - void syncActiveThreadFromLocation() - }, - }) + const handleRouterNavigate = () => { + void syncActiveThreadFromLocation() + } + routerEvents.addEventListener('navigate', handleRouterNavigate) + handle.signal.addEventListener( + 'abort', + () => routerEvents.removeEventListener('navigate', handleRouterNavigate), + { once: true }, + ) handle.queueTask(() => { if (typeof window === 'undefined') return diff --git a/client/routes/home.tsx b/client/routes/home.tsx index bef268d..bbe77dc 100644 --- a/client/routes/home.tsx +++ b/client/routes/home.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { colors, mq, diff --git a/client/routes/index.tsx b/client/routes/index.tsx index 8c8b829..4d2362e 100644 --- a/client/routes/index.tsx +++ b/client/routes/index.tsx @@ -17,7 +17,7 @@ export const clientRoutes = { '/admin/agents': , '/account': , '/login': , - '/signup': , + '/signup': , '/reset-password': , '/oauth/authorize': , '/oauth/callback': , diff --git a/client/routes/login.tsx b/client/routes/login.tsx index 7ca5d0a..61dd24b 100644 --- a/client/routes/login.tsx +++ b/client/routes/login.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { buildAuthLink } from '#client/auth-links.ts' import { navigate } from '#client/client-router.tsx' import { fetchSessionInfo, type SessionStatus } from '#client/session.ts' @@ -36,8 +36,8 @@ function buildAuthPath(mode: AuthMode, redirectTo: string | null) { return buildAuthLink(path, redirectTo) } -export function LoginRoute(handle: Handle, setup: LoginFormSetup = {}) { - let mode: AuthMode = setup.initialMode ?? 'login' +export function LoginRoute(handle: Handle) { + let mode: AuthMode = handle.props.initialMode ?? 'login' let status: AuthStatus = 'idle' let message: string | null = null let sessionStatus: SessionStatus = 'idle' diff --git a/client/routes/oauth-authorize.tsx b/client/routes/oauth-authorize.tsx index 224d692..0212728 100644 --- a/client/routes/oauth-authorize.tsx +++ b/client/routes/oauth-authorize.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { fetchSessionInfo, type SessionInfo, diff --git a/client/routes/oauth-callback.tsx b/client/routes/oauth-callback.tsx index 11ba295..1869af7 100644 --- a/client/routes/oauth-callback.tsx +++ b/client/routes/oauth-callback.tsx @@ -1,5 +1,5 @@ import { colors, radius, spacing, typography } from '#client/styles/tokens.ts' -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' export function OAuthCallbackRoute(_handle: Handle) { return () => { diff --git a/client/routes/reset-password.tsx b/client/routes/reset-password.tsx index e39d776..8be0698 100644 --- a/client/routes/reset-password.tsx +++ b/client/routes/reset-password.tsx @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' import { colors, radius, @@ -141,7 +141,7 @@ export function ResetPasswordRoute(handle: Handle) { boxShadow: shadows.sm, }} on={{ - submit: (event) => + submit: (event: SubmitEvent) => mode === 'confirm' ? submitResetConfirm(event, token) : submitResetRequest(event), diff --git a/client/spin-delay.ts b/client/spin-delay.ts index a505f5f..e9644b9 100644 --- a/client/spin-delay.ts +++ b/client/spin-delay.ts @@ -1,4 +1,4 @@ -import { type Handle } from 'remix/component' +import { type Handle } from 'remix/ui' type SpinDelayState = 'IDLE' | 'DELAY' | 'DISPLAY' | 'EXPIRE' diff --git a/package.json b/package.json index a50c7a7..cb46616 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.0.0", "type": "module", "imports": { + "#client/remix-ui-compat/jsx-runtime": "./client/remix-ui-compat/jsx-runtime.ts", "#*": "./*" }, "description": "A starter and reference for building full stack web applications", @@ -23,14 +24,14 @@ "scripts": { "dev": "bun cli.ts", "dev:client": "concurrently --kill-others-on-fail -n web,mcp-apps -c green,cyan \"bun run dev:client:web\" \"bun run dev:mcp-apps\"", - "dev:client:web": "esbuild client/entry.tsx --bundle --format=esm --target=es2022 --outdir=public --entry-names=client-entry --chunk-names=assets/[name] --asset-names=assets/[name] --jsx=automatic --jsx-import-source=remix/component --watch", + "dev:client:web": "esbuild client/entry.tsx --bundle --format=esm --target=es2022 --outdir=public --entry-names=client-entry --chunk-names=assets/[name] --asset-names=assets/[name] --jsx=automatic --jsx-import-source=#client/remix-ui-compat --watch", "dev:mcp-apps": "esbuild client/mcp-apps/calculator-widget.ts --bundle --format=esm --target=es2022 --outdir=public/mcp-apps --platform=browser --watch", "dev:worker": "bun ./wrangler-env.ts dev --local", "dev:mock-resend": "bun ./wrangler-env.ts dev --local --config mock-servers/resend/wrangler.jsonc", "dev:mock-ai": "bun ./wrangler-env.ts dev --local --config mock-servers/ai/wrangler.jsonc", "deploy": "bun run build && bun ./wrangler-env.ts deploy", "build:mcp-apps": "esbuild client/mcp-apps/calculator-widget.ts --bundle --format=esm --target=es2022 --outdir=public/mcp-apps --platform=browser", - "build:client:web": "esbuild client/entry.tsx --bundle --format=esm --target=es2022 --outdir=public --entry-names=client-entry --chunk-names=assets/[name] --asset-names=assets/[name] --jsx=automatic --jsx-import-source=remix/component", + "build:client:web": "esbuild client/entry.tsx --bundle --format=esm --target=es2022 --outdir=public --entry-names=client-entry --chunk-names=assets/[name] --asset-names=assets/[name] --jsx=automatic --jsx-import-source=#client/remix-ui-compat", "build:client": "bun run build:client:web && bun run build:mcp-apps", "build": "bun run build:client && bun ./wrangler-env.ts build", "lint": "oxlint .", @@ -81,7 +82,7 @@ "@modelcontextprotocol/sdk": "1.26.0", "agents": "^0.7.6", "get-port": "^7.1.0", - "remix": "3.0.0-alpha.3", + "remix": "3.0.0-beta.5", "workers-ai-provider": "^3.1.2", "zod": "^4.3.6" } diff --git a/server/handlers/account.ts b/server/handlers/account.ts index 6fc3e9b..52e87a4 100644 --- a/server/handlers/account.ts +++ b/server/handlers/account.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthSessionResult } from '#server/auth-session.ts' import { redirectToLogin } from '#server/auth-redirect.ts' import { Layout } from '#server/layout.ts' @@ -7,7 +7,7 @@ import { type routes } from '#server/routes.ts' export const account = { middleware: [], - async action({ request }) { + async handler({ request }) { const { session, setCookie } = await readAuthSessionResult(request) if (!session) { @@ -25,7 +25,4 @@ export const account = { return response }, -} satisfies BuildAction< - typeof routes.account.method, - typeof routes.account.pattern -> +} satisfies Action diff --git a/server/handlers/admin-agents.ts b/server/handlers/admin-agents.ts index 311452f..a5bae0e 100644 --- a/server/handlers/admin-agents.ts +++ b/server/handlers/admin-agents.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthenticatedAppUser } from '#server/authenticated-user.ts' import { isAdminEmail } from '#shared/admin.ts' import { fallbackRemoteChatModel } from '#shared/chat.ts' @@ -54,7 +54,7 @@ function readOptionalBoolean(value: unknown) { export const adminAgentsPage = { middleware: [], - async action({ request }) { + async handler({ request }) { const { session, setCookie } = await readAuthSessionResult(request) if (!session) { return redirectToLogin(request) @@ -73,17 +73,14 @@ export const adminAgentsPage = { } return response }, -} satisfies BuildAction< - typeof routes.adminAgents.method, - typeof routes.adminAgents.pattern -> +} satisfies Action export function createAdminAgentsHandler(appEnv: AppEnv) { const store = createAgentsStore(appEnv.APP_DB) return { middleware: [], - async action({ request }) { + async handler({ request }) { const { response } = await requireAdminApiUser(request, appEnv as Env) if (response) return response @@ -133,10 +130,8 @@ export function createAdminAgentsHandler(appEnv: AppEnv) { }) return jsonResponse({ ok: true, agent }, { status: 201 }) }, - } satisfies BuildAction< - | typeof routes.adminAgentsData.method - | typeof routes.adminAgentsCreate.method, - typeof routes.adminAgentsData.pattern + } satisfies Action< + typeof routes.adminAgentsData | typeof routes.adminAgentsCreate > } @@ -145,7 +140,7 @@ export function createUpdateAdminAgentHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const { response } = await requireAdminApiUser(request, appEnv as Env) if (response) return response @@ -195,10 +190,7 @@ export function createUpdateAdminAgentHandler(appEnv: AppEnv) { return jsonResponse({ ok: true, agent }) }, - } satisfies BuildAction< - typeof routes.adminAgentsUpdate.method, - typeof routes.adminAgentsUpdate.pattern - > + } satisfies Action } export function createDeleteAdminAgentHandler(appEnv: AppEnv) { @@ -206,7 +198,7 @@ export function createDeleteAdminAgentHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const { response } = await requireAdminApiUser(request, appEnv as Env) if (response) return response @@ -231,10 +223,7 @@ export function createDeleteAdminAgentHandler(appEnv: AppEnv) { return jsonResponse({ ok: true }) }, - } satisfies BuildAction< - typeof routes.adminAgentsDelete.method, - typeof routes.adminAgentsDelete.pattern - > + } satisfies Action } export function createSetDefaultAdminAgentHandler(appEnv: AppEnv) { @@ -242,7 +231,7 @@ export function createSetDefaultAdminAgentHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const { response } = await requireAdminApiUser(request, appEnv as Env) if (response) return response @@ -267,8 +256,5 @@ export function createSetDefaultAdminAgentHandler(appEnv: AppEnv) { return jsonResponse({ ok: true, agent }) }, - } satisfies BuildAction< - typeof routes.adminAgentsDefault.method, - typeof routes.adminAgentsDefault.pattern - > + } satisfies Action } diff --git a/server/handlers/auth-handler.test.ts b/server/handlers/auth-handler.test.ts index a3cb71a..89dc130 100644 --- a/server/handlers/auth-handler.test.ts +++ b/server/handlers/auth-handler.test.ts @@ -20,7 +20,7 @@ function createAuthRequest( const context = new RequestContext(request) return { - run: () => handler.action(context), + run: () => handler.handler(context), } } diff --git a/server/handlers/auth-page.ts b/server/handlers/auth-page.ts index 1266aa8..38c2a62 100644 --- a/server/handlers/auth-page.ts +++ b/server/handlers/auth-page.ts @@ -12,7 +12,7 @@ function normalizeRedirectTo(value: string | null) { export function createAuthPageHandler() { return { middleware: [], - async action({ request }: { request: Request }) { + async handler({ request }: { request: Request }) { const { session, setCookie } = await readAuthSessionResult(request) if (session) { const url = new URL(request.url) diff --git a/server/handlers/auth.ts b/server/handlers/auth.ts index edde895..117366f 100644 --- a/server/handlers/auth.ts +++ b/server/handlers/auth.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { enum_, object, parseSafe, string } from 'remix/data-schema' import { createAuthCookie, isSecureRequest } from '#server/auth-session.ts' import { getRequestIp, logAuditEvent } from '#server/audit-log.ts' @@ -31,7 +31,7 @@ export function createAuthHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request, url }) { + async handler({ request, url }) { let body: unknown try { @@ -235,5 +235,5 @@ export function createAuthHandler(appEnv: AppEnv) { }, ) }, - } satisfies BuildAction + } satisfies Action } diff --git a/server/handlers/chat-agents.ts b/server/handlers/chat-agents.ts index cd5eca6..b80607d 100644 --- a/server/handlers/chat-agents.ts +++ b/server/handlers/chat-agents.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthenticatedAppUser } from '#server/authenticated-user.ts' import { createAgentsStore } from '#server/agents.ts' import { type routes } from '#server/routes.ts' @@ -20,7 +20,7 @@ export function createChatAgentsHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const user = await readAuthenticatedAppUser(request, appEnv as Env) if (!user) { return jsonResponse( @@ -32,8 +32,5 @@ export function createChatAgentsHandler(appEnv: AppEnv) { const agents = await store.listAvailable() return jsonResponse({ ok: true, agents }) }, - } satisfies BuildAction< - typeof routes.chatAgents.method, - typeof routes.chatAgents.pattern - > + } satisfies Action } diff --git a/server/handlers/chat-threads.ts b/server/handlers/chat-threads.ts index 1bed817..c5515df 100644 --- a/server/handlers/chat-threads.ts +++ b/server/handlers/chat-threads.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthenticatedAppUser } from '#server/authenticated-user.ts' import { type routes } from '#server/routes.ts' import { createAgentsStore } from '#server/agents.ts' @@ -22,7 +22,7 @@ export function createChatThreadsHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const user = await readAuthenticatedAppUser(request, appEnv as Env) if (!user) { return jsonResponse( @@ -85,9 +85,8 @@ export function createChatThreadsHandler(appEnv: AppEnv) { const thread = await store.createForUser(user.userId, filteredAgentIds) return jsonResponse({ ok: true, thread }, { status: 201 }) }, - } satisfies BuildAction< - typeof routes.chatThreadsCreate.method | typeof routes.chatThreads.method, - typeof routes.chatThreads.pattern + } satisfies Action< + typeof routes.chatThreadsCreate | typeof routes.chatThreads > } @@ -96,7 +95,7 @@ export function createDeleteChatThreadHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const user = await readAuthenticatedAppUser(request, appEnv as Env) if (!user) { return jsonResponse( @@ -138,10 +137,7 @@ export function createDeleteChatThreadHandler(appEnv: AppEnv) { return jsonResponse({ ok: true }) }, - } satisfies BuildAction< - typeof routes.chatThreadsDelete.method, - typeof routes.chatThreadsDelete.pattern - > + } satisfies Action } export function createUpdateChatThreadHandler(appEnv: AppEnv) { @@ -149,7 +145,7 @@ export function createUpdateChatThreadHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const user = await readAuthenticatedAppUser(request, appEnv as Env) if (!user) { return jsonResponse( @@ -203,10 +199,7 @@ export function createUpdateChatThreadHandler(appEnv: AppEnv) { return jsonResponse({ ok: true, thread }) }, - } satisfies BuildAction< - typeof routes.chatThreadsUpdate.method, - typeof routes.chatThreadsUpdate.pattern - > + } satisfies Action } export function createUpdateChatThreadAgentsHandler(appEnv: AppEnv) { @@ -214,7 +207,7 @@ export function createUpdateChatThreadAgentsHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request }) { + async handler({ request }) { const user = await readAuthenticatedAppUser(request, appEnv as Env) if (!user) { return jsonResponse( @@ -269,8 +262,5 @@ export function createUpdateChatThreadAgentsHandler(appEnv: AppEnv) { return jsonResponse({ ok: true, thread }) }, - } satisfies BuildAction< - typeof routes.chatThreadsAgentsUpdate.method, - typeof routes.chatThreadsAgentsUpdate.pattern - > + } satisfies Action } diff --git a/server/handlers/chat.ts b/server/handlers/chat.ts index 9a67f5c..d1b4904 100644 --- a/server/handlers/chat.ts +++ b/server/handlers/chat.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthSessionResult } from '#server/auth-session.ts' import { redirectToLogin } from '#server/auth-redirect.ts' import { Layout } from '#server/layout.ts' @@ -7,7 +7,7 @@ import { type routes } from '#server/routes.ts' export const chat = { middleware: [], - async action({ request }) { + async handler({ request }) { const { session, setCookie } = await readAuthSessionResult(request) if (!session) { @@ -21,4 +21,4 @@ export const chat = { return response }, -} satisfies BuildAction +} satisfies Action diff --git a/server/handlers/health-handler.test.ts b/server/handlers/health-handler.test.ts index aed5db6..9f60d40 100644 --- a/server/handlers/health-handler.test.ts +++ b/server/handlers/health-handler.test.ts @@ -10,7 +10,7 @@ function createHealthRequestContext() { test('health handler returns ok with null commit SHA when unset', async () => { const handler = createHealthHandler({ APP_COMMIT_SHA: undefined }) - const response = await handler.action(createHealthRequestContext()) + const response = await handler.handler(createHealthRequestContext()) expect(response.status).toBe(200) expect(response.headers.get('Cache-Control')).toBe('no-store') @@ -23,7 +23,7 @@ test('health handler returns the configured commit SHA', async () => { APP_COMMIT_SHA: 'f2d82dba4ba50cf2ad3f56f5c88f7b8ef5f97d8e', }) - const response = await handler.action(createHealthRequestContext()) + const response = await handler.handler(createHealthRequestContext()) expect(response.status).toBe(200) expect(response.headers.get('X-App-Commit-Sha')).toBe( diff --git a/server/handlers/health.ts b/server/handlers/health.ts index e26f2f0..2128141 100644 --- a/server/handlers/health.ts +++ b/server/handlers/health.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { type routes } from '#server/routes.ts' import { type AppEnv } from '#types/env-schema.ts' @@ -9,7 +9,7 @@ type HealthEnv = { export function createHealthHandler(appEnv: HealthEnv) { return { middleware: [], - async action() { + async handler() { const commitSha = appEnv.APP_COMMIT_SHA ?? null return Response.json( { ok: true, commitSha }, @@ -21,8 +21,5 @@ export function createHealthHandler(appEnv: HealthEnv) { }, ) }, - } satisfies BuildAction< - typeof routes.health.method, - typeof routes.health.pattern - > + } satisfies Action } diff --git a/server/handlers/home.ts b/server/handlers/home.ts index 133fe29..c4b4963 100644 --- a/server/handlers/home.ts +++ b/server/handlers/home.ts @@ -1,11 +1,11 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { Layout } from '#server/layout.ts' import { render } from '#server/render.ts' import { type routes } from '#server/routes.ts' export const home = { middleware: [], - async action() { + async handler() { return render(Layout({})) }, -} satisfies BuildAction +} satisfies Action diff --git a/server/handlers/login.ts b/server/handlers/login.ts index b05f133..4eebac0 100644 --- a/server/handlers/login.ts +++ b/server/handlers/login.ts @@ -1,8 +1,7 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { type routes } from '#server/routes.ts' import { createAuthPageHandler } from './auth-page.ts' -export const login = createAuthPageHandler() satisfies BuildAction< - typeof routes.login.method, - typeof routes.login.pattern +export const login = createAuthPageHandler() satisfies Action< + typeof routes.login > diff --git a/server/handlers/logout.ts b/server/handlers/logout.ts index 3bd9be6..5f0bebb 100644 --- a/server/handlers/logout.ts +++ b/server/handlers/logout.ts @@ -1,10 +1,10 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { destroyAuthCookie, isSecureRequest } from '#server/auth-session.ts' import { type routes } from '#server/routes.ts' export const logout = { middleware: [], - async action({ request }) { + async handler({ request }) { const cookie = await destroyAuthCookie(isSecureRequest(request)) const location = new URL('/login', request.url) @@ -16,7 +16,4 @@ export const logout = { }, }) }, -} satisfies BuildAction< - typeof routes.logout.method, - typeof routes.logout.pattern -> +} satisfies Action diff --git a/server/handlers/password-reset.ts b/server/handlers/password-reset.ts index fe2b441..dd5f6b4 100644 --- a/server/handlers/password-reset.ts +++ b/server/handlers/password-reset.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { object, parseSafe, string } from 'remix/data-schema' import { type AppEnv } from '#types/env-schema.ts' import { createDb, passwordResetsTable, usersTable } from '#worker/db.ts' @@ -73,7 +73,7 @@ export function createPasswordResetRequestHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request, url }) { + async handler({ request, url }) { let body: unknown try { body = await request.json() @@ -181,10 +181,7 @@ export function createPasswordResetRequestHandler(appEnv: AppEnv) { message: 'If the account exists, a reset email has been sent.', }) }, - } satisfies BuildAction< - typeof routes.passwordResetRequest.method, - typeof routes.passwordResetRequest.pattern - > + } satisfies Action } export function createPasswordResetConfirmHandler(appEnv: AppEnv) { @@ -192,7 +189,7 @@ export function createPasswordResetConfirmHandler(appEnv: AppEnv) { return { middleware: [], - async action({ request, url }) { + async handler({ request, url }) { let body: unknown try { body = await request.json() @@ -265,8 +262,5 @@ export function createPasswordResetConfirmHandler(appEnv: AppEnv) { return Response.json({ ok: true }) }, - } satisfies BuildAction< - typeof routes.passwordResetConfirm.method, - typeof routes.passwordResetConfirm.pattern - > + } satisfies Action } diff --git a/server/handlers/session-handler.test.ts b/server/handlers/session-handler.test.ts index 3b8408f..e0d2309 100644 --- a/server/handlers/session-handler.test.ts +++ b/server/handlers/session-handler.test.ts @@ -48,7 +48,7 @@ test('session handler renews remembered sessions after two weeks', async () => { ) const response = await withMockedNow(now, () => - session.action(createSessionRequestContext(cookie)), + session.handler(createSessionRequestContext(cookie)), ) expect(response.status).toBe(200) @@ -68,7 +68,7 @@ test('session handler keeps remembered sessions unchanged before renewal window' ) const response = await withMockedNow(now, () => - session.action(createSessionRequestContext(cookie)), + session.handler(createSessionRequestContext(cookie)), ) expect(response.status).toBe(200) diff --git a/server/handlers/session.ts b/server/handlers/session.ts index 34c47b3..1ed3f7a 100644 --- a/server/handlers/session.ts +++ b/server/handlers/session.ts @@ -1,4 +1,4 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { readAuthSessionResult } from '#server/auth-session.ts' import { type routes } from '#server/routes.ts' @@ -15,7 +15,7 @@ function jsonResponse(data: unknown, init?: ResponseInit) { export const session = { middleware: [], - async action({ request }) { + async handler({ request }) { const { session, setCookie } = await readAuthSessionResult(request) if (!session) { return jsonResponse({ ok: false }) @@ -32,7 +32,4 @@ export const session = { : undefined, ) }, -} satisfies BuildAction< - typeof routes.session.method, - typeof routes.session.pattern -> +} satisfies Action diff --git a/server/handlers/signup.ts b/server/handlers/signup.ts index 4c193ec..d246a89 100644 --- a/server/handlers/signup.ts +++ b/server/handlers/signup.ts @@ -1,8 +1,7 @@ -import { type BuildAction } from 'remix/fetch-router' +import { type Action } from 'remix/fetch-router' import { type routes } from '#server/routes.ts' import { createAuthPageHandler } from './auth-page.ts' -export const signup = createAuthPageHandler() satisfies BuildAction< - typeof routes.signup.method, - typeof routes.signup.pattern +export const signup = createAuthPageHandler() satisfies Action< + typeof routes.signup > diff --git a/types/tsconfig-client.json b/types/tsconfig-client.json index b9518f9..821a7ca 100644 --- a/types/tsconfig-client.json +++ b/types/tsconfig-client.json @@ -7,7 +7,7 @@ "lib": ["DOM", "DOM.Iterable", "ES2022"], "types": [], "jsx": "react-jsx", - "jsxImportSource": "remix/component" + "jsxImportSource": "#client/remix-ui-compat" }, "include": ["../client/**/*.ts", "../client/**/*.tsx", "../shared/**/*.ts"] } diff --git a/worker/d1-data-table-adapter.ts b/worker/d1-data-table-adapter.ts index 4b61be6..ca9513a 100644 --- a/worker/d1-data-table-adapter.ts +++ b/worker/d1-data-table-adapter.ts @@ -2,14 +2,18 @@ import { getTableName, getTablePrimaryKey, type AdapterCapabilityOverrides, - type AdapterExecuteRequest, - type AdapterResult, - type AdapterStatement, + type DataManipulationOperation, + type DataManipulationRequest, + type DataManipulationResult, type DatabaseAdapter, + type SqlStatement, + type TableRef, type TransactionOptions, type TransactionToken, } from 'remix/data-table' +type AdapterStatement = DataManipulationOperation + type SqliteCompileContext = { values: Array } @@ -52,6 +56,8 @@ export class D1DataTableAdapter implements DatabaseAdapter { returning: boolean savepoints: boolean upsert: boolean + transactionalDdl: boolean + migrationLock: boolean } #database: D1Database @@ -69,51 +75,59 @@ export class D1DataTableAdapter implements DatabaseAdapter { returning: options?.capabilities?.returning ?? true, savepoints: options?.capabilities?.savepoints ?? false, upsert: options?.capabilities?.upsert ?? true, + transactionalDdl: options?.capabilities?.transactionalDdl ?? true, + migrationLock: options?.capabilities?.migrationLock ?? false, } } - async execute(request: AdapterExecuteRequest): Promise { - if ( - request.statement.kind === 'insertMany' && - request.statement.values.length === 0 - ) { + compileSql(operation: DataManipulationOperation): Array { + return [compileSqliteStatement(operation)] + } + + async execute( + request: DataManipulationRequest, + ): Promise { + const operation = request.operation + if (request.transaction) { + this.#assertTransaction(request.transaction) + } + if (operation.kind === 'insertMany' && operation.values.length === 0) { return { affectedRows: 0, insertId: undefined, - rows: request.statement.returning ? [] : undefined, + rows: operation.returning ? [] : undefined, } } - const statement = compileSqliteStatement(request.statement) + const statement = this.compileSql(operation)[0]! const prepared = this.#database .prepare(statement.text) - .bind(...statement.values) as unknown as D1PreparedQuery + .bind( + ...normalizeStatementValues(statement.values), + ) as unknown as D1PreparedQuery const shouldReadRows = - request.statement.kind === 'select' || - request.statement.kind === 'count' || - request.statement.kind === 'exists' || - hasReturningClause(request.statement) + operation.kind === 'select' || + operation.kind === 'count' || + operation.kind === 'exists' || + hasReturningClause(operation) if (shouldReadRows) { const result = (await prepared.all()) as D1StatementResult let rows = normalizeRows(result.results ?? []) - if ( - request.statement.kind === 'count' || - request.statement.kind === 'exists' - ) { + if (operation.kind === 'count' || operation.kind === 'exists') { rows = normalizeCountRows(rows) } return { rows, affectedRows: normalizeAffectedRowsForReader( - request.statement.kind, + operation.kind, rows, result.meta, ), insertId: normalizeInsertIdForReader( - request.statement.kind, - request.statement, + operation.kind, + operation, rows, result.meta, ), @@ -122,13 +136,59 @@ export class D1DataTableAdapter implements DatabaseAdapter { const result = (await prepared.run()) as D1StatementResult return { - affectedRows: normalizeAffectedRowsForRun(request.statement.kind, result), - insertId: normalizeInsertIdForRun( - request.statement.kind, - request.statement, - result, - ), + affectedRows: normalizeAffectedRowsForRun(operation.kind, result), + insertId: normalizeInsertIdForRun(operation.kind, operation, result), + } + } + + async executeScript( + sql: string, + transaction?: TransactionToken, + ): Promise { + if (transaction) { + this.#assertTransaction(transaction) + } + await this.#database.exec(sql) + } + + async hasTable( + table: TableRef, + transaction?: TransactionToken, + ): Promise { + if (transaction) { + this.#assertTransaction(transaction) } + const masterTable = table.schema + ? quoteIdentifier(table.schema) + '.sqlite_master' + : 'sqlite_master' + const result = await this.#database + .prepare( + 'select 1 from ' + masterTable + ' where type = ? and name = ? limit 1', + ) + .bind('table', table.name) + .all() + return (result.results ?? []).length > 0 + } + + async hasColumn( + table: TableRef, + column: string, + transaction?: TransactionToken, + ): Promise { + if (transaction) { + this.#assertTransaction(transaction) + } + const schemaPrefix = table.schema ? quoteIdentifier(table.schema) + '.' : '' + const result = await this.#database + .prepare( + 'pragma ' + + schemaPrefix + + 'table_info(' + + quoteIdentifier(table.name) + + ')', + ) + .all<{ name?: unknown }>() + return (result.results ?? []).some((row) => row.name === column) } async beginTransaction( @@ -214,6 +274,10 @@ function normalizeRows(rows: Array>) { }) } +function normalizeStatementValues(values: Array) { + return values.map((value) => (value === undefined ? null : value)) +} + function normalizeCountRows(rows: Array>) { return rows.map((row) => { const count = row.count diff --git a/worker/db.ts b/worker/db.ts index 89c4a91..1a79b53 100644 --- a/worker/db.ts +++ b/worker/db.ts @@ -1,60 +1,59 @@ -import { createDatabase, createTable, sql } from 'remix/data-table' -import { nullable, number, optional, string } from 'remix/data-schema' +import { column as c, createDatabase, table, sql } from 'remix/data-table' import { createD1DataTableAdapter } from './d1-data-table-adapter.ts' -export const usersTable = createTable({ +export const usersTable = table({ name: 'users', columns: { - id: number(), - username: string(), - email: string(), - password_hash: string(), - created_at: string(), - updated_at: string(), + id: c.integer(), + username: c.text(), + email: c.text(), + password_hash: c.text(), + created_at: c.text(), + updated_at: c.text(), }, primaryKey: 'id', }) -export const passwordResetsTable = createTable({ +export const passwordResetsTable = table({ name: 'password_resets', columns: { - id: number(), - user_id: number(), - token_hash: string(), - expires_at: number(), - created_at: string(), + id: c.integer(), + user_id: c.integer(), + token_hash: c.text(), + expires_at: c.integer(), + created_at: c.text(), }, primaryKey: 'id', }) -export const mockResendMessagesTable = createTable({ +export const mockResendMessagesTable = table({ name: 'mock_resend_messages', columns: { - id: string(), - token_hash: string(), - received_at: number(), - from_email: string(), - to_json: string(), - subject: string(), - html: string(), - payload_json: string(), + id: c.text(), + token_hash: c.text(), + received_at: c.integer(), + from_email: c.text(), + to_json: c.text(), + subject: c.text(), + html: c.text(), + payload_json: c.text(), }, primaryKey: 'id', }) -export const chatThreadsTable = createTable({ +export const chatThreadsTable = table({ name: 'chat_threads', columns: { - id: string(), - user_id: number(), - agent_id: optional(nullable(string())), - agent_ids_json: string(), - title: string(), - last_message_preview: string(), - message_count: number(), - created_at: string(), - updated_at: string(), - deleted_at: optional(nullable(string())), + id: c.text(), + user_id: c.integer(), + agent_id: c.text().nullable(), + agent_ids_json: c.text(), + title: c.text(), + last_message_preview: c.text(), + message_count: c.integer(), + created_at: c.text(), + updated_at: c.text(), + deleted_at: c.text().nullable(), }, primaryKey: 'id', timestamps: { @@ -63,19 +62,19 @@ export const chatThreadsTable = createTable({ }, }) -export const agentsTable = createTable({ +export const agentsTable = table({ name: 'agents', columns: { - id: string(), - name: string(), - system_prompt: string(), - model_preset: string(), - custom_model: optional(nullable(string())), - is_active: number(), - is_default: number(), - created_at: string(), - updated_at: string(), - deleted_at: optional(nullable(string())), + id: c.text(), + name: c.text(), + system_prompt: c.text(), + model_preset: c.text(), + custom_model: c.text().nullable(), + is_active: c.integer(), + is_default: c.integer(), + created_at: c.text(), + updated_at: c.text(), + deleted_at: c.text().nullable(), }, primaryKey: 'id', timestamps: { @@ -84,17 +83,17 @@ export const agentsTable = createTable({ }, }) -export const mockAiRequestsTable = createTable({ +export const mockAiRequestsTable = table({ name: 'mock_ai_requests', columns: { - id: string(), - token_hash: string(), - received_at: number(), - scenario: string(), - last_user_message: string(), - tool_names_json: string(), - request_json: string(), - response_text: string(), + id: c.text(), + token_hash: c.text(), + received_at: c.integer(), + scenario: c.text(), + last_user_message: c.text(), + tool_names_json: c.text(), + request_json: c.text(), + response_text: c.text(), }, primaryKey: 'id', }) From b864462362db7c8173c5a717d3c20a063bb5df5a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 1 Jul 2026 20:06:44 +0000 Subject: [PATCH 2/7] Fix Remix beta UI compatibility --- client/double-check.ts | 3 ++- client/remix-ui-compat/jsx-runtime.ts | 10 ++++++++-- client/routes/chat.tsx | 17 ++++++----------- e2e/chat.spec.ts | 11 +++++++++-- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/client/double-check.ts b/client/double-check.ts index f3bb626..e946034 100644 --- a/client/double-check.ts +++ b/client/double-check.ts @@ -40,7 +40,8 @@ export function createDoubleCheck(handle: Handle) { getButtonProps(props?: Props): Props { const buttonProps = props ?? ({} as Props) - const onBlur: BlurHandler = () => { + const onBlur: BlurHandler = (event) => { + if (event.relatedTarget === null) return setDoubleCheck(false) } diff --git a/client/remix-ui-compat/jsx-runtime.ts b/client/remix-ui-compat/jsx-runtime.ts index 2594a0e..7a13a3f 100644 --- a/client/remix-ui-compat/jsx-runtime.ts +++ b/client/remix-ui-compat/jsx-runtime.ts @@ -1,10 +1,16 @@ -import { css as cssMixin, Fragment, on as onMixin } from 'remix/ui' +import { + css as cssMixin, + Fragment, + on as onMixin, + type Handle, + type RemixElement, + type RemixNode, +} from 'remix/ui' import { jsx as remixJsx, jsxDEV as remixJsxDev, jsxs as remixJsxs, } from 'remix/ui/jsx-runtime' -import { type Handle, type RemixElement, type RemixNode } from 'remix/ui' type LegacyEventHandler = { bivarianceHack(event: event, signal: AbortSignal): void diff --git a/client/routes/chat.tsx b/client/routes/chat.tsx index e03513f..aeaf261 100644 --- a/client/routes/chat.tsx +++ b/client/routes/chat.tsx @@ -1468,11 +1468,7 @@ export function ChatRoute(handle: Handle) { key={thread.id} css={{ position: 'relative', - '&:hover [data-thread-delete-button="true"], &:focus-within [data-thread-delete-button="true"]': - { - opacity: 1, - pointerEvents: 'auto', - }, + isolation: 'isolate', }} >