@pristine-ts/data-mapping 0.0.278 → 0.0.279

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 (83) hide show
  1. package/dist/lib/cjs/builders/auto-data-mapping.builder.js +147 -0
  2. package/dist/lib/cjs/builders/auto-data-mapping.builder.js.map +1 -0
  3. package/dist/lib/cjs/builders/builders.js +1 -0
  4. package/dist/lib/cjs/builders/builders.js.map +1 -1
  5. package/dist/lib/cjs/decorators/type.decorator.js +20 -0
  6. package/dist/lib/cjs/decorators/type.decorator.js.map +1 -0
  7. package/dist/lib/cjs/mappers/data.mapper.js +18 -4
  8. package/dist/lib/cjs/mappers/data.mapper.js.map +1 -1
  9. package/dist/lib/cjs/nodes/data-mapping.node.js +19 -4
  10. package/dist/lib/cjs/nodes/data-mapping.node.js.map +1 -1
  11. package/dist/lib/cjs/normalizer-options/base-normalizer.options.js +2 -1
  12. package/dist/lib/cjs/normalizer-options/base-normalizer.options.js.map +1 -1
  13. package/dist/lib/cjs/normalizer-options/date-normalizer.options.js +21 -0
  14. package/dist/lib/cjs/normalizer-options/date-normalizer.options.js.map +1 -0
  15. package/dist/lib/cjs/normalizer-options/lowercase-normalizer.options.js.map +1 -1
  16. package/dist/lib/cjs/normalizer-options/normalizer-options.js +3 -0
  17. package/dist/lib/cjs/normalizer-options/normalizer-options.js.map +1 -1
  18. package/dist/lib/cjs/normalizer-options/number-normalizer.options.js +16 -0
  19. package/dist/lib/cjs/normalizer-options/number-normalizer.options.js.map +1 -0
  20. package/dist/lib/cjs/normalizer-options/string-normalizer.options.js +17 -0
  21. package/dist/lib/cjs/normalizer-options/string-normalizer.options.js.map +1 -0
  22. package/dist/lib/cjs/normalizers/date.normalizer.js +73 -0
  23. package/dist/lib/cjs/normalizers/date.normalizer.js.map +1 -0
  24. package/dist/lib/cjs/normalizers/normalizers.js +3 -0
  25. package/dist/lib/cjs/normalizers/normalizers.js.map +1 -1
  26. package/dist/lib/cjs/normalizers/number.normalizer.js +41 -0
  27. package/dist/lib/cjs/normalizers/number.normalizer.js.map +1 -0
  28. package/dist/lib/cjs/normalizers/string.normalizer.js +63 -0
  29. package/dist/lib/cjs/normalizers/string.normalizer.js.map +1 -0
  30. package/dist/lib/cjs/options/auto-data-mapping-builder.options.js +11 -0
  31. package/dist/lib/cjs/options/auto-data-mapping-builder.options.js.map +1 -0
  32. package/dist/lib/cjs/request-interceptors/body-mapping.request-interceptor.js +1 -2
  33. package/dist/lib/cjs/request-interceptors/body-mapping.request-interceptor.js.map +1 -1
  34. package/dist/lib/esm/builders/auto-data-mapping.builder.js +144 -0
  35. package/dist/lib/esm/builders/auto-data-mapping.builder.js.map +1 -0
  36. package/dist/lib/esm/builders/builders.js +1 -0
  37. package/dist/lib/esm/builders/builders.js.map +1 -1
  38. package/dist/lib/esm/decorators/type.decorator.js +16 -0
  39. package/dist/lib/esm/decorators/type.decorator.js.map +1 -0
  40. package/dist/lib/esm/mappers/data.mapper.js +18 -4
  41. package/dist/lib/esm/mappers/data.mapper.js.map +1 -1
  42. package/dist/lib/esm/nodes/data-mapping.node.js +19 -4
  43. package/dist/lib/esm/nodes/data-mapping.node.js.map +1 -1
  44. package/dist/lib/esm/normalizer-options/base-normalizer.options.js +2 -1
  45. package/dist/lib/esm/normalizer-options/base-normalizer.options.js.map +1 -1
  46. package/dist/lib/esm/normalizer-options/date-normalizer.options.js +17 -0
  47. package/dist/lib/esm/normalizer-options/date-normalizer.options.js.map +1 -0
  48. package/dist/lib/esm/normalizer-options/lowercase-normalizer.options.js.map +1 -1
  49. package/dist/lib/esm/normalizer-options/normalizer-options.js +3 -0
  50. package/dist/lib/esm/normalizer-options/normalizer-options.js.map +1 -1
  51. package/dist/lib/esm/normalizer-options/number-normalizer.options.js +12 -0
  52. package/dist/lib/esm/normalizer-options/number-normalizer.options.js.map +1 -0
  53. package/dist/lib/esm/normalizer-options/string-normalizer.options.js +13 -0
  54. package/dist/lib/esm/normalizer-options/string-normalizer.options.js.map +1 -0
  55. package/dist/lib/esm/normalizers/date.normalizer.js +70 -0
  56. package/dist/lib/esm/normalizers/date.normalizer.js.map +1 -0
  57. package/dist/lib/esm/normalizers/normalizers.js +3 -0
  58. package/dist/lib/esm/normalizers/normalizers.js.map +1 -1
  59. package/dist/lib/esm/normalizers/number.normalizer.js +38 -0
  60. package/dist/lib/esm/normalizers/number.normalizer.js.map +1 -0
  61. package/dist/lib/esm/normalizers/string.normalizer.js +60 -0
  62. package/dist/lib/esm/normalizers/string.normalizer.js.map +1 -0
  63. package/dist/lib/esm/options/auto-data-mapping-builder.options.js +7 -0
  64. package/dist/lib/esm/options/auto-data-mapping-builder.options.js.map +1 -0
  65. package/dist/lib/esm/request-interceptors/body-mapping.request-interceptor.js +1 -2
  66. package/dist/lib/esm/request-interceptors/body-mapping.request-interceptor.js.map +1 -1
  67. package/dist/types/builders/auto-data-mapping.builder.d.ts +25 -0
  68. package/dist/types/builders/builders.d.ts +1 -0
  69. package/dist/types/decorators/type.decorator.d.ts +2 -0
  70. package/dist/types/mappers/data.mapper.d.ts +11 -1
  71. package/dist/types/nodes/data-mapping.node.d.ts +10 -0
  72. package/dist/types/normalizer-options/base-normalizer.options.d.ts +2 -2
  73. package/dist/types/normalizer-options/date-normalizer.options.d.ts +12 -0
  74. package/dist/types/normalizer-options/lowercase-normalizer.options.d.ts +1 -1
  75. package/dist/types/normalizer-options/normalizer-options.d.ts +3 -0
  76. package/dist/types/normalizer-options/number-normalizer.options.d.ts +8 -0
  77. package/dist/types/normalizer-options/string-normalizer.options.d.ts +12 -0
  78. package/dist/types/normalizers/date.normalizer.d.ts +6 -0
  79. package/dist/types/normalizers/normalizers.d.ts +3 -0
  80. package/dist/types/normalizers/number.normalizer.d.ts +6 -0
  81. package/dist/types/normalizers/string.normalizer.d.ts +6 -0
  82. package/dist/types/options/auto-data-mapping-builder.options.d.ts +11 -0
  83. package/package.json +8 -7
