@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.
@@ -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
- message: 'Object failed validation.',
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bedrockio/yada",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "description": "Validation library inspired by Joi.",
5
5
  "scripts": {
6
6
  "test": "jest",
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, { message: 'Object failed validation.', fields });
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
@@ -13,7 +13,6 @@ export type SchemaMap = {} | {
13
13
  * @typedef {{ [key: string]: Schema } | {}} SchemaMap
14
14
  */
15
15
  declare class ObjectSchema extends TypeSchema {
16
- constructor(fields: any);
17
16
  /**
18
17
  * @private
19
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.js"],"names":[],"mappings":"AA2IA;;;;;;GAMG;AACH,uCAJW,SAAS,gBAMnB;;;;AA9ID;;GAEG;AAEH;IACE,yBAGC;IAED;;OAEG;IACH,cA+DC;IAED;;OAEG;IACH,kBAEC;IAED;;OAEG;IAEH,YAHW,SAAS,GAAC,MAAM,gBA+B1B;CAcF"}
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"}