mapper-factory 3.0.0 → 3.1.0
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/README.md +0 -176
- package/dist/class.decorator.d.ts +11 -11
- package/dist/class.decorator.js +16 -17
- package/dist/field.decorator.d.ts +22 -22
- package/dist/field.decorator.js +54 -54
- package/dist/functions.d.ts +49 -49
- package/dist/functions.js +211 -208
- package/dist/index.d.ts +10 -11
- package/dist/index.js +13 -17
- package/dist/test.d.ts +1 -1
- package/dist/test.js +218 -200
- package/dist/types.d.ts +6 -6
- package/dist/types.js +2 -2
- package/package.json +3 -3
package/dist/functions.js
CHANGED
|
@@ -1,208 +1,211 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
*
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toMap = toMap;
|
|
4
|
+
exports.objToModel = objToModel;
|
|
5
|
+
exports.empty = empty;
|
|
6
|
+
exports.filled = filled;
|
|
7
|
+
exports.get = get;
|
|
8
|
+
exports.set = set;
|
|
9
|
+
exports.copy = copy;
|
|
10
|
+
exports.from = from;
|
|
11
|
+
const field_decorator_1 = require("./field.decorator");
|
|
12
|
+
/**
|
|
13
|
+
* Convert the instance of this class to JSON Object.
|
|
14
|
+
*
|
|
15
|
+
* @returns JSON object mapped considering metadata "src" and "reverser"
|
|
16
|
+
*/
|
|
17
|
+
function toMap() {
|
|
18
|
+
const metadataList = (0, field_decorator_1.getMapFieldMetadataList)(this);
|
|
19
|
+
let obj = {};
|
|
20
|
+
const processProperty = (objCopy, propsStereoid, value, reverser) => {
|
|
21
|
+
let lastIndex;
|
|
22
|
+
for (let i = 0; i < propsStereoid.length; i++) {
|
|
23
|
+
const prop = propsStereoid[i];
|
|
24
|
+
if (prop.isArray) {
|
|
25
|
+
let arrIndex = prop.arrIndex.split(/\[(\w+)\]/g).filter(index => index !== '');
|
|
26
|
+
objCopy[prop.prop] = objCopy[prop.prop] || [];
|
|
27
|
+
objCopy = objCopy[prop.prop];
|
|
28
|
+
arrIndex.forEach((index, i) => {
|
|
29
|
+
objCopy[index] = objCopy[index] || (i == arrIndex.length - 1 ? {} : []);
|
|
30
|
+
if (i != arrIndex.length - 1)
|
|
31
|
+
objCopy = objCopy[index];
|
|
32
|
+
else
|
|
33
|
+
lastIndex = index;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
objCopy[prop.prop] = objCopy[prop.prop] || {};
|
|
38
|
+
if (i != propsStereoid.length - 1)
|
|
39
|
+
objCopy = objCopy[prop.prop];
|
|
40
|
+
else
|
|
41
|
+
lastIndex = prop.prop;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
objCopy[lastIndex] = reverser ? reverser(value, this) : value;
|
|
45
|
+
};
|
|
46
|
+
this && Object.keys(this).forEach(propertyName => {
|
|
47
|
+
const metadata = metadataList && metadataList[propertyName];
|
|
48
|
+
const src = metadata?.src || propertyName;
|
|
49
|
+
if (metadata) {
|
|
50
|
+
if (src.includes('.')) {
|
|
51
|
+
let props = src.split('.');
|
|
52
|
+
let propsStereoid = props.map(prop => ({
|
|
53
|
+
prop: prop.includes('[') ? prop.substring(0, prop.indexOf('[')) : prop,
|
|
54
|
+
isArray: prop.includes('[') && prop.includes(']'),
|
|
55
|
+
arrIndex: prop.substring(prop.indexOf('[')),
|
|
56
|
+
}));
|
|
57
|
+
processProperty(obj, propsStereoid, this[propertyName], metadata.reverser);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
obj[src] = Array.isArray(this[propertyName]) && !metadata.reverser
|
|
61
|
+
? this[propertyName].map(item => item?.toMap ? item.toMap() : item)
|
|
62
|
+
: metadata.reverser
|
|
63
|
+
? metadata.reverser(this[propertyName], this)
|
|
64
|
+
: this[propertyName]?.toMap
|
|
65
|
+
? this[propertyName].toMap()
|
|
66
|
+
: this[propertyName];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (this[propertyName] != undefined)
|
|
71
|
+
obj[propertyName] = this[propertyName];
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return obj;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Convert a JSON Object to an instance of this class.
|
|
78
|
+
*
|
|
79
|
+
* @param obj JSON Object
|
|
80
|
+
* @returns Instance of this class
|
|
81
|
+
*/
|
|
82
|
+
function objToModel(obj) {
|
|
83
|
+
if (!obj)
|
|
84
|
+
return this;
|
|
85
|
+
Object.keys(obj).forEach(propertyName => {
|
|
86
|
+
const value = obj[propertyName];
|
|
87
|
+
this[propertyName] = Array.isArray(value)
|
|
88
|
+
? value.map(item => item)
|
|
89
|
+
: value;
|
|
90
|
+
});
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if this instance is empty.
|
|
95
|
+
*
|
|
96
|
+
* @returns true or false
|
|
97
|
+
*/
|
|
98
|
+
function empty() {
|
|
99
|
+
return !Object.keys(this).some(propertyName => this[propertyName] !== undefined && this[propertyName] !== null);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if this instance is filled.
|
|
103
|
+
*
|
|
104
|
+
* @returns true or false
|
|
105
|
+
*/
|
|
106
|
+
function filled() {
|
|
107
|
+
return Object.keys(this).length > 0 && Object.keys(this).every(propertyName => this[propertyName] !== undefined && this[propertyName] !== null);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* GET property value from a string path.
|
|
111
|
+
*
|
|
112
|
+
* @param path String path
|
|
113
|
+
* @returns Value of the property
|
|
114
|
+
*/
|
|
115
|
+
function get(path) {
|
|
116
|
+
const props = path.replace(/\[(\w+)\]/g, '.$1').split('.');
|
|
117
|
+
return props.reduce((acc, prop) => acc && acc[prop], this);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* SET property value from a string path.
|
|
121
|
+
*
|
|
122
|
+
* @param path String path
|
|
123
|
+
* @param value Value of the property
|
|
124
|
+
*/
|
|
125
|
+
function set(path, value) {
|
|
126
|
+
const props = path.replace(/\[(\w+)\]/g, '.$1').split('.');
|
|
127
|
+
let obj = this;
|
|
128
|
+
props.slice(0, -1).forEach(prop => {
|
|
129
|
+
if (!obj[prop])
|
|
130
|
+
obj[prop] = {};
|
|
131
|
+
obj = obj[prop];
|
|
132
|
+
});
|
|
133
|
+
obj[props[props.length - 1]] = value;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Deep copy of the object caller
|
|
137
|
+
*/
|
|
138
|
+
function copy() {
|
|
139
|
+
return this.from(this.toMap());
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Constructor of the mapper.
|
|
143
|
+
*
|
|
144
|
+
* @param object object to be mapped considering metadata "src", "transformer" and "reverser"
|
|
145
|
+
*/
|
|
146
|
+
function from(object) {
|
|
147
|
+
const metadataList = (0, field_decorator_1.getMapFieldMetadataList)(this);
|
|
148
|
+
const processProperty = (objCopy, propsStereoid) => {
|
|
149
|
+
for (let i = 0; i < propsStereoid.length; i++) {
|
|
150
|
+
const prop = propsStereoid[i];
|
|
151
|
+
if (prop.isArray) {
|
|
152
|
+
let arrIndex = prop.arrIndex.split(/\[(\w+)\]/g).filter(index => index !== '');
|
|
153
|
+
objCopy = objCopy[prop.prop];
|
|
154
|
+
arrIndex.forEach(index => {
|
|
155
|
+
objCopy = objCopy[index];
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
objCopy = objCopy[prop.prop];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return objCopy;
|
|
163
|
+
};
|
|
164
|
+
const setProperty = (metaKey, value, object) => {
|
|
165
|
+
const metaProp = metadataList?.[metaKey];
|
|
166
|
+
if (metaProp?.transformer) {
|
|
167
|
+
const valueTransformed = metaProp.transformer(value, object);
|
|
168
|
+
if (valueTransformed != undefined)
|
|
169
|
+
this[metaKey] = valueTransformed;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
if (value != undefined)
|
|
173
|
+
this[metaKey] = value;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
object && Object.keys(object).forEach(propertyName => {
|
|
177
|
+
let metaKeys = metadataList && Object.keys(metadataList).filter(metadata => metadataList[metadata]?.src?.split('.')?.includes(propertyName));
|
|
178
|
+
if (metaKeys?.length) {
|
|
179
|
+
metaKeys.forEach(metaKey => {
|
|
180
|
+
const metaProp = metadataList?.[metaKey];
|
|
181
|
+
if (metaProp) {
|
|
182
|
+
const props = metaProp.src.split('.');
|
|
183
|
+
const propsStereoid = props.map(prop => ({
|
|
184
|
+
prop: prop.includes('[') ? prop.substring(0, prop.indexOf('[')) : prop,
|
|
185
|
+
isArray: prop.includes('[') && prop.includes(']'),
|
|
186
|
+
arrIndex: prop.substring(prop.indexOf('[')),
|
|
187
|
+
}));
|
|
188
|
+
const value = processProperty({ ...object }, propsStereoid);
|
|
189
|
+
setProperty(metaKey, value, object);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
let metaKey = metadataList && Object.keys(metadataList).find(metadata => metadataList[metadata]?.src == propertyName);
|
|
195
|
+
if (metaKey) {
|
|
196
|
+
const src = metadataList?.[metaKey].src || propertyName;
|
|
197
|
+
setProperty(metaKey, object[src], object);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
setProperty(propertyName, object[propertyName], object);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
// Initialize properties with "initialize" metadata
|
|
205
|
+
metadataList && Object.keys(metadataList).forEach(metaName => {
|
|
206
|
+
if (metadataList[metaName]?.initialize && metadataList[metaName]?.transformer && this[metaName] === undefined) {
|
|
207
|
+
this[metaName] = metadataList[metaName].transformer(null, object);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
return this;
|
|
211
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { MapClass, MapInterface } from "./class.decorator";
|
|
2
|
-
import { MapField } from "./field.decorator";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* npx
|
|
8
|
-
*
|
|
9
|
-
* npm
|
|
10
|
-
|
|
11
|
-
*/
|
|
1
|
+
import { MapClass, MapInterface } from "./class.decorator";
|
|
2
|
+
import { MapField } from "./field.decorator";
|
|
3
|
+
import { ClassType } from "./types";
|
|
4
|
+
export { ClassType, MapClass, MapField, MapInterface };
|
|
5
|
+
/**
|
|
6
|
+
* npx tsc
|
|
7
|
+
* npx ts-node src/example.ts
|
|
8
|
+
* npm version ( patch | minor | major )
|
|
9
|
+
* npm publish
|
|
10
|
+
*/
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const class_decorator_1 = require("./class.decorator");
|
|
5
|
-
Object.defineProperty(exports, "MapClass", { enumerable: true, get: function () { return class_decorator_1.MapClass; } });
|
|
6
|
-
const field_decorator_1 = require("./field.decorator");
|
|
7
|
-
Object.defineProperty(exports, "MapField", { enumerable: true, get: function () { return field_decorator_1.MapField; } });
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* npx ts-node src/example.ts
|
|
15
|
-
* npm version patch
|
|
16
|
-
* npm publish
|
|
17
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MapField = exports.MapClass = void 0;
|
|
4
|
+
const class_decorator_1 = require("./class.decorator");
|
|
5
|
+
Object.defineProperty(exports, "MapClass", { enumerable: true, get: function () { return class_decorator_1.MapClass; } });
|
|
6
|
+
const field_decorator_1 = require("./field.decorator");
|
|
7
|
+
Object.defineProperty(exports, "MapField", { enumerable: true, get: function () { return field_decorator_1.MapField; } });
|
|
8
|
+
/**
|
|
9
|
+
* npx tsc
|
|
10
|
+
* npx ts-node src/example.ts
|
|
11
|
+
* npm version ( patch | minor | major )
|
|
12
|
+
* npm publish
|
|
13
|
+
*/
|
package/dist/test.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|