spiceflow 1.17.12 → 1.18.0

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 (47) hide show
  1. package/README.md +167 -2
  2. package/dist/client/errors.d.ts +2 -1
  3. package/dist/client/errors.d.ts.map +1 -1
  4. package/dist/client/errors.js +3 -1
  5. package/dist/client/errors.js.map +1 -1
  6. package/dist/client/fetch.d.ts +86 -0
  7. package/dist/client/fetch.d.ts.map +1 -0
  8. package/dist/client/fetch.js +143 -0
  9. package/dist/client/fetch.js.map +1 -0
  10. package/dist/client/index.d.ts +4 -14
  11. package/dist/client/index.d.ts.map +1 -1
  12. package/dist/client/index.js +3 -176
  13. package/dist/client/index.js.map +1 -1
  14. package/dist/client/shared.d.ts +47 -0
  15. package/dist/client/shared.d.ts.map +1 -0
  16. package/dist/client/shared.js +314 -0
  17. package/dist/client/shared.js.map +1 -0
  18. package/dist/client/types.d.ts +2 -1
  19. package/dist/client/types.d.ts.map +1 -1
  20. package/dist/fetch-client.test.d.ts +2 -0
  21. package/dist/fetch-client.test.d.ts.map +1 -0
  22. package/dist/fetch-client.test.js +362 -0
  23. package/dist/fetch-client.test.js.map +1 -0
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/mcp.d.ts +1 -1
  29. package/dist/mcp.d.ts.map +1 -1
  30. package/dist/openapi.d.ts +1 -1
  31. package/dist/openapi.d.ts.map +1 -1
  32. package/dist/spiceflow.d.ts +36 -14
  33. package/dist/spiceflow.d.ts.map +1 -1
  34. package/dist/spiceflow.js +49 -16
  35. package/dist/spiceflow.js.map +1 -1
  36. package/dist/spiceflow.test.js +205 -1
  37. package/dist/spiceflow.test.js.map +1 -1
  38. package/package.json +3 -3
  39. package/src/client/errors.ts +3 -0
  40. package/src/client/fetch.ts +447 -0
  41. package/src/client/index.ts +19 -229
  42. package/src/client/shared.ts +406 -0
  43. package/src/client/types.ts +2 -1
  44. package/src/fetch-client.test.ts +411 -0
  45. package/src/index.ts +1 -1
  46. package/src/spiceflow.test.ts +315 -1
  47. package/src/spiceflow.ts +106 -32
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fetch-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-client.test.d.ts","sourceRoot":"","sources":["../src/fetch-client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,362 @@
1
+ import { z } from 'zod';
2
+ import { createSpiceflowFetch } from "./client/fetch.js";
3
+ import { Spiceflow } from "./spiceflow.js";
4
+ import { SpiceflowFetchError } from "./client/errors.js";
5
+ import { describe, expect, it } from 'vitest';
6
+ const app = new Spiceflow()
7
+ .state('someState', 1)
8
+ .get('/', () => 'a')
9
+ .post('/', () => 'a')
10
+ .get('/number', () => 1)
11
+ .get('/someState', ({ state }) => state.someState)
12
+ .get('/true', () => true)
13
+ .get('/false', () => false)
14
+ .post('/array', async ({ request }) => await request.json(), {
15
+ body: z.array(z.string()),
16
+ })
17
+ .route({
18
+ method: 'POST',
19
+ path: '/mirror',
20
+ handler: async ({ request }) => await request.json(),
21
+ })
22
+ .route({
23
+ method: 'POST',
24
+ path: '/body',
25
+ handler: async ({ request }) => await request.text(),
26
+ body: z.string(),
27
+ })
28
+ .route({
29
+ method: 'DELETE',
30
+ path: '/empty',
31
+ handler: async ({ request }) => {
32
+ const body = await request.text();
33
+ return { body: body || null };
34
+ },
35
+ })
36
+ .route({
37
+ method: 'POST',
38
+ path: '/deep/nested/mirror',
39
+ handler: async ({ request }) => await request.json(),
40
+ body: z.object({
41
+ username: z.string(),
42
+ password: z.string(),
43
+ }),
44
+ })
45
+ .get('/throws', () => {
46
+ throw new Response('Custom error', { status: 400 });
47
+ })
48
+ .get('/throws-307', () => {
49
+ throw new Response('Redirect', {
50
+ status: 307,
51
+ headers: { location: 'http://example.com' },
52
+ });
53
+ })
54
+ .get('/throws-200', () => {
55
+ throw new Response('this string will not be parsed as json', {
56
+ status: 200,
57
+ });
58
+ })
59
+ .get('/throws-402-json', () => {
60
+ throw new Response(JSON.stringify({ reason: 'Payment required', code: 4021 }), {
61
+ status: 402,
62
+ headers: { 'content-type': 'application/json' },
63
+ });
64
+ })
65
+ .use(new Spiceflow({ basePath: '/nested' }).get('/data', ({ params }) => 'hi'))
66
+ .get('/validationError',
67
+ // @ts-expect-error
68
+ () => {
69
+ return 'this errors because validation is wrong';
70
+ }, {
71
+ response: {
72
+ 200: z.object({
73
+ x: z.string(),
74
+ }),
75
+ },
76
+ })
77
+ .get('/dateObject', () => ({ date: new Date() }))
78
+ .get('/redirect', ({ redirect }) => redirect('http://localhost:8083/true'))
79
+ .post('/redirect', ({ redirect }) => redirect('http://localhost:8083/true'), {
80
+ body: z.object({
81
+ username: z.string(),
82
+ }),
83
+ })
84
+ .get('/stream', function* stream() {
85
+ yield 'a';
86
+ yield 'b';
87
+ yield 'c';
88
+ })
89
+ .get('/stream-async', async function* stream() {
90
+ yield 'a';
91
+ yield 'b';
92
+ yield 'c';
93
+ })
94
+ .get('/stream-return', function* stream() {
95
+ return 'a';
96
+ })
97
+ .get('/stream-return-async', function* stream() {
98
+ return 'a';
99
+ })
100
+ .get('/id/:id', ({ params: { id } }) => id)
101
+ .get('/items/:id/:id2', ({ params }) => params)
102
+ .get('/search', ({ query }) => query, { query: z.object({ q: z.string(), page: z.coerce.number().optional() }) });
103
+ const f = createSpiceflowFetch(app);
104
+ describe('fetch client', () => {
105
+ it('get index', async () => {
106
+ const result = await f('/');
107
+ if (result instanceof Error)
108
+ throw result;
109
+ expect(result).toBe('a');
110
+ });
111
+ it('post index', async () => {
112
+ const result = await f('/', { method: 'POST' });
113
+ if (result instanceof Error)
114
+ throw result;
115
+ expect(result).toBe('a');
116
+ });
117
+ it('parse number', async () => {
118
+ const result = await f('/number');
119
+ if (result instanceof Error)
120
+ throw result;
121
+ expect(result).toEqual(1);
122
+ });
123
+ it('parse true', async () => {
124
+ const result = await f('/true');
125
+ if (result instanceof Error)
126
+ throw result;
127
+ expect(result).toEqual(true);
128
+ });
129
+ it('parse false', async () => {
130
+ const result = await f('/false');
131
+ if (result instanceof Error)
132
+ throw result;
133
+ expect(result).toEqual(false);
134
+ });
135
+ it('post array', async () => {
136
+ const result = await f('/array', {
137
+ method: 'POST',
138
+ body: ['a', 'b'],
139
+ });
140
+ if (result instanceof Error)
141
+ throw result;
142
+ expect(result).toEqual(['a', 'b']);
143
+ });
144
+ it('post body', async () => {
145
+ const result = await f('/body', {
146
+ method: 'POST',
147
+ body: 'a',
148
+ });
149
+ if (result instanceof Error)
150
+ throw result;
151
+ expect(result).toEqual('a');
152
+ });
153
+ it('post mirror', async () => {
154
+ const body = { username: 'A', password: 'B' };
155
+ const result = await f('/mirror', {
156
+ method: 'POST',
157
+ body,
158
+ });
159
+ if (result instanceof Error)
160
+ throw result;
161
+ expect(result).toEqual(body);
162
+ });
163
+ it('delete empty', async () => {
164
+ const result = await f('/empty', { method: 'DELETE' });
165
+ if (result instanceof Error)
166
+ throw result;
167
+ expect(result).toEqual({ body: null });
168
+ });
169
+ it('post deep nested mirror', async () => {
170
+ const body = { username: 'A', password: 'B' };
171
+ const result = await f('/deep/nested/mirror', {
172
+ method: 'POST',
173
+ body,
174
+ });
175
+ if (result instanceof Error)
176
+ throw result;
177
+ expect(result).toEqual(body);
178
+ });
179
+ it('get nested data', async () => {
180
+ const result = await f('/nested/data');
181
+ if (result instanceof Error)
182
+ throw result;
183
+ expect(result).toEqual('hi');
184
+ });
185
+ it('handles thrown response', async () => {
186
+ const result = await f('/throws');
187
+ expect(result).toBeInstanceOf(SpiceflowFetchError);
188
+ if (!(result instanceof Error))
189
+ throw new Error('Expected error');
190
+ expect(result.status).toBe(400);
191
+ expect(result.message).toBe('Custom error');
192
+ });
193
+ it('handles thrown response with 307', async () => {
194
+ const result = await f('/throws-307');
195
+ expect(result).toBeInstanceOf(SpiceflowFetchError);
196
+ if (!(result instanceof Error))
197
+ throw new Error('Expected error');
198
+ expect(result.status).toBe(307);
199
+ expect(result.message).toBe('Redirect');
200
+ });
201
+ it('handles thrown response with 200', async () => {
202
+ const result = await f('/throws-200');
203
+ if (result instanceof Error)
204
+ throw result;
205
+ expect(result).toMatchInlineSnapshot(`"this string will not be parsed as json"`);
206
+ });
207
+ it('surfaces json payload in error value for 402 responses', async () => {
208
+ const result = await f('/throws-402-json');
209
+ expect(result).toBeInstanceOf(SpiceflowFetchError);
210
+ if (!(result instanceof SpiceflowFetchError))
211
+ throw new Error('Expected SpiceflowFetchError');
212
+ expect(result.status).toBe(402);
213
+ expect(result.value).toEqual({ reason: 'Payment required', code: 4021 });
214
+ });
215
+ it('stream', async () => {
216
+ const result = await f('/stream');
217
+ if (result instanceof Error)
218
+ throw result;
219
+ let all = '';
220
+ for await (const chunk of result) {
221
+ all += chunk + '-';
222
+ }
223
+ expect(all).toEqual('a-b-c-');
224
+ });
225
+ it('stream async', async () => {
226
+ const result = await f('/stream-async');
227
+ if (result instanceof Error)
228
+ throw result;
229
+ let all = '';
230
+ for await (const chunk of result) {
231
+ all += chunk + '-';
232
+ }
233
+ expect(all).toEqual('a-b-c-');
234
+ });
235
+ it('stream return', async () => {
236
+ const result = await f('/stream-return');
237
+ if (result instanceof Error)
238
+ throw result;
239
+ let all = '';
240
+ for await (const chunk of result) {
241
+ all += chunk;
242
+ }
243
+ expect(all).toEqual('a');
244
+ });
245
+ it('stream return async', async () => {
246
+ const result = await f('/stream-return-async');
247
+ if (result instanceof Error)
248
+ throw result;
249
+ let all = '';
250
+ for await (const chunk of result) {
251
+ all += chunk;
252
+ }
253
+ expect(all).toEqual('a');
254
+ });
255
+ it('path params', async () => {
256
+ const result = await f('/id/:id', {
257
+ params: { id: '123' },
258
+ });
259
+ if (result instanceof Error)
260
+ throw result;
261
+ expect(result).toEqual('123');
262
+ });
263
+ it('query params', async () => {
264
+ const result = await f('/search', {
265
+ query: { q: 'hello', page: 1 },
266
+ });
267
+ if (result instanceof Error)
268
+ throw result;
269
+ expect(result).toEqual({ q: 'hello', page: 1 });
270
+ });
271
+ it('overlapping param names', async () => {
272
+ const result = await f('/items/:id/:id2', {
273
+ params: { id: 'A', id2: 'B' },
274
+ });
275
+ if (result instanceof Error)
276
+ throw result;
277
+ expect(result).toEqual({ id: 'A', id2: 'B' });
278
+ });
279
+ it('untyped URL falls back gracefully', async () => {
280
+ const untypedFetch = createSpiceflowFetch(app);
281
+ const result = await untypedFetch('/number');
282
+ if (result instanceof Error)
283
+ throw result;
284
+ expect(result).toEqual(1);
285
+ });
286
+ });
287
+ describe('fetch client type safety', () => {
288
+ it('requires params for parameterized paths', () => {
289
+ // @ts-expect-error - missing required params for /id/:id
290
+ f('/id/:id');
291
+ });
292
+ it('requires query when route schema demands it', () => {
293
+ // @ts-expect-error - missing required query for /search
294
+ f('/search');
295
+ });
296
+ it('requires body for POST with typed body schema', () => {
297
+ // @ts-expect-error - missing required body for /deep/nested/mirror POST
298
+ f('/deep/nested/mirror', { method: 'POST' });
299
+ });
300
+ it('allows GET without options on routes with no required fields', async () => {
301
+ const result = await f('/number');
302
+ if (result instanceof Error)
303
+ throw result;
304
+ expect(result).toEqual(1);
305
+ });
306
+ });
307
+ describe('fetch client with state', () => {
308
+ it('should return state value', async () => {
309
+ const f = createSpiceflowFetch(app, { state: { someState: 3 } });
310
+ const result = await f('/someState');
311
+ if (result instanceof Error)
312
+ throw result;
313
+ expect(result).toBe(3);
314
+ });
315
+ });
316
+ describe('fetch client retries', () => {
317
+ it('should retry on 500 errors and succeed on third attempt', async () => {
318
+ let attemptCount = 0;
319
+ const retryApp = new Spiceflow().get('/retry-success', () => {
320
+ attemptCount++;
321
+ if (attemptCount < 3) {
322
+ throw new Response('Server error', { status: 500 });
323
+ }
324
+ return { success: true, attempts: attemptCount };
325
+ });
326
+ const retryFetch = createSpiceflowFetch(retryApp, { retries: 2 });
327
+ const result = await retryFetch('/retry-success');
328
+ if (result instanceof Error)
329
+ throw result;
330
+ expect(result).toEqual({ success: true, attempts: 3 });
331
+ expect(attemptCount).toBe(3);
332
+ });
333
+ it('should fail after all retries are exhausted', async () => {
334
+ let attemptCount = 0;
335
+ const retryApp = new Spiceflow().get('/retry-fail', () => {
336
+ attemptCount++;
337
+ throw new Response('Server error', { status: 500 });
338
+ });
339
+ const retryFetch = createSpiceflowFetch(retryApp, { retries: 2 });
340
+ const result = await retryFetch('/retry-fail');
341
+ expect(result).toBeInstanceOf(SpiceflowFetchError);
342
+ if (!(result instanceof Error))
343
+ throw new Error('Expected error');
344
+ expect(result.status).toBe(500);
345
+ expect(attemptCount).toBe(3);
346
+ });
347
+ it('should not retry on non-500 errors', async () => {
348
+ let attemptCount = 0;
349
+ const retryApp = new Spiceflow().get('/retry-400', () => {
350
+ attemptCount++;
351
+ throw new Response('Bad request', { status: 400 });
352
+ });
353
+ const retryFetch = createSpiceflowFetch(retryApp, { retries: 2 });
354
+ const result = await retryFetch('/retry-400');
355
+ expect(result).toBeInstanceOf(SpiceflowFetchError);
356
+ if (!(result instanceof Error))
357
+ throw new Error('Expected error');
358
+ expect(result.status).toBe(400);
359
+ expect(attemptCount).toBe(1);
360
+ });
361
+ });
362
+ //# sourceMappingURL=fetch-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-client.test.js","sourceRoot":"","sources":["../src/fetch-client.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SpiceflowRequest } from './spiceflow.ts';
2
- export { Spiceflow } from './spiceflow.ts';
2
+ export { Spiceflow, createSafePath } from './spiceflow.ts';
3
3
  export type { AnySpiceflow, WaitUntil } from './spiceflow.ts';
