@cloudflare/cabidela 0.2.1 → 0.2.3
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/CHANGELOG.md +10 -0
- package/README.md +6 -1
- package/dist/index.js +36 -32
- package/dist/index.mjs +36 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
@@ -72,7 +72,7 @@ Cabidela takes a JSON-Schema and optional configuration flags:
|
|
72
72
|
- `errorMessages`: boolean - If true, the validator will use custom `errorMessage` messages from the schema. Default is false.
|
73
73
|
- `fullErrors`: boolean - If true, the validator will be more verbose when throwing errors for complex schemas (example: anyOf, oneOf's), set to false for shorter exceptions. Default is true.
|
74
74
|
- `useMerge`: boolean - Set to true if you want to use the `$merge` keyword. Default is false. See below for more information.
|
75
|
-
- `
|
75
|
+
- `subSchemas`: any[] - An optional array of sub-schemas that can be used with `$id` and `$ref`. See below for more information.
|
76
76
|
|
77
77
|
Returns a validation object.
|
78
78
|
|
@@ -280,6 +280,9 @@ Resolves to:
|
|
280
280
|
{
|
281
281
|
"type": "object",
|
282
282
|
"properties": {
|
283
|
+
"p": {
|
284
|
+
"type": "string" }
|
285
|
+
},
|
283
286
|
"q": {
|
284
287
|
"type": "number"
|
285
288
|
}
|
@@ -294,6 +297,8 @@ To use `$merge` set the `useMerge` flag to true when creating the instance.
|
|
294
297
|
new Cabidela(schema, { useMerge: true });
|
295
298
|
```
|
296
299
|
|
300
|
+
You can combine `$merge` with `$id` and `$ref` keywords, which get resolved first, for even more flexibility.
|
301
|
+
|
297
302
|
## Custom errors
|
298
303
|
|
299
304
|
If the new instance options has the `errorMessages` flag set to true, you can use the property `errorMessage` in the schema to define custom error messages.
|
package/dist/index.js
CHANGED
@@ -27,49 +27,53 @@ module.exports = __toCommonJS(index_exports);
|
|
27
27
|
// src/helpers.ts
|
28
28
|
var parse$ref = (ref) => {
|
29
29
|
const parts = ref.split("#");
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
return {
|
31
|
+
$id: parts[0],
|
32
|
+
$path: parts[1].split("/").filter((part) => part != "")
|
33
|
+
};
|
33
34
|
};
|
34
35
|
function deepMerge(target, source) {
|
35
|
-
const result = Array
|
36
|
+
const result = Array(target) && Array.isArray(source) ? target.concat(source) : { ...target, ...source };
|
36
37
|
for (const key of Object.keys(result)) {
|
37
38
|
result[key] = typeof target[key] == "object" && typeof source[key] == "object" ? deepMerge(target[key], source[key]) : structuredClone(result[key]);
|
38
39
|
}
|
39
40
|
return result;
|
40
41
|
}
|
41
|
-
var traverseSchema = (options, definitions, obj
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
cb
|
55
|
-
|
56
|
-
|
57
|
-
|
42
|
+
var traverseSchema = (options, definitions, obj) => {
|
43
|
+
const ts = (obj2, cb) => {
|
44
|
+
let hits;
|
45
|
+
do {
|
46
|
+
hits = 0;
|
47
|
+
for (const key of Object.keys(obj2)) {
|
48
|
+
if (typeof obj2[key] == "object") {
|
49
|
+
ts(obj2[key], (value) => {
|
50
|
+
obj2[key] = value;
|
51
|
+
hits++;
|
52
|
+
});
|
53
|
+
if (options.useMerge && key == "$merge") {
|
54
|
+
const merge = deepMerge(obj2[key].source, obj2[key].with);
|
55
|
+
if (cb) {
|
56
|
+
cb(merge);
|
57
|
+
} else {
|
58
|
+
Object.assign(obj2, merge);
|
59
|
+
delete obj2[key];
|
60
|
+
}
|
58
61
|
}
|
59
|
-
}
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
62
|
+
} else {
|
63
|
+
if (key == "$ref") {
|
64
|
+
const { $id, $path } = parse$ref(obj2[key]);
|
65
|
+
const { resolvedObject } = resolvePayload($path, definitions[$id]);
|
66
|
+
if (resolvedObject) {
|
67
|
+
cb(resolvedObject);
|
68
|
+
} else {
|
69
|
+
throw new Error(`Could not resolve '${obj2[key]}' $ref`);
|
70
|
+
}
|
68
71
|
}
|
69
72
|
}
|
70
73
|
}
|
71
|
-
});
|
72
|
-
}
|
74
|
+
} while (hits > 0);
|
75
|
+
};
|
76
|
+
ts(obj);
|
73
77
|
};
|
74
78
|
var resolvePayload = (path, obj) => {
|
75
79
|
let resolvedObject = path.reduce(function(prev, curr) {
|
package/dist/index.mjs
CHANGED
@@ -1,49 +1,53 @@
|
|
1
1
|
// src/helpers.ts
|
2
2
|
var parse$ref = (ref) => {
|
3
3
|
const parts = ref.split("#");
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
return {
|
5
|
+
$id: parts[0],
|
6
|
+
$path: parts[1].split("/").filter((part) => part != "")
|
7
|
+
};
|
7
8
|
};
|
8
9
|
function deepMerge(target, source) {
|
9
|
-
const result = Array
|
10
|
+
const result = Array(target) && Array.isArray(source) ? target.concat(source) : { ...target, ...source };
|
10
11
|
for (const key of Object.keys(result)) {
|
11
12
|
result[key] = typeof target[key] == "object" && typeof source[key] == "object" ? deepMerge(target[key], source[key]) : structuredClone(result[key]);
|
12
13
|
}
|
13
14
|
return result;
|
14
15
|
}
|
15
|
-
var traverseSchema = (options, definitions, obj
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
cb
|
29
|
-
|
30
|
-
|
31
|
-
|
16
|
+
var traverseSchema = (options, definitions, obj) => {
|
17
|
+
const ts = (obj2, cb) => {
|
18
|
+
let hits;
|
19
|
+
do {
|
20
|
+
hits = 0;
|
21
|
+
for (const key of Object.keys(obj2)) {
|
22
|
+
if (typeof obj2[key] == "object") {
|
23
|
+
ts(obj2[key], (value) => {
|
24
|
+
obj2[key] = value;
|
25
|
+
hits++;
|
26
|
+
});
|
27
|
+
if (options.useMerge && key == "$merge") {
|
28
|
+
const merge = deepMerge(obj2[key].source, obj2[key].with);
|
29
|
+
if (cb) {
|
30
|
+
cb(merge);
|
31
|
+
} else {
|
32
|
+
Object.assign(obj2, merge);
|
33
|
+
delete obj2[key];
|
34
|
+
}
|
32
35
|
}
|
33
|
-
}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
} else {
|
37
|
+
if (key == "$ref") {
|
38
|
+
const { $id, $path } = parse$ref(obj2[key]);
|
39
|
+
const { resolvedObject } = resolvePayload($path, definitions[$id]);
|
40
|
+
if (resolvedObject) {
|
41
|
+
cb(resolvedObject);
|
42
|
+
} else {
|
43
|
+
throw new Error(`Could not resolve '${obj2[key]}' $ref`);
|
44
|
+
}
|
42
45
|
}
|
43
46
|
}
|
44
47
|
}
|
45
|
-
});
|
46
|
-
}
|
48
|
+
} while (hits > 0);
|
49
|
+
};
|
50
|
+
ts(obj);
|
47
51
|
};
|
48
52
|
var resolvePayload = (path, obj) => {
|
49
53
|
let resolvedObject = path.reduce(function(prev, curr) {
|
package/package.json
CHANGED