@pristine-ts/data-mapping-common 2.0.10 → 2.0.12
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/lib/cjs/builders/data-mapping.builder.js +8 -35
- package/dist/lib/cjs/builders/data-mapping.builder.js.map +1 -1
- package/dist/lib/cjs/data-mapping-common.js +1 -0
- package/dist/lib/cjs/data-mapping-common.js.map +1 -1
- package/dist/lib/cjs/interfaces/fluent-array-of-objects-options.interface.js +3 -0
- package/dist/lib/cjs/interfaces/fluent-array-of-objects-options.interface.js.map +1 -0
- package/dist/lib/cjs/interfaces/fluent-leaf-options.interface.js +3 -0
- package/dist/lib/cjs/interfaces/fluent-leaf-options.interface.js.map +1 -0
- package/dist/lib/cjs/interfaces/fluent-nested-options.interface.js +3 -0
- package/dist/lib/cjs/interfaces/fluent-nested-options.interface.js.map +1 -0
- package/dist/lib/cjs/interfaces/interfaces.js +3 -0
- package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
- package/dist/lib/cjs/nodes/base-data-mapping.node.js +94 -4
- package/dist/lib/cjs/nodes/base-data-mapping.node.js.map +1 -1
- package/dist/lib/cjs/nodes/data-mapping.node.js +12 -40
- package/dist/lib/cjs/nodes/data-mapping.node.js.map +1 -1
- package/dist/lib/cjs/serializers/data-mapping.serializer.js +81 -0
- package/dist/lib/cjs/serializers/data-mapping.serializer.js.map +1 -0
- package/dist/lib/cjs/serializers/serializers.js +18 -0
- package/dist/lib/cjs/serializers/serializers.js.map +1 -0
- package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/lib/esm/builders/data-mapping.builder.js +8 -35
- package/dist/lib/esm/builders/data-mapping.builder.js.map +1 -1
- package/dist/lib/esm/data-mapping-common.js +1 -0
- package/dist/lib/esm/data-mapping-common.js.map +1 -1
- package/dist/lib/esm/interfaces/fluent-array-of-objects-options.interface.js +2 -0
- package/dist/lib/esm/interfaces/fluent-array-of-objects-options.interface.js.map +1 -0
- package/dist/lib/esm/interfaces/fluent-leaf-options.interface.js +2 -0
- package/dist/lib/esm/interfaces/fluent-leaf-options.interface.js.map +1 -0
- package/dist/lib/esm/interfaces/fluent-nested-options.interface.js +2 -0
- package/dist/lib/esm/interfaces/fluent-nested-options.interface.js.map +1 -0
- package/dist/lib/esm/interfaces/interfaces.js +3 -0
- package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
- package/dist/lib/esm/nodes/base-data-mapping.node.js +94 -4
- package/dist/lib/esm/nodes/base-data-mapping.node.js.map +1 -1
- package/dist/lib/esm/nodes/data-mapping.node.js +12 -40
- package/dist/lib/esm/nodes/data-mapping.node.js.map +1 -1
- package/dist/lib/esm/serializers/data-mapping.serializer.js +77 -0
- package/dist/lib/esm/serializers/data-mapping.serializer.js.map +1 -0
- package/dist/lib/esm/serializers/serializers.js +2 -0
- package/dist/lib/esm/serializers/serializers.js.map +1 -0
- package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/types/builders/data-mapping.builder.d.ts +5 -5
- package/dist/types/data-mapping-common.d.ts +1 -0
- package/dist/types/interfaces/fluent-array-of-objects-options.interface.d.ts +21 -0
- package/dist/types/interfaces/fluent-leaf-options.interface.d.ts +27 -0
- package/dist/types/interfaces/fluent-nested-options.interface.d.ts +19 -0
- package/dist/types/interfaces/interfaces.d.ts +3 -0
- package/dist/types/nodes/base-data-mapping.node.d.ts +39 -4
- package/dist/types/nodes/data-mapping.node.d.ts +9 -9
- package/dist/types/serializers/data-mapping.serializer.d.ts +46 -0
- package/dist/types/serializers/serializers.d.ts +1 -0
- package/package.json +3 -3
- package/readme.md +43 -1
|
@@ -5,6 +5,7 @@ import { DataAfterMappingInterceptorAlreadyAddedError } from "../errors/data-aft
|
|
|
5
5
|
import { DataMappingLeaf } from "../nodes/data-mapping.leaf";
|
|
6
6
|
import { BaseDataMappingNode } from "../nodes/base-data-mapping.node";
|
|
7
7
|
import { DataMappingNodeTypeEnum } from "../enums/data-mapping-node-type.enum";
|
|
8
|
+
import { DataMappingSerializer } from "../serializers/data-mapping.serializer";
|
|
8
9
|
export class DataMappingBuilder extends BaseDataMappingNode {
|
|
9
10
|
constructor() {
|
|
10
11
|
super(...arguments);
|
|
@@ -121,51 +122,23 @@ export class DataMappingBuilder extends BaseDataMappingNode {
|
|
|
121
122
|
return this;
|
|
122
123
|
}
|
|
123
124
|
/**
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
125
|
+
* Rehydrate this builder from a previously-exported schema. Replaces every field this
|
|
126
|
+
* class owns; child nodes are rebuilt via `DataMappingSerializer.importChildren`, which is
|
|
127
|
+
* the same helper `DataMappingNode.import` uses (so the two stay consistent).
|
|
127
128
|
*/
|
|
128
129
|
import(schema) {
|
|
129
130
|
this.normalizers = schema.normalizers;
|
|
130
131
|
this.beforeMappingInterceptors = schema.beforeMappingInterceptors;
|
|
131
132
|
this.afterMappingInterceptors = schema.afterMappingInterceptors;
|
|
132
|
-
|
|
133
|
-
for (const key in nodes) {
|
|
134
|
-
if (nodes.hasOwnProperty(key) === false) {
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
const nodeInfo = nodes[key];
|
|
138
|
-
const type = nodeInfo["_type"];
|
|
139
|
-
switch (type) {
|
|
140
|
-
case DataMappingNodeTypeEnum.ScalarArray:
|
|
141
|
-
case DataMappingNodeTypeEnum.Leaf:
|
|
142
|
-
const leaf = new DataMappingLeaf(this, this, type);
|
|
143
|
-
leaf.import(nodeInfo);
|
|
144
|
-
this.nodes[leaf.sourceProperty] = leaf;
|
|
145
|
-
continue;
|
|
146
|
-
case DataMappingNodeTypeEnum.Node:
|
|
147
|
-
case DataMappingNodeTypeEnum.ObjectArray:
|
|
148
|
-
const node = new DataMappingNode(this, this, type);
|
|
149
|
-
node.import(nodeInfo);
|
|
150
|
-
this.nodes[node.sourceProperty] = node;
|
|
151
|
-
;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
133
|
+
this.nodes = DataMappingSerializer.importChildren(this, this, schema.nodes);
|
|
154
134
|
}
|
|
155
135
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
136
|
+
* Export the schema as a plain object. The export does not mutate the live tree — the
|
|
137
|
+
* builder remains usable for mapping after this call returns.
|
|
158
138
|
*/
|
|
159
139
|
export() {
|
|
160
|
-
const exportedNodes = {};
|
|
161
|
-
for (const key in this.nodes) {
|
|
162
|
-
if (this.nodes.hasOwnProperty(key) === false) {
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
exportedNodes[key] = this.nodes[key].export();
|
|
166
|
-
}
|
|
167
140
|
return {
|
|
168
|
-
"nodes":
|
|
141
|
+
"nodes": DataMappingSerializer.exportChildren(this.nodes),
|
|
169
142
|
"normalizers": this.normalizers,
|
|
170
143
|
"beforeMappingInterceptors": this.beforeMappingInterceptors,
|
|
171
144
|
"afterMappingInterceptors": this.afterMappingInterceptors,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-mapping.builder.js","sourceRoot":"","sources":["../../../../src/builders/data-mapping.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAC,0BAA0B,EAAC,MAAM,+CAA+C,CAAC;AAEzF,OAAO,EAAC,6CAA6C,EAAC,MAAM,+DAA+D,CAAC;AAC5H,OAAO,EAAC,4CAA4C,EAAC,MAAM,8DAA8D,CAAC;AAC1H,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAE7E,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IAA3D;;QACS,gBAAW,GAAqD,EAAE,CAAC;QACnE,8BAAyB,GAAiE,EAAE,CAAC;QAC7F,6BAAwB,GAAiE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"data-mapping.builder.js","sourceRoot":"","sources":["../../../../src/builders/data-mapping.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,6 @@ export * from "./normalizer-options/normalizer-options";
|
|
|
9
9
|
export * from "./normalizers/normalizers";
|
|
10
10
|
export * from "./options/options";
|
|
11
11
|
export * from "./reporters/reporters";
|
|
12
|
+
export * from "./serializers/serializers";
|
|
12
13
|
export * from "./types/types";
|
|
13
14
|
//# sourceMappingURL=data-mapping-common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-mapping-common.js","sourceRoot":"","sources":["../../../src/data-mapping-common.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,yCAAyC,CAAC;AACxD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"data-mapping-common.js","sourceRoot":"","sources":["../../../src/data-mapping-common.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,yCAAyC,CAAC;AACxD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluent-array-of-objects-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/fluent-array-of-objects-options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluent-leaf-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/fluent-leaf-options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluent-nested-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/fluent-nested-options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export * from "./data-normalizer.interface";
|
|
2
2
|
export * from "./data-mapping-interceptor.interface";
|
|
3
|
+
export * from "./fluent-array-of-objects-options.interface";
|
|
4
|
+
export * from "./fluent-leaf-options.interface";
|
|
5
|
+
export * from "./fluent-nested-options.interface";
|
|
3
6
|
//# sourceMappingURL=interfaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC"}
|
|
@@ -4,12 +4,80 @@ export class BaseDataMappingNode {
|
|
|
4
4
|
constructor() {
|
|
5
5
|
this.nodes = {};
|
|
6
6
|
}
|
|
7
|
+
// ── Fluent / sugar API ────────────────────────────────────────────────────────────────
|
|
8
|
+
//
|
|
9
|
+
// Sugar layer over the low-level chain. Each call returns `this` so calls compose without
|
|
10
|
+
// explicit `.end()`. Nested structures take a build callback that scopes the inner config
|
|
11
|
+
// — the framework handles the `.end()` for you.
|
|
7
12
|
/**
|
|
8
|
-
*
|
|
9
|
-
* We use this mechanism to force the `end()` method on the leaf to be called so we can do some validations before
|
|
10
|
-
* adding it to the tree.
|
|
13
|
+
* Add a leaf mapping. `field(src)` is shorthand for `field(src, src)` (no rename).
|
|
11
14
|
*
|
|
12
|
-
*
|
|
15
|
+
* Equivalent to `.add().setSourceProperty(src).setDestinationProperty(dst).end()`, plus
|
|
16
|
+
* applying normalizer / optional / excludeNormalizers options.
|
|
17
|
+
*/
|
|
18
|
+
field(source, destination, options) {
|
|
19
|
+
const leaf = this.add()
|
|
20
|
+
.setSourceProperty(source)
|
|
21
|
+
.setDestinationProperty(destination !== null && destination !== void 0 ? destination : source);
|
|
22
|
+
BaseDataMappingNode.applyLeafOptions(leaf, options);
|
|
23
|
+
leaf.end();
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Add a nested object mapping. The build callback receives the new node and configures its
|
|
28
|
+
* children — no explicit `.end()` needed; this method calls it for you when the callback
|
|
29
|
+
* returns.
|
|
30
|
+
*/
|
|
31
|
+
nested(source, destination, build, options) {
|
|
32
|
+
const node = this.addNestingLevel()
|
|
33
|
+
.setSourceProperty(source)
|
|
34
|
+
.setDestinationProperty(destination);
|
|
35
|
+
if ((options === null || options === void 0 ? void 0 : options.isOptional) !== undefined) {
|
|
36
|
+
node.setIsOptional(options.isOptional);
|
|
37
|
+
}
|
|
38
|
+
if ((options === null || options === void 0 ? void 0 : options.destinationType) !== undefined) {
|
|
39
|
+
node.setDestinationType(options.destinationType);
|
|
40
|
+
}
|
|
41
|
+
build(node);
|
|
42
|
+
node.end();
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add an array-of-objects mapping. The build callback configures the per-element schema —
|
|
47
|
+
* every element in the source array is mapped through it. `destinationType` can be a class
|
|
48
|
+
* (uniform array) or a factory callback (polymorphic array).
|
|
49
|
+
*/
|
|
50
|
+
arrayOfObjects(source, destination, build, options) {
|
|
51
|
+
const node = this.addArrayOfObjects()
|
|
52
|
+
.setSourceProperty(source)
|
|
53
|
+
.setDestinationProperty(destination);
|
|
54
|
+
if ((options === null || options === void 0 ? void 0 : options.isOptional) !== undefined) {
|
|
55
|
+
node.setIsOptional(options.isOptional);
|
|
56
|
+
}
|
|
57
|
+
if ((options === null || options === void 0 ? void 0 : options.destinationType) !== undefined) {
|
|
58
|
+
node.setDestinationType(options.destinationType);
|
|
59
|
+
}
|
|
60
|
+
build(node);
|
|
61
|
+
node.end();
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add an array-of-scalars mapping. Normalizers in `options` apply to every element of the
|
|
66
|
+
* array, not to the array itself. `arrayOfScalars(src)` is shorthand for same-name source
|
|
67
|
+
* and destination.
|
|
68
|
+
*/
|
|
69
|
+
arrayOfScalars(source, destination, options) {
|
|
70
|
+
const leaf = this.addArrayOfScalar()
|
|
71
|
+
.setSourceProperty(source)
|
|
72
|
+
.setDestinationProperty(destination !== null && destination !== void 0 ? destination : source);
|
|
73
|
+
BaseDataMappingNode.applyLeafOptions(leaf, options);
|
|
74
|
+
leaf.end();
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Called by the node itself to tell its parent that it has been built and is ready to be
|
|
79
|
+
* added. We use this mechanism to force the `end()` method on the leaf to be called so we
|
|
80
|
+
* can do some validations before adding it to the tree.
|
|
13
81
|
*/
|
|
14
82
|
addNode(node) {
|
|
15
83
|
if (node.sourceProperty === undefined) {
|
|
@@ -20,5 +88,27 @@ export class BaseDataMappingNode {
|
|
|
20
88
|
}
|
|
21
89
|
this.nodes[node.sourceProperty] = node;
|
|
22
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Shared between `field()` and `arrayOfScalars()` — both take the same options shape.
|
|
93
|
+
* Static helper so it can be called against either a freshly-built leaf or any leaf type.
|
|
94
|
+
*/
|
|
95
|
+
static applyLeafOptions(leaf, options) {
|
|
96
|
+
var _a, _b;
|
|
97
|
+
if (options === undefined) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (options.isOptional !== undefined) {
|
|
101
|
+
leaf.setIsOptional(options.isOptional);
|
|
102
|
+
}
|
|
103
|
+
(_a = options.excludeNormalizers) === null || _a === void 0 ? void 0 : _a.forEach(key => leaf.excludeNormalizer(key));
|
|
104
|
+
(_b = options.normalizers) === null || _b === void 0 ? void 0 : _b.forEach(entry => {
|
|
105
|
+
if (typeof entry === "string") {
|
|
106
|
+
leaf.addNormalizer(entry);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
leaf.addNormalizer(entry.key, entry.options);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
23
113
|
}
|
|
24
114
|
//# sourceMappingURL=base-data-mapping.node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-data-mapping.node.js","sourceRoot":"","sources":["../../../../src/nodes/base-data-mapping.node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAC,iCAAiC,EAAC,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"base-data-mapping.node.js","sourceRoot":"","sources":["../../../../src/nodes/base-data-mapping.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { BaseDataMappingNode } from "./base-data-mapping.node";
|
|
|
13
13
|
import { DataMappingSourcePropertyNotFoundError } from "../errors/data-mapping-source-property-not-found.error";
|
|
14
14
|
import { ArrayDataMappingNodeInvalidSourcePropertyTypeError } from "../errors/array-data-mapping-node-invalid-source-property-type.error";
|
|
15
15
|
import { plainToInstance } from "class-transformer";
|
|
16
|
+
import { DataMappingSerializer } from "../serializers/data-mapping.serializer";
|
|
16
17
|
export class DataMappingNode extends BaseDataMappingNode {
|
|
17
18
|
constructor(root, parent, type = DataMappingNodeTypeEnum.Node) {
|
|
18
19
|
super();
|
|
@@ -243,61 +244,32 @@ export class DataMappingNode extends BaseDataMappingNode {
|
|
|
243
244
|
});
|
|
244
245
|
}
|
|
245
246
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
247
|
+
* Rehydrate this node from a previously-exported sub-schema. Children are rebuilt via
|
|
248
|
+
* `DataMappingSerializer.importChildren`, the same helper `DataMappingBuilder.import` uses
|
|
249
|
+
* (so the two stay consistent).
|
|
249
250
|
*/
|
|
250
251
|
import(schema) {
|
|
251
252
|
this.sourceProperty = schema.sourceProperty;
|
|
252
253
|
this.destinationProperty = schema.destinationProperty;
|
|
253
254
|
this.isOptional = schema.isOptional;
|
|
254
|
-
this.nodes =
|
|
255
|
-
const nodes = schema.nodes;
|
|
256
|
-
for (const key in nodes) {
|
|
257
|
-
if (nodes.hasOwnProperty(key) === false) {
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
const nodeInfo = nodes[key];
|
|
261
|
-
const type = nodeInfo["_type"];
|
|
262
|
-
switch (type) {
|
|
263
|
-
case DataMappingNodeTypeEnum.ScalarArray:
|
|
264
|
-
case DataMappingNodeTypeEnum.Leaf:
|
|
265
|
-
const leaf = new DataMappingLeaf(this.root, this, type);
|
|
266
|
-
leaf.import(nodeInfo);
|
|
267
|
-
this.nodes[leaf.sourceProperty] = leaf;
|
|
268
|
-
continue;
|
|
269
|
-
case DataMappingNodeTypeEnum.Node:
|
|
270
|
-
case DataMappingNodeTypeEnum.ObjectArray:
|
|
271
|
-
const node = new DataMappingNode(this.root, this, type);
|
|
272
|
-
node.import(nodeInfo);
|
|
273
|
-
this.nodes[node.sourceProperty] = node;
|
|
274
|
-
;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
255
|
+
this.nodes = DataMappingSerializer.importChildren(this.root, this, schema.nodes);
|
|
277
256
|
}
|
|
278
257
|
/**
|
|
279
|
-
*
|
|
280
|
-
*
|
|
258
|
+
* Export this node as a plain object. Does not mutate the live tree — the builder remains
|
|
259
|
+
* usable for mapping after this call returns.
|
|
281
260
|
*
|
|
282
|
-
* `destinationType` is intentionally not serialized: class constructors aren't transferable,
|
|
283
|
-
* factory callbacks (`ArrayMemberTypeFactoryCallbackType`) hold closures. To rehydrate a
|
|
284
|
-
* the same destination instantiation behavior, decorate the destination class
|
|
285
|
-
* `@Type()` and pass the destination class to `DataMapper.map()`.
|
|
261
|
+
* `destinationType` is intentionally not serialized: class constructors aren't transferable,
|
|
262
|
+
* and factory callbacks (`ArrayMemberTypeFactoryCallbackType`) hold closures. To rehydrate a
|
|
263
|
+
* schema with the same destination instantiation behavior, decorate the destination class
|
|
264
|
+
* with class-transformer's `@Type()` and pass the destination class to `DataMapper.map()`.
|
|
286
265
|
*/
|
|
287
266
|
export() {
|
|
288
|
-
const exportedNodes = {};
|
|
289
|
-
for (const key in this.nodes) {
|
|
290
|
-
if (this.nodes.hasOwnProperty(key) === false) {
|
|
291
|
-
continue;
|
|
292
|
-
}
|
|
293
|
-
exportedNodes[key] = this.nodes[key].export();
|
|
294
|
-
}
|
|
295
267
|
return {
|
|
296
268
|
"_type": this.type,
|
|
297
269
|
"sourceProperty": this.sourceProperty,
|
|
298
270
|
"destinationProperty": this.destinationProperty,
|
|
299
271
|
"isOptional": this.isOptional,
|
|
300
|
-
"nodes":
|
|
272
|
+
"nodes": DataMappingSerializer.exportChildren(this.nodes),
|
|
301
273
|
};
|
|
302
274
|
}
|
|
303
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-mapping.node.js","sourceRoot":"","sources":["../../../../src/nodes/data-mapping.node.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAC,sCAAsC,EAAC,MAAM,wDAAwD,CAAC;AAG9G,OAAO,EAAC,kDAAkD,EAAC,MAAM,sEAAsE,CAAC;AACxI,OAAO,EAAmB,eAAe,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"data-mapping.node.js","sourceRoot":"","sources":["../../../../src/nodes/data-mapping.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { DataMappingNodeTypeEnum } from "../enums/data-mapping-node-type.enum";
|
|
2
|
+
import { DataMappingNode } from "../nodes/data-mapping.node";
|
|
3
|
+
import { DataMappingLeaf } from "../nodes/data-mapping.leaf";
|
|
4
|
+
/**
|
|
5
|
+
* Pure helpers for serializing / deserializing the children-map shared between
|
|
6
|
+
* `DataMappingBuilder` and `DataMappingNode`.
|
|
7
|
+
*
|
|
8
|
+
* Both classes hold the same `{ [sourceProperty]: DataMappingNode | DataMappingLeaf }` shape
|
|
9
|
+
* and both need to walk it the same way during `import()` / `export()`. Keeping that walk in
|
|
10
|
+
* one place avoids the two implementations drifting apart (which they already had — see the
|
|
11
|
+
* old destination-property-leak bug).
|
|
12
|
+
*
|
|
13
|
+
* Stateless class-as-namespace per the project convention (no constructor dependencies, no
|
|
14
|
+
* instance state, so static methods make the call site read straight: `DataMappingSerializer.
|
|
15
|
+
* importChildren(...)`).
|
|
16
|
+
*
|
|
17
|
+
* Note on imports: this module is in a small cycle with `data-mapping.node.ts` — the
|
|
18
|
+
* serializer references Node and Leaf so it can instantiate them, and Node references the
|
|
19
|
+
* serializer so its `import()` / `export()` can delegate. The cycle resolves cleanly because
|
|
20
|
+
* the references are used only inside method bodies (not at module top level), so by the
|
|
21
|
+
* time anything runs both modules are fully evaluated.
|
|
22
|
+
*/
|
|
23
|
+
export class DataMappingSerializer {
|
|
24
|
+
/**
|
|
25
|
+
* Rebuild a populated children map from the `nodes` field of a serialized schema.
|
|
26
|
+
*
|
|
27
|
+
* Dispatches on the `_type` discriminator: ScalarArray + Leaf hydrate as `DataMappingLeaf`,
|
|
28
|
+
* Node + ObjectArray hydrate as `DataMappingNode`. The created child's own `import()` is
|
|
29
|
+
* called to fill in its fields and (for nodes) recurse into its own children.
|
|
30
|
+
*/
|
|
31
|
+
static importChildren(root, parent, schemaNodes) {
|
|
32
|
+
const result = {};
|
|
33
|
+
if (schemaNodes === undefined || schemaNodes === null) {
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
for (const key in schemaNodes) {
|
|
37
|
+
if (schemaNodes.hasOwnProperty(key) === false) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const nodeInfo = schemaNodes[key];
|
|
41
|
+
const type = nodeInfo["_type"];
|
|
42
|
+
switch (type) {
|
|
43
|
+
case DataMappingNodeTypeEnum.ScalarArray:
|
|
44
|
+
case DataMappingNodeTypeEnum.Leaf: {
|
|
45
|
+
const leaf = new DataMappingLeaf(root, parent, type);
|
|
46
|
+
leaf.import(nodeInfo);
|
|
47
|
+
result[leaf.sourceProperty] = leaf;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case DataMappingNodeTypeEnum.Node:
|
|
51
|
+
case DataMappingNodeTypeEnum.ObjectArray: {
|
|
52
|
+
const node = new DataMappingNode(root, parent, type);
|
|
53
|
+
node.import(nodeInfo);
|
|
54
|
+
result[node.sourceProperty] = node;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Serialize a children map back into a plain `nodes` object suitable for embedding in a
|
|
63
|
+
* schema export. Returns a fresh object — does not mutate the input, so callers can safely
|
|
64
|
+
* continue to use the live tree after exporting.
|
|
65
|
+
*/
|
|
66
|
+
static exportChildren(nodes) {
|
|
67
|
+
const result = {};
|
|
68
|
+
for (const key in nodes) {
|
|
69
|
+
if (nodes.hasOwnProperty(key) === false) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
result[key] = nodes[key].export();
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data-mapping.serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-mapping.serializer.js","sourceRoot":"","sources":["../../../../src/serializers/data-mapping.serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAG3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,qBAAqB;IAChC;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAC1B,IAAwB,EACxB,MAA4C,EAC5C,WAA+C;QAE/C,MAAM,MAAM,GAAoE,EAAE,CAAC;QAEnF,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACtD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,GAA4B,QAAQ,CAAC,OAAO,CAAC,CAAC;YAExD,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,uBAAuB,CAAC,WAAW,CAAC;gBACzC,KAAK,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClC,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;oBACnC,MAAM;gBACR,CAAC;gBAED,KAAK,uBAAuB,CAAC,IAAI,CAAC;gBAClC,KAAK,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;oBACzC,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;oBACnC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CAC1B,KAAsE;QAEtE,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializers.js","sourceRoot":"","sources":["../../../../src/serializers/serializers.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
|