@fragno-dev/core 0.1.8 → 0.1.9

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 (176) hide show
  1. package/.turbo/turbo-build.log +131 -56
  2. package/CHANGELOG.md +13 -0
  3. package/dist/api/api.d.ts +38 -2
  4. package/dist/api/api.d.ts.map +1 -0
  5. package/dist/api/api.js +9 -3
  6. package/dist/api/api.js.map +1 -0
  7. package/dist/api/bind-services.d.ts +6 -0
  8. package/dist/api/bind-services.d.ts.map +1 -0
  9. package/dist/api/bind-services.js +20 -0
  10. package/dist/api/bind-services.js.map +1 -0
  11. package/dist/api/error.d.ts +26 -0
  12. package/dist/api/error.d.ts.map +1 -0
  13. package/dist/api/error.js +48 -0
  14. package/dist/api/error.js.map +1 -0
  15. package/dist/api/fragment-definition-builder.d.ts +313 -0
  16. package/dist/api/fragment-definition-builder.d.ts.map +1 -0
  17. package/dist/api/fragment-definition-builder.js +326 -0
  18. package/dist/api/fragment-definition-builder.js.map +1 -0
  19. package/dist/api/fragment-instantiator.d.ts +216 -0
  20. package/dist/api/fragment-instantiator.d.ts.map +1 -0
  21. package/dist/api/fragment-instantiator.js +487 -0
  22. package/dist/api/fragment-instantiator.js.map +1 -0
  23. package/dist/api/fragno-response.d.ts +30 -0
  24. package/dist/api/fragno-response.d.ts.map +1 -0
  25. package/dist/api/fragno-response.js +73 -0
  26. package/dist/api/fragno-response.js.map +1 -0
  27. package/dist/api/internal/path.d.ts +50 -0
  28. package/dist/api/internal/path.d.ts.map +1 -0
  29. package/dist/api/internal/path.js +76 -0
  30. package/dist/api/internal/path.js.map +1 -0
  31. package/dist/api/internal/response-stream.d.ts +43 -0
  32. package/dist/api/internal/response-stream.d.ts.map +1 -0
  33. package/dist/api/internal/response-stream.js +81 -0
  34. package/dist/api/internal/response-stream.js.map +1 -0
  35. package/dist/api/internal/route.js +10 -0
  36. package/dist/api/internal/route.js.map +1 -0
  37. package/dist/api/mutable-request-state.d.ts +82 -0
  38. package/dist/api/mutable-request-state.d.ts.map +1 -0
  39. package/dist/api/mutable-request-state.js +97 -0
  40. package/dist/api/mutable-request-state.js.map +1 -0
  41. package/dist/api/request-context-storage.d.ts +42 -0
  42. package/dist/api/request-context-storage.d.ts.map +1 -0
  43. package/dist/api/request-context-storage.js +43 -0
  44. package/dist/api/request-context-storage.js.map +1 -0
  45. package/dist/api/request-input-context.d.ts +89 -0
  46. package/dist/api/request-input-context.d.ts.map +1 -0
  47. package/dist/api/request-input-context.js +118 -0
  48. package/dist/api/request-input-context.js.map +1 -0
  49. package/dist/api/request-middleware.d.ts +50 -0
  50. package/dist/api/request-middleware.d.ts.map +1 -0
  51. package/dist/api/request-middleware.js +83 -0
  52. package/dist/api/request-middleware.js.map +1 -0
  53. package/dist/api/request-output-context.d.ts +41 -0
  54. package/dist/api/request-output-context.d.ts.map +1 -0
  55. package/dist/api/request-output-context.js +119 -0
  56. package/dist/api/request-output-context.js.map +1 -0
  57. package/dist/api/route-handler-input-options.d.ts +21 -0
  58. package/dist/api/route-handler-input-options.d.ts.map +1 -0
  59. package/dist/api/route.d.ts +54 -2
  60. package/dist/api/route.d.ts.map +1 -0
  61. package/dist/api/route.js +29 -2
  62. package/dist/api/route.js.map +1 -0
  63. package/dist/api/shared-types.d.ts +47 -0
  64. package/dist/api/shared-types.d.ts.map +1 -0
  65. package/dist/api/shared-types.js +1 -0
  66. package/dist/client/client-error.d.ts +60 -0
  67. package/dist/client/client-error.d.ts.map +1 -0
  68. package/dist/client/client-error.js +92 -0
  69. package/dist/client/client-error.js.map +1 -0
  70. package/dist/client/client.d.ts +210 -2
  71. package/dist/client/client.d.ts.map +1 -0
  72. package/dist/client/client.js +397 -5
  73. package/dist/client/client.js.map +1 -0
  74. package/dist/client/client.svelte.d.ts +5 -2
  75. package/dist/client/client.svelte.d.ts.map +1 -1
  76. package/dist/client/client.svelte.js +1 -4
  77. package/dist/client/client.svelte.js.map +1 -1
  78. package/dist/client/internal/fetcher-merge.js +36 -0
  79. package/dist/client/internal/fetcher-merge.js.map +1 -0
  80. package/dist/client/internal/ndjson-streaming.js +139 -0
  81. package/dist/client/internal/ndjson-streaming.js.map +1 -0
  82. package/dist/client/react.d.ts +5 -2
  83. package/dist/client/react.d.ts.map +1 -1
  84. package/dist/client/react.js +3 -4
  85. package/dist/client/react.js.map +1 -1
  86. package/dist/client/solid.d.ts +5 -2
  87. package/dist/client/solid.d.ts.map +1 -1
  88. package/dist/client/solid.js +2 -4
  89. package/dist/client/solid.js.map +1 -1
  90. package/dist/client/vanilla.d.ts +5 -2
  91. package/dist/client/vanilla.d.ts.map +1 -1
  92. package/dist/client/vanilla.js +2 -42
  93. package/dist/client/vanilla.js.map +1 -1
  94. package/dist/client/vue.d.ts +5 -2
  95. package/dist/client/vue.d.ts.map +1 -1
  96. package/dist/client/vue.js +1 -4
  97. package/dist/client/vue.js.map +1 -1
  98. package/dist/http/http-status.d.ts +26 -0
  99. package/dist/http/http-status.d.ts.map +1 -0
  100. package/dist/integrations/react-ssr.js +1 -1
  101. package/dist/internal/symbols.d.ts +9 -0
  102. package/dist/internal/symbols.d.ts.map +1 -0
  103. package/dist/internal/symbols.js +10 -0
  104. package/dist/internal/symbols.js.map +1 -0
  105. package/dist/mod-client.d.ts +36 -0
  106. package/dist/mod-client.d.ts.map +1 -0
  107. package/dist/mod-client.js +21 -0
  108. package/dist/mod-client.js.map +1 -0
  109. package/dist/mod.d.ts +7 -2
  110. package/dist/mod.js +4 -4
  111. package/dist/request/request.d.ts +4 -0
  112. package/dist/request/request.js +5 -0
  113. package/dist/test/test.d.ts +62 -34
  114. package/dist/test/test.d.ts.map +1 -1
  115. package/dist/test/test.js +75 -42
  116. package/dist/test/test.js.map +1 -1
  117. package/dist/util/async.js +40 -0
  118. package/dist/util/async.js.map +1 -0
  119. package/dist/util/content-type.js +49 -0
  120. package/dist/util/content-type.js.map +1 -0
  121. package/dist/util/nanostores.js +31 -0
  122. package/dist/util/nanostores.js.map +1 -0
  123. package/dist/{ssr-kyKI7pqH.js → util/ssr.js} +2 -2
  124. package/dist/util/ssr.js.map +1 -0
  125. package/dist/util/types-util.d.ts +8 -0
  126. package/dist/util/types-util.d.ts.map +1 -0
  127. package/package.json +19 -12
  128. package/src/api/api.ts +1 -5
  129. package/src/api/bind-services.ts +42 -0
  130. package/src/api/fragment-definition-builder.extend.test.ts +810 -0
  131. package/src/api/fragment-definition-builder.test.ts +499 -0
  132. package/src/api/fragment-definition-builder.ts +1088 -0
  133. package/src/api/fragment-instantiator.test.ts +1488 -0
  134. package/src/api/fragment-instantiator.ts +1053 -0
  135. package/src/api/fragment-services.test.ts +454 -189
  136. package/src/api/request-context-storage.ts +64 -0
  137. package/src/api/request-middleware.test.ts +301 -228
  138. package/src/api/route.test.ts +12 -36
  139. package/src/api/route.ts +167 -155
  140. package/src/api/shared-types.ts +43 -0
  141. package/src/client/client-builder.test.ts +23 -23
  142. package/src/client/client.ssr.test.ts +3 -3
  143. package/src/client/client.svelte.test.ts +15 -15
  144. package/src/client/client.test.ts +22 -22
  145. package/src/client/client.ts +72 -12
  146. package/src/client/internal/fetcher-merge.ts +1 -1
  147. package/src/client/react.test.ts +2 -2
  148. package/src/client/solid.test.ts +2 -2
  149. package/src/client/vanilla.test.ts +2 -2
  150. package/src/client/vue.test.ts +2 -2
  151. package/src/internal/symbols.ts +5 -0
  152. package/src/mod-client.ts +59 -0
  153. package/src/mod.ts +22 -15
  154. package/src/request/request.ts +8 -0
  155. package/src/test/test.test.ts +189 -375
  156. package/src/test/test.ts +186 -152
  157. package/tsdown.config.ts +8 -5
  158. package/dist/api/fragment-builder.d.ts +0 -2
  159. package/dist/api/fragment-builder.js +0 -3
  160. package/dist/api/fragment-instantiation.d.ts +0 -2
  161. package/dist/api/fragment-instantiation.js +0 -4
  162. package/dist/api-BFrUCIsF.d.ts +0 -963
  163. package/dist/api-BFrUCIsF.d.ts.map +0 -1
  164. package/dist/client-DAFHcKqA.js +0 -782
  165. package/dist/client-DAFHcKqA.js.map +0 -1
  166. package/dist/fragment-builder-Boh2vNHq.js +0 -108
  167. package/dist/fragment-builder-Boh2vNHq.js.map +0 -1
  168. package/dist/fragment-instantiation-DUT-HLl1.js +0 -898
  169. package/dist/fragment-instantiation-DUT-HLl1.js.map +0 -1
  170. package/dist/route-C4CyNHkC.js +0 -26
  171. package/dist/route-C4CyNHkC.js.map +0 -1
  172. package/dist/ssr-kyKI7pqH.js.map +0 -1
  173. package/src/api/fragment-builder.ts +0 -518
  174. package/src/api/fragment-instantiation.test.ts +0 -702
  175. package/src/api/fragment-instantiation.ts +0 -766
  176. package/src/api/fragment.test.ts +0 -585
