spiceflow 1.17.5 → 1.17.6

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.
package/README.md CHANGED
@@ -1456,6 +1456,34 @@ async function trackPageView(path: string) {
1456
1456
 
1457
1457
  **Note:** In non-Cloudflare environments, if no custom `waitUntil` function is provided, the default implementation is a no-op function that doesn't wait for the promises to complete.
1458
1458
 
1459
+ ## Graceful Shutdown
1460
+
1461
+ The `preventProcessExitIfBusy` middleware prevents platforms like Fly.io from killing your app while processing long requests (e.g., AI payloads). Fly.io can wait up to 5 minutes for graceful shutdown.
1462
+
1463
+ ```ts
1464
+ import { Spiceflow, preventProcessExitIfBusy } from 'spiceflow'
1465
+
1466
+ const app = new Spiceflow()
1467
+ .use(preventProcessExitIfBusy({
1468
+ maxWaitSeconds: 300, // 5 minutes max wait (default: 300)
1469
+ checkIntervalMs: 250 // Check interval (default: 250ms)
1470
+ }))
1471
+ .route({
1472
+ method: 'POST',
1473
+ path: '/ai/generate',
1474
+ async handler({ request }) {
1475
+ const prompt = await request.json()
1476
+ // Long-running AI generation
1477
+ const result = await generateAIResponse(prompt)
1478
+ return result
1479
+ },
1480
+ })
1481
+
1482
+ app.listen(3000)
1483
+ ```
1484
+
1485
+ When receiving SIGTERM during deployment, the middleware waits for all active requests to complete before exiting. Perfect for AI workloads that may take minutes to process.
1486
+
1459
1487
  ### When using `createSpiceflowClient` and getting typescript error `The inferred type of 'pluginApiClient' cannot be named without a reference to '...'. This is likely not portable. A type annotation is necessary. (ts 2742)`
1460
1488
 
1461
1489
  You can resolve this issue by adding an explicing type for the client:
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Spiceflow } from './spiceflow.ts';
2
2
  export type { AnySpiceflow, WaitUntil } from './spiceflow.ts';
3
3
  export { ValidationError } from './error.ts';
4
- export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.js';
4
+ export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.ts';
5
5
  declare class Response extends globalThis.Response {
6
6
  }
7
7
  export { Response };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { Spiceflow } from "./spiceflow.js";
2
2
  export { ValidationError } from "./error.js";
3
- export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.js';
3
+ export { preventProcessExitIfBusy } from "./prevent-process-exit-if-busy.js";
4
4
  // utility Response to be used in Cloudflare Workers to shut up the TypeScript errors (cloudflare Response is different than normal Response type)
5
5
  class Response extends globalThis.Response {
6
6
  }
