nesties 1.1.20 → 1.1.22

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/dist/index.mjs CHANGED
@@ -1398,6 +1398,20 @@ var createProvider = (options, factory) => {
1398
1398
  // src/utility/resolver-swagger-map.ts
1399
1399
  var ResolverSwaggerMap = /* @__PURE__ */ new Map();
1400
1400
 
1401
+ // src/utility/uniq-by.ts
1402
+ var uniqBy = (arr, fn) => {
1403
+ const seen = /* @__PURE__ */ new Set();
1404
+ const result = [];
1405
+ for (const item of arr) {
1406
+ const key = fn(item);
1407
+ if (!seen.has(key)) {
1408
+ seen.add(key);
1409
+ result.push(item);
1410
+ }
1411
+ }
1412
+ return result;
1413
+ };
1414
+
1401
1415
  // src/resolver.ts
1402
1416
  var ParamResolverCopiedFieldsFromSwagger = [
1403
1417
  "required",
@@ -1463,8 +1477,22 @@ ParamResolverPipe = __decorateClass([
1463
1477
  ], ParamResolverPipe);
1464
1478
  var usedParamResolverTokens = /* @__PURE__ */ new Set();
1465
1479
  var ParamResolverBase = class {
1480
+ constructor() {
1481
+ this.extraSwagger = [];
1482
+ }
1483
+ addExtraDecorator(dec, token = Math.random().toString(36)) {
1484
+ this.extraSwagger.push({
1485
+ token,
1486
+ swagger: dec
1487
+ });
1488
+ return this;
1489
+ }
1490
+ // for override
1491
+ toSwaggerInfo(extras = []) {
1492
+ return uniqBy([...this.extraSwagger, ...extras], (info) => info.token);
1493
+ }
1466
1494
  toApiPropertyDecorator(extras = {}) {
1467
- const swaggerInfo = this.toSwaggerInfo();
1495
+ const swaggerInfo = uniqBy(this.toSwaggerInfo(), (info) => info.token);
1468
1496
  return (extras2 = {}) => MergeClassOrMethodDecorators(
1469
1497
  swaggerInfo.map((info) => info.swagger({ ...extras, ...extras2 }))
1470
1498
  );
@@ -1523,6 +1551,15 @@ var ParamResolver = class extends ParamResolverBase {
1523
1551
  }
1524
1552
  }
1525
1553
  }
1554
+ handleResolveValue(v) {
1555
+ if (this.info?.required && v == null) {
1556
+ throw new BlankReturnMessageDto(
1557
+ 400,
1558
+ `Required parameter '${this.info.paramName}' in ${this.info.paramType} is missing`
1559
+ ).toException();
1560
+ }
1561
+ return v;
1562
+ }
1526
1563
  resolve(req, ref) {
1527
1564
  if (this.info) {
1528
1565
  if (this.info.paramType === "header") {
@@ -1530,10 +1567,10 @@ var ParamResolver = class extends ParamResolverBase {
1530
1567
  let raw = getHeader(req, name);
1531
1568
  if (name === "accept-language")
1532
1569
  raw = pickPrimaryFromAcceptLanguage(raw);
1533
- return raw;
1570
+ return this.handleResolveValue(raw);
1534
1571
  }
1535
1572
  if (this.info.paramType === "query") {
1536
- return getQueryValue(req, this.info.paramName);
1573
+ return this.handleResolveValue(getQueryValue(req, this.info.paramName));
1537
1574
  }
1538
1575
  throw new Error(`Unsupported paramType: ${this.info.paramType}`);
1539
1576
  } else if (this.dynamic) {
@@ -1544,7 +1581,7 @@ var ParamResolver = class extends ParamResolverBase {
1544
1581
  const suffix = this.info ? `${this.info.paramType.toUpperCase()}_${this.info.paramName}` : `DYNAMIC`;
1545
1582
  return `ParamResolver_${suffix}`;
1546
1583
  }
1547
- toSwaggerInfo() {
1584
+ toSwaggerInfo(extras = []) {
1548
1585
  const swagger = (extras2 = {}) => {
1549
1586
  if (this.info) {
1550
1587
  const paramType = this.info.paramType;
@@ -1565,12 +1602,19 @@ var ParamResolver = class extends ParamResolverBase {
1565
1602
  return () => {
1566
1603
  };
1567
1604
  };
1568
- return [
1605
+ return super.toSwaggerInfo([
1569
1606
  {
1570
1607
  swagger,
1571
1608
  token: this.toString()
1572
- }
1573
- ];
1609
+ },
1610
+ ...this.info?.required ? [
1611
+ {
1612
+ swagger: () => ApiError(400, "Invalid request parameters"),
1613
+ token: `__missing_required_400__`
1614
+ }
1615
+ ] : [],
1616
+ ...extras
1617
+ ]);
1574
1618
  }
1575
1619
  };
1576
1620
  var CombinedParamResolver = class extends ParamResolverBase {
@@ -1594,10 +1638,28 @@ var CombinedParamResolver = class extends ParamResolverBase {
1594
1638
  const suffix = Object.entries(this.resolvers).map(([key, resolver]) => `${key.toString()}_${resolver.toString()}`).join("__");
1595
1639
  return `CombinedParamResolver_${suffix}`;
1596
1640
  }
1597
- toSwaggerInfo() {
1598
- return Object.values(this.resolvers).flatMap(
1641
+ toSwaggerInfo(extras = []) {
1642
+ const combined = Object.values(this.resolvers).flatMap(
1599
1643
  (resolver) => resolver.toSwaggerInfo()
1600
1644
  );
1645
+ return super.toSwaggerInfo([...combined, ...extras]);
1646
+ }
1647
+ };
1648
+ var TransformParamResolver = class extends ParamResolverBase {
1649
+ constructor(baseResolver, transformFn) {
1650
+ super();
1651
+ this.baseResolver = baseResolver;
1652
+ this.transformFn = transformFn;
1653
+ }
1654
+ async resolve(req, ref) {
1655
+ const baseValue = await this.baseResolver.resolve(req, ref);
1656
+ return this.transformFn(baseValue, ref, req);
1657
+ }
1658
+ toString() {
1659
+ return `Transform_${this.baseResolver.toString()}`;
1660
+ }
1661
+ toSwaggerInfo(extras = []) {
1662
+ return this.baseResolver.toSwaggerInfo(extras);
1601
1663
  }
1602
1664
  };
1603
1665
  var getParamResolver = (input) => {
@@ -2063,6 +2125,7 @@ export {
2063
2125
  ReturnMessageDto,
2064
2126
  StringReturnMessageDto,
2065
2127
  TokenGuard,
2128
+ TransformParamResolver,
2066
2129
  abortableToken,
2067
2130
  createAbortableProvider,
2068
2131
  createI18n,