@@ -0,0 +1,38 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var NumberNormalizer_1;
8
+ import { injectable } from "tsyringe";
9
+ import { TypeEnum, TypeUtils } from "@pristine-ts/metadata";
10
+ let NumberNormalizer = NumberNormalizer_1 = class NumberNormalizer {
11
+ getUniqueKey() {
12
+ return NumberNormalizer_1.name;
13
+ }
14
+ normalize(source, options) {
15
+ const typeEnum = TypeUtils.getTypeOfValue(source);
16
+ switch (typeEnum) {
17
+ case TypeEnum.String:
18
+ const value = parseFloat(source);
19
+ if (isNaN(value) === false) {
20
+ return value;
21
+ }
22
+ break;
23
+ case TypeEnum.Number:
24
+ return source;
25
+ }
26
+ if (typeEnum === undefined || typeEnum === TypeEnum.Null) {
27
+ if ((options === null || options === void 0 ? void 0 : options.ignoreUndefined) === false) {
28
+ return 0;
29
+ }
30
+ return undefined;
31
+ }
32
+ }
33
+ };
34
+ NumberNormalizer = NumberNormalizer_1 = __decorate([
35
+ injectable()
36
+ ], NumberNormalizer);
37
+ export { NumberNormalizer };
38
+ //# sourceMappingURL=number.normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.normalizer.js","sourceRoot":"","sources":["../../../../src/normalizers/number.normalizer.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAGpC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAGnD,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IACzB,YAAY;QACR,OAAO,kBAAgB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,MAAW,EAAE,OAAiC;QACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,QAAQ,QAAQ,EAAE;YACd,KAAK,QAAQ,CAAC,MAAM;gBAChB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBAEjC,IAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;oBACvB,OAAO,KAAK,CAAC;iBAChB;gBACD,MAAM;YAEV,KAAK,QAAQ,CAAC,MAAM;gBAChB,OAAO,MAAM,CAAC;SACrB;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;YACtD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,MAAK,KAAK,EAAE;gBACpC,OAAO,CAAC,CAAC;aACZ;YAED,OAAO,SAAS,CAAC;SACpB;IACL,CAAC;CACJ,CAAA;AA7BY,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CA6B5B"}
@@ -0,0 +1,60 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var StringNormalizer_1;
8
+ import { injectable } from "tsyringe";
9
+ import { TypeEnum, TypeUtils } from "@pristine-ts/metadata";
10
+ import { format } from "date-fns";
11
+ let StringNormalizer = StringNormalizer_1 = class StringNormalizer {
12
+ getUniqueKey() {
13
+ return StringNormalizer_1.name;
14
+ }
15
+ normalize(source, options) {
16
+ const typeEnum = TypeUtils.getTypeOfValue(source);
17
+ if (typeEnum === undefined || typeEnum === TypeEnum.Null) {
18
+ if ((options === null || options === void 0 ? void 0 : options.ignoreUndefined) === false) {
19
+ return "";
20
+ }
21
+ return undefined;
22
+ }
23
+ switch (typeEnum) {
24
+ case TypeEnum.String:
25
+ return source;
26
+ case TypeEnum.Number:
27
+ return "" + source;
28
+ case TypeEnum.Boolean:
29
+ return source ? "true" : "false";
30
+ case TypeEnum.Date:
31
+ if (options === null || options === void 0 ? void 0 : options.dateFormat) {
32
+ return format(source, options.dateFormat);
33
+ }
34
+ // This will return the default format we want: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON
35
+ return source.toJSON();
36
+ case TypeEnum.Array:
37
+ return source.map((item) => this.normalize(item, options));
38
+ case TypeEnum.Symbol:
39
+ return source.toString();
40
+ case TypeEnum.Object:
41
+ if (source.hasOwnProperty("toString") === true) {
42
+ return source.toString();
43
+ }
44
+ try {
45
+ return JSON.stringify(source);
46
+ }
47
+ catch (e) {
48
+ return "" + source;
49
+ }
50
+ // For now, let's do that for other types. We can make it better eventually.
51
+ default:
52
+ return "" + source;
53
+ }
54
+ }
55
+ };
56
+ StringNormalizer = StringNormalizer_1 = __decorate([
57
+ injectable()
58
+ ], StringNormalizer);
59
+ export { StringNormalizer };
60
+ //# sourceMappingURL=string.normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.normalizer.js","sourceRoot":"","sources":["../../../../src/normalizers/string.normalizer.ts"],"names":[],"mappings":";;;;;;;AACA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAGzB,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IACzB,YAAY;QACR,OAAO,kBAAgB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,MAAW,EAAE,OAAiC;QACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;YACtD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,MAAK,KAAK,EAAE;gBACpC,OAAO,EAAE,CAAC;aACb;YAED,OAAO,SAAS,CAAC;SACpB;QAED,QAAQ,QAAQ,EAAE;YACd,KAAK,QAAQ,CAAC,MAAM;gBAChB,OAAO,MAAM,CAAC;YAElB,KAAK,QAAQ,CAAC,MAAM;gBAChB,OAAO,EAAE,GAAG,MAAM,CAAC;YAEvB,KAAK,QAAQ,CAAC,OAAO;gBACjB,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAErC,KAAK,QAAQ,CAAC,IAAI;gBACd,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE;oBACrB,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;iBAC7C;gBAED,4IAA4I;gBAC5I,OAAQ,MAAe,CAAC,MAAM,EAAE,CAAC;YAErC,KAAK,QAAQ,CAAC,KAAK;gBACf,OAAO,MAAM,CAAC,GAAG,CAAE,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAErE,KAAK,QAAQ,CAAC,MAAM;gBAChB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;YAE7B,KAAK,QAAQ,CAAC,MAAM;gBAChB,IAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;oBAC3C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;iBAC5B;gBAED,IAAI;oBACA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBACjC;gBAAC,OAAO,CAAC,EAAE;oBACR,OAAO,EAAE,GAAG,MAAM,CAAA;iBACrB;YAED,4EAA4E;YAChF;gBACI,OAAO,EAAE,GAAG,MAAM,CAAC;SAC1B;IACL,CAAC;CACJ,CAAA;AAxDY,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CAwD5B"}
@@ -0,0 +1,7 @@
1
+ export class AutoDataMappingBuilderOptions {
2
+ constructor(options) {
3
+ var _a;
4
+ this.isOptionalDefaultValue = (_a = options === null || options === void 0 ? void 0 : options.isOptionalDefaultValue) !== null && _a !== void 0 ? _a : false;
5
+ }
6
+ }
7
+ //# sourceMappingURL=auto-data-mapping-builder.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-data-mapping-builder.options.js","sourceRoot":"","sources":["../../../../src/options/auto-data-mapping-builder.options.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,6BAA6B;IAUtC,YAAY,OAAgD;;QACxD,IAAI,CAAC,sBAAsB,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,sBAAsB,mCAAI,KAAK,CAAC;IAC3E,CAAC;CACJ"}
@@ -23,7 +23,6 @@ import { moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common
23
23
  import { inject, injectable } from "tsyringe";
24
24
  import { DataMapper } from "../mappers/data.mapper";
25
25
  import { bodyMappingDecoratorMetadataKeyname } from "../decorators/body-mapping.decorator";
26
- import { plainToInstance } from "class-transformer";
27
26
  import { DataMappingModuleKeyname } from "../data-mapping.module.keyname";
28
27
  /**
29
28
  * This class is an interceptor that maps the body of an incoming request.
@@ -53,7 +52,7 @@ let BodyMappingRequestInterceptor = class BodyMappingRequestInterceptor {
53
52
  }, DataMappingModuleKeyname);
54
53
  switch (bodyMapping.type) {
55
54
  case "classType":
56
- request.body = plainToInstance(bodyMapping.classType, request.body);
55
+ request.body = yield this.dataMapper.autoMap(request.body, bodyMapping.classType);
57
56
  break;
58
57
  case "DataMappingBuilder":
59
58
  request.body = yield this.dataMapper.map(bodyMapping.dataMappingBuilder, request.body, bodyMapping.destination);
@@ -1 +1 @@
1
- {"version":3,"file":"body-mapping.request-interceptor.js","sourceRoot":"","sources":["../../../../src/request-interceptors/body-mapping.request-interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,YAAY,EAAW,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAC,mCAAmC,EAAC,MAAM,sCAAsC,CAAC;AAKzF,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAC;AAExE;;;;GAIG;AAII,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IACtC,YAA4D,UAA+B,EAC9D,UAAsB;QADS,eAAU,GAAV,UAAU,CAAqB;QAC9D,eAAU,GAAV,UAAU,CAAY;IACnD,CAAC;IAED;;;;OAIG;IACG,gBAAgB,CAAC,OAAgB,EAAE,UAA4B;;YACjE,MAAM,WAAW,GAAsI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAErN,IAAG,WAAW,KAAK,SAAS,EAAE;gBAC1B,OAAO,OAAO,CAAC;aAClB;YAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACnD,OAAO;gBACP,UAAU;gBACV,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;aACzC,EAAE,wBAAwB,CAAC,CAAA;YAE5B,QAAQ,WAAW,CAAC,IAAI,EAAE;gBACtB,KAAK,WAAW;oBACZ,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpE,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;oBAChH,MAAM;gBAEV,KAAK,UAAU;oBACX,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM;aACb;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;CACJ,CAAA;AAvCY,6BAA6B;IAHzC,YAAY,CAAC,wBAAwB,CAAC;IACtC,GAAG,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;IAChD,UAAU,EAAE;IAEI,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;6CACD,UAAU;GAF1C,6BAA6B,CAuCzC"}
1
+ {"version":3,"file":"body-mapping.request-interceptor.js","sourceRoot":"","sources":["../../../../src/request-interceptors/body-mapping.request-interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,YAAY,EAAW,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAC,mCAAmC,EAAC,MAAM,sCAAsC,CAAC;AAMzF,OAAO,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAC;AAExE;;;;GAIG;AAII,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IACtC,YAA4D,UAA+B,EAC9D,UAAsB;QADS,eAAU,GAAV,UAAU,CAAqB;QAC9D,eAAU,GAAV,UAAU,CAAY;IACnD,CAAC;IAED;;;;OAIG;IACG,gBAAgB,CAAC,OAAgB,EAAE,UAA4B;;YACjE,MAAM,WAAW,GAAsI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAErN,IAAG,WAAW,KAAK,SAAS,EAAE;gBAC1B,OAAO,OAAO,CAAC;aAClB;YAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACnD,OAAO;gBACP,UAAU;gBACV,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;aACzC,EAAE,wBAAwB,CAAC,CAAA;YAE5B,QAAQ,WAAW,CAAC,IAAI,EAAE;gBACtB,KAAK,WAAW;oBACZ,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;oBAClF,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;oBAChH,MAAM;gBAEV,KAAK,UAAU;oBACX,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM;aACb;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;CACJ,CAAA;AAvCY,6BAA6B;IAHzC,YAAY,CAAC,wBAAwB,CAAC;IACtC,GAAG,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;IAChD,UAAU,EAAE;IAEI,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;6CACD,UAAU;GAF1C,6BAA6B,CAuCzC"}
@@ -0,0 +1,25 @@
1
+ import { ClassConstructor } from "class-transformer";
2
+ import { DataMappingBuilder } from "./data-mapping.builder";
3
+ import { AutoDataMappingBuilderOptions } from "../options/auto-data-mapping-builder.options";
4
+ export declare class AutoDataMappingBuilder {
5
+ /**
6
+ * This method receives a source object and a destinationType that corresponds to the type of the class
7
+ * that the source should be mapped to. It then creates a DataMappingBuilder object that contains the schema
8
+ * needed to map the source to the destinationType.
9
+ * @param source
10
+ * @param destinationType
11
+ * @param options
12
+ */
13
+ build(source: any, destinationType: ClassConstructor<any>, options?: AutoDataMappingBuilderOptions): DataMappingBuilder;
14
+ /**
15
+ * This method is the internal method that is called recursively to build the schema.
16
+ *
17
+ * @param source
18
+ * @param destinationType
19
+ * @param root
20
+ * @param parent
21
+ * @param options
22
+ * @private
23
+ */
24
+ private internalBuild;
25
+ }
@@ -1 +1,2 @@
1
+ export * from "./auto-data-mapping.builder";
1
2
  export * from "./data-mapping.builder";
