@reckona/mreact-router 0.0.160 → 0.0.162

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 (183) hide show
  1. package/dist/actions.d.ts +6 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js.map +1 -1
  4. package/dist/adapters/aws-lambda.d.ts +29 -0
  5. package/dist/adapters/aws-lambda.d.ts.map +1 -1
  6. package/dist/adapters/aws-lambda.js.map +1 -1
  7. package/dist/adapters/cloudflare.d.ts +78 -0
  8. package/dist/adapters/cloudflare.d.ts.map +1 -1
  9. package/dist/adapters/cloudflare.js.map +1 -1
  10. package/dist/adapters/edge.d.ts +6 -0
  11. package/dist/adapters/edge.d.ts.map +1 -1
  12. package/dist/adapters/edge.js.map +1 -1
  13. package/dist/adapters/node.d.ts +7 -0
  14. package/dist/adapters/node.d.ts.map +1 -1
  15. package/dist/adapters/node.js.map +1 -1
  16. package/dist/adapters/static.d.ts +6 -0
  17. package/dist/adapters/static.d.ts.map +1 -1
  18. package/dist/adapters/static.js.map +1 -1
  19. package/dist/app-router-globals.d.ts +6 -0
  20. package/dist/app-router-globals.d.ts.map +1 -1
  21. package/dist/app-router-globals.js.map +1 -1
  22. package/dist/assets.d.ts +18 -0
  23. package/dist/assets.d.ts.map +1 -1
  24. package/dist/assets.js +6 -0
  25. package/dist/assets.js.map +1 -1
  26. package/dist/build.d.ts +30 -0
  27. package/dist/build.d.ts.map +1 -1
  28. package/dist/build.js +4 -0
  29. package/dist/build.js.map +1 -1
  30. package/dist/cache-stats.d.ts +3 -0
  31. package/dist/cache-stats.d.ts.map +1 -1
  32. package/dist/cache-stats.js.map +1 -1
  33. package/dist/cache.d.ts +15 -0
  34. package/dist/cache.d.ts.map +1 -1
  35. package/dist/cache.js.map +1 -1
  36. package/dist/cli-options.d.ts.map +1 -1
  37. package/dist/cli-options.js +2 -0
  38. package/dist/cli-options.js.map +1 -1
  39. package/dist/cli.js +1 -0
  40. package/dist/cli.js.map +1 -1
  41. package/dist/config.d.ts +15 -0
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js.map +1 -1
  44. package/dist/cookies.d.ts +3 -0
  45. package/dist/cookies.d.ts.map +1 -1
  46. package/dist/cookies.js.map +1 -1
  47. package/dist/csrf.d.ts +12 -0
  48. package/dist/csrf.d.ts.map +1 -1
  49. package/dist/csrf.js +12 -0
  50. package/dist/csrf.js.map +1 -1
  51. package/dist/deferred.d.ts +9 -0
  52. package/dist/deferred.d.ts.map +1 -1
  53. package/dist/deferred.js +6 -0
  54. package/dist/deferred.js.map +1 -1
  55. package/dist/dev-server.d.ts +3 -0
  56. package/dist/dev-server.d.ts.map +1 -1
  57. package/dist/dev-server.js.map +1 -1
  58. package/dist/file-conventions.d.ts +3 -0
  59. package/dist/file-conventions.d.ts.map +1 -1
  60. package/dist/file-conventions.js.map +1 -1
  61. package/dist/i18n.d.ts +15 -0
  62. package/dist/i18n.d.ts.map +1 -1
  63. package/dist/i18n.js +6 -0
  64. package/dist/i18n.js.map +1 -1
  65. package/dist/import-policy.d.ts +3 -0
  66. package/dist/import-policy.d.ts.map +1 -1
  67. package/dist/import-policy.js.map +1 -1
  68. package/dist/index.d.ts +19 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +10 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/link.d.ts +34 -0
  73. package/dist/link.d.ts.map +1 -1
  74. package/dist/link.js.map +1 -1
  75. package/dist/logger.d.ts +33 -0
  76. package/dist/logger.d.ts.map +1 -1
  77. package/dist/logger.js.map +1 -1
  78. package/dist/multipart.d.ts +15 -0
  79. package/dist/multipart.d.ts.map +1 -1
  80. package/dist/multipart.js +3 -0
  81. package/dist/multipart.js.map +1 -1
  82. package/dist/native-escape.d.ts +3 -0
  83. package/dist/native-escape.d.ts.map +1 -1
  84. package/dist/native-escape.js +3 -0
  85. package/dist/native-escape.js.map +1 -1
  86. package/dist/navigation-state.d.ts +15 -0
  87. package/dist/navigation-state.d.ts.map +1 -1
  88. package/dist/navigation-state.js +6 -0
  89. package/dist/navigation-state.js.map +1 -1
  90. package/dist/navigation.d.ts +9 -0
  91. package/dist/navigation.d.ts.map +1 -1
  92. package/dist/navigation.js +6 -0
  93. package/dist/navigation.js.map +1 -1
  94. package/dist/prerender-store.d.ts +21 -0
  95. package/dist/prerender-store.d.ts.map +1 -1
  96. package/dist/prerender-store.js +9 -0
  97. package/dist/prerender-store.js.map +1 -1
  98. package/dist/render.d.ts +12 -0
  99. package/dist/render.d.ts.map +1 -1
  100. package/dist/render.js +3 -0
  101. package/dist/render.js.map +1 -1
  102. package/dist/routes.d.ts +30 -0
  103. package/dist/routes.d.ts.map +1 -1
  104. package/dist/routes.js +6 -0
  105. package/dist/routes.js.map +1 -1
  106. package/dist/runtime-cache.d.ts +4 -0
  107. package/dist/runtime-cache.d.ts.map +1 -1
  108. package/dist/runtime-cache.js +3 -0
  109. package/dist/runtime-cache.js.map +1 -1
  110. package/dist/runtime-state.d.ts +3 -0
  111. package/dist/runtime-state.d.ts.map +1 -1
  112. package/dist/runtime-state.js +3 -0
  113. package/dist/runtime-state.js.map +1 -1
  114. package/dist/serve.d.ts +24 -0
  115. package/dist/serve.d.ts.map +1 -1
  116. package/dist/serve.js +6 -0
  117. package/dist/serve.js.map +1 -1
  118. package/dist/session.d.ts +12 -0
  119. package/dist/session.d.ts.map +1 -1
  120. package/dist/session.js.map +1 -1
  121. package/dist/stream-list.d.ts +12 -0
  122. package/dist/stream-list.d.ts.map +1 -1
  123. package/dist/stream-list.js +3 -0
  124. package/dist/stream-list.js.map +1 -1
  125. package/dist/trace.d.ts +30 -0
  126. package/dist/trace.d.ts.map +1 -1
  127. package/dist/trace.js +6 -0
  128. package/dist/trace.js.map +1 -1
  129. package/dist/typed-routes.d.ts +33 -0
  130. package/dist/typed-routes.d.ts.map +1 -1
  131. package/dist/typed-routes.js.map +1 -1
  132. package/dist/types.d.ts +72 -0
  133. package/dist/types.d.ts.map +1 -1
  134. package/dist/types.js.map +1 -1
  135. package/dist/upgrade.d.ts +3 -0
  136. package/dist/upgrade.d.ts.map +1 -1
  137. package/dist/upgrade.js.map +1 -1
  138. package/dist/vite.d.ts +21 -0
  139. package/dist/vite.d.ts.map +1 -1
  140. package/dist/vite.js +15 -0
  141. package/dist/vite.js.map +1 -1
  142. package/package.json +11 -11
  143. package/src/actions.ts +6 -0
  144. package/src/adapters/aws-lambda.ts +29 -0
  145. package/src/adapters/cloudflare.ts +78 -0
  146. package/src/adapters/edge.ts +6 -0
  147. package/src/adapters/node.ts +7 -0
  148. package/src/adapters/static.ts +6 -0
  149. package/src/app-router-globals.ts +6 -0
  150. package/src/assets.ts +18 -0
  151. package/src/build.ts +38 -0
  152. package/src/cache-stats.ts +3 -0
  153. package/src/cache.ts +15 -0
  154. package/src/cli-options.ts +2 -0
  155. package/src/cli.ts +1 -0
  156. package/src/config.ts +15 -0
  157. package/src/cookies.ts +3 -0
  158. package/src/csrf.ts +12 -0
  159. package/src/deferred.ts +9 -0
  160. package/src/dev-server.ts +3 -0
  161. package/src/file-conventions.ts +3 -0
  162. package/src/i18n.ts +15 -0
  163. package/src/import-policy.ts +3 -0
  164. package/src/index.ts +19 -0
  165. package/src/link.ts +34 -0
  166. package/src/logger.ts +33 -0
  167. package/src/multipart.ts +15 -0
  168. package/src/native-escape.ts +3 -0
  169. package/src/navigation-state.ts +15 -0
  170. package/src/navigation.ts +9 -0
  171. package/src/prerender-store.ts +21 -0
  172. package/src/render.ts +12 -0
  173. package/src/routes.ts +30 -0
  174. package/src/runtime-cache.ts +5 -0
  175. package/src/runtime-state.ts +3 -0
  176. package/src/serve.ts +24 -0
  177. package/src/session.ts +12 -0
  178. package/src/stream-list.ts +12 -0
  179. package/src/trace.ts +30 -0
  180. package/src/typed-routes.ts +33 -0
  181. package/src/types.ts +72 -0
  182. package/src/upgrade.ts +3 -0
  183. package/src/vite.ts +21 -0
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Splits an input list into pending batches that load their items asynchronously.
3
+ */
1
4
  export function streamList(items, options) {
2
5
  const requestedBatchSize = Math.floor(options.batchSize);
3
6
  const batchSize = Number.isFinite(requestedBatchSize) ? Math.max(1, requestedBatchSize) : 1;
@@ -1 +1 @@
1
- {"version":3,"file":"stream-list.js","sourceRoot":"","sources":["../src/stream-list.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,UAAU,CACxB,KAAwB,EACxB,OAAyC;IAEzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAyC,EAAE,CAAC;IAEzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,IAAI;YACP,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5E,GAAG,IAAI;gBACP,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;aACnB,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["export interface StreamListBatch<TItem> {\n index: number;\n items: TItem[];\n size: number;\n start: number;\n}\n\nexport interface StreamListPendingBatch<TItem> {\n index: number;\n size: number;\n start: number;\n value: Promise<StreamListBatch<TItem>>;\n}\n\nexport interface StreamListOptions<TInput, TItem> {\n batchSize: number;\n loadBatch: (\n items: readonly TInput[],\n batch: { index: number; size: number; start: number },\n ) => PromiseLike<readonly TItem[]> | readonly TItem[];\n}\n\nexport function streamList<TInput, TItem = TInput>(\n items: readonly TInput[],\n options: StreamListOptions<TInput, TItem>,\n): Array<StreamListPendingBatch<TItem>> {\n const requestedBatchSize = Math.floor(options.batchSize);\n const batchSize = Number.isFinite(requestedBatchSize) ? Math.max(1, requestedBatchSize) : 1;\n const batches: Array<StreamListPendingBatch<TItem>> = [];\n\n for (let start = 0; start < items.length; start += batchSize) {\n const batchItems = items.slice(start, start + batchSize);\n const index = batches.length;\n const meta = { index, size: batchItems.length, start };\n batches.push({\n ...meta,\n value: Promise.resolve(options.loadBatch(batchItems, meta)).then((loaded) => ({\n ...meta,\n items: [...loaded],\n })),\n });\n }\n\n return batches;\n}\n"]}
1
+ {"version":3,"file":"stream-list.js","sourceRoot":"","sources":["../src/stream-list.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,KAAwB,EACxB,OAAyC;IAEzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAyC,EAAE,CAAC;IAEzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,IAAI;YACP,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5E,GAAG,IAAI;gBACP,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;aACnB,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/**\n * Represents one resolved batch emitted by `streamList()`.\n */\nexport interface StreamListBatch<TItem> {\n index: number;\n items: TItem[];\n size: number;\n start: number;\n}\n\n/**\n * Represents one pending batch and its eventual loaded items.\n */\nexport interface StreamListPendingBatch<TItem> {\n index: number;\n size: number;\n start: number;\n value: Promise<StreamListBatch<TItem>>;\n}\n\n/**\n * Configures how a list is divided into asynchronous batches.\n */\nexport interface StreamListOptions<TInput, TItem> {\n batchSize: number;\n loadBatch: (\n items: readonly TInput[],\n batch: { index: number; size: number; start: number },\n ) => PromiseLike<readonly TItem[]> | readonly TItem[];\n}\n\n/**\n * Splits an input list into pending batches that load their items asynchronously.\n */\nexport function streamList<TInput, TItem = TInput>(\n items: readonly TInput[],\n options: StreamListOptions<TInput, TItem>,\n): Array<StreamListPendingBatch<TItem>> {\n const requestedBatchSize = Math.floor(options.batchSize);\n const batchSize = Number.isFinite(requestedBatchSize) ? Math.max(1, requestedBatchSize) : 1;\n const batches: Array<StreamListPendingBatch<TItem>> = [];\n\n for (let start = 0; start < items.length; start += batchSize) {\n const batchItems = items.slice(start, start + batchSize);\n const index = batches.length;\n const meta = { index, size: batchItems.length, start };\n batches.push({\n ...meta,\n value: Promise.resolve(options.loadBatch(batchItems, meta)).then((loaded) => ({\n ...meta,\n items: [...loaded],\n })),\n });\n }\n\n return batches;\n}\n"]}
package/dist/trace.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Represents parsed W3C trace context headers for router instrumentation.
3
+ */
1
4
  export interface RouterTraceContext {
2
5
  parentSpanId: string;
3
6
  sampled: boolean;
@@ -5,28 +8,49 @@ export interface RouterTraceContext {
5
8
  traceparent: string;
6
9
  tracestate?: string;
7
10
  }
11
+ /**
12
+ * Describes a router request lifecycle instrumentation event.
13
+ */
8
14
  export interface RouterRequestInstrumentationEvent {
9
15
  method: string;
10
16
  path: string;
11
17
  request: Request;
12
18
  trace?: RouterTraceContext;
13
19
  }
20
+ /**
21
+ * Describes completion of a router request lifecycle event.
22
+ */
14
23
  export interface RouterRequestEndInstrumentationEvent extends RouterRequestInstrumentationEvent {
15
24
  status: number;
16
25
  }
26
+ /**
27
+ * Describes a route-level loader or render instrumentation event.
28
+ */
17
29
  export interface RouterRouteInstrumentationEvent extends RouterRequestInstrumentationEvent {
18
30
  routeId: string;
19
31
  routePath: string;
20
32
  }
33
+ /**
34
+ * Describes completion of a route-level instrumentation event.
35
+ */
21
36
  export interface RouterRouteEndInstrumentationEvent extends RouterRouteInstrumentationEvent {
22
37
  error?: unknown;
23
38
  }
39
+ /**
40
+ * Describes a middleware instrumentation event.
41
+ */
24
42
  export interface RouterMiddlewareInstrumentationEvent extends RouterRequestInstrumentationEvent {
25
43
  name: string;
26
44
  }
45
+ /**
46
+ * Describes completion of a middleware instrumentation event.
47
+ */
27
48
  export interface RouterMiddlewareEndInstrumentationEvent extends RouterMiddlewareInstrumentationEvent {
28
49
  error?: unknown;
29
50
  }
51
+ /**
52
+ * Registers optional hooks for app-router request, middleware, and route instrumentation.
53
+ */
30
54
  export interface RouterInstrumentation {
31
55
  onLoaderEnd?: (event: RouterRouteEndInstrumentationEvent) => void | Promise<void>;
32
56
  onLoaderStart?: (event: RouterRouteInstrumentationEvent) => void | Promise<void>;
@@ -35,7 +59,13 @@ export interface RouterInstrumentation {
35
59
  onRequestEnd?: (event: RouterRequestEndInstrumentationEvent) => void | Promise<void>;
36
60
  onRequestStart?: (event: RouterRequestInstrumentationEvent) => void | Promise<void>;
37
61
  }
62
+ /**
63
+ * Parses W3C trace context header values for router instrumentation.
64
+ */
38
65
  export declare function parseTraceContext(traceparent: string | null | undefined, tracestate: string | null | undefined): RouterTraceContext | undefined;
66
+ /**
67
+ * Reads trace context headers from a request.
68
+ */
39
69
  export declare function traceContextFromRequest(request: Request): RouterTraceContext | undefined;
40
70
  export declare function invokeRouterInstrumentation<Event>(callback: ((event: Event) => void | Promise<void>) | undefined, event: Event): void;
41
71
  //# sourceMappingURL=trace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,oCACf,SAAQ,iCAAiC;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,+BACf,SAAQ,iCAAiC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCACf,SAAQ,+BAA+B;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oCACf,SAAQ,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uCACf,SAAQ,oCAAoC;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,uCAAuC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,kBAAkB,GAAG,SAAS,CA4BhC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAExF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAC9D,KAAK,EAAE,KAAK,GACX,IAAI,CAcN"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oCACf,SAAQ,iCAAiC;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,+BACf,SAAQ,iCAAiC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kCACf,SAAQ,+BAA+B;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oCACf,SAAQ,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,uCACf,SAAQ,oCAAoC;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,uCAAuC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,kBAAkB,GAAG,SAAS,CA4BhC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAExF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAC9D,KAAK,EAAE,KAAK,GACX,IAAI,CAcN"}
package/dist/trace.js CHANGED
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Parses W3C trace context header values for router instrumentation.
3
+ */
1
4
  export function parseTraceContext(traceparent, tracestate) {
2
5
  if (traceparent === null || traceparent === undefined) {
3
6
  return undefined;
@@ -20,6 +23,9 @@ export function parseTraceContext(traceparent, tracestate) {
20
23
  ...(tracestate === null || tracestate === undefined ? {} : { tracestate }),
21
24
  };
22
25
  }
26
+ /**
27
+ * Reads trace context headers from a request.
28
+ */
23
29
  export function traceContextFromRequest(request) {
24
30
  return parseTraceContext(request.headers.get("traceparent"), request.headers.get("tracestate"));
25
31
  }
package/dist/trace.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAkDA,MAAM,UAAU,iBAAiB,CAC/B,WAAsC,EACtC,UAAqC;IAErC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,8DAA8D,CAAC,IAAI,CAC/E,WAAW,CACZ,CAAC;IAEF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,YAAY;QACZ,OAAO,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,OAAO;QACP,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;QACtC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA8D,EAC9D,KAAY;IAEZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAClC,CAAC;AACJ,CAAC","sourcesContent":["export interface RouterTraceContext {\n parentSpanId: string;\n sampled: boolean;\n traceId: string;\n traceparent: string;\n tracestate?: string;\n}\n\nexport interface RouterRequestInstrumentationEvent {\n method: string;\n path: string;\n request: Request;\n trace?: RouterTraceContext;\n}\n\nexport interface RouterRequestEndInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n status: number;\n}\n\nexport interface RouterRouteInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n routeId: string;\n routePath: string;\n}\n\nexport interface RouterRouteEndInstrumentationEvent\n extends RouterRouteInstrumentationEvent {\n error?: unknown;\n}\n\nexport interface RouterMiddlewareInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n name: string;\n}\n\nexport interface RouterMiddlewareEndInstrumentationEvent\n extends RouterMiddlewareInstrumentationEvent {\n error?: unknown;\n}\n\nexport interface RouterInstrumentation {\n onLoaderEnd?: (event: RouterRouteEndInstrumentationEvent) => void | Promise<void>;\n onLoaderStart?: (event: RouterRouteInstrumentationEvent) => void | Promise<void>;\n onMiddlewareEnd?: (event: RouterMiddlewareEndInstrumentationEvent) => void | Promise<void>;\n onMiddlewareStart?: (event: RouterMiddlewareInstrumentationEvent) => void | Promise<void>;\n onRequestEnd?: (event: RouterRequestEndInstrumentationEvent) => void | Promise<void>;\n onRequestStart?: (event: RouterRequestInstrumentationEvent) => void | Promise<void>;\n}\n\nexport function parseTraceContext(\n traceparent: string | null | undefined,\n tracestate: string | null | undefined,\n): RouterTraceContext | undefined {\n if (traceparent === null || traceparent === undefined) {\n return undefined;\n }\n\n const match = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i.exec(\n traceparent,\n );\n\n if (match === null) {\n return undefined;\n }\n\n const traceId = match[2]?.toLowerCase() ?? \"\";\n const parentSpanId = match[3]?.toLowerCase() ?? \"\";\n const flags = Number.parseInt(match[4] ?? \"00\", 16);\n\n if (/^0+$/.test(traceId) || /^0+$/.test(parentSpanId)) {\n return undefined;\n }\n\n return {\n parentSpanId,\n sampled: (flags & 1) === 1,\n traceId,\n traceparent: traceparent.toLowerCase(),\n ...(tracestate === null || tracestate === undefined ? {} : { tracestate }),\n };\n}\n\nexport function traceContextFromRequest(request: Request): RouterTraceContext | undefined {\n return parseTraceContext(request.headers.get(\"traceparent\"), request.headers.get(\"tracestate\"));\n}\n\nexport function invokeRouterInstrumentation<Event>(\n callback: ((event: Event) => void | Promise<void>) | undefined,\n event: Event,\n): void {\n if (callback === undefined) {\n return;\n }\n\n try {\n const result = callback(event);\n\n if (isPromiseLike(result)) {\n result.catch(() => {});\n }\n } catch {\n // Instrumentation is best-effort and must never affect request handling.\n }\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"catch\" in value &&\n typeof value.catch === \"function\"\n );\n}\n"]}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AA0EA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAsC,EACtC,UAAqC;IAErC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,8DAA8D,CAAC,IAAI,CAC/E,WAAW,CACZ,CAAC;IAEF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,YAAY;QACZ,OAAO,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,OAAO;QACP,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;QACtC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA8D,EAC9D,KAAY;IAEZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAClC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Represents parsed W3C trace context headers for router instrumentation.\n */\nexport interface RouterTraceContext {\n parentSpanId: string;\n sampled: boolean;\n traceId: string;\n traceparent: string;\n tracestate?: string;\n}\n\n/**\n * Describes a router request lifecycle instrumentation event.\n */\nexport interface RouterRequestInstrumentationEvent {\n method: string;\n path: string;\n request: Request;\n trace?: RouterTraceContext;\n}\n\n/**\n * Describes completion of a router request lifecycle event.\n */\nexport interface RouterRequestEndInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n status: number;\n}\n\n/**\n * Describes a route-level loader or render instrumentation event.\n */\nexport interface RouterRouteInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n routeId: string;\n routePath: string;\n}\n\n/**\n * Describes completion of a route-level instrumentation event.\n */\nexport interface RouterRouteEndInstrumentationEvent\n extends RouterRouteInstrumentationEvent {\n error?: unknown;\n}\n\n/**\n * Describes a middleware instrumentation event.\n */\nexport interface RouterMiddlewareInstrumentationEvent\n extends RouterRequestInstrumentationEvent {\n name: string;\n}\n\n/**\n * Describes completion of a middleware instrumentation event.\n */\nexport interface RouterMiddlewareEndInstrumentationEvent\n extends RouterMiddlewareInstrumentationEvent {\n error?: unknown;\n}\n\n/**\n * Registers optional hooks for app-router request, middleware, and route instrumentation.\n */\nexport interface RouterInstrumentation {\n onLoaderEnd?: (event: RouterRouteEndInstrumentationEvent) => void | Promise<void>;\n onLoaderStart?: (event: RouterRouteInstrumentationEvent) => void | Promise<void>;\n onMiddlewareEnd?: (event: RouterMiddlewareEndInstrumentationEvent) => void | Promise<void>;\n onMiddlewareStart?: (event: RouterMiddlewareInstrumentationEvent) => void | Promise<void>;\n onRequestEnd?: (event: RouterRequestEndInstrumentationEvent) => void | Promise<void>;\n onRequestStart?: (event: RouterRequestInstrumentationEvent) => void | Promise<void>;\n}\n\n/**\n * Parses W3C trace context header values for router instrumentation.\n */\nexport function parseTraceContext(\n traceparent: string | null | undefined,\n tracestate: string | null | undefined,\n): RouterTraceContext | undefined {\n if (traceparent === null || traceparent === undefined) {\n return undefined;\n }\n\n const match = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i.exec(\n traceparent,\n );\n\n if (match === null) {\n return undefined;\n }\n\n const traceId = match[2]?.toLowerCase() ?? \"\";\n const parentSpanId = match[3]?.toLowerCase() ?? \"\";\n const flags = Number.parseInt(match[4] ?? \"00\", 16);\n\n if (/^0+$/.test(traceId) || /^0+$/.test(parentSpanId)) {\n return undefined;\n }\n\n return {\n parentSpanId,\n sampled: (flags & 1) === 1,\n traceId,\n traceparent: traceparent.toLowerCase(),\n ...(tracestate === null || tracestate === undefined ? {} : { tracestate }),\n };\n}\n\n/**\n * Reads trace context headers from a request.\n */\nexport function traceContextFromRequest(request: Request): RouterTraceContext | undefined {\n return parseTraceContext(request.headers.get(\"traceparent\"), request.headers.get(\"tracestate\"));\n}\n\nexport function invokeRouterInstrumentation<Event>(\n callback: ((event: Event) => void | Promise<void>) | undefined,\n event: Event,\n): void {\n if (callback === undefined) {\n return;\n }\n\n try {\n const result = callback(event);\n\n if (isPromiseLike(result)) {\n result.catch(() => {});\n }\n } catch {\n // Instrumentation is best-effort and must never affect request handling.\n }\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"catch\" in value &&\n typeof value.catch === \"function\"\n );\n}\n"]}
@@ -1,12 +1,33 @@
1
+ /**
2
+ * Represents a value accepted in generated route search params.
3
+ */
1
4
  export type RouteSearchValue = boolean | number | string | null | undefined;
