@fragno-dev/core 0.1.11 → 0.2.2

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 (155) hide show
  1. package/.turbo/turbo-build.log +87 -69
  2. package/CHANGELOG.md +79 -0
  3. package/dist/api/api.d.ts +21 -2
  4. package/dist/api/api.d.ts.map +1 -1
  5. package/dist/api/api.js +2 -1
  6. package/dist/api/api.js.map +1 -1
  7. package/dist/api/bind-services.d.ts +0 -1
  8. package/dist/api/bind-services.d.ts.map +1 -1
  9. package/dist/api/bind-services.js.map +1 -1
  10. package/dist/api/error.d.ts.map +1 -1
  11. package/dist/api/error.js.map +1 -1
  12. package/dist/api/fragment-definition-builder.d.ts +32 -40
  13. package/dist/api/fragment-definition-builder.d.ts.map +1 -1
  14. package/dist/api/fragment-definition-builder.js +15 -21
  15. package/dist/api/fragment-definition-builder.js.map +1 -1
  16. package/dist/api/fragment-instantiator.d.ts +51 -30
  17. package/dist/api/fragment-instantiator.d.ts.map +1 -1
  18. package/dist/api/fragment-instantiator.js +201 -52
  19. package/dist/api/fragment-instantiator.js.map +1 -1
  20. package/dist/api/request-context-storage.d.ts +4 -0
  21. package/dist/api/request-context-storage.d.ts.map +1 -1
  22. package/dist/api/request-context-storage.js +6 -0
  23. package/dist/api/request-context-storage.js.map +1 -1
  24. package/dist/api/request-input-context.d.ts +57 -1
  25. package/dist/api/request-input-context.d.ts.map +1 -1
  26. package/dist/api/request-input-context.js +67 -0
  27. package/dist/api/request-input-context.js.map +1 -1
  28. package/dist/api/request-middleware.d.ts +2 -2
  29. package/dist/api/request-middleware.d.ts.map +1 -1
  30. package/dist/api/request-middleware.js.map +1 -1
  31. package/dist/api/request-output-context.d.ts +1 -1
  32. package/dist/api/request-output-context.d.ts.map +1 -1
  33. package/dist/api/request-output-context.js.map +1 -1
  34. package/dist/api/route-caller.d.ts +30 -0
  35. package/dist/api/route-caller.d.ts.map +1 -0
  36. package/dist/api/route-caller.js +63 -0
  37. package/dist/api/route-caller.js.map +1 -0
  38. package/dist/api/route-handler-input-options.d.ts.map +1 -1
  39. package/dist/api/route.d.ts +8 -8
  40. package/dist/api/route.d.ts.map +1 -1
  41. package/dist/api/route.js.map +1 -1
  42. package/dist/api/shared-types.d.ts.map +1 -1
  43. package/dist/client/client-error.d.ts.map +1 -1
  44. package/dist/client/client-error.js.map +1 -1
  45. package/dist/client/client.d.ts +90 -50
  46. package/dist/client/client.d.ts.map +1 -1
  47. package/dist/client/client.js +128 -16
  48. package/dist/client/client.js.map +1 -1
  49. package/dist/client/client.svelte.d.ts +6 -5
  50. package/dist/client/client.svelte.d.ts.map +1 -1
  51. package/dist/client/client.svelte.js +10 -2
  52. package/dist/client/client.svelte.js.map +1 -1
  53. package/dist/client/internal/ndjson-streaming.js.map +1 -1
  54. package/dist/client/react.d.ts +5 -4
  55. package/dist/client/react.d.ts.map +1 -1
  56. package/dist/client/react.js +104 -12
  57. package/dist/client/react.js.map +1 -1
  58. package/dist/client/solid.d.ts +7 -5
  59. package/dist/client/solid.d.ts.map +1 -1
  60. package/dist/client/solid.js +23 -9
  61. package/dist/client/solid.js.map +1 -1
  62. package/dist/client/vanilla.d.ts +16 -4
  63. package/dist/client/vanilla.d.ts.map +1 -1
  64. package/dist/client/vanilla.js +21 -1
  65. package/dist/client/vanilla.js.map +1 -1
  66. package/dist/client/vue.d.ts +10 -4
  67. package/dist/client/vue.d.ts.map +1 -1
  68. package/dist/client/vue.js +24 -1
  69. package/dist/client/vue.js.map +1 -1
  70. package/dist/id.d.ts +2 -0
  71. package/dist/id.js +3 -0
  72. package/dist/internal/cuid.d.ts +16 -0
  73. package/dist/internal/cuid.d.ts.map +1 -0
  74. package/dist/internal/cuid.js +82 -0
  75. package/dist/internal/cuid.js.map +1 -0
  76. package/dist/internal/trace-context.d.ts +23 -0
  77. package/dist/internal/trace-context.d.ts.map +1 -0
  78. package/dist/internal/trace-context.js +14 -0
  79. package/dist/internal/trace-context.js.map +1 -0
  80. package/dist/mod-client.d.ts +7 -20
  81. package/dist/mod-client.d.ts.map +1 -1
  82. package/dist/mod-client.js +25 -13
  83. package/dist/mod-client.js.map +1 -1
  84. package/dist/mod.d.ts +8 -6
  85. package/dist/mod.js +3 -1
  86. package/dist/runtime.d.ts +15 -0
  87. package/dist/runtime.d.ts.map +1 -0
  88. package/dist/runtime.js +33 -0
  89. package/dist/runtime.js.map +1 -0
  90. package/dist/test/test.d.ts +6 -6
  91. package/dist/test/test.d.ts.map +1 -1
  92. package/dist/test/test.js.map +1 -1
  93. package/dist/util/ssr.js.map +1 -1
  94. package/package.json +42 -52
  95. package/src/api/api.test.ts +3 -1
  96. package/src/api/api.ts +28 -0
  97. package/src/api/bind-services.ts +0 -5
  98. package/src/api/error.ts +1 -0
  99. package/src/api/fragment-definition-builder.extend.test.ts +2 -1
  100. package/src/api/fragment-definition-builder.test.ts +2 -1
  101. package/src/api/fragment-definition-builder.ts +56 -112
  102. package/src/api/fragment-instantiator.test.ts +311 -166
  103. package/src/api/fragment-instantiator.ts +470 -131
  104. package/src/api/fragment-services.test.ts +1 -0
  105. package/src/api/internal/path-runtime.test.ts +8 -0
  106. package/src/api/internal/path-type.test.ts +3 -1
  107. package/src/api/internal/route.test.ts +1 -0
  108. package/src/api/request-context-storage.ts +7 -0
  109. package/src/api/request-input-context.test.ts +156 -2
  110. package/src/api/request-input-context.ts +87 -1
  111. package/src/api/request-middleware.test.ts +43 -2
  112. package/src/api/request-middleware.ts +4 -3
  113. package/src/api/request-output-context.test.ts +3 -1
  114. package/src/api/request-output-context.ts +2 -1
  115. package/src/api/route-caller.test.ts +195 -0
  116. package/src/api/route-caller.ts +167 -0
  117. package/src/api/route-handler-input-options.ts +2 -1
  118. package/src/api/route.test.ts +4 -2
  119. package/src/api/route.ts +9 -3
  120. package/src/api/shared-types.ts +2 -1
  121. package/src/client/client-builder.test.ts +4 -2
  122. package/src/client/client-error.test.ts +2 -1
  123. package/src/client/client-error.ts +1 -1
  124. package/src/client/client-types.test.ts +19 -5
  125. package/src/client/client.ssr.test.ts +6 -4
  126. package/src/client/client.svelte.test.ts +18 -9
  127. package/src/client/client.svelte.ts +38 -13
  128. package/src/client/client.test.ts +244 -10
  129. package/src/client/client.ts +473 -148
  130. package/src/client/internal/ndjson-streaming.test.ts +6 -3
  131. package/src/client/internal/ndjson-streaming.ts +1 -0
  132. package/src/client/react.test.ts +176 -6
  133. package/src/client/react.ts +226 -31
  134. package/src/client/solid.test.ts +29 -5
  135. package/src/client/solid.ts +60 -22
  136. package/src/client/vanilla.test.ts +148 -6
  137. package/src/client/vanilla.ts +63 -9
  138. package/src/client/vue.test.ts +397 -8
  139. package/src/client/vue.ts +74 -4
  140. package/src/id.ts +1 -0
  141. package/src/internal/cuid.test.ts +164 -0
  142. package/src/internal/cuid.ts +133 -0
  143. package/src/internal/trace-context.ts +35 -0
  144. package/src/mod-client.ts +55 -9
  145. package/src/mod.ts +9 -3
  146. package/src/runtime.ts +48 -0
  147. package/src/test/test.test.ts +4 -2
  148. package/src/test/test.ts +14 -7
  149. package/src/util/async.test.ts +1 -0
  150. package/src/util/content-type.test.ts +1 -0
  151. package/src/util/nanostores.test.ts +3 -1
  152. package/src/util/ssr.ts +1 -0
  153. package/tsconfig.json +1 -1
  154. package/tsdown.config.ts +2 -0
  155. package/vitest.config.ts +2 -1
