@based/schema 0.0.15 → 0.0.16
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/walker.d.ts +4 -2
- package/dist/walker.js +10 -10
- package/dist/walker.js.map +1 -1
- package/package.json +1 -1
- package/src/walker.ts +21 -11
- package/test/walker.ts +21 -13
package/dist/walker.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { BasedSchemaType, BasedSchemaFields } from './types';
|
|
|
4
4
|
type Path = (string | number)[];
|
|
5
5
|
type ErrorHandler<T> = (args: Args<T>, code: ParseError) => void;
|
|
6
6
|
type Parse<T> = (args: Args<T>, key?: string | number, value?: any) => Promise<Args<T> | void>;
|
|
7
|
+
type BackTrack<T> = (args: Args<T>, fromBackTrack: any[], collectedCommands: any[]) => any;
|
|
7
8
|
export type Args<T, K extends keyof BasedSchemaFields = keyof BasedSchemaFields> = {
|
|
8
9
|
schema: BasedSchema;
|
|
9
10
|
parentValue?: any;
|
|
@@ -14,9 +15,10 @@ export type Args<T, K extends keyof BasedSchemaFields = keyof BasedSchemaFields>
|
|
|
14
15
|
key?: number | string;
|
|
15
16
|
value: any;
|
|
16
17
|
target: T;
|
|
18
|
+
fromBackTrack: any[];
|
|
17
19
|
parse: Parse<T>;
|
|
18
20
|
collect: (args: Args<T>) => any;
|
|
19
|
-
backtrack:
|
|
21
|
+
backtrack: BackTrack<T>;
|
|
20
22
|
requiresAsyncValidation: (validationType: any) => Promise<any>;
|
|
21
23
|
error: ErrorHandler<T>;
|
|
22
24
|
};
|
|
@@ -35,7 +37,7 @@ export type Opts<T> = {
|
|
|
35
37
|
any: KeyParser<T>;
|
|
36
38
|
};
|
|
37
39
|
collect?: (args: Args<T>) => any;
|
|
38
|
-
backtrack?:
|
|
40
|
+
backtrack?: BackTrack<T>;
|
|
39
41
|
requiresAsyncValidation?: (validationType: any) => Promise<boolean>;
|
|
40
42
|
errorsCollector?: ErrorHandler<T>;
|
|
41
43
|
};
|
package/dist/walker.js
CHANGED
|
@@ -7,7 +7,7 @@ const walk = async (opts, value) => {
|
|
|
7
7
|
opts.collect = () => { };
|
|
8
8
|
}
|
|
9
9
|
if (!('backtrack' in opts)) {
|
|
10
|
-
opts.backtrack = (c) =>
|
|
10
|
+
opts.backtrack = (args, btC, c) => btC;
|
|
11
11
|
}
|
|
12
12
|
if (!('requiresAsyncValidation' in opts)) {
|
|
13
13
|
opts.requiresAsyncValidation = async () => true;
|
|
@@ -36,11 +36,10 @@ const walk = async (opts, value) => {
|
|
|
36
36
|
collect: (args) => {
|
|
37
37
|
collectedCommands.push(opts.collect(args));
|
|
38
38
|
},
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
},
|
|
39
|
+
fromBackTrack,
|
|
40
|
+
backtrack: opts.backtrack,
|
|
42
41
|
error: errorsCollector,
|
|
43
|
-
requiresAsyncValidation:
|
|
42
|
+
requiresAsyncValidation: prevArgs.requiresAsyncValidation,
|
|
44
43
|
};
|
|
45
44
|
if (typeof args.value === 'object' && args.value !== null) {
|
|
46
45
|
const q = [];
|
|
@@ -50,6 +49,7 @@ const walk = async (opts, value) => {
|
|
|
50
49
|
if (args.fieldSchema) {
|
|
51
50
|
//
|
|
52
51
|
}
|
|
52
|
+
// first do key parsers
|
|
53
53
|
if (Array.isArray(args.value)) {
|
|
54
54
|
for (let i = 0; i < args.value.length; i++) {
|
|
55
55
|
const parser = opts.parsers.keys[i] || opts.parsers.any;
|
|
@@ -84,11 +84,11 @@ const walk = async (opts, value) => {
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
await Promise.all(q);
|
|
87
|
-
if (fromBackTrack.length) {
|
|
88
|
-
args.backtrack(args, fromBackTrack);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
if (fromBackTrack.length || collectedCommands.length) {
|
|
88
|
+
const x = args.backtrack(args, fromBackTrack, collectedCommands);
|
|
89
|
+
if (x) {
|
|
90
|
+
prevArgs.fromBackTrack?.push(x);
|
|
91
|
+
}
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
};
|
package/dist/walker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/walker.ts
CHANGED
|
@@ -12,6 +12,12 @@ type Parse<T> = (
|
|
|
12
12
|
value?: any
|
|
13
13
|
) => Promise<Args<T> | void> // If true will not continue
|
|
14
14
|
|
|
15
|
+
type BackTrack<T> = (
|
|
16
|
+
args: Args<T>,
|
|
17
|
+
fromBackTrack: any[],
|
|
18
|
+
collectedCommands: any[]
|
|
19
|
+
) => any
|
|
20
|
+
|
|
15
21
|
export type Args<
|
|
16
22
|
T,
|
|
17
23
|
K extends keyof BasedSchemaFields = keyof BasedSchemaFields
|
|
@@ -25,9 +31,10 @@ export type Args<
|
|
|
25
31
|
key?: number | string
|
|
26
32
|
value: any
|
|
27
33
|
target: T
|
|
34
|
+
fromBackTrack: any[]
|
|
28
35
|
parse: Parse<T>
|
|
29
36
|
collect: (args: Args<T>) => any
|
|
30
|
-
backtrack:
|
|
37
|
+
backtrack: BackTrack<T>
|
|
31
38
|
requiresAsyncValidation: (validationType: any) => Promise<any>
|
|
32
39
|
error: ErrorHandler<T>
|
|
33
40
|
}
|
|
@@ -51,7 +58,7 @@ export type Opts<T> = {
|
|
|
51
58
|
any: KeyParser<T> // y.x
|
|
52
59
|
}
|
|
53
60
|
collect?: (args: Args<T>) => any
|
|
54
|
-
backtrack?:
|
|
61
|
+
backtrack?: BackTrack<T>
|
|
55
62
|
requiresAsyncValidation?: (validationType: any) => Promise<boolean>
|
|
56
63
|
errorsCollector?: ErrorHandler<T>
|
|
57
64
|
}
|
|
@@ -70,7 +77,7 @@ export const walk = async <T>(
|
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
if (!('backtrack' in opts)) {
|
|
73
|
-
opts.backtrack = (c) =>
|
|
80
|
+
opts.backtrack = (args, btC, c) => btC
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
if (!('requiresAsyncValidation' in opts)) {
|
|
@@ -102,11 +109,10 @@ export const walk = async <T>(
|
|
|
102
109
|
collect: (args) => {
|
|
103
110
|
collectedCommands.push(opts.collect(args))
|
|
104
111
|
},
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
},
|
|
112
|
+
fromBackTrack,
|
|
113
|
+
backtrack: opts.backtrack,
|
|
108
114
|
error: errorsCollector,
|
|
109
|
-
requiresAsyncValidation:
|
|
115
|
+
requiresAsyncValidation: prevArgs.requiresAsyncValidation,
|
|
110
116
|
}
|
|
111
117
|
if (typeof args.value === 'object' && args.value !== null) {
|
|
112
118
|
const q: Promise<Args<T> | void>[] = []
|
|
@@ -119,6 +125,8 @@ export const walk = async <T>(
|
|
|
119
125
|
//
|
|
120
126
|
}
|
|
121
127
|
|
|
128
|
+
// first do key parsers
|
|
129
|
+
|
|
122
130
|
if (Array.isArray(args.value)) {
|
|
123
131
|
for (let i = 0; i < args.value.length; i++) {
|
|
124
132
|
const parser = opts.parsers.keys[i] || opts.parsers.any
|
|
@@ -157,10 +165,12 @@ export const walk = async <T>(
|
|
|
157
165
|
}
|
|
158
166
|
|
|
159
167
|
await Promise.all(q)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
168
|
+
|
|
169
|
+
if (fromBackTrack.length || collectedCommands.length) {
|
|
170
|
+
const x = args.backtrack(args, fromBackTrack, collectedCommands)
|
|
171
|
+
if (x) {
|
|
172
|
+
prevArgs.fromBackTrack?.push(x)
|
|
173
|
+
}
|
|
164
174
|
}
|
|
165
175
|
}
|
|
166
176
|
}
|
package/test/walker.ts
CHANGED
|
@@ -37,18 +37,16 @@ test('walker', async (t) => {
|
|
|
37
37
|
{
|
|
38
38
|
schema,
|
|
39
39
|
init: async (args) => {
|
|
40
|
-
console.log('init!\n', args)
|
|
41
40
|
return { ...args, target: { lullz: true } }
|
|
42
41
|
},
|
|
43
42
|
parsers: {
|
|
44
43
|
keys: {
|
|
45
|
-
$list: async (args) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
44
|
+
// $list: async (args) => {
|
|
45
|
+
// return {
|
|
46
|
+
// ...args,
|
|
47
|
+
// value: { flapdrol: true },
|
|
48
|
+
// }
|
|
49
|
+
// },
|
|
52
50
|
},
|
|
53
51
|
fields: {
|
|
54
52
|
// string: () => {}
|
|
@@ -61,10 +59,21 @@ test('walker', async (t) => {
|
|
|
61
59
|
collect: (args) => {
|
|
62
60
|
return args.path.join('.')
|
|
63
61
|
},
|
|
64
|
-
backtrack: (args,
|
|
65
|
-
console.log(
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
backtrack: (args, fromBt, collected) => {
|
|
63
|
+
console.log(
|
|
64
|
+
' \n-----------BACK TRACK GOOD GO',
|
|
65
|
+
'\n',
|
|
66
|
+
'path:',
|
|
67
|
+
args.path.join('.'),
|
|
68
|
+
'\n',
|
|
69
|
+
'backtracked:',
|
|
70
|
+
JSON.stringify(fromBt),
|
|
71
|
+
'\n',
|
|
72
|
+
'collected:',
|
|
73
|
+
collected,
|
|
74
|
+
'--------------------'
|
|
75
|
+
)
|
|
76
|
+
return fromBt.length ? fromBt : collected
|
|
68
77
|
},
|
|
69
78
|
},
|
|
70
79
|
{
|
|
@@ -90,7 +99,6 @@ test('walker', async (t) => {
|
|
|
90
99
|
)
|
|
91
100
|
|
|
92
101
|
console.info('------------')
|
|
93
|
-
console.info(x)
|
|
94
102
|
|
|
95
103
|
t.true(true)
|
|
96
104
|
})
|