package/src/test/test.ts CHANGED
@@ -1,99 +1,183 @@
1
- import type { FragmentDefinition } from "../api/fragment-builder";
2
- import type { FragnoRouteConfig, HTTPMethod } from "../api/api";
1
+ import type { RequestThisContext } from "../api/api";
3
2
  import type { AnyRouteOrFactory, FlattenRouteFactories } from "../api/route";
4
- import type { FragnoPublicConfig } from "../api/fragment-instantiation";
5
- import { createFragment } from "../api/fragment-instantiation";
6
- import type { RouteHandlerInputOptions } from "../api/route-handler-input-options";
7
- import type { ExtractRouteByPath, ExtractRoutePath } from "../client/client";
8
- import type { InferOrUnknown } from "../util/types-util";
9
- import type { StandardSchemaV1 } from "@standard-schema/spec";
10
- import type { FragnoResponse } from "../api/fragno-response";
3
+ import type { FragnoPublicConfig } from "../api/shared-types";
4
+ import {
5
+ FragmentDefinitionBuilder,
6
+ type FragmentDefinition,
7
+ type ServiceConstructorFn,
8
+ } from "../api/fragment-definition-builder";
9
+ import { instantiateFragment, type FragnoInstantiatedFragment } from "../api/fragment-instantiator";
10
+ import type { BoundServices } from "../api/bind-services";
11
11
 
