@sigil-dev/grimoire 0.7.5 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.grimoire/_routes.dom.js +8 -0
  2. package/.grimoire/_routes.hydrate.js +8 -0
  3. package/.grimoire/tsconfig.generated.json +11 -0
  4. package/.grimoire/types/ambient.d.ts +59 -0
  5. package/.grimoire/types/api/hello/$types.d.ts +50 -0
  6. package/.grimoire/types/api/items/$types.d.ts +50 -0
  7. package/.grimoire/types/echo/$types.d.ts +50 -0
  8. package/.grimoire/types/env-private.d.ts +5 -0
  9. package/.grimoire/types/env-public.d.ts +5 -0
  10. package/.grimoire/types/mixed/$types.d.ts +50 -0
  11. package/.grimoire/types/params/[docId]/$types.d.ts +52 -0
  12. package/.grimoire/types/reject/$types.d.ts +50 -0
  13. package/index.ts +21 -20
  14. package/package.json +13 -7
  15. package/preload.js +3 -0
  16. package/public/__grimoire__/hydrate.js +585 -0
  17. package/public/__grimoire__/index.js +490 -0
  18. package/server.ts +13 -13
  19. package/src/client/head.ts +29 -0
  20. package/src/client/router.ts +254 -40
  21. package/src/dev/compile-module.ts +173 -0
  22. package/src/dev/effect-registry.ts +23 -0
  23. package/src/dev/graph.ts +114 -0
  24. package/src/dev/hmr-client.ts +158 -0
  25. package/src/dev/hmr-server.ts +187 -0
  26. package/src/dev/loader.ts +47 -0
  27. package/src/dev/paths.ts +14 -0
  28. package/src/dev/runtime-bundle.ts +49 -0
  29. package/src/dev/watcher.ts +44 -0
  30. package/src/env/index.ts +25 -0
  31. package/src/env/plugin.ts +13 -0
  32. package/src/env/private.ts +5 -0
  33. package/src/env/public.ts +7 -0
  34. package/src/env/typegen.ts +51 -0
  35. package/src/integrations/vite.ts +1 -0
  36. package/src/rendering/head.ts +22 -2
  37. package/src/rendering/hydrate.ts +111 -18
  38. package/src/rendering/index.ts +263 -153
  39. package/src/rendering/ssrPlugin.ts +59 -39
  40. package/src/routing/manifest-gen.ts +18 -2
  41. package/src/routing/router.ts +94 -83
  42. package/src/routing/scanner.ts +26 -14
  43. package/src/routing/transform-routes.ts +68 -68
  44. package/src/server/build.ts +225 -76
  45. package/src/server/coordinator.ts +9 -0
  46. package/src/server/hooks.ts +24 -3
  47. package/src/server/index.ts +388 -104
  48. package/src/typegen/index.ts +30 -14
  49. package/src/types.ts +12 -2
  50. package/test/middleware.test.ts +6 -4
  51. package/test/rendering.test.ts +510 -356
  52. package/test/routing.test.ts +36 -0
  53. package/test/scanning.test.ts +39 -8
  54. package/test/scope.test.ts +24 -8
  55. package/test/server.test.ts +27 -7
  56. package/test/streaming.test.ts +117 -98
  57. package/test/typegen.test.ts +52 -24
  58. package/tsconfig.json +1 -0
@@ -94,6 +94,7 @@ function makeRouteFile(
94
94
  path: "/",
95
95
  clientPath: "/src/routes/+page.tsx",
96
96
  paramNames: [],
97
+ restParamNames: [],
97
98
  ...overrides,
98
99
  };
99
100
  }
