@ivogt/rsc-router 0.0.0-experimental.1

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 (123) hide show
  1. package/README.md +19 -0
  2. package/package.json +131 -0
  3. package/src/__mocks__/version.ts +6 -0
  4. package/src/__tests__/route-definition.test.ts +63 -0
  5. package/src/browser/event-controller.ts +876 -0
  6. package/src/browser/index.ts +18 -0
  7. package/src/browser/link-interceptor.ts +121 -0
  8. package/src/browser/lru-cache.ts +69 -0
  9. package/src/browser/merge-segment-loaders.ts +126 -0
  10. package/src/browser/navigation-bridge.ts +891 -0
  11. package/src/browser/navigation-client.ts +155 -0
  12. package/src/browser/navigation-store.ts +823 -0
  13. package/src/browser/partial-update.ts +545 -0
  14. package/src/browser/react/Link.tsx +248 -0
  15. package/src/browser/react/NavigationProvider.tsx +228 -0
  16. package/src/browser/react/ScrollRestoration.tsx +94 -0
  17. package/src/browser/react/context.ts +53 -0
  18. package/src/browser/react/index.ts +52 -0
  19. package/src/browser/react/location-state-shared.ts +120 -0
  20. package/src/browser/react/location-state.ts +62 -0
  21. package/src/browser/react/use-action.ts +240 -0
  22. package/src/browser/react/use-client-cache.ts +56 -0
  23. package/src/browser/react/use-handle.ts +178 -0
  24. package/src/browser/react/use-link-status.ts +134 -0
  25. package/src/browser/react/use-navigation.ts +150 -0
  26. package/src/browser/react/use-segments.ts +188 -0
  27. package/src/browser/request-controller.ts +149 -0
  28. package/src/browser/rsc-router.tsx +310 -0
  29. package/src/browser/scroll-restoration.ts +324 -0
  30. package/src/browser/server-action-bridge.ts +747 -0
  31. package/src/browser/shallow.ts +35 -0
  32. package/src/browser/types.ts +443 -0
  33. package/src/cache/__tests__/memory-segment-store.test.ts +487 -0
  34. package/src/cache/__tests__/memory-store.test.ts +484 -0
  35. package/src/cache/cache-scope.ts +565 -0
  36. package/src/cache/cf/__tests__/cf-cache-store.test.ts +361 -0
  37. package/src/cache/cf/cf-cache-store.ts +274 -0
  38. package/src/cache/cf/index.ts +19 -0
  39. package/src/cache/index.ts +52 -0
  40. package/src/cache/memory-segment-store.ts +150 -0
  41. package/src/cache/memory-store.ts +253 -0
  42. package/src/cache/types.ts +366 -0
  43. package/src/client.rsc.tsx +88 -0
  44. package/src/client.tsx +609 -0
  45. package/src/components/DefaultDocument.tsx +20 -0
  46. package/src/default-error-boundary.tsx +88 -0
  47. package/src/deps/browser.ts +8 -0
  48. package/src/deps/html-stream-client.ts +2 -0
  49. package/src/deps/html-stream-server.ts +2 -0
  50. package/src/deps/rsc.ts +10 -0
  51. package/src/deps/ssr.ts +2 -0
  52. package/src/errors.ts +259 -0
  53. package/src/handle.ts +120 -0
  54. package/src/handles/MetaTags.tsx +178 -0
  55. package/src/handles/index.ts +6 -0
  56. package/src/handles/meta.ts +247 -0
  57. package/src/href-client.ts +128 -0
  58. package/src/href.ts +139 -0
  59. package/src/index.rsc.ts +69 -0
  60. package/src/index.ts +84 -0
  61. package/src/loader.rsc.ts +204 -0
  62. package/src/loader.ts +47 -0
  63. package/src/network-error-thrower.tsx +21 -0
  64. package/src/outlet-context.ts +15 -0
  65. package/src/root-error-boundary.tsx +277 -0
  66. package/src/route-content-wrapper.tsx +198 -0
  67. package/src/route-definition.ts +1333 -0
  68. package/src/route-map-builder.ts +140 -0
  69. package/src/route-types.ts +148 -0
  70. package/src/route-utils.ts +89 -0
  71. package/src/router/__tests__/match-context.test.ts +104 -0
  72. package/src/router/__tests__/match-pipelines.test.ts +537 -0
  73. package/src/router/__tests__/match-result.test.ts +566 -0
  74. package/src/router/__tests__/on-error.test.ts +935 -0
  75. package/src/router/__tests__/pattern-matching.test.ts +577 -0
  76. package/src/router/error-handling.ts +287 -0
  77. package/src/router/handler-context.ts +60 -0
  78. package/src/router/loader-resolution.ts +326 -0
  79. package/src/router/manifest.ts +116 -0
  80. package/src/router/match-context.ts +261 -0
  81. package/src/router/match-middleware/background-revalidation.ts +236 -0
  82. package/src/router/match-middleware/cache-lookup.ts +261 -0
  83. package/src/router/match-middleware/cache-store.ts +250 -0
  84. package/src/router/match-middleware/index.ts +81 -0
  85. package/src/router/match-middleware/intercept-resolution.ts +268 -0
  86. package/src/router/match-middleware/segment-resolution.ts +174 -0
  87. package/src/router/match-pipelines.ts +214 -0
  88. package/src/router/match-result.ts +212 -0
  89. package/src/router/metrics.ts +62 -0
  90. package/src/router/middleware.test.ts +1355 -0
  91. package/src/router/middleware.ts +748 -0
  92. package/src/router/pattern-matching.ts +271 -0
  93. package/src/router/revalidation.ts +190 -0
  94. package/src/router/router-context.ts +299 -0
  95. package/src/router/types.ts +96 -0
  96. package/src/router.ts +3484 -0
  97. package/src/rsc/__tests__/helpers.test.ts +175 -0
  98. package/src/rsc/handler.ts +942 -0
  99. package/src/rsc/helpers.ts +64 -0
  100. package/src/rsc/index.ts +56 -0
  101. package/src/rsc/nonce.ts +18 -0
  102. package/src/rsc/types.ts +225 -0
  103. package/src/segment-system.tsx +405 -0
  104. package/src/server/__tests__/request-context.test.ts +171 -0
  105. package/src/server/context.ts +340 -0
  106. package/src/server/handle-store.ts +230 -0
  107. package/src/server/loader-registry.ts +174 -0
  108. package/src/server/request-context.ts +470 -0
  109. package/src/server/root-layout.tsx +10 -0
  110. package/src/server/tsconfig.json +14 -0
  111. package/src/server.ts +126 -0
  112. package/src/ssr/__tests__/ssr-handler.test.tsx +188 -0
  113. package/src/ssr/index.tsx +215 -0
  114. package/src/types.ts +1473 -0
  115. package/src/use-loader.tsx +346 -0
  116. package/src/vite/__tests__/expose-loader-id.test.ts +117 -0
  117. package/src/vite/expose-action-id.ts +344 -0
  118. package/src/vite/expose-handle-id.ts +209 -0
  119. package/src/vite/expose-loader-id.ts +357 -0
  120. package/src/vite/expose-location-state-id.ts +177 -0
  121. package/src/vite/index.ts +608 -0
  122. package/src/vite/version.d.ts +12 -0
  123. package/src/vite/virtual-entries.ts +109 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Default virtual entry file contents for rsc-router.