5
+ /**
6
+ * Represents search params accepted by typed route href helpers.
7
+ */
2
8
  export type RouteSearchParams = Record<string, RouteSearchValue | readonly RouteSearchValue[]>;
9
+ /**
10
+ * Extracts dynamic and catch-all params from an app route path pattern.
11
+ */
3
12
  export type RouteParamsFor<Path extends `/${string}`> = Simplify<ExtractRouteParams<Path>>;
13
+ /**
14
+ * Builds the callable `href()` helper type for a specific app route path.
15
+ */
4
16
  export type AppRouteHref<Path extends `/${string}`> = keyof RouteParamsFor<Path> extends never ? (options?: StaticHrefOptions) => string : (options: DynamicHrefOptions<Path>) => string;
17
+ /**
18
+ * Builds the Link `href` string type accepted for a specific app route path.
19
+ */
5
20
  export type AppRouteLinkHref<Path extends `/${string}`> = `${AppRouteLinkPathname<Path>}${AppRouteLinkHrefSuffix}`;
21
+ /**
22
+ * Configures a static href with optional search params and hash.
23
+ */
6
24
  export interface StaticHrefOptions {
7
25
  hash?: string | undefined;
8
26
  search?: RouteSearchParams | undefined;
9
27
  }
28
+ /**
29
+ * Configures a dynamic href with route params, optional search params, and hash.
30
+ */
10
31
  export interface DynamicHrefOptions<Path extends `/${string}`> extends StaticHrefOptions {
11
32
  params: RouteParamsFor<Path>;
12
33
  }