@@ -0,0 +1,2 @@
1
+ export type TypeFactoryCallback = (target: any, propertyKey: string) => any;
2
+ export declare const type: (callback: TypeFactoryCallback) => (target: any, propertyKey: string | symbol) => void;
@@ -2,12 +2,15 @@ import { DataNormalizerInterface } from "../interfaces/data-normalizer.interface
2
2
  import { DataMappingInterceptorInterface } from "../interfaces/data-mapping-interceptor.interface";
3
3
  import { DataMappingBuilder } from "../builders/data-mapping.builder";
4
4
  import { ClassConstructor } from "class-transformer";
5
+ import { AutoDataMappingBuilder } from "../builders/auto-data-mapping.builder";
6
+ import { AutoDataMappingBuilderOptions } from "../options/auto-data-mapping-builder.options";
5
7
  export declare class DataMapper {
8
+ private readonly autoDataMappingBuilder;
6
9
  private readonly dataNormalizers;
7
10
  private readonly dataTransformerInterceptors;
8
11
  private readonly dataNormalizersMap;
9
12
  private readonly dataTransformerInterceptorsMap;
10
- constructor(dataNormalizers: DataNormalizerInterface<any, any>[], dataTransformerInterceptors: DataMappingInterceptorInterface[]);
13
+ constructor(autoDataMappingBuilder: AutoDataMappingBuilder, dataNormalizers: DataNormalizerInterface<any, any>[], dataTransformerInterceptors: DataMappingInterceptorInterface[]);
11
14
  /**
12
15
  * This method takes an array of source and maps each item.
13
16
  *
@@ -16,6 +19,13 @@ export declare class DataMapper {
16
19
  * @param destinationType
17
20
  */
18
21
  mapAll(builder: DataMappingBuilder, source: any[], destinationType?: ClassConstructor<any>): Promise<any[]>;
22
+ /**
23
+ * This method automatically maps a source object into the DestinationType.
24
+ * @param source
25
+ * @param destinationType
26
+ * @param options
27
+ */
28
+ autoMap(source: any, destinationType: ClassConstructor<any>, options?: AutoDataMappingBuilderOptions): Promise<any>;
19
29
  /**
20
30
  * This method takes a builder, a source and maps it according to the builder. You can pass a `destinationType (optional)`
21
31
  * that is an object that will be constructed.
@@ -4,6 +4,7 @@ import { DataMappingBuilder } from "../builders/data-mapping.builder";
4
4
  import { BaseDataMappingNode } from "./base-data-mapping.node";
5
5
  import { DataNormalizerUniqueKey } from "../types/data-normalizer-unique-key.type";
6
6
  import { DataNormalizerInterface } from "../interfaces/data-normalizer.interface";
7
+ import { ClassConstructor } from "class-transformer";
7
8
  export declare class DataMappingNode extends BaseDataMappingNode {
8
9
  readonly root: DataMappingBuilder;
9
10
  readonly parent: DataMappingNode | DataMappingBuilder;
@@ -20,6 +21,10 @@ export declare class DataMappingNode extends BaseDataMappingNode {
20
21
  * This method specified whether it's possible that this element not be present in the `source` object.
21
22
  */
22
23
  isOptional: boolean;
24
+ /**
25
+ * IMPORTANT: This property is not serializable. It will be lost during the export.
26
+ */
27
+ destinationType?: ClassConstructor<any>;
23
28
  constructor(root: DataMappingBuilder, parent: DataMappingNode | DataMappingBuilder, type?: DataMappingNodeTypeEnum);
24
29
  /**
25
30
  * This is a setter for `sourceProperty`.
@@ -31,6 +36,11 @@ export declare class DataMappingNode extends BaseDataMappingNode {
31
36
  * @param destinationProperty
32
37
  */
33
38
  setDestinationProperty(destinationProperty: string): DataMappingNode;
39
+ /**
40
+ * This is a setter for `destinationType`.
41
+ * @param destinationType
42
+ */
43
+ setDestinationType(destinationType: ClassConstructor<any>): DataMappingNode;
34
44
  /**
35
45
  * This is a setter for `isOptional`.
36
46
  * @param isOptional
@@ -1,4 +1,4 @@
1
1
  export declare abstract class BaseNormalizerOptions {
2
- shouldThrowIfTypeIsNotString?: boolean;
3
- constructor(options?: BaseNormalizerOptions);
2
+ shouldThrowIfTypeIsNotString: boolean;
3
+ constructor(options?: Partial<BaseNormalizerOptions>);
4
4
  }
@@ -0,0 +1,12 @@
1
+ export declare class DateNormalizerOptions {
2
+ /**
3
+ * This property specifies whether an invalid date should return undefined or a date object.
4
+ */
5
+ returnUndefinedOnInvalidDate: boolean;
6
+ /**
7
+ * This property specifies if a number should be treated as being in seconds or not. Since JS Date expects a
8
+ * timestamp in milliseconds, if the number is in seconds, it will be multiplied by 1000.
9
+ */
10
+ treatNumbers: "milliseconds" | "seconds";
11
+ constructor(options?: Partial<DateNormalizerOptions>);
12
+ }
@@ -1,4 +1,4 @@
1
1
  import { BaseNormalizerOptions } from "./base-normalizer.options";