3
+ * These are used when users don't provide their own entry files.
4
+ */
5
+
6
+ export const VIRTUAL_ENTRY_BROWSER: string = `
7
+ import {
8
+ createFromReadableStream,
9
+ createFromFetch,
10
+ setServerCallback,
11
+ encodeReply,
12
+ createTemporaryReferenceSet,
13
+ } from "rsc-router/internal/deps/browser";
14
+ import { createElement, StrictMode } from "react";
15
+ import { hydrateRoot } from "react-dom/client";
16
+ import { rscStream } from "rsc-router/internal/deps/html-stream-client";
17
+ import { initBrowserApp, RSCRouter } from "rsc-router/browser";
18
+
19
+ async function initializeApp() {
20
+ const deps = {
21
+ createFromFetch,
22
+ createFromReadableStream,
23
+ encodeReply,
24
+ setServerCallback,
25
+ createTemporaryReferenceSet,
26
+ };
27
+
28
+ await initBrowserApp({ rscStream, deps });
29
+
30
+ hydrateRoot(
31
+ document,
32
+ createElement(StrictMode, null, createElement(RSCRouter))
33
+ );
34
+ }
35
+
36
+ initializeApp().catch(console.error);
37
+ `.trim();
38
+
39
+ export const VIRTUAL_ENTRY_SSR: string = `
40
+ import { createFromReadableStream } from "rsc-router/internal/deps/ssr";
41
+ import { renderToReadableStream } from "react-dom/server.edge";
42
+ import { injectRSCPayload } from "rsc-router/internal/deps/html-stream-server";
43
+ import { createSSRHandler } from "rsc-router/ssr";
44
+
45
+ export const renderHTML = createSSRHandler({
46
+ createFromReadableStream,
47
+ renderToReadableStream,
48
+ injectRSCPayload,
49
+ loadBootstrapScriptContent: () =>
50
+ import.meta.viteRsc.loadBootstrapScriptContent("index"),
51
+ });
52
+ `.trim();
53
+
54
+ /**
55
+ * Generate the RSC entry content with the specified router path
56
+ */
57
+ export function getVirtualEntryRSC(routerPath: string): string {
58
+ return `
59
+ import {
60
+ renderToReadableStream,
61
+ decodeReply,
62
+ createTemporaryReferenceSet,
63
+ loadServerAction,
64
+ decodeAction,
65
+ decodeFormState,
66
+ } from "rsc-router/internal/deps/rsc";
67
+ import { router } from "${routerPath}";
68
+ import { createRSCHandler } from "rsc-router/rsc";
69
+ import { VERSION } from "rsc-router:version";
70
+
71
+ // Import loader manifest to ensure all fetchable loaders are registered at startup
72
+ // This is critical for serverless/multi-process deployments where the loader module
73
+ // might not be imported before a GET request arrives
74
+ import "virtual:rsc-router/loader-manifest";
75
+
76
+ export default createRSCHandler({
77
+ router,
78
+ version: VERSION,
79
+ deps: {
80
+ renderToReadableStream,
81
+ decodeReply,
82
+ createTemporaryReferenceSet,
83
+ loadServerAction,
84
+ decodeAction,
85
+ decodeFormState,
86
+ },
87
+ loadSSRModule: () =>
88
+ import.meta.viteRsc.loadModule("ssr", "index"),
89
+ });
90
+ `.trim();
91
+ }
92
+
93
+ /**
94
+ * Virtual module IDs
95
+ */
96
+ export const VIRTUAL_IDS = {
97
+ browser: "virtual:rsc-router/entry.browser.js",
98
+ ssr: "virtual:rsc-router/entry.ssr.js",
99
+ rsc: "virtual:rsc-router/entry.rsc.js",
100
+ version: "rsc-router:version",
101
+ } as const;
102
+
103
+ /**
104
+ * Virtual module content for version.
105
+ * Exports VERSION - a timestamp that changes on server restart (dev) or at build time (production).
106
+ */
107
+ export function getVirtualVersionContent(version: string): string {
108
+ return `export const VERSION = ${JSON.stringify(version)};`;
109
+ }