@@ -20,9 +41,21 @@ type SegmentRouteParam<Segment extends string> = Segment extends `:...${infer Na
20
41
  type Simplify<T> = {
21
42
  [Key in keyof T]: T[Key];
22
43
  } & {};
44
+ /**
45
+ * Represents the search and hash suffix portion of a typed route href.
46
+ */
23
47
  export type AppRouteLinkHrefSuffix = "" | `?${string}` | `#${string}` | `?${string}#${string}`;
48
+ /**
49
+ * Builds the pathname string type for a typed route href.
50
+ */
24
51
  export type AppRouteLinkPathname<Path extends `/${string}`> = Path extends "/" ? "/" : Path extends `/${infer Segments}` ? `/${AppRouteLinkSegments<Segments>}` : never;
52
+ /**
53
+ * Builds the joined path segment string type for a typed route href.
54
+ */
25
55
  export type AppRouteLinkSegments<Segments extends string> = Segments extends `${infer Segment}/${infer Rest}` ? `${AppRouteLinkSegment<Segment>}/${AppRouteLinkSegments<Rest>}` : AppRouteLinkSegment<Segments>;
56
+ /**
57
+ * Builds the string type for one static or dynamic route segment.
58
+ */
26
59
  export type AppRouteLinkSegment<Segment extends string> = Segment extends `:${string}` ? string : Segment;