4
4
  export { ValidationError } from './error.ts';
5
5
  export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAG5E,cAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ;CAAG;AAE7C,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAG5E,cAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ;CAAG;AAE7C,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SpiceflowRequest } from "./spiceflow.js";
2
- export { Spiceflow } from "./spiceflow.js";
2
+ export { Spiceflow, createSafePath } from "./spiceflow.js";
3
3
  export { ValidationError } from "./error.js";
4
4
  export { preventProcessExitIfBusy } from "./prevent-process-exit-if-busy.js";
5
5
  // utility Response to be used in Cloudflare Workers to shut up the TypeScript errors (cloudflare Response is different than normal Response type)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAE5E,kJAAkJ;AAClJ,MAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ;CAAG;AAE7C,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAE5E,kJAAkJ;AAClJ,MAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ;CAAG;AAE7C,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
package/dist/mcp.d.ts CHANGED
@@ -80,5 +80,5 @@ export declare const mcp: <Path extends string = "/mcp">({ path, name, version,
80
80
  200: any;
81
81
  };
82
82
  };
83
- }>, string>;
83
+ }>, string, Record<string, unknown> & Record<"/_mcp_config", unknown> & Record<`${Path extends "/" ? "/index" : Path extends "" ? Path : Path extends `/${string}` ? Path : Path}`, unknown>>;
84
84
  //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAGhE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAInE;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,KAAK,CAAC,GAAG,SAAS,YAAY,EAC9B,KAAK,SAAS,MAAM,GAAG,GAAG,SAAS,SAAS,CAC1C,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,MAAM,UAAU,CACjB,GACG,UAAU,GACV,MAAM,EACV,EACA,SAAS,EACT,GAAG,EACH,WAAW,EACX,SAAS,GACV,EAAE;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,GAAG,CAAA;IACR,WAAW,EAAE,KAAK,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,KAAK,EAAE,CAAA;CACpB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBrB;AAED,eAAO,MAAM,GAAG,GAAI,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE;;;;;CAQ5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA6EL,CAAA"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAGhE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAInE;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,KAAK,CAAC,GAAG,SAAS,YAAY,EAC9B,KAAK,SAAS,MAAM,GAAG,GAAG,SAAS,SAAS,CAC1C,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,MAAM,UAAU,CACjB,GACG,UAAU,GACV,MAAM,EACV,EACA,SAAS,EACT,GAAG,EACH,WAAW,EACX,SAAS,GACV,EAAE;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,GAAG,CAAA;IACR,WAAW,EAAE,KAAK,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,KAAK,EAAE,CAAA;CACpB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBrB;AAED,eAAO,MAAM,GAAG,GAAI,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE;;;;;CAQ5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6LA6EL,CAAA"}
