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