27
60
  /**
28
61
  * Builds an internal app-route URL from a route pattern and typed params/search options.
@@ -1 +1 @@
1
- {"version":3,"file":"typed-routes.d.ts","sourceRoot":"","sources":["../src/typed-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typed-routes.d.ts","sourceRoot":"","sources":["../src/typed-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"typed-routes.js","sourceRoot":"","sources":["../src/typed-routes.ts"],"names":[],"mappings":"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","sourcesContent":["export type RouteSearchValue = boolean | number | string | null | undefined;\nexport type RouteSearchParams = Record<\n string,\n RouteSearchValue | readonly RouteSearchValue[]\n>;\n\nexport type RouteParamsFor<Path extends `/${string}`> = Simplify<ExtractRouteParams<Path>>;\n\nexport type AppRouteHref<Path extends `/${string}`> = keyof RouteParamsFor<Path> extends never\n ? (options?: StaticHrefOptions) => string\n : (options: DynamicHrefOptions<Path>) => string;\n\nexport type AppRouteLinkHref<Path extends `/${string}`> =\n `${AppRouteLinkPathname<Path>}${AppRouteLinkHrefSuffix}`;\n\nexport interface StaticHrefOptions {\n hash?: string | undefined;\n search?: RouteSearchParams | undefined;\n}\n\nexport interface DynamicHrefOptions<Path extends `/${string}`> extends StaticHrefOptions {\n params: RouteParamsFor<Path>;\n}\n\ntype HasRouteParams<Path extends `/${string}`> = keyof RouteParamsFor<Path> extends never\n ? false\n : true;\n\ntype ExtractRouteParams<Path extends string> = Path extends `${infer Segment}/${infer Rest}`\n ? SegmentRouteParam<Segment> & ExtractRouteParams<Rest>\n : SegmentRouteParam<Path>;\n\ntype SegmentRouteParam<Segment extends string> = Segment extends `:...${infer Name}`\n ? { [Key in Name]: readonly string[] }\n : Segment extends `:${infer Name}`\n ? { [Key in Name]: string }\n : Record<never, never>;\n\ntype Simplify<T> = { [Key in keyof T]: T[Key] } & {};\n\nexport type AppRouteLinkHrefSuffix = \"\" | `?${string}` | `#${string}` | `?${string}#${string}`;\n\nexport type AppRouteLinkPathname<Path extends `/${string}`> = Path extends \"/\"\n ? \"/\"\n : Path extends `/${infer Segments}`\n ? `/${AppRouteLinkSegments<Segments>}`\n : never;\n\nexport type AppRouteLinkSegments<Segments extends string> = Segments extends `${infer Segment}/${infer Rest}`\n ? `${AppRouteLinkSegment<Segment>}/${AppRouteLinkSegments<Rest>}`\n : AppRouteLinkSegment<Segments>;\n\nexport type AppRouteLinkSegment<Segment extends string> = Segment extends `:${string}`\n ? string\n : Segment;\n\n/**\n * Builds an internal app-route URL from a route pattern and typed params/search options.\n *\n * Dynamic `:param` and `:...catchAll` segments are URL-encoded, search values are serialized with `URLSearchParams`, and protocol-relative or external paths are rejected.\n */\nexport function href<const Path extends `/${string}`>(\n path: Path,\n ...args: HasRouteParams<Path> extends true\n ? [options: DynamicHrefOptions<Path>]\n : [options?: StaticHrefOptions]\n): string {\n assertInternalRoutePath(path);\n\n const options = args[0] as\n | (StaticHrefOptions & { params?: Record<string, readonly string[] | string> | undefined })\n | undefined;\n const params =\n options !== undefined && \"params\" in options && options.params !== undefined\n ? (options.params as Record<string, readonly string[] | string>)\n : {};\n const pathname = path\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":...\")) {\n const name = segment.slice(4);\n const value = params[name];\n\n if (!Array.isArray(value)) {\n throw new Error(`Missing catch-all route param ${JSON.stringify(name)} for ${path}.`);\n }\n\n return value.map((part) => encodeURIComponent(part)).join(\"/\");\n }\n\n if (segment.startsWith(\":\")) {\n const name = segment.slice(1);\n const value = params[name];\n\n if (typeof value !== \"string\") {\n throw new Error(`Missing route param ${JSON.stringify(name)} for ${path}.`);\n }\n\n return encodeURIComponent(value);\n }\n\n return segment;\n })\n .join(\"/\");\n const search = searchString(options?.search);\n const hash = options?.hash === undefined ? \"\" : `#${encodeURIComponent(options.hash)}`;\n\n return `${pathname}${search}${hash}`;\n}\n\nfunction assertInternalRoutePath(path: string): void {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) {\n throw new Error(`href() expected an internal route path, received ${JSON.stringify(path)}.`);\n }\n\n for (let index = 0; index < path.length; index += 1) {\n const code = path.charCodeAt(index);\n\n if (code <= 0x1f || code === 0x7f) {\n throw new Error(\"href() route paths must not contain control characters.\");\n }\n }\n}\n\nfunction searchString(search: RouteSearchParams | undefined): string {\n if (search === undefined) {\n return \"\";\n }\n\n const params = new URLSearchParams();\n\n for (const [key, value] of Object.entries(search)) {\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry !== undefined && entry !== null) {\n params.append(key, String(entry));\n }\n }\n }\n\n const value = params.toString();\n\n return value === \"\" ? \"\" : `?${value}`;\n}\n"]}
1
+ {"version":3,"file":"typed-routes.js","sourceRoot":"","sources":["../src/typed-routes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Represents a value accepted in generated route search params.\n */\nexport type RouteSearchValue = boolean | number | string | null | undefined;\n/**\n * Represents search params accepted by typed route href helpers.\n */\nexport type RouteSearchParams = Record<\n string,\n RouteSearchValue | readonly RouteSearchValue[]\n>;\n\n/**\n * Extracts dynamic and catch-all params from an app route path pattern.\n */\nexport type RouteParamsFor<Path extends `/${string}`> = Simplify<ExtractRouteParams<Path>>;\n\n/**\n * Builds the callable `href()` helper type for a specific app route path.\n */\nexport type AppRouteHref<Path extends `/${string}`> = keyof RouteParamsFor<Path> extends never\n ? (options?: StaticHrefOptions) => string\n : (options: DynamicHrefOptions<Path>) => string;\n\n/**\n * Builds the Link `href` string type accepted for a specific app route path.\n */\nexport type AppRouteLinkHref<Path extends `/${string}`> =\n `${AppRouteLinkPathname<Path>}${AppRouteLinkHrefSuffix}`;\n\n/**\n * Configures a static href with optional search params and hash.\n */\nexport interface StaticHrefOptions {\n hash?: string | undefined;\n search?: RouteSearchParams | undefined;\n}\n\n/**\n * Configures a dynamic href with route params, optional search params, and hash.\n */\nexport interface DynamicHrefOptions<Path extends `/${string}`> extends StaticHrefOptions {\n params: RouteParamsFor<Path>;\n}\n\ntype HasRouteParams<Path extends `/${string}`> = keyof RouteParamsFor<Path> extends never\n ? false\n : true;\n\ntype ExtractRouteParams<Path extends string> = Path extends `${infer Segment}/${infer Rest}`\n ? SegmentRouteParam<Segment> & ExtractRouteParams<Rest>\n : SegmentRouteParam<Path>;\n\ntype SegmentRouteParam<Segment extends string> = Segment extends `:...${infer Name}`\n ? { [Key in Name]: readonly string[] }\n : Segment extends `:${infer Name}`\n ? { [Key in Name]: string }\n : Record<never, never>;\n\ntype Simplify<T> = { [Key in keyof T]: T[Key] } & {};\n\n/**\n * Represents the search and hash suffix portion of a typed route href.\n */\nexport type AppRouteLinkHrefSuffix = \"\" | `?${string}` | `#${string}` | `?${string}#${string}`;\n\n/**\n * Builds the pathname string type for a typed route href.\n */\nexport type AppRouteLinkPathname<Path extends `/${string}`> = Path extends \"/\"\n ? \"/\"\n : Path extends `/${infer Segments}`\n ? `/${AppRouteLinkSegments<Segments>}`\n : never;\n\n/**\n * Builds the joined path segment string type for a typed route href.\n */\nexport type AppRouteLinkSegments<Segments extends string> = Segments extends `${infer Segment}/${infer Rest}`\n ? `${AppRouteLinkSegment<Segment>}/${AppRouteLinkSegments<Rest>}`\n : AppRouteLinkSegment<Segments>;\n\n/**\n * Builds the string type for one static or dynamic route segment.\n */\nexport type AppRouteLinkSegment<Segment extends string> = Segment extends `:${string}`\n ? string\n : Segment;\n\n/**\n * Builds an internal app-route URL from a route pattern and typed params/search options.\n *\n * Dynamic `:param` and `:...catchAll` segments are URL-encoded, search values are serialized with `URLSearchParams`, and protocol-relative or external paths are rejected.\n */\nexport function href<const Path extends `/${string}`>(\n path: Path,\n ...args: HasRouteParams<Path> extends true\n ? [options: DynamicHrefOptions<Path>]\n : [options?: StaticHrefOptions]\n): string {\n assertInternalRoutePath(path);\n\n const options = args[0] as\n | (StaticHrefOptions & { params?: Record<string, readonly string[] | string> | undefined })\n | undefined;\n const params =\n options !== undefined && \"params\" in options && options.params !== undefined\n ? (options.params as Record<string, readonly string[] | string>)\n : {};\n const pathname = path\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":...\")) {\n const name = segment.slice(4);\n const value = params[name];\n\n if (!Array.isArray(value)) {\n throw new Error(`Missing catch-all route param ${JSON.stringify(name)} for ${path}.`);\n }\n\n return value.map((part) => encodeURIComponent(part)).join(\"/\");\n }\n\n if (segment.startsWith(\":\")) {\n const name = segment.slice(1);\n const value = params[name];\n\n if (typeof value !== \"string\") {\n throw new Error(`Missing route param ${JSON.stringify(name)} for ${path}.`);\n }\n\n return encodeURIComponent(value);\n }\n\n return segment;\n })\n .join(\"/\");\n const search = searchString(options?.search);\n const hash = options?.hash === undefined ? \"\" : `#${encodeURIComponent(options.hash)}`;\n\n return `${pathname}${search}${hash}`;\n}\n\nfunction assertInternalRoutePath(path: string): void {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) {\n throw new Error(`href() expected an internal route path, received ${JSON.stringify(path)}.`);\n }\n\n for (let index = 0; index < path.length; index += 1) {\n const code = path.charCodeAt(index);\n\n if (code <= 0x1f || code === 0x7f) {\n throw new Error(\"href() route paths must not contain control characters.\");\n }\n }\n}\n\nfunction searchString(search: RouteSearchParams | undefined): string {\n if (search === undefined) {\n return \"\";\n }\n\n const params = new URLSearchParams();\n\n for (const [key, value] of Object.entries(search)) {\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry !== undefined && entry !== null) {\n params.append(key, String(entry));\n }\n }\n }\n\n const value = params.toString();\n\n return value === \"\" ? \"\" : `?${value}`;\n}\n"]}
package/dist/types.d.ts CHANGED
@@ -1,11 +1,26 @@
1
1
  import type { ReactCompatNode } from "@reckona/mreact-compat";