12
12
  // Re-export for convenience
13
- export type { RouteHandlerInputOptions };
13
+ export type { RouteHandlerInputOptions } from "../api/route-handler-input-options";
14
+ export type { FragnoResponse } from "../api/fragno-response";
14
15
 
15
- export type { FragnoResponse };
16
+ export type TestBaseServices<TDeps> = {
17
+ /**
18
+ * Access to fragment dependencies for testing purposes.
19
+ */
20
+ deps: TDeps;
21
+ };
16
22
 
17
23
  /**
18
- * Options for creating a test fragment
24
+ * Extension function that adds test utilities to a fragment definition.
25
+ * This adds a `test` service to base services with access to deps.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const definition = defineFragment("my-fragment")
30
+ * .withDependencies(({ config }) => ({ client: createClient(config) }))
31
+ * .extend(withTestUtils())
32
+ * .build();
33
+ *
34
+ * const fragment = createFragmentForTest(definition, [], { config: {...} });
35
+ * expect(fragment.services.test.deps.client).toBeDefined();
36
+ * ```
19
37
  */
20
- export interface CreateFragmentForTestOptions<
21
- TConfig,
22
- TDeps,
23
- TServices,
24
- TAdditionalContext extends Record<string, unknown>,
25
- TOptions extends FragnoPublicConfig,
26
- TRequiredInterfaces extends Record<string, unknown> = {},
27
- > {
28
- config: TConfig;
29
- options?: Partial<TOptions>;
30
- deps?: Partial<TDeps>;
31
- services?: Partial<TServices>;
32
- additionalContext?: Partial<TAdditionalContext>;
33
- interfaceImplementations?: TRequiredInterfaces;
38
+ export function withTestUtils() {
39
+ return <
40
+ TConfig,
41
+ TOptions extends FragnoPublicConfig,
42
+ TDeps,
43
+ TBaseServices,
44
+ TServices,
45
+ TServiceDeps,
46
+ TPrivateServices,
47
+ TServiceThisContext extends RequestThisContext,
48
+ THandlerThisContext extends RequestThisContext,
49
+ TRequestStorage,
50
+ >(
51
+ builder: FragmentDefinitionBuilder<
52
+ TConfig,
53
+ TOptions,
54
+ TDeps,
55
+ TBaseServices,
56
+ TServices,
57
+ TServiceDeps,
58
+ TPrivateServices,
59
+ TServiceThisContext,
60
+ THandlerThisContext,
61
+ TRequestStorage
62
+ >,
63
+ ): FragmentDefinitionBuilder<
64
+ TConfig,
65
+ TOptions,
66
+ TDeps,
67
+ TBaseServices & TestBaseServices<TDeps>,
68
+ TServices,
69
+ TServiceDeps,
70
+ TPrivateServices,
71
+ TServiceThisContext,
72
+ THandlerThisContext,
73
+ TRequestStorage
74
+ > => {
75
+ // Get the current base services factory
76
+ const currentBaseDef = builder.build();
77
+ const currentBaseServices = currentBaseDef.baseServices;
78
+
79
+ // Create new base services factory that merges test utilities
80
+ const newBaseServices: ServiceConstructorFn<
81
+ TConfig,
82
+ TOptions,
83
+ TDeps,
84
+ TServiceDeps,
85
+ TPrivateServices,
86
+ TBaseServices & TestBaseServices<TDeps>,
87
+ TServiceThisContext
88
+ > = (context) => {
89
+ // Call existing base services if they exist
90
+ const existingServices = currentBaseServices
91
+ ? currentBaseServices(context)
92
+ : ({} as TBaseServices);
93
+
94
+ // Add test utilities
95
+ const testUtils: TestBaseServices<TDeps> = {
96
+ deps: context.deps,
97
+ };
98
+
99
+ return {
100
+ ...existingServices,
101
+ ...testUtils,
102
+ } as TBaseServices & TestBaseServices<TDeps>;
103
+ };
104
+
105
+ // Create new builder with updated base services
106
+ return new FragmentDefinitionBuilder<
107
+ TConfig,
108
+ TOptions,
109
+ TDeps,
110
+ TBaseServices & TestBaseServices<TDeps>,
111
+ TServices,
112
+ TServiceDeps,
113
+ TPrivateServices,
114
+ TServiceThisContext,
115
+ THandlerThisContext,
116
+ TRequestStorage
117
+ >(builder.name, {
118
+ dependencies: currentBaseDef.dependencies,
119
+ baseServices: newBaseServices,
120
+ namedServices: currentBaseDef.namedServices,
121
+ privateServices: currentBaseDef.privateServices,
122
+ serviceDependencies: currentBaseDef.serviceDependencies,
123
+ createRequestStorage: currentBaseDef.createRequestStorage,
124
+ createThisContext: currentBaseDef.createThisContext,
125
+ });
126
+ };
34
127
  }
35
128
 
36
129
  /**
37
- * Fragment test instance with type-safe callRoute method
130
+ * Options for creating a test fragment with the new architecture
38
131
  */
39
- export interface FragmentForTest<
132
+ export interface CreateFragmentForTestOptions<
40
133
  TConfig,
41
- TDeps,
42
- TServices,
43
- TAdditionalContext extends Record<string, unknown>,
44
134
  TOptions extends FragnoPublicConfig,
45
- TRoutes extends readonly FragnoRouteConfig<
46
- HTTPMethod,
47
- string,
48
- StandardSchemaV1 | undefined,
49
- StandardSchemaV1 | undefined,
50
- string,
51
- string
52
- >[],
135
+ TServiceDependencies,
53
136
  > {
54
137
  config: TConfig;
55
- deps: TDeps;
56
- services: TServices;
57
- additionalContext: TAdditionalContext & TOptions;
58
- callRoute: <
59
- const TMethod extends HTTPMethod,
60
- const TPath extends ExtractRoutePath<TRoutes, TMethod>,
61
- >(
62
- method: TMethod,
63
- path: TPath,
64
- inputOptions?: RouteHandlerInputOptions<
65
- TPath,
66
- ExtractRouteByPath<TRoutes, TPath, TMethod>["inputSchema"]
67
- >,
68
- ) => Promise<
69
- FragnoResponse<
70
- InferOrUnknown<NonNullable<ExtractRouteByPath<TRoutes, TPath, TMethod>["outputSchema"]>>
71
- >
72
- >;
138
+ options?: Partial<TOptions>;
139
+ serviceImplementations?: TServiceDependencies;
73
140
  }
74
141
 
75
142
  /**
76
- * Create a fragment instance for testing with optional dependency and service overrides
143
+ * Create a fragment instance for testing with optional service dependency overrides.
144
+ * This uses the new fragment definition and instantiation architecture.
77
145
  *
78
- * @param fragmentBuilder - The fragment builder with definition and required options
146
+ * **Important:** Use `.extend(withTestUtils())` before `.build()` to expose deps via `services.test.deps`.
147
+ *
148
+ * Returns an instantiated fragment with:
149
+ * - `services` - Services (base + named) from the fragment definition
150
+ * - `services.test.deps` - Dependencies (only if you used .extend(withTestUtils()))
151
+ * - `callRoute()` - Type-safe method to call routes directly
152
+ * - `handler()` - Request handler for integration
153
+ * - `inContext()` - Run code within request context
154
+ *
155
+ * @param definition - The fragment definition from builder.build()
79
156
  * @param routesOrFactories - Route configurations or route factories
80
- * @param options - Configuration and optional overrides for deps/services
81
- * @returns A fragment test instance with a type-safe callRoute method
157
+ * @param options - Configuration and optional overrides
158
+ * @returns An instantiated fragment ready for testing
82
159
  *
83
160
  * @example
84
161
  * ```typescript
162
+ * const definition = defineFragment<{ apiKey: string }>("test")
163
+ * .withDependencies(({ config }) => ({ client: createClient(config.apiKey) }))
164
+ * .providesService("api", ({ deps }) => ({ call: () => deps.client.call() }))
165
+ * .extend(withTestUtils()) // <- Add test utilities
166
+ * .build();
167
+ *
85
168
  * const fragment = createFragmentForTest(
86
- * chatnoDefinition,
87
- * [routesFactory],
169
+ * definition,
170
+ * [route1, route2],
88
171
  * {
89
- * config: { openaiApiKey: "test-key" },
90
- * options: { mountRoute: "/api/chatno" },
91
- * services: {
92
- * generateStreamMessages: mockGenerator
93
- * }
172
+ * config: { apiKey: "test-key" },
173
+ * options: { mountRoute: "/api/test" }
94
174
  * }
95
175
  * );
96
176
  *
177
+ * // Access deps via test utilities
178
+ * expect(fragment.services.test.deps.client).toBeDefined();
179
+ * expect(fragment.services.api.call()).toBeDefined();
180
+ *
97
181
  * // Call routes directly by method and path
98
182
  * const response = await fragment.callRoute("POST", "/login", {
99
183
  * body: { username: "test", password: "test123" }
@@ -106,103 +190,53 @@ export interface FragmentForTest<
106
190
  */
107
191
  export function createFragmentForTest<
108
192
  TConfig,
193
+ TOptions extends FragnoPublicConfig,
109
194
  TDeps,
195
+ TBaseServices extends Record<string, unknown>,
110
196
  TServices extends Record<string, unknown>,
111
- TAdditionalContext extends Record<string, unknown>,
112
- TOptions extends FragnoPublicConfig,
113
- TRequiredInterfaces extends Record<string, unknown>,
114
- TProvidedInterfaces extends Record<string, unknown>,
197
+ TServiceDependencies,
198
+ TPrivateServices extends Record<string, unknown>,
199
+ TServiceThisContext extends RequestThisContext,
200
+ THandlerThisContext extends RequestThisContext,
201
+ TRequestStorage,
115
202
  const TRoutesOrFactories extends readonly AnyRouteOrFactory[],
116
203
  >(
117
- fragmentBuilder: {
118
- definition: FragmentDefinition<
119
- TConfig,
120
- TDeps,
121
- TServices,
122
- TAdditionalContext,
123
- TRequiredInterfaces,
124
- TProvidedInterfaces
125
- >;
126
- $requiredOptions: TOptions;
127
- },
128
- routesOrFactories: TRoutesOrFactories,
129
- options: CreateFragmentForTestOptions<
204
+ definition: FragmentDefinition<
130
205
  TConfig,
206
+ TOptions,
131
207
  TDeps,
208
+ TBaseServices,
132
209
  TServices,
133
- TAdditionalContext,
134
- TOptions,
135
- TRequiredInterfaces
210
+ TServiceDependencies,
211
+ TPrivateServices,
212
+ TServiceThisContext,
213
+ THandlerThisContext,
214
+ TRequestStorage
136
215
  >,
137
- ): FragmentForTest<
138
- TConfig,
139
- TDeps & TRequiredInterfaces,
140
- TServices & TProvidedInterfaces,
141
- TAdditionalContext,
142
- TOptions,
143
- FlattenRouteFactories<TRoutesOrFactories>
216
+ routesOrFactories: TRoutesOrFactories,
217
+ options: CreateFragmentForTestOptions<TConfig, TOptions, TServiceDependencies>,
218
+ ): FragnoInstantiatedFragment<
219
+ FlattenRouteFactories<TRoutesOrFactories>,
220
+ TDeps,
221
+ BoundServices<TBaseServices & TServices>,
222
+ TServiceThisContext,
223
+ THandlerThisContext,
224
+ TRequestStorage
144
225
  > {
145
- const {
146
- config,
147
- options: fragmentOptions = {} as TOptions,
148
- deps: depsOverride,
149
- services: servicesOverride,
150
- additionalContext: additionalContextOverride,
151
- interfaceImplementations,
152
- } = options;
226
+ const { config, options: fragmentOptions = {} as TOptions, serviceImplementations } = options;
153
227
 
154
- // Create deps from definition or use empty object
155
- const definition = fragmentBuilder.definition;
156
- const baseDeps = definition.dependencies
157
- ? definition.dependencies(config, fragmentOptions)
158
- : ({} as TDeps);
159
-
160
- // Merge deps with overrides and interface implementations
161
- const deps = {
162
- ...baseDeps,
163
- ...interfaceImplementations,
164
- ...depsOverride,
165
- } as TDeps & TRequiredInterfaces;
166
-
167
- // Create services from definition or use empty object
168
- const baseServices = definition.services
169
- ? definition.services(config, fragmentOptions, deps)
170
- : ({} as TServices);
171
-
172
- // Handle providedServices - can be either a factory function or a direct object
173
- const providedServicesResolved =
174
- typeof definition.providedServices === "function"
175
- ? definition.providedServices(config, fragmentOptions, deps)
176
- : definition.providedServices;
177
-
178
- // Merge services with provided services and overrides
179
- const services = {
180
- ...baseServices,
181
- ...providedServicesResolved,
182
- ...servicesOverride,
183
- } as TServices & TProvidedInterfaces;
184
-
185
- // Merge additional context with options
186
- const additionalContext = {
187
- ...definition.additionalContext,
228
+ // Use default mountRoute for testing if not provided
229
+ const fullOptions = {
230
+ mountRoute: "/api/test",
188
231
  ...fragmentOptions,
189
- ...additionalContextOverride,
190
- } as TAdditionalContext & TOptions;
232
+ } as TOptions;
191
233
 
192
- // Create the actual fragment using createFragment
193
- const fragment = createFragment(
194
- fragmentBuilder,
234
+ // Instantiate and return the fragment directly
235
+ return instantiateFragment(
236
+ definition,
195
237
  config,
196
238
  routesOrFactories,
197
- fragmentOptions,
198
- interfaceImplementations,
239
+ fullOptions,
240
+ serviceImplementations,
199
241
  );
200
-
201
- return {
202
- config,
203
- deps,
204
- services,
205
- additionalContext,
206
- callRoute: (method, path, inputOptions) => fragment.callRoute(method, path, inputOptions),
207
- };
208
242
  }
package/tsdown.config.ts CHANGED
@@ -3,10 +3,14 @@ import { defineConfig } from "tsdown";
3
3
  export default defineConfig({
4
4
  entry: [
5
5
  "./src/mod.ts",
6
+ "./src/mod-client.ts",
6
7
  "./src/api/api.ts",
7
- "./src/api/fragment-builder.ts",
8
- "./src/api/fragment-instantiation.ts",
8
+ "./src/api/shared-types.ts",
9
+ "./src/api/fragment-definition-builder.ts",
10
+ "./src/api/fragment-instantiator.ts",
9
11
  "./src/api/route.ts",
12
+ "./src/api/request-context-storage.ts",
13
+ "./src/request/request.ts",
10
14
  "./src/client/client.ts",
11
15
  "./src/client/vanilla.ts",
12
16
  "./src/client/client.svelte.ts",
@@ -18,9 +22,8 @@ export default defineConfig({
18
22
  "./src/integrations/react-ssr.ts",
19
23
  "./src/integrations/svelte-kit.ts",
20
24
  "./src/test/test.ts",
25
+ "./src/internal/symbols.ts",
21
26
  ],
22
27
  dts: true,
23
- // TODO: This should be true, but we need some additional type exports in chatno/src/index.ts
24
- // to make it work.
25
- unbundle: false,
28
+ unbundle: true,
26
29
  });
@@ -1,2 +0,0 @@
1
- import { ct as RouteHandler, lt as defineFragment, ot as FragmentBuilder, st as FragmentDefinition } from "../api-BFrUCIsF.js";
2
- export { FragmentBuilder, FragmentDefinition, RouteHandler, defineFragment };
@@ -1,3 +0,0 @@
1
- import { n as defineFragment, t as FragmentBuilder } from "../fragment-builder-Boh2vNHq.js";
2
-
3
- export { FragmentBuilder, defineFragment };
@@ -1,2 +0,0 @@
1
- import { c as FetcherConfig, d as FragnoInstantiatedFragment, f as FragnoPublicClientConfig, g as instantiatedFragmentFakeSymbol, h as instantiateFragment, l as FragmentInstantiationBuilder, m as createFragment, p as FragnoPublicConfig, s as AnyFragnoFragmentSharedConfig, u as FragnoFragmentSharedConfig } from "../api-BFrUCIsF.js";
2
- export { AnyFragnoFragmentSharedConfig, FetcherConfig, FragmentInstantiationBuilder, FragnoFragmentSharedConfig, FragnoInstantiatedFragment, FragnoPublicClientConfig, FragnoPublicConfig, createFragment, instantiateFragment, instantiatedFragmentFakeSymbol };
@@ -1,4 +0,0 @@
1
- import { i as instantiatedFragmentFakeSymbol, n as createFragment, r as instantiateFragment, t as FragmentInstantiationBuilder } from "../fragment-instantiation-DUT-HLl1.js";
2
- import "../route-C4CyNHkC.js";
3
-
4
- export { FragmentInstantiationBuilder, createFragment, instantiateFragment, instantiatedFragmentFakeSymbol };