@bedrockio/yada 1.0.19 → 1.0.20
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/cjs/object.js +34 -5
- package/package.json +1 -1
- package/src/object.js +36 -4
- package/types/object.d.ts +0 -1
- package/types/object.d.ts.map +1 -1
package/dist/cjs/object.js
CHANGED
|
@@ -15,10 +15,11 @@ const BASE_ASSERTIONS = ['type', 'transform', 'field'];
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
class ObjectSchema extends _TypeSchema.default {
|
|
18
|
-
constructor(fields) {
|
|
18
|
+
constructor(fields, meta) {
|
|
19
19
|
super(Object, {
|
|
20
|
-
|
|
21
|
-
fields
|
|
20
|
+
...meta,
|
|
21
|
+
fields,
|
|
22
|
+
message: 'Object failed validation.'
|
|
22
23
|
});
|
|
23
24
|
this.setup();
|
|
24
25
|
}
|
|
@@ -35,10 +36,14 @@ class ObjectSchema extends _TypeSchema.default {
|
|
|
35
36
|
this.transform((obj, options) => {
|
|
36
37
|
const {
|
|
37
38
|
fields,
|
|
38
|
-
stripUnknown
|
|
39
|
+
stripUnknown,
|
|
40
|
+
expandDotSyntax
|
|
39
41
|
} = options;
|
|
40
42
|
if (obj) {
|
|
41
43
|
const result = {};
|
|
44
|
+
if (expandDotSyntax) {
|
|
45
|
+
obj = expandDotProperties(obj);
|
|
46
|
+
}
|
|
42
47
|
for (let key of Object.keys(obj)) {
|
|
43
48
|
if (!fields || key in fields) {
|
|
44
49
|
result[key] = obj[key];
|
|
@@ -120,7 +125,10 @@ class ObjectSchema extends _TypeSchema.default {
|
|
|
120
125
|
...this.meta.fields,
|
|
121
126
|
...schema.meta.fields
|
|
122
127
|
};
|
|
123
|
-
const merged = new ObjectSchema(fields
|
|
128
|
+
const merged = new ObjectSchema(fields, {
|
|
129
|
+
...this.meta,
|
|
130
|
+
...schema.meta
|
|
131
|
+
});
|
|
124
132
|
const assertions = [...this.assertions, ...schema.assertions];
|
|
125
133
|
for (let assertion of assertions) {
|
|
126
134
|
const {
|
|
@@ -145,6 +153,27 @@ class ObjectSchema extends _TypeSchema.default {
|
|
|
145
153
|
};
|
|
146
154
|
}
|
|
147
155
|
}
|
|
156
|
+
function expandDotProperties(obj) {
|
|
157
|
+
const result = {};
|
|
158
|
+
for (let [key, val] of Object.entries(obj || {})) {
|
|
159
|
+
const split = key.split('.');
|
|
160
|
+
if (split.length > 1) {
|
|
161
|
+
let node = result;
|
|
162
|
+
for (let i = 0; i < split.length; i++) {
|
|
163
|
+
const token = split[i];
|
|
164
|
+
if (i === split.length - 1) {
|
|
165
|
+
node[token] = val;
|
|
166
|
+
} else {
|
|
167
|
+
node[token] = {};
|
|
168
|
+
}
|
|
169
|
+
node = node[token];
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
result[key] = val;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
148
177
|
|
|
149
178
|
/**
|
|
150
179
|
* Creates an [object schema](https://github.com/bedrockio/yada#object).
|
package/package.json
CHANGED
package/src/object.js
CHANGED
|
@@ -9,8 +9,12 @@ const BASE_ASSERTIONS = ['type', 'transform', 'field'];
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
class ObjectSchema extends TypeSchema {
|
|
12
|
-
constructor(fields) {
|
|
13
|
-
super(Object, {
|
|
12
|
+
constructor(fields, meta) {
|
|
13
|
+
super(Object, {
|
|
14
|
+
...meta,
|
|
15
|
+
fields,
|
|
16
|
+
message: 'Object failed validation.',
|
|
17
|
+
});
|
|
14
18
|
this.setup();
|
|
15
19
|
}
|
|
16
20
|
|
|
@@ -24,9 +28,12 @@ class ObjectSchema extends TypeSchema {
|
|
|
24
28
|
}
|
|
25
29
|
});
|
|
26
30
|
this.transform((obj, options) => {
|
|
27
|
-
const { fields, stripUnknown } = options;
|
|
31
|
+
const { fields, stripUnknown, expandDotSyntax } = options;
|
|
28
32
|
if (obj) {
|
|
29
33
|
const result = {};
|
|
34
|
+
if (expandDotSyntax) {
|
|
35
|
+
obj = expandDotProperties(obj);
|
|
36
|
+
}
|
|
30
37
|
for (let key of Object.keys(obj)) {
|
|
31
38
|
if (!fields || key in fields) {
|
|
32
39
|
result[key] = obj[key];
|
|
@@ -110,7 +117,10 @@ class ObjectSchema extends TypeSchema {
|
|
|
110
117
|
...schema.meta.fields,
|
|
111
118
|
};
|
|
112
119
|
|
|
113
|
-
const merged = new ObjectSchema(fields
|
|
120
|
+
const merged = new ObjectSchema(fields, {
|
|
121
|
+
...this.meta,
|
|
122
|
+
...schema.meta,
|
|
123
|
+
});
|
|
114
124
|
|
|
115
125
|
const assertions = [...this.assertions, ...schema.assertions];
|
|
116
126
|
for (let assertion of assertions) {
|
|
@@ -137,6 +147,28 @@ class ObjectSchema extends TypeSchema {
|
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
149
|
|
|
150
|
+
function expandDotProperties(obj) {
|
|
151
|
+
const result = {};
|
|
152
|
+
for (let [key, val] of Object.entries(obj || {})) {
|
|
153
|
+
const split = key.split('.');
|
|
154
|
+
if (split.length > 1) {
|
|
155
|
+
let node = result;
|
|
156
|
+
for (let i = 0; i < split.length; i++) {
|
|
157
|
+
const token = split[i];
|
|
158
|
+
if (i === split.length - 1) {
|
|
159
|
+
node[token] = val;
|
|
160
|
+
} else {
|
|
161
|
+
node[token] = {};
|
|
162
|
+
}
|
|
163
|
+
node = node[token];
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
result[key] = val;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
|
|
140
172
|
/**
|
|
141
173
|
* Creates an [object schema](https://github.com/bedrockio/yada#object).
|
|
142
174
|
*
|
package/types/object.d.ts
CHANGED
package/types/object.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.js"],"names":[],"mappings":"AA2KA;;;;;;GAMG;AACH,uCAJW,SAAS,gBAMnB;;;;AA9KD;;GAEG;AAEH;IAUE;;OAEG;IACH,cAkEC;IAED;;OAEG;IACH,kBAEC;IAED;;OAEG;IAEH,YAHW,SAAS,GAAC,MAAM,gBAkC1B;CAcF"}
|