@@ -343,7 +343,7 @@ test('middleware with try/finally correctly tracks operations even when errors a
343
343
  let operationCount = 0;
344
344
  let finallyExecuted = false;
345
345
  const createTrackingMiddleware = () => {
346
- return async (_, next) => {
346
+ return new Spiceflow({ scoped: false }).use(async (_, next) => {
347
347
  operationCount++;
348
348
  try {
349
349
  await next();
@@ -352,7 +352,7 @@ test('middleware with try/finally correctly tracks operations even when errors a
352
352
  operationCount--;
353
353
  finallyExecuted = true;
354
354
  }
355
- };
355
+ });
356
356
  };
357
357
  // Test 1: Normal successful request
358
358
  operationCount = 0;
@@ -393,22 +393,22 @@ test('middleware with try/finally correctly tracks operations even when errors a
393
393
  const app4 = new Spiceflow()
394
394
  .use(createTrackingMiddleware())
395
395
  .get('/concurrent', async () => {
396
- await new Promise(resolve => setTimeout(resolve, 50));
396
+ await new Promise((resolve) => setTimeout(resolve, 50));
397
397
  return { ok: true };
398
398
  });
399
399
  // Start 3 concurrent requests
400
400
  const concurrentRequests = Promise.all([
401
401
  app4.handle(new Request('http://localhost/concurrent')),
402
402
  app4.handle(new Request('http://localhost/concurrent')),
403
- app4.handle(new Request('http://localhost/concurrent'))
403
+ app4.handle(new Request('http://localhost/concurrent')),
404
404
  ]);
405
405
  // Wait a bit to ensure requests are in flight
406
- await new Promise(resolve => setTimeout(resolve, 10));
406
+ await new Promise((resolve) => setTimeout(resolve, 10));
407
407
  // Operation count should be 3 while requests are in flight
408
408
  expect(operationCount).toBe(3);
409
409
  // Wait for all requests to complete
410
410
  const results = await concurrentRequests;
411
- results.forEach(res => expect(res.status).toBe(200));
411
+ results.forEach((res) => expect(res.status).toBe(200));
412
412
  // Operation count should be back to 0
413
413
  expect(operationCount).toBe(0);
414
414
  });
@@ -430,8 +430,9 @@ test('middleware with try/finally tracks operations correctly with child apps',
430
430
  // Test 1: Middleware on parent, route in child app
431
431
  operationCount = 0;
432
432
  finallyExecuted = false;
433
- const childApp1 = new Spiceflow()
434
- .get('/child/route', () => ({ message: 'from child' }));
433
+ const childApp1 = new Spiceflow().get('/child/route', () => ({
434
+ message: 'from child',
435
+ }));
435
436
  const parentApp1 = new Spiceflow()
436
437
  .use(createTrackingMiddleware())
437
438
  .use(childApp1);
@@ -442,8 +443,7 @@ test('middleware with try/finally tracks operations correctly with child apps',
442
443
  // Test 2: Middleware on parent, error thrown in child route
443
444
  operationCount = 0;
444
445
  finallyExecuted = false;
445
- const childApp2 = new Spiceflow()
446
- .get('/child/error', () => {
446
+ const childApp2 = new Spiceflow().get('/child/error', () => {
447
447
  throw new Error('Child route error');
448
448
  });
449
449
  const parentApp2 = new Spiceflow()
@@ -456,10 +456,10 @@ test('middleware with try/finally tracks operations correctly with child apps',
456
456
  // Test 3: Multiple nested child apps with middleware
457
457
  operationCount = 0;
458
458
  finallyExecuted = false;
459
- const grandchildApp = new Spiceflow()
460
- .get('/level3/route', () => ({ level: 3 }));
461
- const childApp3 = new Spiceflow({ basePath: '/level2' })
462
- .use(grandchildApp);
459
+ const grandchildApp = new Spiceflow().get('/level3/route', () => ({
460
+ level: 3,
461
+ }));
462
+ const childApp3 = new Spiceflow({ basePath: '/level2' }).use(grandchildApp);
463
463
  const parentApp3 = new Spiceflow()
464
464
  .use(createTrackingMiddleware())
465
465
  .use(childApp3);
@@ -481,8 +481,7 @@ test('middleware with try/finally tracks operations correctly with child apps',
481
481
  // Test 5: Child app with basePath
482
482
  operationCount = 0;
483
483
  finallyExecuted = false;
484
- const childApp5 = new Spiceflow({ basePath: '/api/v1' })
485
- .get('/users', () => ({ users: [] }));
484
+ const childApp5 = new Spiceflow({ basePath: '/api/v1' }).get('/users', () => ({ users: [] }));
486
485
  const parentApp5 = new Spiceflow()
487
486
  .use(createTrackingMiddleware())
488
487
  .use(childApp5);
@@ -492,9 +491,8 @@ test('middleware with try/finally tracks operations correctly with child apps',
492
491
  expect(finallyExecuted).toBe(true);
493
492
  // Test 6: Concurrent requests to child app routes
494
493
  operationCount = 0;
495
- const childApp6 = new Spiceflow()
496
- .get('/child/slow', async () => {
497
- await new Promise(resolve => setTimeout(resolve, 50));
494
+ const childApp6 = new Spiceflow().get('/child/slow', async () => {
495
+ await new Promise((resolve) => setTimeout(resolve, 50));
498
496
  return { ok: true };
499
497
  });
500
498
  const parentApp6 = new Spiceflow()
@@ -504,22 +502,21 @@ test('middleware with try/finally tracks operations correctly with child apps',
504
502
  const concurrentRequests = Promise.all([
505
503
  parentApp6.handle(new Request('http://localhost/child/slow')),
506
504
  parentApp6.handle(new Request('http://localhost/child/slow')),
507
- parentApp6.handle(new Request('http://localhost/child/slow'))
505
+ parentApp6.handle(new Request('http://localhost/child/slow')),
508
506
  ]);
509
507
  // Wait a bit to ensure requests are in flight
510
- await new Promise(resolve => setTimeout(resolve, 10));
508
+ await new Promise((resolve) => setTimeout(resolve, 10));
511
509
  // Operation count should be 3 while requests are in flight
512
510
  expect(operationCount).toBe(3);
513
511
  // Wait for all requests to complete
514
512
  const results = await concurrentRequests;
515
- results.forEach(res => expect(res.status).toBe(200));
513
+ results.forEach((res) => expect(res.status).toBe(200));
516
514
  // Operation count should be back to 0
517
515
  expect(operationCount).toBe(0);
518
516
  // Test 7: Child app throws Response
519
517
  operationCount = 0;
520
518
  finallyExecuted = false;
521
- const childApp7 = new Spiceflow()
522
- .get('/child/response', () => {
519
+ const childApp7 = new Spiceflow().get('/child/response', () => {
523
520
  throw new Response('Custom child response', { status: 403 });
524
521
  });
525
522
  const parentApp7 = new Spiceflow()
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.test.js","sourceRoot":"","sources":["../src/middleware.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAA;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACjC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SAC3B,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;KACrC,CAAC;SACD,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACnD,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,uCAAuC;QACvC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC,CAAC;SAED,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACtE,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,uCAAuC;QACvC,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,uCAAuC;QACvC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;SAE/B,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AACF,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,uCAAuC;QACvC,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC;SAED,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SAE3B,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACd,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE;QAC7C,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC;SACD,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,OAAO,KAAK,CAAC,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;IACJ,KAAK,UAAU,KAAK;QAClB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;IACD,KAAK,UAAU,MAAM;QACnB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,EAAE,CAAA;QAC/B,OAAO,MAAM,EAAE,CAAA;IACjB,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,oFAAoF;AACpF,+BAA+B;AAC/B,0CAA0C;AAC1C,+BAA+B;AAC/B,sBAAsB;AACtB,iBAAiB;AACjB,OAAO;AACP,UAAU;AACV,sCAAsC;AACtC,0CAA0C;AAC1C,sCAAsC;AACtC,gBAAgB;AAChB,sCAAsC;AACtC,iDAAiD;AACjD,SAAS;AACT,UAAU;AACV,MAAM;AAEN,iCAAiC;AACjC,8DAA8D;AAC9D,KAAK;AAEL,gCAAgC;AAChC,iCAAiC;AACjC,0BAA0B;AAC1B,+BAA+B;AAC/B,iCAAiC;AACjC,MAAM;AACN,KAAK;AAEL,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;IACzF,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAA;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACjC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,IAAI,OAAO,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC1E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;AACjD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,IAAI,iBAAiB,GAAG,EAAc,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAA;QACxB,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACjC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SAE3B,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AACF,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;IAC5C,IAAI,iBAAiB,GAAG,EAAc,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SAE3B,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;IACpD,IAAI,iBAAiB,GAAG,EAAc,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;SAE3B,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACtE,IAAI,iBAAiB,GAAG,EAAc,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,IAAI,EAAE,CAAA;QACZ,OAAO,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IAC5C,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAC;SACD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE;QACpB,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACjC,OAAO,kBAAkB,CAAA;IAC3B,CAAC,CAAC;SAED,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;IACjE,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;AACzD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,IAAI,iBAAiB,GAAG,EAAc,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAA;QACnD,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAC;SACD,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;SACjC,MAAM,CAAC,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAE/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AACjD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,IAAI,kBAAkB,GAAG,CAAC,CAAA;IAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAA;QACrD,CAAC;QACD,sDAAsD;IACxD,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;QACnD,CAAC;IACH,CAAC,CAAC;SACD,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,kBAAkB,EAAE,CAAA;QACpB,OAAO,aAAa,CAAA;IACtB,CAAC,CAAC;SACD,MAAM,CAAC,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAE/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;IAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,8CAA8C;QAC9C,OAAO,IAAI,QAAQ,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACxE,CAAC,CAAC;SAED,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,oCAAoC;QACpC,OAAO,6BAA6B,CAAA;IACtC,CAAC,CAAC;SACD,MAAM,CAAC,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAE/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;IACnG,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC;SACD,GAAG,CACF,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvD,8CAA8C;QAC9C,OAAO,IAAI,QAAQ,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACzE,CAAC,CAAC,CACH;SACA,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,oCAAoC;QACpC,OAAO,6BAA6B,CAAA;IACtC,CAAC,CAAC;SACD,MAAM,CAAC,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAE/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAChE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;IACxF,MAAM,SAAS,GAAa,EAAE,CAAA;IAE9B,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;SACxB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC7B,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC7B,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC;SACD,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACjC,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAC;SACD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC7B,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEJ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAElE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,CAC5C,gCAAgC,CACjC,CAAA;IACD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QACxB,aAAa;QACb,aAAa;QACb,aAAa;QACb,OAAO;KACR,CAAC,CAAA;IAEF,8DAA8D;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAChC,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAA4B,CAC7B,CAAA;IAED,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;QACrB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,KAAK,EAAE,CAAC;KACT,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;IACrG,IAAI,cAAc,GAAG,CAAC,CAAA;IACtB,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,MAAM,wBAAwB,GAAG,GAAG,EAAE;QACpC,OAAO,KAAK,EAAE,CAAM,EAAE,IAAS,EAAE,EAAE;YACjC,cAAc,EAAE,CAAA;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,EAAE,CAAA;YACd,CAAC;oBAAS,CAAC;gBACT,cAAc,EAAE,CAAA;gBAChB,eAAe,GAAG,IAAI,CAAA;YACxB,CAAC;QACH,CAAC,CAAA;IACH,CAAC,CAAA;IAED,oCAAoC;IACpC,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;SACzB,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IAElD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACvE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,kCAAkC;IACjE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,gCAAgC;IAChC,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;SACzB,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,kCAAkC;IACjE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,kCAAkC;IAClC,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;SACzB,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACxE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,kCAAkC;IACjE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,uCAAuC;IACvC,cAAc,GAAG,CAAC,CAAA;IAClB,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;SACzB,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEJ,8BAA8B;IAC9B,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;KACxD,CAAC,CAAA;IAEF,8CAA8C;IAC9C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAErD,2DAA2D;IAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE9B,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAA;IACxC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAEpD,sCAAsC;IACtC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;IACzF,IAAI,cAAc,GAAG,CAAC,CAAA;IACtB,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,MAAM,wBAAwB,GAAG,GAAG,EAAE;QACpC,OAAO,KAAK,EAAE,CAAM,EAAE,IAAS,EAAE,EAAE;YACjC,cAAc,EAAE,CAAA;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,EAAE,CAAA;YACd,CAAC;oBAAS,CAAC;gBACT,cAAc,EAAE,CAAA;gBAChB,eAAe,GAAG,IAAI,CAAA;YACxB,CAAC;QACH,CAAC,CAAA;IACH,CAAC,CAAA;IAED,mDAAmD;IACnD,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;IAEzD,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;IACjF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,4DAA4D;IAC5D,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEJ,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;IACjF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,qDAAqD;IACrD,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE;SAClC,GAAG,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE7C,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;SACrD,GAAG,CAAC,aAAa,CAAC,CAAA;IAErB,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,sCAAsC,CAAC,CAAC,CAAA;IACzF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,8CAA8C;IAC9C,cAAc,GAAG,CAAC,CAAA;IAClB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAE/C,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAA;IAChF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,2CAA2C;IAE1E,kCAAkC;IAClC,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;SACrD,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAEvC,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAA;IAClF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,kDAAkD;IAClD,cAAc,GAAG,CAAC,CAAA;IAClB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEJ,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,8BAA8B;IAC9B,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;KAC9D,CAAC,CAAA;IAEF,8CAA8C;IAC9C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAErD,2DAA2D;IAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE9B,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAA;IACxC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAEpD,sCAAsC;IACtC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE9B,oCAAoC;IACpC,cAAc,GAAG,CAAC,CAAA;IAClB,eAAe,GAAG,KAAK,CAAA;IACvB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;SAC9B,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC3B,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEJ,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE;SAC/B,GAAG,CAAC,wBAAwB,EAAE,CAAC;SAC/B,GAAG,CAAC,SAAS,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAA;IACpF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"middleware.test.js","sourceRoot":"","sources":["../src/middleware.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
+ import type { AnySpiceflow } from './spiceflow.js';
2
+ interface GracefulShutdownOptions {
3
+ maxWaitSeconds?: number;
4
+ checkIntervalMs?: number;
5
+ }
1
6
  /**
2
7
  * Creates a Spiceflow middleware that tracks in-flight requests and prevents
3
8
  * the process from exiting while requests are being processed.
4
9
  *
5
- * @param {Object} options - Configuration options
6
- * @param {number} [options.maxWaitSeconds=300] - Maximum time to wait for requests to complete
7
- * @param {number} [options.checkIntervalMs=250] - Interval to check if requests are complete
8
- * @returns {Spiceflow} Spiceflow app that can be mounted with .use()
10
+ * @param options - Configuration options
11
+ * @param options.maxWaitSeconds - Maximum time to wait for requests to complete (default: 300)
12
+ * @param options.checkIntervalMs - Interval to check if requests are complete (default: 250)
13
+ * @returns Spiceflow app that can be mounted with .use()
9
14
  */
10
- export function preventProcessExitIfBusy(options?: {
11
- maxWaitSeconds?: number | undefined;
12
- checkIntervalMs?: number | undefined;
13
- }): Spiceflow;
14
- import { Spiceflow } from 'spiceflow';
15
+ export declare function preventProcessExitIfBusy(options?: GracefulShutdownOptions): AnySpiceflow;
16
+ export {};
15
17
  //# sourceMappingURL=prevent-process-exit-if-busy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prevent-process-exit-if-busy.d.ts","sourceRoot":"","sources":["../src/prevent-process-exit-if-busy.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,mDAJG;IAAyB,cAAc;IACd,eAAe;CACxC,GAAU,SAAS,CAkDrB;0BA3DyB,WAAW"}
1
+ {"version":3,"file":"prevent-process-exit-if-busy.d.ts","sourceRoot":"","sources":["../src/prevent-process-exit-if-busy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,UAAU,uBAAuB;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,uBAA4B,GAAG,YAAY,CAgD5F"}
@@ -1,12 +1,12 @@
1
- import { Spiceflow } from 'spiceflow';
1
+ import { Spiceflow } from './spiceflow.js';
2
2
  /**
3
3
  * Creates a Spiceflow middleware that tracks in-flight requests and prevents
4
4
  * the process from exiting while requests are being processed.
5
5
  *
6
- * @param {Object} options - Configuration options
7
- * @param {number} [options.maxWaitSeconds=300] - Maximum time to wait for requests to complete
8
- * @param {number} [options.checkIntervalMs=250] - Interval to check if requests are complete
9
- * @returns {Spiceflow} Spiceflow app that can be mounted with .use()
6
+ * @param options - Configuration options
7
+ * @param options.maxWaitSeconds - Maximum time to wait for requests to complete (default: 300)
8
+ * @param options.checkIntervalMs - Interval to check if requests are complete (default: 250)
9
+ * @returns Spiceflow app that can be mounted with .use()
10
10
  */
11
11
  export function preventProcessExitIfBusy(options = {}) {
12
12
  const { maxWaitSeconds = 300, checkIntervalMs = 250 } = options;
@@ -40,8 +40,8 @@ export function preventProcessExitIfBusy(options = {}) {
40
40
  process.prependListener(sig, handleShutdown);
41
41
  });
42
42
  }
43
- // Return Spiceflow middleware
44
- return new Spiceflow().use(async (_, next) => {
43
+ // Return Spiceflow middleware with scoped: false
44
+ return new Spiceflow({ scoped: false }).use(async (_, next) => {
45
45
  inFlightRequests++;
46
46
  try {
47
47
  await next();
@@ -1 +1 @@
1
- {"version":3,"file":"prevent-process-exit-if-busy.js","sourceRoot":"","sources":["../src/prevent-process-exit-if-busy.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAO,GAAG,EAAE;IACjD,MAAM,EAAE,cAAc,GAAG,GAAG,EAAE,eAAe,GAAG,GAAG,EAAE,GAAG,OAAO,CAAA;IAE/D,sCAAsC;IACtC,IAAI,gBAAgB,GAAG,CAAC,CAAA;IACxB,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,gBAAgB;IAChB,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAErE,4BAA4B;IAC5B,KAAK,UAAU,cAAc,CAAC,MAAM;QAChC,IAAI,cAAc;YAAE,OAAM,CAAC,qCAAqC;QAChE,cAAc,GAAG,IAAI,CAAA;QAErB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,2BAA2B,gBAAgB,4BAA4B,CAAC,CAAA;QAE7F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;QAErD,OAAO,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC,eAAe,CAAC,CAAA;QAChC,CAAC;QAED,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,gBAAgB,+BAA+B,CAAC,CAAA;QAC7F,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5D,CAAC;QAAA,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,8BAA8B;IAC9B,OAAO,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACzC,gBAAgB,EAAE,CAAA;QAClB,IAAI,CAAC;YACD,MAAM,IAAI,EAAE,CAAA;QAChB,CAAC;gBAAS,CAAC;YACP,gBAAgB,EAAE,CAAA;QACtB,CAAC;IACL,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"prevent-process-exit-if-busy.js","sourceRoot":"","sources":["../src/prevent-process-exit-if-busy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAQ1C;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAmC,EAAE;IAC1E,MAAM,EAAE,cAAc,GAAG,GAAG,EAAE,eAAe,GAAG,GAAG,EAAE,GAAG,OAAO,CAAA;IAE/D,sCAAsC;IACtC,IAAI,gBAAgB,GAAG,CAAC,CAAA;IACxB,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,gBAAgB;IAChB,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAEnF,4BAA4B;IAC5B,KAAK,UAAU,cAAc,CAAC,MAAsB;QAChD,IAAI,cAAc;YAAE,OAAM,CAAC,qCAAqC;QAChE,cAAc,GAAG,IAAI,CAAA;QAErB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,2BAA2B,gBAAgB,4BAA4B,CAAC,CAAA;QAE7F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;QAErD,OAAO,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC,eAAe,CAAC,CAAA;QAChC,CAAC;QAED,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,gBAAgB,+BAA+B,CAAC,CAAA;QAC7F,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5D,CAAC;QAAA,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjC,OAAO,CAAC,eAAe,CAAC,GAAqB,EAAE,cAAc,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;IACN,CAAC;IAED,iDAAiD;IACjD,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC1D,gBAAgB,EAAE,CAAA;QAClB,IAAI,CAAC;YACD,MAAM,IAAI,EAAE,CAAA;QAChB,CAAC;gBAAS,CAAC;YACP,gBAAgB,EAAE,CAAA;QACtB,CAAC;IACL,CAAC,CAAC,CAAA;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spiceflow",
3
- "version": "1.17.5",
3
+ "version": "1.17.6",
4
4
  "description": "Simple API framework with RPC and type safety",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Spiceflow } from './spiceflow.ts'
2
2
  export type { AnySpiceflow, WaitUntil } from './spiceflow.ts'
3
3
  export { ValidationError } from './error.ts'
4
- export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.js'
4
+ export { preventProcessExitIfBusy } from './prevent-process-exit-if-busy.ts'
5
5
 
6
6
  // utility Response to be used in Cloudflare Workers to shut up the TypeScript errors (cloudflare Response is different than normal Response type)
7
7
  class Response extends globalThis.Response {}
@@ -385,9 +385,8 @@ test('each middleware and route is called exactly once if an error is thrown', a
385
385
  test('middleware with try/finally correctly tracks operations even when errors are thrown', async () => {
386
386
  let operationCount = 0
387
387
  let finallyExecuted = false
388
-
389
388
  const createTrackingMiddleware = () => {
390
- return async (_: any, next: any) => {
389
+ return new Spiceflow({ scoped: false }).use(async (_: any, next: any) => {
391
390
  operationCount++
392
391
  try {
393
392
  await next()
@@ -395,7 +394,7 @@ test('middleware with try/finally correctly tracks operations even when errors a
395
394
  operationCount--
396
395
  finallyExecuted = true
397
396
  }
398
- }
397
+ })
399
398
  }
400
399
 
401
400
  // Test 1: Normal successful request
@@ -443,7 +442,7 @@ test('middleware with try/finally correctly tracks operations even when errors a
443
442
  const app4 = new Spiceflow()
444
443
  .use(createTrackingMiddleware())
445
444
  .get('/concurrent', async () => {
446
- await new Promise(resolve => setTimeout(resolve, 50))
445
+ await new Promise((resolve) => setTimeout(resolve, 50))
447
446
  return { ok: true }
448
447
  })
449
448
 
@@ -451,19 +450,19 @@ test('middleware with try/finally correctly tracks operations even when errors a
451
450
  const concurrentRequests = Promise.all([
452
451
  app4.handle(new Request('http://localhost/concurrent')),
453
452
  app4.handle(new Request('http://localhost/concurrent')),
454
- app4.handle(new Request('http://localhost/concurrent'))
453
+ app4.handle(new Request('http://localhost/concurrent')),
455
454
  ])
456
455
 
457
456
  // Wait a bit to ensure requests are in flight
458
- await new Promise(resolve => setTimeout(resolve, 10))
459
-
457
+ await new Promise((resolve) => setTimeout(resolve, 10))
458
+
460
459
  // Operation count should be 3 while requests are in flight
461
460
  expect(operationCount).toBe(3)
462
461
 
463
462
  // Wait for all requests to complete
464
463
  const results = await concurrentRequests
465
- results.forEach(res => expect(res.status).toBe(200))
466
-
464
+ results.forEach((res) => expect(res.status).toBe(200))
465
+
467
466
  // Operation count should be back to 0
468
467
  expect(operationCount).toBe(0)
469
468
  })
@@ -487,14 +486,17 @@ test('middleware with try/finally tracks operations correctly with child apps',
487
486
  // Test 1: Middleware on parent, route in child app
488
487
  operationCount = 0
489
488
  finallyExecuted = false
490
- const childApp1 = new Spiceflow()
491
- .get('/child/route', () => ({ message: 'from child' }))
492
-
489
+ const childApp1 = new Spiceflow().get('/child/route', () => ({
490
+ message: 'from child',
491
+ }))
492
+
493
493
  const parentApp1 = new Spiceflow()
494
494
  .use(createTrackingMiddleware())
495
495
  .use(childApp1)
496
496
 
497
- const res1 = await parentApp1.handle(new Request('http://localhost/child/route'))
497
+ const res1 = await parentApp1.handle(
498
+ new Request('http://localhost/child/route'),
499
+ )
498
500
  expect(res1.status).toBe(200)
499
501
  expect(operationCount).toBe(0)
500
502
  expect(finallyExecuted).toBe(true)
@@ -502,16 +504,17 @@ test('middleware with try/finally tracks operations correctly with child apps',
502
504
  // Test 2: Middleware on parent, error thrown in child route
503
505
  operationCount = 0
504
506
  finallyExecuted = false
505
- const childApp2 = new Spiceflow()
506
- .get('/child/error', () => {
507
- throw new Error('Child route error')
508
- })
509
-
507
+ const childApp2 = new Spiceflow().get('/child/error', () => {
508
+ throw new Error('Child route error')
509
+ })
510
+
510
511
  const parentApp2 = new Spiceflow()
511
512
  .use(createTrackingMiddleware())
512
513
  .use(childApp2)
513
514
 
514
- const res2 = await parentApp2.handle(new Request('http://localhost/child/error'))
515
+ const res2 = await parentApp2.handle(
516
+ new Request('http://localhost/child/error'),
517
+ )
515
518
  expect(res2.status).toBe(500)
516
519
  expect(operationCount).toBe(0)
517
520
  expect(finallyExecuted).toBe(true)
@@ -519,17 +522,19 @@ test('middleware with try/finally tracks operations correctly with child apps',
519
522
  // Test 3: Multiple nested child apps with middleware
520
523
  operationCount = 0
521
524
  finallyExecuted = false
522
- const grandchildApp = new Spiceflow()
523
- .get('/level3/route', () => ({ level: 3 }))
524
-
525
- const childApp3 = new Spiceflow({ basePath: '/level2' })
526
- .use(grandchildApp)
527
-
525
+ const grandchildApp = new Spiceflow().get('/level3/route', () => ({
526
+ level: 3,
527
+ }))
528
+
529
+ const childApp3 = new Spiceflow({ basePath: '/level2' }).use(grandchildApp)
530
+
528
531
  const parentApp3 = new Spiceflow()
529
532
  .use(createTrackingMiddleware())
530
533
  .use(childApp3)
531
534
 
532
- const res3 = await parentApp3.handle(new Request('http://localhost/level2/level3/route'))
535
+ const res3 = await parentApp3.handle(
536
+ new Request('http://localhost/level2/level3/route'),
537
+ )
533
538
  expect(res3.status).toBe(200)
534
539
  expect(operationCount).toBe(0)
535
540
  expect(finallyExecuted).toBe(true)
@@ -539,38 +544,43 @@ test('middleware with try/finally tracks operations correctly with child apps',
539
544
  const childApp4 = new Spiceflow()
540
545
  .use(createTrackingMiddleware())
541
546
  .get('/child/both', () => ({ from: 'both' }))
542
-
547
+
543
548
  const parentApp4 = new Spiceflow()
544
549
  .use(createTrackingMiddleware())
545
550
  .use(childApp4)
546
551
 
547
- const res4 = await parentApp4.handle(new Request('http://localhost/child/both'))
552
+ const res4 = await parentApp4.handle(
553
+ new Request('http://localhost/child/both'),
554
+ )
548
555
  expect(res4.status).toBe(200)
549
556
  expect(operationCount).toBe(0) // Both middlewares increment and decrement
550
557
 
551
558
  // Test 5: Child app with basePath
552
559
  operationCount = 0
553
560
  finallyExecuted = false
554
- const childApp5 = new Spiceflow({ basePath: '/api/v1' })
555
- .get('/users', () => ({ users: [] }))
556
-
561
+ const childApp5 = new Spiceflow({ basePath: '/api/v1' }).get(
562
+ '/users',
563
+ () => ({ users: [] }),
564
+ )
565
+
557
566
  const parentApp5 = new Spiceflow()
558
567
  .use(createTrackingMiddleware())
559
568
  .use(childApp5)
560
569
 
561
- const res5 = await parentApp5.handle(new Request('http://localhost/api/v1/users'))
570
+ const res5 = await parentApp5.handle(
571
+ new Request('http://localhost/api/v1/users'),
572
+ )
562
573
  expect(res5.status).toBe(200)
563
574
  expect(operationCount).toBe(0)
564
575
  expect(finallyExecuted).toBe(true)
565
576
 
566
577
  // Test 6: Concurrent requests to child app routes
567
578
  operationCount = 0
568
- const childApp6 = new Spiceflow()
569
- .get('/child/slow', async () => {
570
- await new Promise(resolve => setTimeout(resolve, 50))
571
- return { ok: true }
572
- })
573
-
579
+ const childApp6 = new Spiceflow().get('/child/slow', async () => {
580
+ await new Promise((resolve) => setTimeout(resolve, 50))
581
+ return { ok: true }
582
+ })
583
+
574
584
  const parentApp6 = new Spiceflow()
575
585
  .use(createTrackingMiddleware())
576
586
  .use(childApp6)
@@ -579,35 +589,36 @@ test('middleware with try/finally tracks operations correctly with child apps',
579
589
  const concurrentRequests = Promise.all([
580
590
  parentApp6.handle(new Request('http://localhost/child/slow')),
581
591
  parentApp6.handle(new Request('http://localhost/child/slow')),
582
- parentApp6.handle(new Request('http://localhost/child/slow'))
592
+ parentApp6.handle(new Request('http://localhost/child/slow')),
583
593
  ])
584
594
 
585
595
  // Wait a bit to ensure requests are in flight
586
- await new Promise(resolve => setTimeout(resolve, 10))
587
-
596
+ await new Promise((resolve) => setTimeout(resolve, 10))
597
+
588
598
  // Operation count should be 3 while requests are in flight
589
599
  expect(operationCount).toBe(3)
590
600
 
591
601
  // Wait for all requests to complete
592
602
  const results = await concurrentRequests
593
- results.forEach(res => expect(res.status).toBe(200))
594
-
603
+ results.forEach((res) => expect(res.status).toBe(200))
604
+
595
605
  // Operation count should be back to 0
596
606
  expect(operationCount).toBe(0)
597
607
 
598
608
  // Test 7: Child app throws Response
599
609
  operationCount = 0
600
610
  finallyExecuted = false
601
- const childApp7 = new Spiceflow()
602
- .get('/child/response', () => {
603
- throw new Response('Custom child response', { status: 403 })
604
- })
605
-
611
+ const childApp7 = new Spiceflow().get('/child/response', () => {
612
+ throw new Response('Custom child response', { status: 403 })
613
+ })
614
+
606
615
  const parentApp7 = new Spiceflow()
607
616
  .use(createTrackingMiddleware())
608
617
  .use(childApp7)
609
618
 
610
- const res7 = await parentApp7.handle(new Request('http://localhost/child/response'))
619
+ const res7 = await parentApp7.handle(
620
+ new Request('http://localhost/child/response'),
621
+ )
611
622
  expect(res7.status).toBe(403)
612
623
  expect(operationCount).toBe(0)
613
624
  expect(finallyExecuted).toBe(true)
@@ -1,15 +1,21 @@
1
- import { Spiceflow } from 'spiceflow'
1
+ import { Spiceflow } from './spiceflow.js'
2
+ import type { AnySpiceflow } from './spiceflow.js'
3
+
4
+ interface GracefulShutdownOptions {
5
+ maxWaitSeconds?: number
6
+ checkIntervalMs?: number
7
+ }
2
8
 
3
9
  /**
4
10
  * Creates a Spiceflow middleware that tracks in-flight requests and prevents
5
11
  * the process from exiting while requests are being processed.
6
12
  *
7
- * @param {Object} options - Configuration options
8
- * @param {number} [options.maxWaitSeconds=300] - Maximum time to wait for requests to complete
9
- * @param {number} [options.checkIntervalMs=250] - Interval to check if requests are complete
10
- * @returns {Spiceflow} Spiceflow app that can be mounted with .use()
13
+ * @param options - Configuration options
14
+ * @param options.maxWaitSeconds - Maximum time to wait for requests to complete (default: 300)
15
+ * @param options.checkIntervalMs - Interval to check if requests are complete (default: 250)
16
+ * @returns Spiceflow app that can be mounted with .use()
11
17
  */
12
- export function preventProcessExitIfBusy(options = {}) {
18
+ export function preventProcessExitIfBusy(options: GracefulShutdownOptions = {}): AnySpiceflow {
13
19
  const { maxWaitSeconds = 300, checkIntervalMs = 250 } = options
14
20
 
15
21
  // Track in-flight requests in closure
@@ -17,10 +23,10 @@ export function preventProcessExitIfBusy(options = {}) {
17
23
  let isShuttingDown = false
18
24
 
19
25
  // Sleep utility
20
- const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
26
+ const sleep = (ms: number) => new Promise<void>(resolve => setTimeout(resolve, ms))
21
27
 
22
28
  // Graceful shutdown handler
23
- async function handleShutdown(signal) {
29
+ async function handleShutdown(signal: NodeJS.Signals) {
24
30
  if (isShuttingDown) return // Prevent multiple shutdown attempts
25
31
  isShuttingDown = true
26
32
 
@@ -44,12 +50,12 @@ export function preventProcessExitIfBusy(options = {}) {
44
50
  // Register shutdown handlers only in Node.js environments
45
51
  if (typeof process !== 'undefined' && process.prependListener) {
46
52
  ;['SIGINT', 'SIGTERM'].forEach(sig => {
47
- process.prependListener(sig, handleShutdown)
53
+ process.prependListener(sig as NodeJS.Signals, handleShutdown)
48
54
  })
49
55
  }
50
56
 
51
- // Return Spiceflow middleware
52
- return new Spiceflow().use(async (_, next) => {
57
+ // Return Spiceflow middleware with scoped: false
58
+ return new Spiceflow({ scoped: false }).use(async (_, next) => {
53
59
  inFlightRequests++
54
60
  try {
55
61
  await next()