2
2
  import type { QueryClient } from "@reckona/mreact-query";
3
+ /**
4
+ * Represents an app-router loader function.
5
+ */
3
6
  export type RouteLoader = (...args: never[]) => unknown;
7
+ /**
8
+ * Infers resolved data returned by a route loader.
9
+ */
4
10
  export type InferLoaderData<TLoader extends RouteLoader> = Awaited<ReturnType<TLoader>>;
11
+ /**
12
+ * Represents dynamic route params passed to loaders, pages, and handlers.
13
+ */
5
14
  export type RouteParams = Record<string, readonly string[] | string>;
15
+ /**
16
+ * Infers route params from a loader context parameter.
17
+ */
6
18
  export type InferLoaderParams<TLoader extends RouteLoader> = TLoader extends (context: infer TContext, ...args: never[]) => unknown ? TContext extends {
7
19
  params: infer TParams;
8
20
  } ? TParams extends RouteParams ? TParams : RouteParams : RouteParams : RouteParams;
21
+ /**
22
+ * Provides request, params, environment, and query client data to route loaders.
23
+ */
9
24
  export interface LoaderContext<TParams extends RouteParams = RouteParams> {
10
25
  env?: unknown;
11
26
  params: TParams;
@@ -22,15 +37,24 @@ export interface GenerateMetadataContext<TData = unknown, TParams extends RouteP
22
37
  params: TParams;
23
38
  request: Request;
24
39
  }
40
+ /**
41
+ * Provides request and params to server route handlers.
42
+ */
25
43
  export interface RouteHandlerContext<TParams extends RouteParams = RouteParams> {
26
44
  params: TParams;
27
45
  request: Request;
28
46
  }
47
+ /**
48
+ * Provides loader data, params, and request context to page components.
49
+ */
29
50
  export interface PageProps<TData = unknown, TParams extends RouteParams = RouteParams> {
30
51
  data: TData;
31
52
  params: TParams;
32
53
  request: Request;
33
54
  }
55
+ /**
56
+ * Represents a page component whose props are inferred from a route loader.
57
+ */
34
58
  export type PageComponent<TLoader extends RouteLoader> = (props: PageProps<InferLoaderData<TLoader>, InferLoaderParams<TLoader>>) => ReactCompatNode;
35
59
  /**
36
60
  * Preserves the relationship between a page component and its loader when authoring route files.
@@ -38,13 +62,25 @@ export type PageComponent<TLoader extends RouteLoader> = (props: PageProps<Infer
38
62
  * Wrap a default page export with `definePage<typeof loader>(...)` to infer `data` and `params` props from the route loader without changing runtime behavior.
39
63
  */
40
64
  export declare function definePage<TLoader extends RouteLoader>(component: PageComponent<TLoader>): PageComponent<TLoader>;
65
+ /**
66
+ * Provides children, params, and request context to layout components.
67
+ */
41
68
  export interface LayoutProps<TParams extends RouteParams = RouteParams> {
42
69
  children: ReactCompatNode;
43
70
  params: TParams;
44
71
  request: Request;
45
72
  }