2
2
  export declare class LowercaseNormalizerOptions extends BaseNormalizerOptions {
3
- constructor(options?: LowercaseNormalizerOptions);
3
+ constructor(options?: Partial<LowercaseNormalizerOptions>);
4
4
  }
@@ -1,2 +1,5 @@
1
1
  export * from "./base-normalizer.options";
2
+ export * from "./date-normalizer.options";
2
3
  export * from "./lowercase-normalizer.options";
4
+ export * from "./number-normalizer.options";
5
+ export * from "./string-normalizer.options";
@@ -0,0 +1,8 @@
1
+ export declare class NumberNormalizerOptions {
2
+ /**
3
+ * This property specifies whether an undefined value should be ignored and simply returned or treated as a potential string
4
+ * and return an empty string `""`.
5
+ */
6
+ ignoreUndefined: boolean;
7
+ constructor(options?: Partial<NumberNormalizerOptions>);
8
+ }
@@ -0,0 +1,12 @@
1
+ export declare class StringNormalizerOptions {
2
+ /**
3
+ * This property specifies whether an undefined value should be ignored and simply returned or treated as a potential string
4
+ * and return an empty string `""`.
5
+ */
6
+ ignoreUndefined: boolean;
7
+ /**
8
+ * This represents the format of the date that the normalizer should use when outputting a date object to a string.
9
+ */
10
+ dateFormat?: string;
11
+ constructor(options?: Partial<StringNormalizerOptions>);
12
+ }
@@ -0,0 +1,6 @@
1
+ import { DataNormalizerInterface } from "../interfaces/data-normalizer.interface";
2
+ import { DateNormalizerOptions } from "../normalizer-options/date-normalizer.options";
3
+ export declare class DateNormalizer implements DataNormalizerInterface<Date | undefined, DateNormalizerOptions> {
4
+ getUniqueKey(): string;
5
+ normalize(source: any, options?: DateNormalizerOptions): Date | undefined;
6
+ }
@@ -1 +1,4 @@
1
+ export * from "./date.normalizer";
1
2
  export * from "./lowercase.normalizer";