@@ -302,6 +303,15 @@ export async function POST() { return Response.json({}); }`,
302
303
  join(tmpDir, "src", "routes", "about.tsx"),
303
304
  "export default () => null;",
304
305
  );
306
+
307
+ // Rest (catch-all) param route
308
+ await mkdir(join(tmpDir, "src", "routes", "files", "[...path]"), {
309
+ recursive: true,
310
+ });
311
+ await writeFile(
312
+ join(tmpDir, "src", "routes", "files", "[...path]", "+server.ts"),
313
+ `export async function GET() { return new Response("ok"); }`,
314
+ );
305
315
  });
306
316
 
307
317
  afterAll(async () => {
@@ -471,7 +481,7 @@ describe("generateTypes — route with +page.server.ts", () => {
471
481
  });
472
482
 
473
483
  describe("generateTypes — +layout.server.ts", () => {
474
- test("LayoutData inferred from load() via ReturnType", async () => {
484
+ test("LayoutData inferred from load() via typeof import", async () => {
475
485
  const content = await readGenerated("src/routes/blog");
476
486
  expect(content).toMatch(/type _LS = typeof import\("/);
477
487
  expect(content).toContain(
@@ -508,34 +518,43 @@ describe("generateTypes — +error.tsx", () => {
508
518
  test("generates ErrorProps type", async () => {
509
519
  const content = await readGenerated("src/routes");
510
520
  expect(content).toContain(
511
- "export type ErrorProps = { status: number; message: string };",
521
+ "export type ErrorProps = { status: number; message: string; error: unknown; route: string };",
512
522
  );
513
523
  });
514
524
  });
515
525
 
516
- describe("generateTypes — clears stale output", () => {
517
- test("removes files from a deleted route on re-run", async () => {
518
- // First run already happened in beforeAll via runGenerate()
519
- // Write a stale file manually
520
- const staleDir = join(
521
- tmpDir,
522
- ".grimoire",
523
- "types",
524
- "src",
525
- "routes",
526
- "old-route",
527
- );
528
- await mkdir(staleDir, { recursive: true });
529
- await writeFile(join(staleDir, "$types.d.ts"), "// stale");
530
-
531
- // Re-run
532
- await runGenerate();
533
-
534
- // Stale file should be gone
535
- expect(existsSync(join(staleDir, "$types.d.ts"))).toBe(false);
526
+ describe("generateTypes — rest (catch-all) params", () => {
527
+ test("Params includes rest param name as string", async () => {
528
+ const content = await readGenerated("src/routes/files/[...path]");
529
+ expect(content).toContain("path: string;");
530
+ expect(content).toMatch(/export type Params = \{\s+path: string;\s+\};/);
536
531
  });
537
532
  });
538
533
 
534
+ // This behavior no lnger exists
535
+ // describe("generateTypes — clears stale output", () => {
536
+ // test("removes files from a deleted route on re-run", async () => {
537
+ // // First run already happened in beforeAll via runGenerate()
538
+ // // Write a stale file manually
539
+ // const staleDir = join(
540
+ // tmpDir,
541
+ // ".grimoire",
542
+ // "types",
543
+ // "src",
544
+ // "routes",
545
+ // "old-route",
546
+ // );
547
+ // await mkdir(staleDir, { recursive: true });
548
+ // await writeFile(join(staleDir, "$types.d.ts"), "// stale");
549
+
550
+ // // Re-run
551
+ // await runGenerate();
552
+
553
+ // // Stale file should be gone
554
+ // expect(existsSync(join(staleDir, "$types.d.ts"))).toBe(false);
555
+ // });
556
+ // });
557
+
539
558
  // ---------------------------------------------------------------------------
540
559
  // tsc integration — proves the generated types actually type-check
541
560
  // ---------------------------------------------------------------------------
@@ -603,10 +622,19 @@ export {};`,
603
622
  });
604
623
 
605
624
  function runTsc(cwd: string) {
606
- return Bun.spawnSync(
607
- [process.execPath, "x", "tsc", "--noEmit", "--project", "tsconfig.json"],
625
+ const proc = Bun.spawnSync(
626
+ [
627
+ process.execPath,
628
+ "x",
629
+ "--bun",
630
+ "@typescript/native-preview",
631
+ "--noEmit",
632
+ "--project",
633
+ "tsconfig.json",
634
+ ],
608
635
  { cwd },
609
636
  );
637
+ return proc;
610
638
  }
611
639
 
612
640
  test("check.ts with correct types passes tsc", () => {
package/tsconfig.json CHANGED
@@ -3,6 +3,7 @@
3
3
  "module": "Preserve",
4
4
  "moduleResolution": "bundler",
5
5
  "lib": ["ESNext", "DOM"],
6
+ "target": "ESNext",
6
7
  "allowImportingTsExtensions": true,
7
8
  "noEmit": true
8
9
  }