73
+ /**
74
+ * Re-exports the node type accepted by mreact-compatible components.
75
+ */
46
76
  export type MReactNode = ReactCompatNode;
77
+ /**
78
+ * Represents scalar metadata values rendered into head tags and headers.
79
+ */
47
80
  export type MetadataScalar = boolean | number | string;
81
+ /**
82
+ * Describes an image value used by route metadata.
83
+ */
48
84
  export interface MetadataImage {
49
85
  alt?: MetadataScalar;
50
86
  height?: MetadataScalar;
@@ -90,17 +126,29 @@ export interface RouteMetadata {
90
126
  title?: MetadataScalar;
91
127
  viewport?: MetadataScalar | MetadataViewport;
92
128
  }
129
+ /**
130
+ * Describes viewport metadata key-value pairs.
131
+ */
93
132
  export type MetadataViewport = Record<string, MetadataScalar | null | undefined>;
133
+ /**
134
+ * Describes a theme-color metadata entry with an optional media query.
135
+ */
94
136
  export interface MetadataThemeColor {
95
137
  color?: MetadataScalar;
96
138
  media?: MetadataScalar;
97
139
  }
140
+ /**
141
+ * Describes an extra head element emitted by route metadata.
142
+ */
98
143
  export interface RouteHeadDescriptor {
99
144
  attrs?: Record<string, boolean | number | string | undefined>;
100
145
  content?: string;
101
146
  nonce?: boolean | string;
102
147
  tag: "base" | "link" | "meta" | "script" | "style";
103
148
  }
149
+ /**
150
+ * Configures security-related response headers from route metadata.
151
+ */
104
152
  export interface RouteSecurityHeaders {
105
153
  contentTypeOptions?: "nosniff" | null | undefined;
106
154
  frameOptions?: "DENY" | "SAMEORIGIN" | null | undefined;
@@ -108,41 +156,65 @@ export interface RouteSecurityHeaders {
108
156
  permissionsPolicy?: Record<string, readonly string[] | null | undefined> | null | undefined;
109
157
  referrerPolicy?: string | null | undefined;
110
158
  }
159
+ /**
160
+ * Configures the Strict-Transport-Security header from route metadata.
161
+ */
111
162
  export interface RouteStrictTransportSecurity {
112
163
  includeSubDomains?: boolean | undefined;
113
164
  maxAge: number;
114
165
  preload?: boolean | undefined;
115
166
  }
167
+ /**
168
+ * Provides request context to a robots metadata route.
169
+ */
116
170
  export interface RobotsContext {
117
171
  baseUrl: string;
118
172
  host: string;
119
173
  request: Request;
120
174
  }
175
+ /**
176
+ * Describes the robots.txt metadata route result.
177
+ */
121
178
  export interface RobotsManifest {
122
179
  host?: string | undefined;
123
180
  rules?: RobotsRule | readonly RobotsRule[] | undefined;
124
181
  sitemap?: string | readonly string[] | undefined;
125
182
  }
183
+ /**
184
+ * Describes one robots.txt user-agent rule.
185
+ */
126
186
  export interface RobotsRule {
127
187
  allow?: string | readonly string[] | undefined;
128
188
  disallow?: string | readonly string[] | undefined;
129
189
  userAgent: string | readonly string[];
130
190
  }
191
+ /**
192
+ * Provides request context to a sitemap metadata route.
193
+ */
131
194
  export interface SitemapContext {
132
195
  baseUrl: string;
133
196
  host: string;
134
197
  request: Request;
135
198
  }
199
+ /**
200
+ * Describes one URL entry returned by a sitemap metadata route.
201
+ */
136
202
  export interface SitemapEntry {
137
203
  changeFrequency?: string | undefined;
138
204
  lastModified?: Date | string | number | undefined;
139
205
  priority?: number | undefined;
140
206
  url: string;
141
207
  }
208
+ /**
209
+ * Provides request context to a web app manifest metadata route.
210
+ */
142
211
  export interface ManifestContext {
143
212
  baseUrl: string;
144
213
  host: string;
145
214
  request: Request;
146
215
  }
216
+ /**
217
+ * Represents an arbitrary web app manifest descriptor.
218
+ */
147
219
  export type ManifestDescriptor = Record<string, unknown>;
148
220
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAExD,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAExF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAErE,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,WAAW,IAAI,OAAO,SAAS,CAC3E,OAAO,EAAE,MAAM,QAAQ,EACvB,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,OAAO,GACR,QAAQ,SAAS;IAAE,MAAM,EAAE,MAAM,OAAO,CAAA;CAAE,GACxC,OAAO,SAAS,WAAW,GACzB,OAAO,GACP,WAAW,GACb,WAAW,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IACtE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB,CACtC,KAAK,GAAG,OAAO,EACf,OAAO,SAAS,WAAW,GAAG,WAAW;IAEzC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IAC5E,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,SAAS,WAAW,GAAG,WAAW;IACnF,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,WAAW,IAAI,CACvD,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,KACnE,eAAe,CAAC;AAErB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,SAAS,WAAW,EACpD,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,GAChC,aAAa,CAAC,OAAO,CAAC,CAExB;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IACpE,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,cAAc,CAAC;KAC5B,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QACxD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;KACtD,CAAC;IACF,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,IAAI,CAAC,EAAE,cAAc,CAAC;KACvB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,cAAc,CAAC;QAC7B,KAAK,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;QACvC,MAAM,CAAC,EAAE,SAAS,CAAC,aAAa,GAAG,cAAc,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,EAAE,cAAc,CAAC;KACxB,CAAC;IACF,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EACH,MAAM,GACN;QACE,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACN,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,UAAU,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;IACjD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC9C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACpD;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACxD,IAAI,CAAC,EAAE,4BAA4B,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5F,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,4BAA4B;IAC3C,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwDA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,SAAiC;IAEjC,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { ReactCompatNode } from \"@reckona/mreact-compat\";\nimport type { QueryClient } from \"@reckona/mreact-query\";\n\nexport type RouteLoader = (...args: never[]) => unknown;\n\nexport type InferLoaderData<TLoader extends RouteLoader> = Awaited<ReturnType<TLoader>>;\n\nexport type RouteParams = Record<string, readonly string[] | string>;\n\nexport type InferLoaderParams<TLoader extends RouteLoader> = TLoader extends (\n context: infer TContext,\n ...args: never[]\n) => unknown\n ? TContext extends { params: infer TParams }\n ? TParams extends RouteParams\n ? TParams\n : RouteParams\n : RouteParams\n : RouteParams;\n\nexport interface LoaderContext<TParams extends RouteParams = RouteParams> {\n env?: unknown;\n params: TParams;\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Context passed to a route `generateMetadata` export.\n *\n * Metadata is evaluated on the server after loader data is available, so it can derive head tags, robots data, sitemap entries, and security header directives from the same request and route params as the page.\n */\nexport interface GenerateMetadataContext<\n TData = unknown,\n TParams extends RouteParams = RouteParams,\n> {\n data: TData;\n params: TParams;\n request: Request;\n}\n\nexport interface RouteHandlerContext<TParams extends RouteParams = RouteParams> {\n params: TParams;\n request: Request;\n}\n\nexport interface PageProps<TData = unknown, TParams extends RouteParams = RouteParams> {\n data: TData;\n params: TParams;\n request: Request;\n}\n\nexport type PageComponent<TLoader extends RouteLoader> = (\n props: PageProps<InferLoaderData<TLoader>, InferLoaderParams<TLoader>>,\n) => ReactCompatNode;\n\n/**\n * Preserves the relationship between a page component and its loader when authoring route files.\n *\n * Wrap a default page export with `definePage<typeof loader>(...)` to infer `data` and `params` props from the route loader without changing runtime behavior.\n */\nexport function definePage<TLoader extends RouteLoader>(\n component: PageComponent<TLoader>,\n): PageComponent<TLoader> {\n return component;\n}\n\nexport interface LayoutProps<TParams extends RouteParams = RouteParams> {\n children: ReactCompatNode;\n params: TParams;\n request: Request;\n}\n\nexport type MReactNode = ReactCompatNode;\n\nexport type MetadataScalar = boolean | number | string;\n\nexport interface MetadataImage {\n alt?: MetadataScalar;\n height?: MetadataScalar;\n type?: MetadataScalar;\n url: MetadataScalar;\n width?: MetadataScalar;\n}\n\n/**\n * Declarative metadata returned by route metadata exports.\n *\n * Values are rendered into the document head and response headers by the app router; use `generateMetadata` when the values depend on loader data, params, or the current request.\n */\nexport interface RouteMetadata {\n alternates?: {\n canonical?: MetadataScalar;\n };\n csp?: {\n disable?: boolean;\n directives?: Record<string, readonly string[] | string>;\n nonce?: string;\n remove?: readonly string[];\n replace?: Record<string, readonly string[] | string>;\n };\n description?: MetadataScalar;\n head?: readonly RouteHeadDescriptor[];\n icons?: {\n apple?: MetadataScalar;\n icon?: MetadataScalar;\n };\n openGraph?: {\n description?: MetadataScalar;\n image?: MetadataImage | MetadataScalar;\n images?: readonly (MetadataImage | MetadataScalar)[];\n title?: MetadataScalar;\n };\n lang?: MetadataScalar;\n robots?:\n | string\n | {\n follow?: boolean;\n index?: boolean;\n };\n security?: RouteSecurityHeaders;\n themeColor?: MetadataScalar | MetadataThemeColor;\n title?: MetadataScalar;\n viewport?: MetadataScalar | MetadataViewport;\n}\n\nexport type MetadataViewport = Record<string, MetadataScalar | null | undefined>;\n\nexport interface MetadataThemeColor {\n color?: MetadataScalar;\n media?: MetadataScalar;\n}\n\nexport interface RouteHeadDescriptor {\n attrs?: Record<string, boolean | number | string | undefined>;\n content?: string;\n nonce?: boolean | string;\n tag: \"base\" | \"link\" | \"meta\" | \"script\" | \"style\";\n}\n\nexport interface RouteSecurityHeaders {\n contentTypeOptions?: \"nosniff\" | null | undefined;\n frameOptions?: \"DENY\" | \"SAMEORIGIN\" | null | undefined;\n hsts?: RouteStrictTransportSecurity | false | null | undefined;\n permissionsPolicy?: Record<string, readonly string[] | null | undefined> | null | undefined;\n referrerPolicy?: string | null | undefined;\n}\n\nexport interface RouteStrictTransportSecurity {\n includeSubDomains?: boolean | undefined;\n maxAge: number;\n preload?: boolean | undefined;\n}\n\nexport interface RobotsContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\nexport interface RobotsManifest {\n host?: string | undefined;\n rules?: RobotsRule | readonly RobotsRule[] | undefined;\n sitemap?: string | readonly string[] | undefined;\n}\n\nexport interface RobotsRule {\n allow?: string | readonly string[] | undefined;\n disallow?: string | readonly string[] | undefined;\n userAgent: string | readonly string[];\n}\n\nexport interface SitemapContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\nexport interface SitemapEntry {\n changeFrequency?: string | undefined;\n lastModified?: Date | string | number | undefined;\n priority?: number | undefined;\n url: string;\n}\n\nexport interface ManifestContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\nexport type ManifestDescriptor = Record<string, unknown>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,SAAiC;IAEjC,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { ReactCompatNode } from \"@reckona/mreact-compat\";\nimport type { QueryClient } from \"@reckona/mreact-query\";\n\n/**\n * Represents an app-router loader function.\n */\nexport type RouteLoader = (...args: never[]) => unknown;\n\n/**\n * Infers resolved data returned by a route loader.\n */\nexport type InferLoaderData<TLoader extends RouteLoader> = Awaited<ReturnType<TLoader>>;\n\n/**\n * Represents dynamic route params passed to loaders, pages, and handlers.\n */\nexport type RouteParams = Record<string, readonly string[] | string>;\n\n/**\n * Infers route params from a loader context parameter.\n */\nexport type InferLoaderParams<TLoader extends RouteLoader> = TLoader extends (\n context: infer TContext,\n ...args: never[]\n) => unknown\n ? TContext extends { params: infer TParams }\n ? TParams extends RouteParams\n ? TParams\n : RouteParams\n : RouteParams\n : RouteParams;\n\n/**\n * Provides request, params, environment, and query client data to route loaders.\n */\nexport interface LoaderContext<TParams extends RouteParams = RouteParams> {\n env?: unknown;\n params: TParams;\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Context passed to a route `generateMetadata` export.\n *\n * Metadata is evaluated on the server after loader data is available, so it can derive head tags, robots data, sitemap entries, and security header directives from the same request and route params as the page.\n */\nexport interface GenerateMetadataContext<\n TData = unknown,\n TParams extends RouteParams = RouteParams,\n> {\n data: TData;\n params: TParams;\n request: Request;\n}\n\n/**\n * Provides request and params to server route handlers.\n */\nexport interface RouteHandlerContext<TParams extends RouteParams = RouteParams> {\n params: TParams;\n request: Request;\n}\n\n/**\n * Provides loader data, params, and request context to page components.\n */\nexport interface PageProps<TData = unknown, TParams extends RouteParams = RouteParams> {\n data: TData;\n params: TParams;\n request: Request;\n}\n\n/**\n * Represents a page component whose props are inferred from a route loader.\n */\nexport type PageComponent<TLoader extends RouteLoader> = (\n props: PageProps<InferLoaderData<TLoader>, InferLoaderParams<TLoader>>,\n) => ReactCompatNode;\n\n/**\n * Preserves the relationship between a page component and its loader when authoring route files.\n *\n * Wrap a default page export with `definePage<typeof loader>(...)` to infer `data` and `params` props from the route loader without changing runtime behavior.\n */\nexport function definePage<TLoader extends RouteLoader>(\n component: PageComponent<TLoader>,\n): PageComponent<TLoader> {\n return component;\n}\n\n/**\n * Provides children, params, and request context to layout components.\n */\nexport interface LayoutProps<TParams extends RouteParams = RouteParams> {\n children: ReactCompatNode;\n params: TParams;\n request: Request;\n}\n\n/**\n * Re-exports the node type accepted by mreact-compatible components.\n */\nexport type MReactNode = ReactCompatNode;\n\n/**\n * Represents scalar metadata values rendered into head tags and headers.\n */\nexport type MetadataScalar = boolean | number | string;\n\n/**\n * Describes an image value used by route metadata.\n */\nexport interface MetadataImage {\n alt?: MetadataScalar;\n height?: MetadataScalar;\n type?: MetadataScalar;\n url: MetadataScalar;\n width?: MetadataScalar;\n}\n\n/**\n * Declarative metadata returned by route metadata exports.\n *\n * Values are rendered into the document head and response headers by the app router; use `generateMetadata` when the values depend on loader data, params, or the current request.\n */\nexport interface RouteMetadata {\n alternates?: {\n canonical?: MetadataScalar;\n };\n csp?: {\n disable?: boolean;\n directives?: Record<string, readonly string[] | string>;\n nonce?: string;\n remove?: readonly string[];\n replace?: Record<string, readonly string[] | string>;\n };\n description?: MetadataScalar;\n head?: readonly RouteHeadDescriptor[];\n icons?: {\n apple?: MetadataScalar;\n icon?: MetadataScalar;\n };\n openGraph?: {\n description?: MetadataScalar;\n image?: MetadataImage | MetadataScalar;\n images?: readonly (MetadataImage | MetadataScalar)[];\n title?: MetadataScalar;\n };\n lang?: MetadataScalar;\n robots?:\n | string\n | {\n follow?: boolean;\n index?: boolean;\n };\n security?: RouteSecurityHeaders;\n themeColor?: MetadataScalar | MetadataThemeColor;\n title?: MetadataScalar;\n viewport?: MetadataScalar | MetadataViewport;\n}\n\n/**\n * Describes viewport metadata key-value pairs.\n */\nexport type MetadataViewport = Record<string, MetadataScalar | null | undefined>;\n\n/**\n * Describes a theme-color metadata entry with an optional media query.\n */\nexport interface MetadataThemeColor {\n color?: MetadataScalar;\n media?: MetadataScalar;\n}\n\n/**\n * Describes an extra head element emitted by route metadata.\n */\nexport interface RouteHeadDescriptor {\n attrs?: Record<string, boolean | number | string | undefined>;\n content?: string;\n nonce?: boolean | string;\n tag: \"base\" | \"link\" | \"meta\" | \"script\" | \"style\";\n}\n\n/**\n * Configures security-related response headers from route metadata.\n */\nexport interface RouteSecurityHeaders {\n contentTypeOptions?: \"nosniff\" | null | undefined;\n frameOptions?: \"DENY\" | \"SAMEORIGIN\" | null | undefined;\n hsts?: RouteStrictTransportSecurity | false | null | undefined;\n permissionsPolicy?: Record<string, readonly string[] | null | undefined> | null | undefined;\n referrerPolicy?: string | null | undefined;\n}\n\n/**\n * Configures the Strict-Transport-Security header from route metadata.\n */\nexport interface RouteStrictTransportSecurity {\n includeSubDomains?: boolean | undefined;\n maxAge: number;\n preload?: boolean | undefined;\n}\n\n/**\n * Provides request context to a robots metadata route.\n */\nexport interface RobotsContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\n/**\n * Describes the robots.txt metadata route result.\n */\nexport interface RobotsManifest {\n host?: string | undefined;\n rules?: RobotsRule | readonly RobotsRule[] | undefined;\n sitemap?: string | readonly string[] | undefined;\n}\n\n/**\n * Describes one robots.txt user-agent rule.\n */\nexport interface RobotsRule {\n allow?: string | readonly string[] | undefined;\n disallow?: string | readonly string[] | undefined;\n userAgent: string | readonly string[];\n}\n\n/**\n * Provides request context to a sitemap metadata route.\n */\nexport interface SitemapContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\n/**\n * Describes one URL entry returned by a sitemap metadata route.\n */\nexport interface SitemapEntry {\n changeFrequency?: string | undefined;\n lastModified?: Date | string | number | undefined;\n priority?: number | undefined;\n url: string;\n}\n\n/**\n * Provides request context to a web app manifest metadata route.\n */\nexport interface ManifestContext {\n baseUrl: string;\n host: string;\n request: Request;\n}\n\n/**\n * Represents an arbitrary web app manifest descriptor.\n */\nexport type ManifestDescriptor = Record<string, unknown>;\n"]}
package/dist/upgrade.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { IncomingMessage } from "node:http";
2
2
  import type { Duplex } from "node:stream";
