@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 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: (args: Args<T>, collectedCommands: any[]) => any;
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?: (args: Args<T>, collectedCommands: any[]) => any;
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) => 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
- backtrack: (args, commands) => {
40
- fromBackTrack.push(opts.backtrack(args, commands));
41
- },
39
+ fromBackTrack,
40
+ backtrack: opts.backtrack,
42
41
  error: errorsCollector,
43
- requiresAsyncValidation: opts.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
- else if (collectedCommands.length) {
91
- args.backtrack(args, collectedCommands);
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@based/schema",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
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: (args: Args<T>, collectedCommands: any[]) => any
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?: (args: Args<T>, collectedCommands: any[]) => any // from back TRACKS OR COLLECT
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) => 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
- backtrack: (args, commands) => {
106
- fromBackTrack.push(opts.backtrack(args, commands))
107
- },
112
+ fromBackTrack,
113
+ backtrack: opts.backtrack,
108
114
  error: errorsCollector,
109
- requiresAsyncValidation: opts.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
- if (fromBackTrack.length) {
161
- args.backtrack(args, fromBackTrack)
162
- } else if (collectedCommands.length) {
163
- args.backtrack(args, collectedCommands)
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
- return {
47
- ...args,
48
-
49
- value: { flapdrol: true },
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, collectedCommands) => {
65
- console.log(' \n-----------BACK TRACK GOOD GO', collectedCommands)
66
- // if return next btrack will not receive backtrack from commands
67
- return collectedCommands
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
  })