package/dist/openapi.d.ts CHANGED
@@ -34,5 +34,5 @@ export declare const openapi: <Path extends string = "/openapi">({ path, ...addi
34
34
  200: any;
35
35
  };
36
36
  };
37
- }>, "" | `${Path extends "/" ? "/index" : Path extends "" ? Path : Path extends `/${string}` ? Path : Path}`>;
37
+ }>, "" | `${Path extends "/" ? "/index" : Path extends "" ? Path : Path extends `/${string}` ? Path : Path}`, Record<`${Path extends "/" ? "/index" : Path extends "" ? Path : Path extends `/${string}` ? Path : Path}`, unknown>>;
38
38
  //# sourceMappingURL=openapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA8V9C,eAAO,MAAM,OAAO,GAAI,IAAI,SAAS,MAAM,GAAG,UAAU,EAAE,0BAGvD;IACD,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,GAAG,IAAI,CACN,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EACzB,yCAAyC,GACzC,qCAAqC,CACxC,GAAG;IACA,uBAAuB,CAAC,EAAE,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IACF,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,EAAE,CAAA;SACjB,CAAA;KACF,CAAA;CACG;;;;;;;;;;;;;;;;;;;6GA4FP,CAAA"}
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA8V9C,eAAO,MAAM,OAAO,GAAI,IAAI,SAAS,MAAM,GAAG,UAAU,EAAE,0BAGvD;IACD,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,GAAG,IAAI,CACN,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EACzB,yCAAyC,GACzC,qCAAqC,CACxC,GAAG;IACA,uBAAuB,CAAC,EAAE,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IACF,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,EAAE,CAAA;SACjB,CAAA;KACF,CAAA;CACG;;;;;;;;;;;;;;;;;;;mOA4FP,CAAA"}
@@ -26,7 +26,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
26
26
  schema: {};