3
+ /**
4
+ * Handles an HTTP upgrade request on the app-router Node server.
5
+ */
3
6
  export type HttpUpgradeHandler = (request: IncomingMessage, socket: Duplex, head: Buffer) => void;
4
7
  //# sourceMappingURL=upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,KACT,IAAI,CAAC"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,KACT,IAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingMessage } from \"node:http\";\nimport type { Duplex } from \"node:stream\";\n\nexport type HttpUpgradeHandler = (\n request: IncomingMessage,\n socket: Duplex,\n head: Buffer,\n) => void;\n"]}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingMessage } from \"node:http\";\nimport type { Duplex } from \"node:stream\";\n\n/**\n * Handles an HTTP upgrade request on the app-router Node server.\n */\nexport type HttpUpgradeHandler = (\n request: IncomingMessage,\n socket: Duplex,\n head: Buffer,\n) => void;\n"]}
package/dist/vite.d.ts CHANGED
@@ -4,6 +4,9 @@ import type { AppRouterCache } from "./cache.js";
4
4
  import { type AppRouterProjectOptions, type ResolvedAppRouterProject } from "./config.js";
5
5
  import type { AppRouterImportPolicy } from "./import-policy.js";
6
6
  import { type RequestHostPolicy } from "./serve.js";