@@ -1,7 +1,8 @@
1
+ import { BoundServices } from "./bind-services.js";
2
+ import { RequestContextStorage } from "./request-context-storage.js";
3
+ import { AnyRouteOrFactory } from "./route.js";
1
4
  import { FragnoPublicConfig } from "./shared-types.js";
2
5
  import { RequestThisContext } from "./api.js";
3
- import { RequestContextStorage } from "./request-context-storage.js";
4
- import { AnyFragnoInstantiatedFragment, FragnoInstantiatedFragment } from "./fragment-instantiator.js";
5
6
 
6
7
  //#region src/api/fragment-definition-builder.d.ts
7
8
 
@@ -14,19 +15,6 @@ interface ServiceMetadata {
14
15
  /** Whether this service is required (false means optional) */
15
16
  required: boolean;
16
17
  }
17
- /**
18
- * Callback that instantiates a linked fragment.
19
- * Receives the same context as the main fragment and returns an instantiated fragment.
20
- */
21
- type LinkedFragmentCallback<TConfig, TOptions extends FragnoPublicConfig, TServiceDependencies> = (context: {
22
- config: TConfig;
23
- options: TOptions;
24
- serviceDependencies?: TServiceDependencies;
25
- }) => FragnoInstantiatedFragment<any, any, any, any, any, any, any>;
26
- /**
27
- * Extract the services type from a FragnoInstantiatedFragment
28
- */
29
- type ExtractLinkedServices<T> = T extends ((...args: never[]) => FragnoInstantiatedFragment<any, any, infer TServices, any, any, any, any>) ? TServices : never;
30
18
  /**
31
19
  * Context passed to the request context factory function.
32
20
  */
@@ -59,14 +47,14 @@ type ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPriva
59
47
  * Fragment definition interface that supports both regular and database fragments.
60
48
  * This is the core definition that will be used for fragment instantiation.
61
49
  */
62
- interface FragmentDefinition<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage = {}, TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment> = {}> {
50
+ interface FragmentDefinition<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage = {}, TInternalRoutes extends readonly AnyRouteOrFactory[] = readonly []> {
63
51
  name: string;
64
52
  dependencies?: (context: {
65
53
  config: TConfig;
66
54
  options: TOptions;
67
55
  }) => TDeps;
68
56
  baseServices?: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TBaseServices, TServiceThisContext>;
69
- namedServices?: { [K in keyof TServices$1]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TServices$1[K], TServiceThisContext> };
57
+ namedServices?: { [K in keyof TServices]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TServices[K], TServiceThisContext> };
70
58
  privateServices?: { [K in keyof TPrivateServices]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices,
71
59
  // Private services can access other private services
72
60
  TPrivateServices[K], TServiceThisContext> };
@@ -126,20 +114,26 @@ interface FragmentDefinition<TConfig, TOptions extends FragnoPublicConfig, TDeps
126
114
  deps: TDeps;
127
115
  }) => RequestContextStorage<TRequestStorage>;
128
116
  /**
129
- * Optional linked fragments that will be automatically instantiated with this fragment.
130
- * Linked fragments are service-only and share the same config/options as the parent.
117
+ * Optional factory for internal data attached to fragment.$internal.
131
118
  */
132
- linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies> };
119
+ internalDataFactory?: (context: {
120
+ config: TConfig;
121
+ options: TOptions;
122
+ deps: TDeps;
123
+ services: BoundServices<TBaseServices & TServices>;
124
+ serviceDeps: TServiceDependencies;
125
+ }) => Record<string, unknown> | void;
126
+ internalRoutes?: TInternalRoutes;
133
127
  $serviceThisContext?: TServiceThisContext;
134
128
  $handlerThisContext?: THandlerThisContext;
135
129
  $requestStorage?: TRequestStorage;
136
- $linkedFragments?: TLinkedFragments;
130
+ $internalRoutes?: TInternalRoutes;
137
131
  }
138
132
  /**
139
133
  * Builder class for creating fragment definitions.
140
134
  * This provides a fluent API for defining fragments with type safety.
141
135
  */