3
+ export * from "./number.normalizer";
4
+ export * from "./string.normalizer";
@@ -0,0 +1,6 @@
1
+ import { DataNormalizerInterface } from "../interfaces/data-normalizer.interface";
2
+ import { NumberNormalizerOptions } from "../normalizer-options/number-normalizer.options";
3
+ export declare class NumberNormalizer implements DataNormalizerInterface<number | undefined, NumberNormalizerOptions> {
4
+ getUniqueKey(): string;
5
+ normalize(source: any, options?: NumberNormalizerOptions): number | undefined;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { DataNormalizerInterface } from "../interfaces/data-normalizer.interface";
2
+ import { StringNormalizerOptions } from "../normalizer-options/string-normalizer.options";
3
+ export declare class StringNormalizer implements DataNormalizerInterface<string | undefined, StringNormalizerOptions> {
4
+ getUniqueKey(): string;
5
+ normalize(source: any, options?: StringNormalizerOptions): string | undefined;
6
+ }
@@ -0,0 +1,11 @@
1
+ export declare class AutoDataMappingBuilderOptions {
2
+ /**
3
+ * This property is used to specify the default value for the `ìsOptional` property in the builder.
4
+ *
5
+ * It will not override the `isNullable` metadata for the property.
6
+ *
7
+ * Default value is `false`.
8
+ */
9
+ isOptionalDefaultValue: boolean;
10
+ constructor(options?: Partial<AutoDataMappingBuilderOptions>);
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pristine-ts/data-mapping",
3
- "version": "0.0.278",
3
+ "version": "0.0.279",
4
4
  "description": "",
5
5
  "module": "dist/lib/esm/data-mapping.module.js",
6
6
  "main": "dist/lib/cjs/data-mapping.module.js",
@@ -20,12 +20,13 @@
20
20
  "access": "public"
21
21
  },
22
22
  "dependencies": {
23
- "@pristine-ts/class-validator": "^1.0.22",
24
- "@pristine-ts/common": "^0.0.278",
25
- "@pristine-ts/logging": "^0.0.278",
26
- "@pristine-ts/metadata": "~1.0.2",
27
- "@pristine-ts/networking": "^0.0.278",
23
+ "@pristine-ts/class-validator": "^1.0.23",
24
+ "@pristine-ts/common": "^0.0.279",
25
+ "@pristine-ts/logging": "^0.0.279",
26
+ "@pristine-ts/metadata": "~1.0.6",
27
+ "@pristine-ts/networking": "^0.0.279",
28
28
  "class-transformer": "^0.5.1",
29
+ "date-fns": "^3.3.1",
29
30
  "tsyringe": "^4.8.0"
30
31
  },
31
32
  "jest": {
@@ -65,5 +66,5 @@
65
66
  "jest-extended/all"
66
67
  ]
67
68
  },
68
- "gitHead": "919af75933ff21c315d4e2d0aa6f5a2be98b6752"
69
+ "gitHead": "1576fad5e35c9a63f80aecb693186f30f1092a3d"
69
70
  }