@forklaunch/core 0.17.1 → 0.17.3

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.
@@ -1323,7 +1323,8 @@ function resolveRouteMiddlewares(params) {
1323
1323
  params.requestSchema,
1324
1324
  params.responseSchemas,
1325
1325
  params.openTelemetryCollector,
1326
- () => params.routerOptions
1326
+ // Use dynamic lookup from router instance instead of captured params
1327
+ () => params.router ? params.router.routerOptions : params.routerOptions
1327
1328
  ),
1328
1329
  ...params.postEnrichMiddleware,
1329
1330
  parse,
@@ -1471,56 +1472,94 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1471
1472
  * @param controllerHandler
1472
1473
  * @returns
1473
1474
  */
1474
- #localParamRequest(handlers, controllerHandler, version) {
1475
+ #localParamRequest(middlewares, controllerHandler, contractDetails, requestSchema, responseSchemas, version) {
1475
1476
  return async (route, request) => {
1476
1477
  let statusCode;
1477
1478
  let responseMessage;
1478
1479
  const responseHeaders = {};
1480
+ const resEventHandlers = {};
1479
1481
  const req = {
1480
1482
  params: request?.params ?? {},
1481
1483
  query: request?.query ?? {},
1482
1484
  headers: request?.headers ?? {},
1483
1485
  body: discriminateBody(this.schemaValidator, request?.body)?.schema ?? {},
1484
1486
  path: route,
1485
- version
1487
+ originalPath: route,
1488
+ method: "GET",
1489
+ version,
1490
+ // Properties needed by middlewares
1491
+ schemaValidator: this.schemaValidator,
1492
+ contractDetails,
1493
+ requestSchema,
1494
+ openTelemetryCollector: this.openTelemetryCollector,
1495
+ _globalOptions: () => this.routerOptions,
1496
+ context: {
1497
+ correlationId: "local-fetch-" + Date.now(),
1498
+ span: void 0
1499
+ },
1500
+ _rawBody: void 0,
1501
+ _parsedVersions: void 0
1486
1502
  };
1487
1503
  const res = {
1504
+ statusCode: 200,
1488
1505
  status: (code) => {
1489
1506
  statusCode = code;
1507
+ res.statusCode = code;
1490
1508
  return res;
1491
1509
  },
1492
1510
  send: (message) => {
1493
1511
  responseMessage = message;
1512
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1494
1513
  },
1495
1514
  json: (body) => {
1496
1515
  responseMessage = body;
1516
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1497
1517
  },
1498
1518
  jsonp: (body) => {
1499
1519
  responseMessage = body;
1520
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1500
1521
  },
1501
1522
  setHeader: (key, value) => {
1502
1523
  responseHeaders[key] = value;
1524
+ return res;
1525
+ },
1526
+ getHeader: (key) => responseHeaders[key],
1527
+ type: (contentType) => {
1528
+ responseHeaders["content-type"] = contentType;
1529
+ return res;
1503
1530
  },
1504
1531
  sseEmitter: (generator) => {
1505
1532
  responseMessage = generator();
1506
1533
  },
1534
+ on: (event, handler) => {
1535
+ if (!resEventHandlers[event]) {
1536
+ resEventHandlers[event] = [];
1537
+ }
1538
+ resEventHandlers[event].push(handler);
1539
+ return res;
1540
+ },
1541
+ responseSchemas,
1507
1542
  version
1508
1543
  };
1509
- let cursor = handlers.shift();
1510
- if (cursor) {
1511
- for (const fn of handlers) {
1512
- await cursor(req, res, (err) => {
1544
+ const executeMiddlewares = request?.executeMiddlewares ?? false;
1545
+ if (executeMiddlewares && middlewares.length > 0) {
1546
+ const allHandlers = [...middlewares];
1547
+ let cursor = allHandlers.shift();
1548
+ if (cursor) {
1549
+ for (const fn of allHandlers) {
1550
+ await cursor(req, res, (err) => {
1551
+ if (err) {
1552
+ throw err;
1553
+ }
1554
+ cursor = fn;
1555
+ });
1556
+ }
1557
+ await cursor(req, res, async (err) => {
1513
1558
  if (err) {
1514
1559
  throw err;
1515
1560
  }
1516
- cursor = fn;
1517
1561
  });
1518
1562
  }
1519
- await cursor(req, res, async (err) => {
1520
- if (err) {
1521
- throw err;
1522
- }
1523
- });
1524
1563
  }
1525
1564
  const cHandler = controllerHandler;
1526
1565
  await cHandler(req, res, (err) => {
@@ -1561,7 +1600,8 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1561
1600
  routerOptions: this.routerOptions,
1562
1601
  postEnrichMiddleware: this.postEnrichMiddleware,
1563
1602
  includeCreateContext: false,
1564
- handlers
1603
+ handlers,
1604
+ router: this
1565
1605
  });
1566
1606
  registrationMethod.bind(this.internal)(
1567
1607
  path,
@@ -1576,12 +1616,18 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1576
1616
  this.#localParamRequest(
1577
1617
  middlewares,
1578
1618
  controllerHandler,
1619
+ contractDetails,
1620
+ requestSchema,
1621
+ responseSchemas,
1579
1622
  version
1580
1623
  )
1581
1624
  ])
1582
1625
  ) : this.#localParamRequest(
1583
1626
  middlewares,
1584
- controllerHandler
1627
+ controllerHandler,
1628
+ contractDetails,
1629
+ requestSchema,
1630
+ responseSchemas
1585
1631
  )
1586
1632
  };
1587
1633
  const contractDetailsName = contractDetails.name;
@@ -1592,12 +1638,18 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1592
1638
  (req) => this.#localParamRequest(
1593
1639
  middlewares,
1594
1640
  controllerHandler,
1641
+ contractDetails,
1642
+ requestSchema,
1643
+ responseSchemas,
1595
1644
  version
1596
1645
  )(`${this.basePath}${path}`, req)
1597
1646
  ])
1598
1647
  ) : (req) => this.#localParamRequest(
1599
1648
  middlewares,
1600
- controllerHandler
1649
+ controllerHandler,
1650
+ contractDetails,
1651
+ requestSchema,
1652
+ responseSchemas
1601
1653
  )(`${this.basePath}${path}`, req);
1602
1654
  }
1603
1655
  return this;