142
- declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage = {}, TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment> = {}> {
136
+ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage = {}, TInternalRoutes extends readonly AnyRouteOrFactory[] = readonly []> {
143
137
  #private;
144
138
  constructor(name: string, state?: {
145
139
  dependencies?: (context: {
@@ -147,7 +141,7 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
147
141
  options: TOptions;
148
142
  }) => TDeps;
149
143
  baseServices?: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TBaseServices, TServiceThisContext>;
150
- namedServices?: { [K in keyof TServices$1]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TServices$1[K], TServiceThisContext> };
144
+ namedServices?: { [K in keyof TServices]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TServices[K], TServiceThisContext> };
151
145
  privateServices?: { [K in keyof TPrivateServices]: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TPrivateServices[K], TServiceThisContext> };
152
146
  serviceDependencies?: { [K in keyof TServiceDependencies]: ServiceMetadata };
153
147
  createRequestStorage?: (context: {
@@ -164,7 +158,7 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
164
158
  options: TOptions;
165
159
  deps: TDeps;
166
160
  }) => RequestContextStorage<TRequestStorage>;
167
- linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies> };
161
+ internalRoutes?: TInternalRoutes;
168
162
  });
169
163
  get name(): string;
170
164
  /**
@@ -192,17 +186,17 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
192
186
  withDependencies<TNewDeps>(fn: (context: {
193
187
  config: TConfig;
194
188
  options: TOptions;
195
- }) => TNewDeps): FragmentDefinitionBuilder<TConfig, TOptions, TNewDeps, {}, {}, TServiceDependencies, {}, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
189
+ }) => TNewDeps): FragmentDefinitionBuilder<TConfig, TOptions, TNewDeps, {}, {}, TServiceDependencies, {}, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
196
190
  /**
197
191
  * Define base (unnamed) services for this fragment.
198
192
  * Base services are accessible directly on the fragment instance.
199
193
  */
200
- providesBaseService<TNewService>(fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TNewService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TNewService, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
194
+ providesBaseService<TNewService>(fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TNewService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TNewService, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
201
195
  /**
202
196
  * Provide a named service that other fragments or users can use.
203
197
  * Named services are accessible as fragment.serviceName.method()
204
198
  */
205
- providesService<TServiceName extends string, TService>(serviceName: TServiceName, fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1 & { [K in TServiceName]: TService }, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
199
+ providesService<TServiceName extends string, TService>(serviceName: TServiceName, fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices & { [K in TServiceName]: TService }, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
206
200
  /**
207
201
  * Provide a private service that is only accessible to the fragment author.
208
202
  * Private services are NOT exposed on the fragment instance, but can be used
@@ -210,15 +204,15 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
210
204
  * Private services are instantiated in order, so earlier private services are available
211
205
  * to later ones.
212
206
  */
213
- providesPrivateService<TServiceName extends string, TService>(serviceName: TServiceName, fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices & { [K in TServiceName]: TService }, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
207
+ providesPrivateService<TServiceName extends string, TService>(serviceName: TServiceName, fn: ServiceConstructorFn<TConfig, TOptions, TDeps, TServiceDependencies, TPrivateServices, TService, TServiceThisContext>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices & { [K in TServiceName]: TService }, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
214
208
  /**
215
209
  * Declare that this fragment uses a required service provided by the runtime.
216
210
  */
217
- usesService<TServiceName extends string, TService>(serviceName: TServiceName): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies & { [K in TServiceName]: TService }, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
211
+ usesService<TServiceName extends string, TService>(serviceName: TServiceName): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies & { [K in TServiceName]: TService }, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
218
212
  /**
219
213
  * Declare that this fragment uses an optional service provided by the runtime.
220
214
  */
221
- usesOptionalService<TServiceName extends string, TService>(serviceName: TServiceName): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies & { [K in TServiceName]: TService | undefined }, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
215
+ usesOptionalService<TServiceName extends string, TService>(serviceName: TServiceName): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies & { [K in TServiceName]: TService | undefined }, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
222
216
  /**
223
217
  * Define the type and initial data stored in AsyncLocalStorage for per-request isolation.
224
218
  * This should be called before withThisContext if you need to store request-specific data.
@@ -245,7 +239,7 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
245
239
  config: TConfig;
246
240
  options: TOptions;
247
241
  deps: TDeps;
248
- }) => TNewRequestStorage): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TNewRequestStorage, TLinkedFragments>;
242
+ }) => TNewRequestStorage): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TNewRequestStorage, TInternalRoutes>;
249
243
  /**
250
244
  * Use an externally-provided RequestContextStorage instance.
251
245
  * This allows multiple fragments to share the same storage instance.
@@ -266,7 +260,7 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
266
260
  config: TConfig;
267
261
  options: TOptions;
268
262
  deps: TDeps;
269
- }) => RequestContextStorage<TNewStorage>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TNewStorage, TLinkedFragments>;
263
+ }) => RequestContextStorage<TNewStorage>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TNewStorage, TInternalRoutes>;
270
264
  /**
271
265
  * Set the this contexts for services and handlers in this fragment.
272
266
  * Both contexts should contain only methods or getters that read from storage.
@@ -287,13 +281,11 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
287
281
  withThisContext<TNewServiceThisContext extends RequestThisContext, TNewHandlerThisContext extends RequestThisContext>(fn: (context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>) => {
288
282
  serviceContext: TNewServiceThisContext;
289
283
  handlerContext: TNewHandlerThisContext;
290
- }): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TNewServiceThisContext, TNewHandlerThisContext, TRequestStorage, TLinkedFragments>;
284
+ }): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TNewServiceThisContext, TNewHandlerThisContext, TRequestStorage, TInternalRoutes>;
291
285
  /**
292
- * Register a linked fragment that will be automatically instantiated.
293
- * Linked fragments are service-only (no routes) and share the same config/options as the parent.
294
- * All services from the linked fragment will be available as private services.
286
+ * Define internal routes that will be mounted under /_internal.
295
287
  */
296
- withLinkedFragment<const TName extends string, TCallback extends LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies>>(name: TName, callback: TCallback): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices & ExtractLinkedServices<TCallback>, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments & { [K in TName]: ReturnType<TCallback> }>;
288
+ withInternalRoutes<const TNewInternalRoutes extends readonly AnyRouteOrFactory[]>(routes: TNewInternalRoutes): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TNewInternalRoutes>;
297
289
  /**
298
290
  * Extend this builder with a transformation function.
299
291
  * This enables fluent API extensions like `.extend(withDatabase(schema))`.
@@ -302,12 +294,12 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
302
294
  /**
303
295
  * Build the final fragment definition
304
296
  */
305
- build(): FragmentDefinition<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>;
297
+ build(): FragmentDefinition<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TInternalRoutes>;
306
298
  }
307
299
  /**
308
300
  * Create a new fragment definition builder
309
301
  */
310
- declare function defineFragment<TConfig = {}, TOptions extends FragnoPublicConfig = FragnoPublicConfig, TServiceThisContext extends RequestThisContext = RequestThisContext, THandlerThisContext extends RequestThisContext = RequestThisContext, TRequestStorage = {}>(name: string): FragmentDefinitionBuilder<TConfig, TOptions, {}, {}, {}, {}, {}, TServiceThisContext, THandlerThisContext, TRequestStorage, {}>;
302
+ declare function defineFragment<TConfig = {}, TOptions extends FragnoPublicConfig = FragnoPublicConfig, TServiceThisContext extends RequestThisContext = RequestThisContext, THandlerThisContext extends RequestThisContext = RequestThisContext, TRequestStorage = {}>(name: string): FragmentDefinitionBuilder<TConfig, TOptions, {}, {}, {}, {}, {}, TServiceThisContext, THandlerThisContext, TRequestStorage, []>;
311
303
  //#endregion
312
- export { ExtractLinkedServices, FragmentDefinition, FragmentDefinitionBuilder, LinkedFragmentCallback, RequestContextFactoryContext, ServiceConstructorFn, ServiceContext, defineFragment };
304
+ export { FragmentDefinition, FragmentDefinitionBuilder, RequestContextFactoryContext, ServiceConstructorFn, ServiceContext, defineFragment };
313
305
  //# sourceMappingURL=fragment-definition-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-definition-builder.d.ts","names":[],"sources":["../../src/api/fragment-definition-builder.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"fragment-definition-builder.d.ts","names":[],"sources":["../../src/api/fragment-definition-builder.ts"],"sourcesContent":[],"mappings":"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"}
@@ -13,7 +13,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
13
13
  #createRequestStorage;
14
14
  #createThisContext;
15
15
  #getExternalStorage;
16
- #linkedFragments;
16
+ #internalRoutes;
17
17
  constructor(name, state) {
18
18
  this.#name = name;
19
19
  if (state) {
@@ -25,7 +25,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
25
25
  this.#createRequestStorage = state.createRequestStorage;
26
26
  this.#createThisContext = state.createThisContext;
27
27
  this.#getExternalStorage = state.getExternalStorage;
28
- this.#linkedFragments = state.linkedFragments;
28
+ this.#internalRoutes = state.internalRoutes;
29
29
  }
30
30
  }
31
31
  get name() {
@@ -64,7 +64,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
64
64
  createRequestStorage: void 0,
65
65
  createThisContext: void 0,
66
66
  getExternalStorage: void 0,
67
- linkedFragments: this.#linkedFragments
67
+ internalRoutes: this.#internalRoutes
68
68
  });
69
69
  }
70
70
  /**
@@ -81,7 +81,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
81
81
  createRequestStorage: this.#createRequestStorage,
82
82
  createThisContext: this.#createThisContext,
83
83
  getExternalStorage: this.#getExternalStorage,
84
- linkedFragments: this.#linkedFragments
84
+ internalRoutes: this.#internalRoutes
85
85
  });
86
86
  }
87
87
  /**
@@ -102,7 +102,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
102
102
  createRequestStorage: this.#createRequestStorage,
103
103
  createThisContext: this.#createThisContext,
104
104
  getExternalStorage: this.#getExternalStorage,
105
- linkedFragments: this.#linkedFragments
105
+ internalRoutes: this.#internalRoutes
106
106
  });
107
107
  }
108
108
  /**
@@ -125,7 +125,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
125
125
  serviceDependencies: this.#serviceDependencies,
126
126
  createRequestStorage: this.#createRequestStorage,
127
127
  createThisContext: this.#createThisContext,
128
- linkedFragments: this.#linkedFragments
128
+ internalRoutes: this.#internalRoutes
129
129
  });
130
130
  }
131
131
  /**
@@ -147,7 +147,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
147
147
  serviceDependencies: newServiceDependencies,
148
148
  createRequestStorage: this.#createRequestStorage,
149
149
  createThisContext: this.#createThisContext,
150
- linkedFragments: this.#linkedFragments
150
+ internalRoutes: this.#internalRoutes
151
151
  });
152
152
  }
153
153
  /**
@@ -169,7 +169,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
169
169
  serviceDependencies: newServiceDependencies,
170
170
  createRequestStorage: this.#createRequestStorage,
171
171
  createThisContext: this.#createThisContext,
172
- linkedFragments: this.#linkedFragments
172
+ internalRoutes: this.#internalRoutes
173
173
  });
174
174
  }
175
175
  /**
@@ -205,7 +205,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
205
205
  createRequestStorage: initializer,
206
206
  createThisContext: void 0,
207
207
  getExternalStorage: preservedExternalStorage,
208
- linkedFragments: this.#linkedFragments
208
+ internalRoutes: this.#internalRoutes
209
209
  });
210
210
  }
211
211
  /**
@@ -234,7 +234,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
234
234
  createRequestStorage: void 0,
235
235
  createThisContext: void 0,
236
236
  getExternalStorage: getStorage,
237
- linkedFragments: this.#linkedFragments
237
+ internalRoutes: this.#internalRoutes
238
238
  });
239
239
  }
240
240
  /**
@@ -264,19 +264,13 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
264
264
  createRequestStorage: this.#createRequestStorage,
265
265
  createThisContext: fn,
266
266
  getExternalStorage: this.#getExternalStorage,
267
- linkedFragments: this.#linkedFragments
267
+ internalRoutes: this.#internalRoutes
268
268
  });
269
269
  }
270
270
  /**
271
- * Register a linked fragment that will be automatically instantiated.
272
- * Linked fragments are service-only (no routes) and share the same config/options as the parent.
273
- * All services from the linked fragment will be available as private services.
271
+ * Define internal routes that will be mounted under /_internal.
274
272
  */
275
- withLinkedFragment(name, callback) {
276
- const newLinkedFragments = {
277
- ...this.#linkedFragments,
278
- [name]: callback
279
- };
273
+ withInternalRoutes(routes) {
280
274
  return new FragmentDefinitionBuilder(this.#name, {
281
275
  dependencies: this.#dependencies,
282
276
  baseServices: this.#baseServices,
@@ -286,7 +280,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
286
280
  createRequestStorage: this.#createRequestStorage,
287
281
  createThisContext: this.#createThisContext,
288
282
  getExternalStorage: this.#getExternalStorage,
289
- linkedFragments: newLinkedFragments
283
+ internalRoutes: routes
290
284
  });
291
285
  }
292
286
  /**
@@ -310,7 +304,7 @@ var FragmentDefinitionBuilder = class FragmentDefinitionBuilder {
310
304
  createRequestStorage: this.#createRequestStorage,
311
305
  createThisContext: this.#createThisContext,
312
306
  getExternalStorage: this.#getExternalStorage,
313
- linkedFragments: this.#linkedFragments
307
+ internalRoutes: this.#internalRoutes
314
308
  };
315
309
  }
316
310
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-definition-builder.js","names":["#name","#dependencies","#baseServices","#namedServices","#privateServices","#serviceDependencies","#createRequestStorage","#createThisContext","#getExternalStorage","#linkedFragments"],"sources":["../../src/api/fragment-definition-builder.ts"],"sourcesContent":["import type { RequestThisContext } from \"./api\";\nimport type { FragnoPublicConfig } from \"./shared-types\";\nimport type { RequestContextStorage } from \"./request-context-storage\";\nimport type {\n FragnoInstantiatedFragment,\n AnyFragnoInstantiatedFragment,\n} from \"./fragment-instantiator\";\n\n/**\n * Metadata for a service dependency\n */\ninterface ServiceMetadata {\n /** Name of the service */\n name: string;\n /** Whether this service is required (false means optional) */\n required: boolean;\n}\n\n/**\n * Callback that instantiates a linked fragment.\n * Receives the same context as the main fragment and returns an instantiated fragment.\n */\nexport type LinkedFragmentCallback<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TServiceDependencies,\n> = (context: {\n config: TConfig;\n options: TOptions;\n serviceDependencies?: TServiceDependencies;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n}) => FragnoInstantiatedFragment<any, any, any, any, any, any, any>;\n\n/**\n * Extract the services type from a FragnoInstantiatedFragment\n */\nexport type ExtractLinkedServices<T> = T extends (\n ...args: never[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => FragnoInstantiatedFragment<any, any, infer TServices, any, any, any, any>\n ? TServices\n : never;\n\n/**\n * Context passed to the request context factory function.\n */\nexport type RequestContextFactoryContext<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TRequestStorage,\n> = {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n storage: RequestContextStorage<TRequestStorage>;\n};\n\n/**\n * Context object passed to service constructor functions\n */\nexport type ServiceContext<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n> = {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n serviceDeps: TServiceDependencies;\n privateServices: TPrivateServices;\n /**\n * Helper to define services with proper `this` context typing.\n * Use this to wrap your service methods when they need access to `this`.\n */\n defineService: <T>(svc: T & ThisType<TServiceThisContext>) => T;\n};\n\n/**\n * Service constructor function type\n */\nexport type ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext extends RequestThisContext,\n> = (\n context: ServiceContext<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext\n >,\n) => TService;\n\n/**\n * Fragment definition interface that supports both regular and database fragments.\n * This is the core definition that will be used for fragment instantiation.\n */\nexport interface FragmentDefinition<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage = {},\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment> = {},\n> {\n name: string;\n\n // Core callbacks - all take context objects with separate deps and serviceDeps\n dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n\n baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n\n // Named services stored as factory functions\n namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n\n // Private services - only accessible internally when defining other services\n privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices, // Private services can access other private services\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n\n // Service dependency metadata\n serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n\n /**\n * Optional factory function to create the initial request storage data.\n * This is called at the start of each request to initialize the storage.\n * The returned object can be mutated throughout the request lifecycle.\n *\n * @example\n * ```ts\n * createRequestStorage: ({ config, options, deps }) => ({\n * counter: 0,\n * userId: deps.currentUserId\n * })\n * ```\n */\n createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n\n /**\n * Optional factory function to create the this contexts for services and handlers.\n * Returns separate contexts: serviceContext (may be restricted) and handlerContext (full access).\n * Both contexts should contain only methods or getters that read from storage.\n *\n * @example\n * ```ts\n * createThisContext: ({ storage }) => ({\n * serviceContext: {\n * getUnitOfWork: () => restrictedUOW // Without execute methods\n * },\n * handlerContext: {\n * getUnitOfWork: () => fullUOW // With execute methods\n * }\n * })\n * ```\n */\n createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n\n /**\n * Optional factory function to get an external RequestContextStorage instance.\n * When provided, this storage will be used instead of creating a new one.\n * This allows multiple fragments to share the same storage (e.g., database fragments sharing adapter storage).\n *\n * @example\n * ```ts\n * getExternalStorage: ({ options }) => options.databaseAdapter.contextStorage\n * ```\n */\n getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n\n /**\n * Optional linked fragments that will be automatically instantiated with this fragment.\n * Linked fragments are service-only and share the same config/options as the parent.\n */\n linkedFragments?: {\n [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies>;\n };\n\n $serviceThisContext?: TServiceThisContext;\n $handlerThisContext?: THandlerThisContext;\n $requestStorage?: TRequestStorage;\n $linkedFragments?: TLinkedFragments;\n}\n\n/**\n * Builder class for creating fragment definitions.\n * This provides a fluent API for defining fragments with type safety.\n */\nexport class FragmentDefinitionBuilder<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage = {},\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment> = {},\n> {\n #name: string;\n #dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n #baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n #namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n #privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n #serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n #createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n #createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n #getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n #linkedFragments?: {\n [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies>;\n };\n\n constructor(\n name: string,\n state?: {\n dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n linkedFragments?: {\n [K in keyof TLinkedFragments]: LinkedFragmentCallback<\n TConfig,\n TOptions,\n TServiceDependencies\n >;\n };\n },\n ) {\n this.#name = name;\n if (state) {\n this.#dependencies = state.dependencies;\n this.#baseServices = state.baseServices;\n this.#namedServices = state.namedServices;\n this.#privateServices = state.privateServices;\n this.#serviceDependencies = state.serviceDependencies;\n this.#createRequestStorage = state.createRequestStorage;\n this.#createThisContext = state.createThisContext;\n this.#getExternalStorage = state.getExternalStorage;\n this.#linkedFragments = state.linkedFragments;\n }\n }\n\n get name(): string {\n return this.#name;\n }\n\n /**\n * Define dependencies for this fragment.\n * Dependencies are available to services and handlers.\n *\n * **IMPORTANT**: This method resets all services, storage, and context configurations.\n * Always call `withDependencies` early in the builder chain, before defining services\n * or request storage/context.\n *\n * @example\n * ```typescript\n * // ✅ GOOD: Dependencies set first\n * defineFragment(\"my-fragment\")\n * .withDependencies(() => ({ apiKey: \"...\" }))\n * .withRequestStorage(({ deps }) => ({ userId: deps.apiKey }))\n * .providesService(\"myService\", ...)\n *\n * // ❌ BAD: Dependencies set late (erases storage setup)\n * defineFragment(\"my-fragment\")\n * .withRequestStorage(() => ({ userId: \"...\" })) // This gets erased!\n * .withDependencies(() => ({ apiKey: \"...\" }))\n * ```\n */\n withDependencies<TNewDeps>(\n fn: (context: { config: TConfig; options: TOptions }) => TNewDeps,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TNewDeps,\n {},\n {},\n TServiceDependencies,\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n // Warn if we're discarding existing configuration\n if (\n this.#baseServices ||\n this.#namedServices ||\n this.#privateServices ||\n this.#createRequestStorage ||\n this.#createThisContext ||\n this.#getExternalStorage\n ) {\n console.warn(\n `[Fragno] Warning: withDependencies() on fragment \"${this.#name}\" is resetting previously configured services, request storage, or request context. ` +\n `To avoid this, call withDependencies() earlier in the builder chain, before configuring services or storage.`,\n );\n }\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TNewDeps,\n {},\n {},\n TServiceDependencies,\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: fn,\n baseServices: undefined,\n namedServices: undefined,\n privateServices: undefined,\n serviceDependencies: this.#serviceDependencies,\n // Reset storage/context functions since deps type changed - they must be reconfigured\n createRequestStorage: undefined,\n createThisContext: undefined,\n getExternalStorage: undefined,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Define base (unnamed) services for this fragment.\n * Base services are accessible directly on the fragment instance.\n */\n providesBaseService<TNewService>(\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TNewService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TNewService,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TNewService,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: fn,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Provide a named service that other fragments or users can use.\n * Named services are accessible as fragment.serviceName.method()\n */\n providesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices & { [K in TServiceName]: TService },\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newNamedServices = {\n ...this.#namedServices,\n [serviceName]: fn,\n } as {\n [K in keyof (TServices & { [K in TServiceName]: TService })]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n (TServices & { [K in TServiceName]: TService })[K],\n TServiceThisContext\n >;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices & { [K in TServiceName]: TService },\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: newNamedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Provide a private service that is only accessible to the fragment author.\n * Private services are NOT exposed on the fragment instance, but can be used\n * when defining other services (baseServices, namedServices, and other privateServices).\n * Private services are instantiated in order, so earlier private services are available\n * to later ones.\n */\n providesPrivateService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newPrivateServices = {\n ...this.#privateServices,\n [serviceName]: fn,\n } as {\n [K in keyof (TPrivateServices & { [K in TServiceName]: TService })]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n (TPrivateServices & { [K in TServiceName]: TService })[K],\n TServiceThisContext\n >;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: newPrivateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Declare that this fragment uses a required service provided by the runtime.\n */\n usesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newServiceDependencies = {\n ...this.#serviceDependencies,\n [serviceName]: { name: serviceName, required: true },\n } as {\n [K in keyof (TServiceDependencies & { [K in TServiceName]: TService })]: ServiceMetadata;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: newServiceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Declare that this fragment uses an optional service provided by the runtime.\n */\n usesOptionalService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService | undefined },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newServiceDependencies = {\n ...this.#serviceDependencies,\n [serviceName]: { name: serviceName, required: false },\n } as {\n [K in keyof (TServiceDependencies & {\n [K in TServiceName]: TService | undefined;\n })]: ServiceMetadata;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService | undefined },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: newServiceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Define the type and initial data stored in AsyncLocalStorage for per-request isolation.\n * This should be called before withThisContext if you need to store request-specific data.\n *\n * @param initializer Function that returns the initial storage data for each request\n *\n * @example\n * ```typescript\n * .withRequestStorage(({ config, options, deps }) => ({\n * counter: 0,\n * userId: deps.currentUserId\n * }))\n * .withThisContext(({ storage }) => ({\n * serviceContext: {\n * get counter() { return storage.getStore()!.counter; }\n * },\n * handlerContext: {\n * get counter() { return storage.getStore()!.counter; }\n * }\n * }))\n * ```\n */\n withRequestStorage<TNewRequestStorage>(\n initializer: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TNewRequestStorage,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewRequestStorage,\n TLinkedFragments\n > {\n // getExternalStorage can coexist with createRequestStorage (they work together)\n // Cast is safe when storage type changes: the external storage container adapts to hold the new type\n const preservedExternalStorage = this.#getExternalStorage\n ? (this.#getExternalStorage as unknown as (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TNewRequestStorage>)\n : undefined;\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: initializer,\n // Reset context function since storage type changed - it must be reconfigured\n createThisContext: undefined,\n getExternalStorage: preservedExternalStorage,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Use an externally-provided RequestContextStorage instance.\n * This allows multiple fragments to share the same storage instance.\n * Useful when fragments need to coordinate (e.g., database fragments sharing adapter storage).\n * Note: You must still call withRequestStorage to provide the initial storage data.\n *\n * @example\n * ```typescript\n * .withExternalRequestStorage(({ options }) =>\n * options.databaseAdapter.contextStorage\n * )\n * .withRequestStorage(({ options }) => ({\n * uow: options.databaseAdapter.db.createUnitOfWork()\n * }))\n * ```\n */\n withExternalRequestStorage<TNewStorage>(\n getStorage: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TNewStorage>,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewStorage,\n TLinkedFragments\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n // Reset storage/context functions since storage type changed - they must be reconfigured\n createRequestStorage: undefined,\n createThisContext: undefined,\n getExternalStorage: getStorage,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Set the this contexts for services and handlers in this fragment.\n * Both contexts should contain only methods or getters that read from storage.\n * This ensures proper per-request isolation via AsyncLocalStorage.\n *\n * @example\n * ```ts\n * .withThisContext(({ storage }) => ({\n * serviceContext: {\n * get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n * },\n * handlerContext: {\n * get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n * }\n * }))\n * ```\n */\n withThisContext<\n TNewServiceThisContext extends RequestThisContext,\n TNewHandlerThisContext extends RequestThisContext,\n >(\n fn: (context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>) => {\n serviceContext: TNewServiceThisContext;\n handlerContext: TNewHandlerThisContext;\n },\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TNewServiceThisContext,\n TNewHandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TNewServiceThisContext,\n TNewHandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: fn,\n getExternalStorage: this.#getExternalStorage,\n linkedFragments: this.#linkedFragments,\n });\n }\n\n /**\n * Register a linked fragment that will be automatically instantiated.\n * Linked fragments are service-only (no routes) and share the same config/options as the parent.\n * All services from the linked fragment will be available as private services.\n */\n withLinkedFragment<\n const TName extends string,\n TCallback extends LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies>,\n >(\n name: TName,\n callback: TCallback,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & ExtractLinkedServices<TCallback>,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments & { [K in TName]: ReturnType<TCallback> }\n > {\n const newLinkedFragments = {\n ...this.#linkedFragments,\n [name]: callback,\n };\n\n // Cast is safe: We're declaring that the returned builder has TPrivateServices & ExtractLinkedServices<TCallback>,\n // even though the runtime privateServices hasn't changed yet. The linked fragment services will be\n // merged into privateServices at instantiation time by the instantiator.\n return new FragmentDefinitionBuilder(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n linkedFragments: newLinkedFragments,\n }) as FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & ExtractLinkedServices<TCallback>,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments & { [K in TName]: ReturnType<TCallback> }\n >;\n }\n\n /**\n * Extend this builder with a transformation function.\n * This enables fluent API extensions like `.extend(withDatabase(schema))`.\n */\n extend<const TNewBuilder>(transformer: (builder: this) => TNewBuilder): TNewBuilder {\n return transformer(this);\n }\n\n /**\n * Build the final fragment definition\n */\n build(): FragmentDefinition<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n > {\n return {\n name: this.#name,\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n linkedFragments: this.#linkedFragments,\n };\n }\n}\n\n/**\n * Create a new fragment definition builder\n */\nexport function defineFragment<\n TConfig = {},\n TOptions extends FragnoPublicConfig = FragnoPublicConfig,\n TServiceThisContext extends RequestThisContext = RequestThisContext,\n THandlerThisContext extends RequestThisContext = RequestThisContext,\n TRequestStorage = {},\n>(\n name: string,\n): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n {},\n {},\n {},\n {},\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n {}\n> {\n return new FragmentDefinitionBuilder(name);\n}\n"],"mappings":";;;;;AAmPA,IAAa,4BAAb,MAAa,0BAYX;CACA;CACA;CACA;CASA;CAWA;CAWA;CAGA;CAKA;CAMA;CAKA;CAIA,YACE,MACA,OA4DA;AACA,QAAKA,OAAQ;AACb,MAAI,OAAO;AACT,SAAKC,eAAgB,MAAM;AAC3B,SAAKC,eAAgB,MAAM;AAC3B,SAAKC,gBAAiB,MAAM;AAC5B,SAAKC,kBAAmB,MAAM;AAC9B,SAAKC,sBAAuB,MAAM;AAClC,SAAKC,uBAAwB,MAAM;AACnC,SAAKC,oBAAqB,MAAM;AAChC,SAAKC,qBAAsB,MAAM;AACjC,SAAKC,kBAAmB,MAAM;;;CAIlC,IAAI,OAAe;AACjB,SAAO,MAAKT;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,iBACE,IAaA;AAEA,MACE,MAAKE,gBACL,MAAKC,iBACL,MAAKC,mBACL,MAAKE,wBACL,MAAKC,qBACL,MAAKC,mBAEL,SAAQ,KACN,qDAAqD,MAAKR,KAAM,kMAEjE;AAGH,SAAO,IAAI,0BAYT,MAAKA,MAAO;GACZ,cAAc;GACd,cAAc;GACd,eAAe;GACf,iBAAiB;GACjB,qBAAqB,MAAKK;GAE1B,sBAAsB;GACtB,mBAAmB;GACnB,oBAAoB;GACpB,iBAAiB,MAAKI;GACvB,CAAC;;;;;;CAOJ,oBACE,IAqBA;AACA,SAAO,IAAI,0BAYT,MAAKT,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc;GACd,eAAe,MAAKE;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB,MAAKC;GACxB,oBAAoB,MAAKC;GACzB,iBAAiB,MAAKC;GACvB,CAAC;;;;;;CAOJ,gBACE,aACA,IAqBA;EAEA,MAAM,mBAAmB;GACvB,GAAG,MAAKN;IACP,cAAc;GAChB;AAYD,SAAO,IAAI,0BAYT,MAAKH,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe;GACf,iBAAiB,MAAKE;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB,MAAKC;GACxB,oBAAoB,MAAKC;GACzB,iBAAiB,MAAKC;GACvB,CAAC;;;;;;;;;CAUJ,uBACE,aACA,IAqBA;EAEA,MAAM,qBAAqB;GACzB,GAAG,MAAKL;IACP,cAAc;GAChB;AAYD,SAAO,IAAI,0BAYT,MAAKJ,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB;GACjB,qBAAqB,MAAKE;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB,MAAKC;GACxB,iBAAiB,MAAKE;GACvB,CAAC;;;;;CAMJ,YACE,aAaA;EAEA,MAAM,yBAAyB;GAC7B,GAAG,MAAKJ;IACP,cAAc;IAAE,MAAM;IAAa,UAAU;IAAM;GACrD;AAID,SAAO,IAAI,0BAYT,MAAKL,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB;GACrB,sBAAsB,MAAKE;GAC3B,mBAAmB,MAAKC;GACxB,iBAAiB,MAAKE;GACvB,CAAC;;;;;CAMJ,oBACE,aAaA;EAEA,MAAM,yBAAyB;GAC7B,GAAG,MAAKJ;IACP,cAAc;IAAE,MAAM;IAAa,UAAU;IAAO;GACtD;AAMD,SAAO,IAAI,0BAYT,MAAKL,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB;GACrB,sBAAsB,MAAKE;GAC3B,mBAAmB,MAAKC;GACxB,iBAAiB,MAAKE;GACvB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAyBJ,mBACE,aAiBA;EAGA,MAAM,2BAA2B,MAAKD,qBACjC,MAAKA,qBAKN;AAEJ,SAAO,IAAI,0BAYT,MAAKR,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB;GAEtB,mBAAmB;GACnB,oBAAoB;GACpB,iBAAiB,MAAKI;GACvB,CAAC;;;;;;;;;;;;;;;;;;CAmBJ,2BACE,YAiBA;AACA,SAAO,IAAI,0BAYT,MAAKT,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAE1B,sBAAsB;GACtB,mBAAmB;GACnB,oBAAoB;GACpB,iBAAiB,MAAKI;GACvB,CAAC;;;;;;;;;;;;;;;;;;;CAoBJ,gBAIE,IAgBA;AACA,SAAO,IAAI,0BAYT,MAAKT,MAAO;GACZ,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB;GACnB,oBAAoB,MAAKE;GACzB,iBAAiB,MAAKC;GACvB,CAAC;;;;;;;CAQJ,mBAIE,MACA,UAaA;EACA,MAAM,qBAAqB;GACzB,GAAG,MAAKA;IACP,OAAO;GACT;AAKD,SAAO,IAAI,0BAA0B,MAAKT,MAAO;GAC/C,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB,MAAKC;GACxB,oBAAoB,MAAKC;GACzB,iBAAiB;GAClB,CAAC;;;;;;CAmBJ,OAA0B,aAA0D;AAClF,SAAO,YAAY,KAAK;;;;;CAM1B,QAYE;AACA,SAAO;GACL,MAAM,MAAKR;GACX,cAAc,MAAKC;GACnB,cAAc,MAAKC;GACnB,eAAe,MAAKC;GACpB,iBAAiB,MAAKC;GACtB,qBAAqB,MAAKC;GAC1B,sBAAsB,MAAKC;GAC3B,mBAAmB,MAAKC;GACxB,oBAAoB,MAAKC;GACzB,iBAAiB,MAAKC;GACvB;;;;;;AAOL,SAAgB,eAOd,MAaA;AACA,QAAO,IAAI,0BAA0B,KAAK"}
1
+ {"version":3,"file":"fragment-definition-builder.js","names":["#name","#dependencies","#baseServices","#namedServices","#privateServices","#serviceDependencies","#createRequestStorage","#createThisContext","#getExternalStorage","#internalRoutes"],"sources":["../../src/api/fragment-definition-builder.ts"],"sourcesContent":["import type { RequestThisContext } from \"./api\";\nimport type { BoundServices } from \"./bind-services\";\nimport type { RequestContextStorage } from \"./request-context-storage\";\nimport type { AnyRouteOrFactory } from \"./route\";\nimport type { FragnoPublicConfig } from \"./shared-types\";\n\n/**\n * Metadata for a service dependency\n */\ninterface ServiceMetadata {\n /** Name of the service */\n name: string;\n /** Whether this service is required (false means optional) */\n required: boolean;\n}\n\n/**\n * Context passed to the request context factory function.\n */\nexport type RequestContextFactoryContext<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TRequestStorage,\n> = {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n storage: RequestContextStorage<TRequestStorage>;\n};\n\n/**\n * Context object passed to service constructor functions\n */\nexport type ServiceContext<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n> = {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n serviceDeps: TServiceDependencies;\n privateServices: TPrivateServices;\n /**\n * Helper to define services with proper `this` context typing.\n * Use this to wrap your service methods when they need access to `this`.\n */\n defineService: <T>(svc: T & ThisType<TServiceThisContext>) => T;\n};\n\n/**\n * Service constructor function type\n */\nexport type ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext extends RequestThisContext,\n> = (\n context: ServiceContext<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext\n >,\n) => TService;\n\n/**\n * Fragment definition interface that supports both regular and database fragments.\n * This is the core definition that will be used for fragment instantiation.\n */\nexport interface FragmentDefinition<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage = {},\n TInternalRoutes extends readonly AnyRouteOrFactory[] = readonly [],\n> {\n name: string;\n\n // Core callbacks - all take context objects with separate deps and serviceDeps\n dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n\n baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n\n // Named services stored as factory functions\n namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n\n // Private services - only accessible internally when defining other services\n privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices, // Private services can access other private services\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n\n // Service dependency metadata\n serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n\n /**\n * Optional factory function to create the initial request storage data.\n * This is called at the start of each request to initialize the storage.\n * The returned object can be mutated throughout the request lifecycle.\n *\n * @example\n * ```ts\n * createRequestStorage: ({ config, options, deps }) => ({\n * counter: 0,\n * userId: deps.currentUserId\n * })\n * ```\n */\n createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n\n /**\n * Optional factory function to create the this contexts for services and handlers.\n * Returns separate contexts: serviceContext (may be restricted) and handlerContext (full access).\n * Both contexts should contain only methods or getters that read from storage.\n *\n * @example\n * ```ts\n * createThisContext: ({ storage }) => ({\n * serviceContext: {\n * getUnitOfWork: () => restrictedUOW // Without execute methods\n * },\n * handlerContext: {\n * getUnitOfWork: () => fullUOW // With execute methods\n * }\n * })\n * ```\n */\n createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n\n /**\n * Optional factory function to get an external RequestContextStorage instance.\n * When provided, this storage will be used instead of creating a new one.\n * This allows multiple fragments to share the same storage (e.g., database fragments sharing adapter storage).\n *\n * @example\n * ```ts\n * getExternalStorage: ({ options }) => options.databaseAdapter.contextStorage\n * ```\n */\n getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n\n /**\n * Optional factory for internal data attached to fragment.$internal.\n */\n internalDataFactory?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n services: BoundServices<TBaseServices & TServices>;\n serviceDeps: TServiceDependencies;\n }) => Record<string, unknown> | void;\n\n internalRoutes?: TInternalRoutes;\n\n $serviceThisContext?: TServiceThisContext;\n $handlerThisContext?: THandlerThisContext;\n $requestStorage?: TRequestStorage;\n $internalRoutes?: TInternalRoutes;\n}\n\n/**\n * Builder class for creating fragment definitions.\n * This provides a fluent API for defining fragments with type safety.\n */\nexport class FragmentDefinitionBuilder<\n TConfig,\n TOptions extends FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage = {},\n TInternalRoutes extends readonly AnyRouteOrFactory[] = readonly [],\n> {\n #name: string;\n #dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n #baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n #namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n #privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n #serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n #createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n #createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n #getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n #internalRoutes?: TInternalRoutes;\n\n constructor(\n name: string,\n state?: {\n dependencies?: (context: { config: TConfig; options: TOptions }) => TDeps;\n baseServices?: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TBaseServices,\n TServiceThisContext\n >;\n namedServices?: {\n [K in keyof TServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TServices[K],\n TServiceThisContext\n >;\n };\n privateServices?: {\n [K in keyof TPrivateServices]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TPrivateServices[K],\n TServiceThisContext\n >;\n };\n serviceDependencies?: {\n [K in keyof TServiceDependencies]: ServiceMetadata;\n };\n createRequestStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TRequestStorage;\n createThisContext?: (\n context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>,\n ) => {\n serviceContext: TServiceThisContext;\n handlerContext: THandlerThisContext;\n };\n getExternalStorage?: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TRequestStorage>;\n internalRoutes?: TInternalRoutes;\n },\n ) {\n this.#name = name;\n if (state) {\n this.#dependencies = state.dependencies;\n this.#baseServices = state.baseServices;\n this.#namedServices = state.namedServices;\n this.#privateServices = state.privateServices;\n this.#serviceDependencies = state.serviceDependencies;\n this.#createRequestStorage = state.createRequestStorage;\n this.#createThisContext = state.createThisContext;\n this.#getExternalStorage = state.getExternalStorage;\n this.#internalRoutes = state.internalRoutes;\n }\n }\n\n get name(): string {\n return this.#name;\n }\n\n /**\n * Define dependencies for this fragment.\n * Dependencies are available to services and handlers.\n *\n * **IMPORTANT**: This method resets all services, storage, and context configurations.\n * Always call `withDependencies` early in the builder chain, before defining services\n * or request storage/context.\n *\n * @example\n * ```typescript\n * // ✅ GOOD: Dependencies set first\n * defineFragment(\"my-fragment\")\n * .withDependencies(() => ({ apiKey: \"...\" }))\n * .withRequestStorage(({ deps }) => ({ userId: deps.apiKey }))\n * .providesService(\"myService\", ...)\n *\n * // ❌ BAD: Dependencies set late (erases storage setup)\n * defineFragment(\"my-fragment\")\n * .withRequestStorage(() => ({ userId: \"...\" })) // This gets erased!\n * .withDependencies(() => ({ apiKey: \"...\" }))\n * ```\n */\n withDependencies<TNewDeps>(\n fn: (context: { config: TConfig; options: TOptions }) => TNewDeps,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TNewDeps,\n {},\n {},\n TServiceDependencies,\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n // Warn if we're discarding existing configuration\n if (\n this.#baseServices ||\n this.#namedServices ||\n this.#privateServices ||\n this.#createRequestStorage ||\n this.#createThisContext ||\n this.#getExternalStorage\n ) {\n console.warn(\n `[Fragno] Warning: withDependencies() on fragment \"${this.#name}\" is resetting previously configured services, request storage, or request context. ` +\n `To avoid this, call withDependencies() earlier in the builder chain, before configuring services or storage.`,\n );\n }\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TNewDeps,\n {},\n {},\n TServiceDependencies,\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: fn,\n baseServices: undefined,\n namedServices: undefined,\n privateServices: undefined,\n serviceDependencies: this.#serviceDependencies,\n // Reset storage/context functions since deps type changed - they must be reconfigured\n createRequestStorage: undefined,\n createThisContext: undefined,\n getExternalStorage: undefined,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Define base (unnamed) services for this fragment.\n * Base services are accessible directly on the fragment instance.\n */\n providesBaseService<TNewService>(\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TNewService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TNewService,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TNewService,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: fn,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Provide a named service that other fragments or users can use.\n * Named services are accessible as fragment.serviceName.method()\n */\n providesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices & { [K in TServiceName]: TService },\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newNamedServices = {\n ...this.#namedServices,\n [serviceName]: fn,\n } as {\n [K in keyof (TServices & { [K in TServiceName]: TService })]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n (TServices & { [K in TServiceName]: TService })[K],\n TServiceThisContext\n >;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices & { [K in TServiceName]: TService },\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: newNamedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Provide a private service that is only accessible to the fragment author.\n * Private services are NOT exposed on the fragment instance, but can be used\n * when defining other services (baseServices, namedServices, and other privateServices).\n * Private services are instantiated in order, so earlier private services are available\n * to later ones.\n */\n providesPrivateService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n fn: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices,\n TService,\n TServiceThisContext\n >,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newPrivateServices = {\n ...this.#privateServices,\n [serviceName]: fn,\n } as {\n [K in keyof (TPrivateServices & { [K in TServiceName]: TService })]: ServiceConstructorFn<\n TConfig,\n TOptions,\n TDeps,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n (TPrivateServices & { [K in TServiceName]: TService })[K],\n TServiceThisContext\n >;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices & { [K in TServiceName]: TService },\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: newPrivateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Declare that this fragment uses a required service provided by the runtime.\n */\n usesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newServiceDependencies = {\n ...this.#serviceDependencies,\n [serviceName]: { name: serviceName, required: true },\n } as {\n [K in keyof (TServiceDependencies & { [K in TServiceName]: TService })]: ServiceMetadata;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: newServiceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Declare that this fragment uses an optional service provided by the runtime.\n */\n usesOptionalService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService | undefined },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n // Type assertion needed because TypeScript can't verify object spread with mapped types\n const newServiceDependencies = {\n ...this.#serviceDependencies,\n [serviceName]: { name: serviceName, required: false },\n } as {\n [K in keyof (TServiceDependencies & {\n [K in TServiceName]: TService | undefined;\n })]: ServiceMetadata;\n };\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies & { [K in TServiceName]: TService | undefined },\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: newServiceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Define the type and initial data stored in AsyncLocalStorage for per-request isolation.\n * This should be called before withThisContext if you need to store request-specific data.\n *\n * @param initializer Function that returns the initial storage data for each request\n *\n * @example\n * ```typescript\n * .withRequestStorage(({ config, options, deps }) => ({\n * counter: 0,\n * userId: deps.currentUserId\n * }))\n * .withThisContext(({ storage }) => ({\n * serviceContext: {\n * get counter() { return storage.getStore()!.counter; }\n * },\n * handlerContext: {\n * get counter() { return storage.getStore()!.counter; }\n * }\n * }))\n * ```\n */\n withRequestStorage<TNewRequestStorage>(\n initializer: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => TNewRequestStorage,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewRequestStorage,\n TInternalRoutes\n > {\n // getExternalStorage can coexist with createRequestStorage (they work together)\n // Cast is safe when storage type changes: the external storage container adapts to hold the new type\n const preservedExternalStorage = this.#getExternalStorage\n ? (this.#getExternalStorage as unknown as (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TNewRequestStorage>)\n : undefined;\n\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: initializer,\n // Reset context function since storage type changed - it must be reconfigured\n createThisContext: undefined,\n getExternalStorage: preservedExternalStorage,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Use an externally-provided RequestContextStorage instance.\n * This allows multiple fragments to share the same storage instance.\n * Useful when fragments need to coordinate (e.g., database fragments sharing adapter storage).\n * Note: You must still call withRequestStorage to provide the initial storage data.\n *\n * @example\n * ```typescript\n * .withExternalRequestStorage(({ options }) =>\n * options.databaseAdapter.contextStorage\n * )\n * .withRequestStorage(({ options }) => ({\n * uow: options.databaseAdapter.db.createUnitOfWork()\n * }))\n * ```\n */\n withExternalRequestStorage<TNewStorage>(\n getStorage: (context: {\n config: TConfig;\n options: TOptions;\n deps: TDeps;\n }) => RequestContextStorage<TNewStorage>,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewStorage,\n TInternalRoutes\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TNewStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n // Reset storage/context functions since storage type changed - they must be reconfigured\n createRequestStorage: undefined,\n createThisContext: undefined,\n getExternalStorage: getStorage,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Set the this contexts for services and handlers in this fragment.\n * Both contexts should contain only methods or getters that read from storage.\n * This ensures proper per-request isolation via AsyncLocalStorage.\n *\n * @example\n * ```ts\n * .withThisContext(({ storage }) => ({\n * serviceContext: {\n * get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n * },\n * handlerContext: {\n * get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n * }\n * }))\n * ```\n */\n withThisContext<\n TNewServiceThisContext extends RequestThisContext,\n TNewHandlerThisContext extends RequestThisContext,\n >(\n fn: (context: RequestContextFactoryContext<TConfig, TOptions, TDeps, TRequestStorage>) => {\n serviceContext: TNewServiceThisContext;\n handlerContext: TNewHandlerThisContext;\n },\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TNewServiceThisContext,\n TNewHandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n return new FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TNewServiceThisContext,\n TNewHandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n >(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: fn,\n getExternalStorage: this.#getExternalStorage,\n internalRoutes: this.#internalRoutes,\n });\n }\n\n /**\n * Define internal routes that will be mounted under /_internal.\n */\n withInternalRoutes<const TNewInternalRoutes extends readonly AnyRouteOrFactory[]>(\n routes: TNewInternalRoutes,\n ): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TNewInternalRoutes\n > {\n return new FragmentDefinitionBuilder(this.#name, {\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n internalRoutes: routes,\n });\n }\n\n /**\n * Extend this builder with a transformation function.\n * This enables fluent API extensions like `.extend(withDatabase(schema))`.\n */\n extend<const TNewBuilder>(transformer: (builder: this) => TNewBuilder): TNewBuilder {\n return transformer(this);\n }\n\n /**\n * Build the final fragment definition\n */\n build(): FragmentDefinition<\n TConfig,\n TOptions,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDependencies,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TInternalRoutes\n > {\n return {\n name: this.#name,\n dependencies: this.#dependencies,\n baseServices: this.#baseServices,\n namedServices: this.#namedServices,\n privateServices: this.#privateServices,\n serviceDependencies: this.#serviceDependencies,\n createRequestStorage: this.#createRequestStorage,\n createThisContext: this.#createThisContext,\n getExternalStorage: this.#getExternalStorage,\n internalRoutes: this.#internalRoutes,\n };\n }\n}\n\n/**\n * Create a new fragment definition builder\n */\nexport function defineFragment<\n TConfig = {},\n TOptions extends FragnoPublicConfig = FragnoPublicConfig,\n TServiceThisContext extends RequestThisContext = RequestThisContext,\n THandlerThisContext extends RequestThisContext = RequestThisContext,\n TRequestStorage = {},\n>(\n name: string,\n): FragmentDefinitionBuilder<\n TConfig,\n TOptions,\n {},\n {},\n {},\n {},\n {},\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n []\n> {\n return new FragmentDefinitionBuilder(name);\n}\n"],"mappings":"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"}