7
+ /**
8
+ * Configures the app-router Vite middleware used by development servers.
9
+ */
7
10
  export interface AppRouterViteMiddlewareOptions extends AppRouterProjectOptions {
8
11
  allowedHosts?: readonly string[] | undefined;
9
12
  define?: UserConfig["define"] | undefined;
@@ -13,6 +16,9 @@ export interface AppRouterViteMiddlewareOptions extends AppRouterProjectOptions
13
16
  serverActions?: AppRouterServerActionOptions | undefined;
14
17
  vitePlugins?: readonly PluginOption[] | undefined;
15
18
  }
19
+ /**
20
+ * Configures the app-router Vite plugin.
21
+ */
16
22
  export interface AppRouterVitePluginOptions extends AppRouterProjectOptions {
17
23
  allowedHosts?: readonly string[] | undefined;
18
24
  hostPolicy?: RequestHostPolicy | undefined;
@@ -20,10 +26,25 @@ export interface AppRouterVitePluginOptions extends AppRouterProjectOptions {
20
26
  routeCache?: AppRouterCache | undefined;
21
27
  serverActions?: AppRouterServerActionOptions | undefined;
22
28
  }
29
+ /**
30
+ * Creates the app-router Vite plugin for route compilation and development middleware.
31
+ */
23
32
  export declare function createAppRouterVitePlugin(options: AppRouterVitePluginOptions): Plugin;
33
+ /**
34
+ * Alias for `createAppRouterVitePlugin()` used by Vite config files.
35
+ */
24
36
  export declare const mreactRouter: typeof createAppRouterVitePlugin;
37
+ /**
38
+ * Reads resolved app-router project config from a Vite plugin list.
39
+ */
25
40
  export declare function mreactRouterConfigFromPlugins(plugins: readonly unknown[]): ResolvedAppRouterProject | undefined;
41
+ /**
42
+ * Creates Connect middleware that renders app-router requests during Vite development.
43
+ */
26
44
  export declare function createAppRouterViteMiddleware(options: AppRouterViteMiddlewareOptions): Connect.NextHandleFunction;
45
+ /**
46
+ * Renders a development client asset generated by the app-router Vite integration.
47
+ */
27
48
  export declare function renderAppRouterClientAsset(appDir: string, pathname: string, options?: {
28
49
  dev?: boolean;
29
50
  vitePlugins?: readonly PluginOption[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AA0BhE,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKxE,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACnD;AAQD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;CAC1D;AAmBD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CA0SrF;AAqBD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AAoCtD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,OAAO,EAAE,GAC1B,wBAAwB,GAAG,SAAS,CActC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,kBAAkB,CAc5B;AA0FD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAA;CAAO,GACjF,OAAO,CAAC,QAAQ,CAAC,CAuEnB"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AA0BhE,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKxE;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACnD;AAQD;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;CAC1D;AAmBD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CA0SrF;AAqBD;;GAEG;AACH,eAAO,MAAM,YAAY,kCAA4B,CAAC;AAoCtD;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,OAAO,EAAE,GAC1B,wBAAwB,GAAG,SAAS,CActC;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,kBAAkB,CAc5B;AA0FD;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAA;CAAO,GACjF,OAAO,CAAC,QAAQ,CAAC,CAuEnB"}
package/dist/vite.js CHANGED
@@ -23,6 +23,9 @@ const virtualClientPrefix = "\0mreact-router-client:";
23
23
  const virtualReactiveCoreId = "\0mreact-router-reactive-core";
24
24
  const virtualReactiveDevtoolsId = "\0mreact-router-reactive-devtools";
25
25
  const mreactRouterConfigKey = "__mreactRouterConfig";
26
+ /**
27
+ * Creates the app-router Vite plugin for route compilation and development middleware.
28
+ */
26
29
  export function createAppRouterVitePlugin(options) {
27
30
  const project = resolveAppRouterProjectOptions(options);
28
31
  const normalizedSourceDirs = project.allowedSourceDirs.map((directory) => normalizePath(directory));
@@ -290,6 +293,9 @@ function isMreactClientSourceDependency(filename, normalizedSourceDirs) {
290
293
  function isCompatSourcePath(filename) {
291
294
  return /\.compat(?:\.mreact)?(?:\.[cm]?[jt]sx?)?$/.test(filename);
292
295
  }
296
+ /**
297
+ * Alias for `createAppRouterVitePlugin()` used by Vite config files.
298
+ */
293
299
  export const mreactRouter = createAppRouterVitePlugin;
294
300
  function routeTransformUserVitePlugins(pluginOptions) {
295
301
  const plugins = [];
@@ -316,6 +322,9 @@ function routeTransformUserVitePlugins(pluginOptions) {
316
322
  }
317
323
  return plugins;
318
324
  }
325
+ /**
326
+ * Reads resolved app-router project config from a Vite plugin list.
327
+ */
319
328
  export function mreactRouterConfigFromPlugins(plugins) {
320
329
  for (const plugin of plugins.flat(Infinity)) {
321
330
  if (plugin !== null && typeof plugin === "object" && mreactRouterConfigKey in plugin) {
@@ -328,6 +337,9 @@ export function mreactRouterConfigFromPlugins(plugins) {
328
337
  }
329
338
  return undefined;
330
339
  }
340
+ /**
341
+ * Creates Connect middleware that renders app-router requests during Vite development.
342
+ */
331
343
  export function createAppRouterViteMiddleware(options) {
332
344
  // Reused across requests so dev navigation-script detection memoizes module
333
345
  // contexts/analyses instead of re-walking every route's import graph per
@@ -403,6 +415,9 @@ async function handleAppRouterViteRequest(options, incoming, outgoing, next) {
403
415
  next(error);
404
416
  }
405
417
  }
418
+ /**
419
+ * Renders a development client asset generated by the app-router Vite integration.
420
+ */
406
421
  export async function renderAppRouterClientAsset(appDir, pathname, options = {}) {
407
422
  if (pathname === `/_mreact/client/${navigationRuntimeScriptForDev()}`) {
408
423
  const output = await buildNavigationRuntimeBundle();