From 854a68a192d91530db663c1977ee641ae849d3dd Mon Sep 17 00:00:00 2001 From: Anshgrover23 Date: Fri, 16 May 2025 17:36:12 +0530 Subject: [PATCH 01/11] Add example admin page at /_fake/admin that shows thing resources --- bun.lockb | Bin 68168 -> 69942 bytes lib/admin/time-ago.ts | 29 +++++ lib/middleware/with-ctx-react.tsx | 99 +++++++++++++++ lib/middleware/with-db.ts | 9 +- lib/middleware/with-winter-spec.ts | 3 +- package.json | 4 + routes/_fake/admin.tsx | 197 +++++++++++++++++++++++++++++ routes/index.ts | 13 ++ routes/things/create.ts | 68 +++++++++- routes/things/delete.ts | 77 +++++++++++ 10 files changed, 491 insertions(+), 8 deletions(-) create mode 100644 lib/admin/time-ago.ts create mode 100644 lib/middleware/with-ctx-react.tsx create mode 100644 routes/_fake/admin.tsx create mode 100644 routes/index.ts create mode 100644 routes/things/delete.ts diff --git a/bun.lockb b/bun.lockb index 6c07805696407593d81f95417e12701a45978184..332e59053d00f88aa6d5e50d0e4e0da2c76fd961 100755 GIT binary patch delta 10793 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 delta 9588 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 Response } +> = async (req, ctx, next) => { + ctx.react = (component: ReactNode) => { + const pathComponents = new URL(req.url).pathname.split("/").filter(Boolean) + const timezone = req.headers.get("X-Timezone") || "UTC" + return new Response( + renderToString( + +