27
27
  macro: {};
28
28
  macroFn: {};
29
- }, const out ClientRoutes extends RouteBase = {}, const out RoutePaths extends string = ''> {
29
+ }, const out ClientRoutes extends RouteBase = {}, const out RoutePaths extends string = '', const in out RouteQuerySchemas extends Record<string, unknown> = {}> {
30
30
  private id;
31
31
  private router;
32
32
  private middlewares;
@@ -40,6 +40,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
40
40
  Prefix: BasePath;
41
41
  ClientRoutes: ClientRoutes;
42
42
  RoutePaths: RoutePaths;
43
+ RouteQuerySchemas: RouteQuerySchemas;
43
44
  Scoped: Scoped;
44
45
  Singleton: Singleton;
45
46
  Definitions: Definitions;
@@ -66,7 +67,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
66
67
  state: Reconcile<Singleton['state'], {
67
68
  [name in Name]: Value;
68
69
  }>;
69
- }, Definitions, Metadata, ClientRoutes, RoutePaths>;
70
+ }, Definitions, Metadata, ClientRoutes, RoutePaths, RouteQuerySchemas>;
70
71
  /**
71
72
  * Create a new Router
72
73
  * @param options {@link RouterOptions} {@link Platform}
@@ -85,7 +86,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
85
86
  query: Schema['query'];
86
87
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
87
88
  };
88
- }>, RoutePaths | JoinPath<BasePath, Path>>;
89
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
89
90
  get<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Macro extends Metadata['macro'], const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Macro, JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
90
91
  get: {
91
92
  request: GetRequestSchema<Schema>;
@@ -93,7 +94,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
93
94
  query: Schema['query'];
94
95
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
95
96
  };
96
- }>, RoutePaths | JoinPath<BasePath, Path>>;
97
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
97
98
  put<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
98
99
  put: {
99
100
  request: GetRequestSchema<Schema>;
@@ -101,7 +102,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
101
102
  query: Schema['query'];
102
103
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
103
104
  };
104
- }>, RoutePaths | JoinPath<BasePath, Path>>;
105
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
105
106
  route<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>, Method extends HTTPMethod | HTTPMethod[] = '*'>(options: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>> & {
106
107
  path: Path;
107
108
  method?: Method;
@@ -113,7 +114,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
113
114
  query: Schema['query'];
114
115
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
115
116
  };
116
- }>, RoutePaths | JoinPath<BasePath, Path>>;
117
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
117
118
  patch<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
118
119
  patch: {
119
120
  request: GetRequestSchema<Schema>;
@@ -121,7 +122,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
121
122
  query: Schema['query'];
122
123
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
123
124
  };
124
- }>, RoutePaths | JoinPath<BasePath, Path>>;
125
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
125
126
  delete<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
126
127
  delete: {
127
128
  request: GetRequestSchema<Schema>;
@@ -129,7 +130,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
129
130
  query: Schema['query'];
130
131
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
131
132
  };
132
- }>, RoutePaths | JoinPath<BasePath, Path>>;
133
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
133
134
  options<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
134
135
  options: {
135
136
  request: GetRequestSchema<Schema>;
@@ -137,7 +138,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
137
138
  query: Schema['query'];
138
139
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
139
140
  };
140
- }>, RoutePaths | JoinPath<BasePath, Path>>;
141
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
141
142
  all<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
142
143
  [method in string]: {
143
144
  request: GetRequestSchema<Schema>;
@@ -145,7 +146,7 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
145
146
  query: Schema['query'];
146
147
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
147
148
  };
148
- }>, RoutePaths | JoinPath<BasePath, Path>>;
149
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
149
150
  head<const Path extends string, const LocalSchema extends InputSchema<keyof Definitions['type'] & string>, const Schema extends UnwrapRoute<LocalSchema, Definitions['type']>, const Handle extends InlineHandler<this, Schema, Singleton, JoinPath<BasePath, Path>>>(path: Path, handler: Handle, hook?: LocalHook<LocalSchema, Schema, Singleton, Definitions['error'], Metadata['macro'], JoinPath<BasePath, Path>>): Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, ClientRoutes & CreateClient<JoinPath<BasePath, Path>, {
150
151
  head: {
151
152
  request: GetRequestSchema<Schema>;
@@ -153,9 +154,9 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
153
154
  query: Schema['query'];
154
155
  response: ComposeSpiceflowResponse<Schema['response'], Handle>;
155
156
  };
156
- }>, RoutePaths | JoinPath<BasePath, Path>>;
157
+ }>, RoutePaths | JoinPath<BasePath, Path>, RouteQuerySchemas & Record<JoinPath<BasePath, Path>, Schema['query']>>;
157
158
  private scoped?;
158
- use<const NewSpiceflow extends AnySpiceflow>(instance: NewSpiceflow): IsAny<NewSpiceflow> extends true ? this : Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, BasePath extends `` ? ClientRoutes & NewSpiceflow['_types']['ClientRoutes'] : ClientRoutes & CreateClient<BasePath, NewSpiceflow['_types']['ClientRoutes']>, RoutePaths | NewSpiceflow['_types']['RoutePaths']>;
159
+ use<const NewSpiceflow extends AnySpiceflow>(instance: NewSpiceflow): IsAny<NewSpiceflow> extends true ? this : Spiceflow<BasePath, Scoped, Singleton, Definitions, Metadata, BasePath extends `` ? ClientRoutes & NewSpiceflow['_types']['ClientRoutes'] : ClientRoutes & CreateClient<BasePath, NewSpiceflow['_types']['ClientRoutes']>, RoutePaths | NewSpiceflow['_types']['RoutePaths'], RouteQuerySchemas & NewSpiceflow['_types']['RouteQuerySchemas']>;
159
160
  use<const Schema extends RouteSchema>(handler: MiddlewareHandler<Schema, Singleton>): this;
160
161
  onError<const Schema extends RouteSchema>(handler: ErrorHandler<Definitions['error'], Schema, Singleton>): this;
161
162
  handle: (request: Request, { state: customState }?: {
@@ -188,8 +189,29 @@ export declare class Spiceflow<const in out BasePath extends string = '', const
188
189
  server: import("http").Server<typeof IncomingMessage, typeof ServerResponse>;
189
190
  }>;
190
191
  private handleStream;
191
- safePath<const Path extends RoutePaths, const Params extends ExtractParamsFromPath<Path>>(path: Path, ...rest: [Params] extends [undefined] ? [] | [params?: Params] : [params: Params]): string;
192
+ safePath<const Path extends RoutePaths>(path: Path, ...rest: [ExtractParamsFromPath<Path>] extends [undefined] ? Path extends keyof RouteQuerySchemas ? unknown extends RouteQuerySchemas[Path] ? [] | [allParams?: Record<string, string | number | boolean>] : [] | [allParams?: Partial<RouteQuerySchemas[Path]>] : [] | [allParams?: Record<string, string | number | boolean>] : Path extends keyof RouteQuerySchemas ? unknown extends RouteQuerySchemas[Path] ? [allParams: ExtractParamsFromPath<Path> & Record<string, string | number | boolean>] : [allParams: MergeParamsAndQuery<ExtractParamsFromPath<Path>, RouteQuerySchemas[Path]>] : [allParams: ExtractParamsFromPath<Path>] | [allParams: ExtractParamsFromPath<Path> & Record<string, string | number | boolean>]): string;
192
193
  }
194
+ type MergeParamsAndQuery<P, Q> = P extends Record<string, any> ? {
195
+ [K in keyof (P & Omit<Partial<Q>, keyof P>)]: (P & Omit<Partial<Q>, keyof P>)[K];
196
+ } : Partial<Q>;
197
+ /**
198
+ * Create a standalone type-safe path builder. Pass your app instance for automatic
199
+ * type inference, or call with explicit type params. The app value is not used at runtime.
200
+ *
201
+ * ```ts
202
+ * const app = new Spiceflow()
203
+ * .get('/users/:id', handler, { query: z.object({ page: z.number() }) })
204
+ *
205
+ * const safePath = createSafePath(app)
206
+ * safePath('/users/:id', { id: '123', page: 1 })
207
+ * ```
208
+ */
209
+ export declare function createSafePath<const Paths extends string, const QS extends Record<string, unknown>>(_app?: {
210
+ _types: {
211
+ RoutePaths: Paths;
212
+ RouteQuerySchemas: QS;
213
+ };
214
+ }): <const Path extends Paths>(path: Path, ...rest: [ExtractParamsFromPath<Path>] extends [undefined] ? Path extends keyof QS ? unknown extends QS[Path] ? [] | [allParams?: Record<string, string | number | boolean>] : [] | [allParams?: Partial<QS[Path]>] : [] | [allParams?: Record<string, string | number | boolean>] : Path extends keyof QS ? unknown extends QS[Path] ? [allParams: ExtractParamsFromPath<Path> & Record<string, string | number | boolean>] : [allParams: MergeParamsAndQuery<ExtractParamsFromPath<Path>, QS[Path]>] : [allParams: ExtractParamsFromPath<Path>] | [allParams: ExtractParamsFromPath<Path> & Record<string, string | number | boolean>]) => string;
193
215
  declare const METHODS: readonly ["ALL", "CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
194
216
  /** HTTP method string */
195
217
  export type Method = (typeof METHODS)[number];
@@ -198,7 +220,7 @@ export declare class SpiceflowRequest<T = any> extends Request {
198
220
  json(): Promise<T>;
199
221
  }
200
222
  export declare function bfs(tree: AnySpiceflow): AnySpiceflow[];
201
- export type AnySpiceflow = Spiceflow<any, any, any, any, any, any, any>;
223
+ export type AnySpiceflow = Spiceflow<any, any, any, any, any, any, any, any>;
202
224
  export declare function isZodSchema(value: unknown): value is ZodType;
203
225
  import type * as z4 from 'zod/v4/core';
204
226
  /** `true` ⇒ the value was created by Zod 4, `false` ⇒ Zod 3 */