nesties 1.1.23 → 1.1.24

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.cjs CHANGED
@@ -35,6 +35,7 @@ __export(index_exports, {
35
35
  ApiError: () => ApiError,
36
36
  ApiErrorTyped: () => ApiErrorTyped,
37
37
  ApiFromResolver: () => ApiFromResolver,
38
+ ApiInject: () => ApiInject,
38
39
  ApiTypeResponse: () => ApiTypeResponse,
39
40
  As: () => As,
40
41
  BlankPaginatedReturnMessageDto: () => BlankPaginatedReturnMessageDto,
@@ -43,6 +44,7 @@ __export(index_exports, {
43
44
  DataBody: () => DataBody,
44
45
  DataPipe: () => DataPipe,
45
46
  DataQuery: () => DataQuery,
47
+ DefaultValueParamResolver: () => DefaultValueParamResolver,
46
48
  GenericPaginatedReturnMessageDto: () => GenericPaginatedReturnMessageDto,
47
49
  GenericReturnMessageDto: () => GenericReturnMessageDto,
48
50
  I18nInterceptor: () => I18nInterceptor,
@@ -62,6 +64,11 @@ __export(index_exports, {
62
64
  ParamResolver: () => ParamResolver,
63
65
  ParamResolverBase: () => ParamResolverBase,
64
66
  ParamResolverPipe: () => ParamResolverPipe,
67
+ ParseBase64ParamResolver: () => ParseBase64ParamResolver,
68
+ ParseBoolParamResolver: () => ParseBoolParamResolver,
69
+ ParseDateParamResolver: () => ParseDateParamResolver,
70
+ ParseFloatParamResolver: () => ParseFloatParamResolver,
71
+ ParseIntParamResolver: () => ParseIntParamResolver,
65
72
  PutLocale: () => PutLocale,
66
73
  RenameClass: () => RenameClass,
67
74
  RequireToken: () => RequireToken,
@@ -73,6 +80,7 @@ __export(index_exports, {
73
80
  createAbortableProvider: () => createAbortableProvider,
74
81
  createI18n: () => createI18n,
75
82
  createI18nDecorator: () => createI18nDecorator,
83
+ createLambdaParamResolver: () => createLambdaParamResolver,
76
84
  createMutateInject: () => createMutateInject,
77
85
  createProvider: () => createProvider,
78
86
  createResolver: () => createResolver,
@@ -80,6 +88,7 @@ __export(index_exports, {
80
88
  getApiProperty: () => getApiProperty,
81
89
  getClassFromClassOrArray: () => getClassFromClassOrArray,
82
90
  getParamResolver: () => getParamResolver,
91
+ parseBool: () => parseBool,
83
92
  takeUntilAbort: () => takeUntilAbort
84
93
  });
85
94
  module.exports = __toCommonJS(index_exports);
@@ -141,6 +150,18 @@ var createMutateInject = (tokenResolver) => (token) => (target, propertyKey, par
141
150
  );
142
151
  };
143
152
 
153
+ // src/utility/parse-bool.ts
154
+ var parseBool = (value) => {
155
+ const trueValues = ["true", "1", "yes", "on", true, 1];
156
+ const falseValues = ["false", "0", "no", "off", false, 0];
157
+ if (trueValues.indexOf(value) !== -1) return true;
158
+ if (falseValues.indexOf(value) !== -1) return false;
159
+ if (!!value) {
160
+ return true;
161
+ }
162
+ return void 0;
163
+ };
164
+
144
165
  // src/insert-field.ts
145
166
  function InsertField(cl, map, newName) {
146
167
  const extendedCl = class extends cl {
@@ -325,7 +346,7 @@ var import_common5 = require("@nestjs/common");
325
346
  var import_config = require("@nestjs/config");
326
347
  var import_swagger5 = require("@nestjs/swagger");
327
348
 
328
- // src/resolver.ts
349
+ // src/resolver/resolver.ts
329
350
  var import_common4 = require("@nestjs/common");
330
351
  var import_core = require("@nestjs/core");
331
352
  var import_swagger4 = require("@nestjs/swagger");
@@ -361,7 +382,7 @@ var uniqBy = (arr, fn) => {
361
382
  return result;
362
383
  };
363
384
 
364
- // src/resolver.ts
385
+ // src/resolver/resolver.ts
365
386
  var ParamResolverCopiedFieldsFromSwagger = [
366
387
  "required",
367
388
  "description",
@@ -624,6 +645,142 @@ var ApiFromResolver = (_options, extras = {}) => {
624
645
  return getParamResolver(_options).toApiPropertyDecorator(extras)();
625
646
  };
626
647
 
648
+ // src/resolver/lambda.ts
649
+ var createLambdaParamResolver = (cb) => (resolver) => new TransformParamResolver(resolver, cb);
650
+ var ParseIntParamResolver = createLambdaParamResolver((s) => {
651
+ if (s == null) {
652
+ return s;
653
+ }
654
+ const res = parseInt(s, 10);
655
+ if (isNaN(res)) {
656
+ throw new BlankReturnMessageDto(
657
+ 400,
658
+ "Invalid integer parameter"
659
+ ).toException();
660
+ }
661
+ return res;
662
+ });
663
+ var ParseFloatParamResolver = createLambdaParamResolver(
664
+ (s) => {
665
+ if (s == null) {
666
+ return s;
667
+ }
668
+ const res = parseFloat(s);
669
+ if (isNaN(res)) {
670
+ throw new BlankReturnMessageDto(
671
+ 400,
672
+ "Invalid float parameter"
673
+ ).toException();
674
+ }
675
+ return res;
676
+ }
677
+ );
678
+ var ParseBoolParamResolver = createLambdaParamResolver(parseBool);
679
+ var ParseDateParamResolver = createLambdaParamResolver(
680
+ (s) => {
681
+ if (s == null) {
682
+ return s;
683
+ }
684
+ const res = new Date(s);
685
+ if (isNaN(res.getTime())) {
686
+ throw new BlankReturnMessageDto(
687
+ 400,
688
+ "Invalid date parameter"
689
+ ).toException();
690
+ }
691
+ return res;
692
+ }
693
+ );
694
+ var ParseBase64ParamResolver = createLambdaParamResolver(
695
+ (s) => {
696
+ if (s == null) {
697
+ return s;
698
+ }
699
+ const normalized = s.replace(/-/g, "+").replace(/_/g, "/");
700
+ const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
701
+ if (!/^[A-Za-z0-9+/]*={0,2}$/.test(padded)) {
702
+ throw new BlankReturnMessageDto(
703
+ 400,
704
+ "Invalid base64 parameter"
705
+ ).toException();
706
+ }
707
+ const buf = Buffer.from(padded, "base64");
708
+ const re = buf.toString("base64").replace(/=+$/g, "");
709
+ const in0 = padded.replace(/=+$/g, "");
710
+ if (re !== in0) {
711
+ throw new BlankReturnMessageDto(
712
+ 400,
713
+ "Invalid base64 parameter"
714
+ ).toException();
715
+ }
716
+ return buf;
717
+ }
718
+ );
719
+ var DefaultValueParamResolver = (r, defaultValue) => createLambdaParamResolver(
720
+ (value) => value === void 0 || value === null ? defaultValue : value
721
+ )(r);
722
+
723
+ // src/utility/collect-info-from-injection-token.ts
724
+ var import_constants2 = require("@nestjs/common/constants");
725
+ function asArray(v) {
726
+ if (v == null) return [];
727
+ return Array.isArray(v) ? v : [v];
728
+ }
729
+ function getCtorDepsFromClass(cls) {
730
+ const paramTypes = Reflect.getMetadata(import_constants2.PARAMTYPES_METADATA, cls) ?? [];
731
+ const selfDeclared = Reflect.getMetadata(import_constants2.SELF_DECLARED_DEPS_METADATA, cls) ?? [];
732
+ const overrides = new Map(
733
+ selfDeclared.map((d) => [d.index, d.param])
734
+ );
735
+ return paramTypes.map((t, i) => overrides.get(i) ?? t).filter((t) => t != null && t !== Object);
736
+ }
737
+ var collectInfoFromInjectionToken = (map, token) => {
738
+ const visited = /* @__PURE__ */ new Set();
739
+ const out = /* @__PURE__ */ new Set();
740
+ const dfs = (t) => {
741
+ if (t == null) return;
742
+ if (visited.has(t)) return;
743
+ visited.add(t);
744
+ for (const v of asArray(map.get(t))) {
745
+ out.add(v);
746
+ }
747
+ const deps = InjectionTokenMap.get(t);
748
+ if (deps?.length) {
749
+ for (const d of deps) dfs(d);
750
+ }
751
+ if (typeof t === "function") {
752
+ const ctorDeps = getCtorDepsFromClass(t);
753
+ for (const d of ctorDeps) dfs(d);
754
+ }
755
+ };
756
+ dfs(token);
757
+ return Array.from(out);
758
+ };
759
+ var createCollectorFromInjectionToken = (map) => (token) => collectInfoFromInjectionToken(map, token);
760
+
761
+ // src/utility/swagger-injection-collector.ts
762
+ var swaggerInjectionCollector = createCollectorFromInjectionToken(ResolverSwaggerMap);
763
+
764
+ // src/resolver/api-inject.ts
765
+ var clsUsedMap = /* @__PURE__ */ new WeakMap();
766
+ var ApiInject = createMutateInject((token, cls) => {
767
+ const swaggers = swaggerInjectionCollector(token);
768
+ if (!swaggers.length) return token;
769
+ let usedSet = clsUsedMap.get(cls);
770
+ if (!usedSet) {
771
+ usedSet = /* @__PURE__ */ new Set();
772
+ clsUsedMap.set(cls, usedSet);
773
+ }
774
+ for (const swagger of swaggers) {
775
+ if (usedSet.has(swagger.token)) {
776
+ continue;
777
+ }
778
+ usedSet.add(swagger.token);
779
+ swagger.swagger()(cls);
780
+ }
781
+ return token;
782
+ });
783
+
627
784
  // src/token.guard.ts
628
785
  var import_typed_reflector = require("typed-reflector");
629
786
  var import_core2 = require("@nestjs/core");
@@ -857,14 +1014,20 @@ var I18nModuleOptionsToken = MODULE_OPTIONS_TOKEN;
857
1014
  // src/i18n-module/i18n.service.ts
858
1015
  var import_core5 = require("@nestjs/core");
859
1016
  var import_nfkit2 = require("nfkit");
1017
+
1018
+ // src/i18n-module/i18n-param-resolver.token.ts
1019
+ var I18nParamResolverToken = "I18N_PARAM_RESOLVER";
1020
+ var I18nParamResolverProviderToken = "I18N_PARAM_RESOLVER_PROVIDER";
1021
+
1022
+ // src/i18n-module/i18n.service.ts
860
1023
  var I18nService = class extends import_nfkit2.I18n {
861
- constructor(i18nServiceOptions, moduleRef) {
1024
+ constructor(i18nServiceOptions, moduleRef, resolver) {
862
1025
  super(i18nServiceOptions);
863
1026
  this.i18nServiceOptions = i18nServiceOptions;
864
1027
  this.moduleRef = moduleRef;
1028
+ this.resolver = resolver;
865
1029
  this._shadowMiddlewareMap = /* @__PURE__ */ new Map();
866
1030
  this.logger = new import_common11.ConsoleLogger("I18nService");
867
- this.resolver = createResolver(this.i18nServiceOptions.resolver);
868
1031
  }
869
1032
  middleware(mw, prior = false) {
870
1033
  const wrappedMw = async (locale, text, next, ctx) => {
@@ -891,19 +1054,20 @@ var I18nService = class extends import_nfkit2.I18n {
891
1054
  }
892
1055
  async getExactLocaleFromRequest(ctx) {
893
1056
  const req = ctx.switchToHttp().getRequest();
894
- const locale = await this.resolver(req, this.moduleRef);
1057
+ const locale = await this.resolver.resolve(req, this.moduleRef);
895
1058
  return this.getExactLocale(locale);
896
1059
  }
897
1060
  async translateRequest(ctx, obj) {
898
1061
  const req = ctx.switchToHttp().getRequest();
899
- const locale = await this.resolver(req, this.moduleRef);
1062
+ const locale = await this.resolver.resolve(req, this.moduleRef);
900
1063
  return this.translate(locale, obj, ctx);
901
1064
  }
902
1065
  };
903
1066
  I18nService = __decorateClass([
904
1067
  (0, import_common11.Injectable)(),
905
1068
  __decorateParam(0, (0, import_common11.Inject)(I18nModuleOptionsToken)),
906
- __decorateParam(1, (0, import_common11.Inject)(import_core5.ModuleRef))
1069
+ __decorateParam(1, (0, import_common11.Inject)(import_core5.ModuleRef)),
1070
+ __decorateParam(2, (0, import_common11.Inject)(I18nParamResolverToken))
907
1071
  ], I18nService);
908
1072
 
909
1073
  // src/i18n-module/i18n.module.ts
@@ -942,12 +1106,26 @@ var _dec = (0, import_common12.createParamDecorator)(
942
1106
  var PutLocale = (resolver) => _dec(resolver, LocalePipe);
943
1107
 
944
1108
  // src/i18n-module/i18n.module.ts
1109
+ var providerFromOptions = createProvider(
1110
+ {
1111
+ provide: I18nParamResolverToken,
1112
+ inject: [I18nModuleOptionsToken]
1113
+ },
1114
+ (options) => getParamResolver(
1115
+ options.resolver || {
1116
+ paramType: "header",
1117
+ paramName: "x-client-language"
1118
+ }
1119
+ )
1120
+ );
945
1121
  var I18nModule = class extends ConfigurableModuleClass {
1122
+ static forRoot(options) {
1123
+ }
946
1124
  };
947
1125
  I18nModule = __decorateClass([
948
1126
  (0, import_common13.Global)(),
949
1127
  (0, import_common13.Module)({
950
- providers: [I18nService, LocalePipe],
1128
+ providers: [I18nService, LocalePipe, providerFromOptions],
951
1129
  exports: [I18nService, LocalePipe]
952
1130
  })
953
1131
  ], I18nModule);
@@ -1003,6 +1181,24 @@ var createI18nDecorator = (options) => {
1003
1181
  ]);
1004
1182
  };
1005
1183
 
1184
+ // src/i18n-module/locale.context.ts
1185
+ var import_common16 = require("@nestjs/common");
1186
+ var LocaleContext = class {
1187
+ constructor(localeInput, i18nService) {
1188
+ this.localeInput = localeInput;
1189
+ this.i18nService = i18nService;
1190
+ this.locale = this.i18nService.getExactLocale(this.localeInput);
1191
+ }
1192
+ translate(v) {
1193
+ return this.i18nService.translate(this.locale, v);
1194
+ }
1195
+ };
1196
+ LocaleContext = __decorateClass([
1197
+ (0, import_common16.Injectable)({ scope: import_common16.Scope.REQUEST }),
1198
+ __decorateParam(0, (0, import_common16.Inject)(I18nParamResolverProviderToken)),
1199
+ __decorateParam(1, (0, import_common16.Inject)(I18nService))
1200
+ ], LocaleContext);
1201
+
1006
1202
  // src/i18n-module/i18n-factory.ts
1007
1203
  var createI18n = (options) => {
1008
1204
  if (!options.resolver) {
@@ -1011,9 +1207,29 @@ var createI18n = (options) => {
1011
1207
  paramName: "x-client-language"
1012
1208
  };
1013
1209
  }
1210
+ const resolver = getParamResolver(options.resolver);
1211
+ const paramProvider = resolver.toRequestScopedProvider();
1212
+ const module2 = I18nModule.register(options);
1213
+ module2.providers ??= [];
1214
+ module2.exports ??= [];
1215
+ module2.providers.push(
1216
+ paramProvider.provider,
1217
+ LocaleContext,
1218
+ // re-exports the resolved param value for LocaleContext injection
1219
+ createProvider(
1220
+ {
1221
+ provide: I18nParamResolverProviderToken,
1222
+ inject: [paramProvider.token]
1223
+ },
1224
+ (s) => s
1225
+ )
1226
+ );
1227
+ module2.exports.push(paramProvider.provider, LocaleContext);
1014
1228
  return {
1015
1229
  UseI18n: createI18nDecorator(options),
1016
- I18nModule: I18nModule.register(options)
1230
+ I18nModule: module2,
1231
+ I18nParamResolver: resolver,
1232
+ I18nParamResolverProvider: paramProvider
1017
1233
  };
1018
1234
  };
1019
1235
 
@@ -1029,6 +1245,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
1029
1245
  ApiError,
1030
1246
  ApiErrorTyped,
1031
1247
  ApiFromResolver,
1248
+ ApiInject,
1032
1249
  ApiTypeResponse,
1033
1250
  As,
1034
1251
  BlankPaginatedReturnMessageDto,
@@ -1037,6 +1254,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
1037
1254
  DataBody,
1038
1255
  DataPipe,
1039
1256
  DataQuery,
1257
+ DefaultValueParamResolver,
1040
1258
  GenericPaginatedReturnMessageDto,
1041
1259
  GenericReturnMessageDto,
1042
1260
  I18nInterceptor,
@@ -1056,6 +1274,11 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
1056
1274
  ParamResolver,
1057
1275
  ParamResolverBase,
1058
1276
  ParamResolverPipe,
1277
+ ParseBase64ParamResolver,
1278
+ ParseBoolParamResolver,
1279
+ ParseDateParamResolver,
1280
+ ParseFloatParamResolver,
1281
+ ParseIntParamResolver,
1059
1282
  PutLocale,
1060
1283
  RenameClass,
1061
1284
  RequireToken,
@@ -1067,6 +1290,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
1067
1290
  createAbortableProvider,
1068
1291
  createI18n,
1069
1292
  createI18nDecorator,
1293
+ createLambdaParamResolver,
1070
1294
  createMutateInject,
1071
1295
  createProvider,
1072
1296
  createResolver,
@@ -1074,6 +1298,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
1074
1298
  getApiProperty,
1075
1299
  getClassFromClassOrArray,
1076
1300
  getParamResolver,
1301
+ parseBool,
1077
1302
  takeUntilAbort
1078
1303
  });
1079
1304
  //# sourceMappingURL=index.cjs.map