@based/schema 0.0.12 → 0.0.14

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
@@ -11,11 +11,12 @@ export type Args<T, K extends keyof BasedSchemaFields = keyof BasedSchemaFields>
11
11
  fieldSchema?: BasedSchemaFields[K];
12
12
  typeSchema?: BasedSchemaType;
13
13
  path: Path;
14
+ key?: number | string;
14
15
  value: any;
15
16
  target: T;
16
17
  parse: Parse<T>;
17
18
  collect: (args: Args<T>) => any;
18
- backtrack: (collectedCommands: any[]) => any;
19
+ backtrack: (args: Args<T>, collectedCommands: any[]) => any;
19
20
  requiresAsyncValidation: (validationType: any) => Promise<any>;
20
21
  error: ErrorHandler<T>;
21
22
  };
@@ -36,9 +37,10 @@ export type Opts<T> = {
36
37
  };
37
38
  any: KeyParser<T>;
38
39
  };
39
- collect: (args: Args<T>) => any;
40
- backtrack: (collectedCommands: any[]) => any;
41
- requiresAsyncValidation: (validationType: any) => Promise<boolean>;
40
+ collect?: (args: Args<T>) => any;
41
+ backtrack?: (args: Args<T>, collectedCommands: any[]) => any;
42
+ requiresAsyncValidation?: (validationType: any) => Promise<boolean>;
43
+ errorsCollector?: ErrorHandler<T>;
42
44
  };
43
45
  export declare const walk: <T>(opts: Opts<T>, value: any) => Promise<{
44
46
  target: T;
package/dist/walker.js CHANGED
@@ -3,6 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.walk = void 0;
4
4
  const walk = async (opts, value) => {
5
5
  const errors = [];
6
+ if (!('collect' in opts)) {
7
+ opts.collect = () => { };
8
+ }
9
+ if (!('backtrack' in opts)) {
10
+ opts.backtrack = (c) => c;
11
+ }
12
+ if (!('requiresAsyncValidation' in opts)) {
13
+ opts.requiresAsyncValidation = async () => true;
14
+ }
6
15
  const target = await opts.init(value, opts, errors);
7
16
  const errorsCollector = (args, code) => {
8
17
  errors.push({
@@ -10,21 +19,25 @@ const walk = async (opts, value) => {
10
19
  message: `Error in ${args.path.join('.')}`,
11
20
  });
12
21
  };
22
+ if (!('errorsCollector' in opts)) {
23
+ opts.errorsCollector = errorsCollector;
24
+ }
13
25
  const parse = async (prevArgs, key, value) => {
14
26
  const collectedCommands = [];
15
27
  const fromBackTrack = [];
16
28
  const args = {
17
29
  schema: opts.schema,
18
30
  path: key ? [...prevArgs.path, key] : prevArgs.path,
31
+ key: key ?? prevArgs.path[prevArgs.path.length - 1],
19
32
  parentValue: value ? prevArgs.value : undefined,
20
33
  value: value ?? prevArgs.value,
21
34
  target,
22
- parse: prevArgs.parse,
35
+ parse,
23
36
  collect: (args) => {
24
37
  collectedCommands.push(opts.collect(args));
25
38
  },
26
- backtrack: (args) => {
27
- fromBackTrack.push(opts.backtrack(args));
39
+ backtrack: (args, commands) => {
40
+ fromBackTrack.push(opts.backtrack(args, commands));
28
41
  },
29
42
  error: errorsCollector,
30
43
  requiresAsyncValidation: opts.requiresAsyncValidation,
@@ -33,9 +46,19 @@ const walk = async (opts, value) => {
33
46
  const q = [];
34
47
  if (Array.isArray(args.value)) {
35
48
  for (let i = 0; i < args.value.length; i++) {
36
- //
37
49
  const parser = opts.parsers.keys[i] || opts.parsers.any;
38
- q.push(parser({ ...args, value: args.value[i], path: [...args.path, i] }));
50
+ const j = i;
51
+ q.push((async () => {
52
+ const newArgs = await parser({
53
+ ...args,
54
+ value: args.value[j],
55
+ path: [...args.path, j],
56
+ key: j,
57
+ });
58
+ if (newArgs) {
59
+ return parse(newArgs);
60
+ }
61
+ })());
39
62
  }
40
63
  }
41
64
  else {
@@ -46,6 +69,7 @@ const walk = async (opts, value) => {
46
69
  ...args,
47
70
  value: args.value[key],
48
71
  path: [...args.path, key],
72
+ key,
49
73
  });
50
74
  if (newArgs) {
51
75
  return parse(newArgs);
@@ -55,10 +79,10 @@ const walk = async (opts, value) => {
55
79
  }
56
80
  await Promise.all(q);
57
81
  if (fromBackTrack.length) {
58
- opts.backtrack(fromBackTrack);
82
+ args.backtrack(args, fromBackTrack);
59
83
  }
60
84
  else if (collectedCommands.length) {
61
- opts.backtrack(collectedCommands);
85
+ args.backtrack(args, collectedCommands);
62
86
  }
63
87
  }
64
88
  };
@@ -73,7 +97,7 @@ const walk = async (opts, value) => {
73
97
  error: errorsCollector,
74
98
  requiresAsyncValidation: opts.requiresAsyncValidation,
75
99
  };
76
- parse(args);
100
+ await parse(args);
77
101
  return {
78
102
  target,
79
103
  errors,
@@ -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.12",
3
+ "version": "0.0.14",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/walker.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ParseError } from './set/error'
2
2
  import { BasedSchema, BasedSetHandlers, BasedSetTarget } from './types'
3
3
  import { BasedSchemaType, BasedSchemaFields } from './types'
4
+ import { SetOptional } from 'type-fest'
4
5
 
5
6
  type Path = (string | number)[]
6
7
 
@@ -22,11 +23,12 @@ export type Args<
22
23
  fieldSchema?: BasedSchemaFields[K]
23
24
  typeSchema?: BasedSchemaType
24
25
  path: Path
26
+ key?: number | string
25
27
  value: any
26
28
  target: T
27
29
  parse: Parse<T>
28
30
  collect: (args: Args<T>) => any
29
- backtrack: (collectedCommands: any[]) => any
31
+ backtrack: (args: Args<T>, collectedCommands: any[]) => any
30
32
  requiresAsyncValidation: (validationType: any) => Promise<any>
31
33
  error: ErrorHandler<T>
32
34
  }
@@ -53,9 +55,10 @@ export type Opts<T> = {
53
55
  keys: { [key: string]: KeyParser<T> } // $list -> true
54
56
  any: KeyParser<T> // y.x
55
57
  }
56
- collect: (args: Args<T>) => any
57
- backtrack: (collectedCommands: any[]) => any // from back TRACKS OR COLLECT
58
- requiresAsyncValidation: (validationType: any) => Promise<boolean>
58
+ collect?: (args: Args<T>) => any
59
+ backtrack?: (args: Args<T>, collectedCommands: any[]) => any // from back TRACKS OR COLLECT
60
+ requiresAsyncValidation?: (validationType: any) => Promise<boolean>
61
+ errorsCollector?: ErrorHandler<T>
59
62
  }
60
63
 
61
64
  export const walk = async <T>(
@@ -66,6 +69,19 @@ export const walk = async <T>(
66
69
  errors: { code: ParseError; message: string }[]
67
70
  }> => {
68
71
  const errors: { code: ParseError; message: string }[] = []
72
+
73
+ if (!('collect' in opts)) {
74
+ opts.collect = () => {}
75
+ }
76
+
77
+ if (!('backtrack' in opts)) {
78
+ opts.backtrack = (c) => c
79
+ }
80
+
81
+ if (!('requiresAsyncValidation' in opts)) {
82
+ opts.requiresAsyncValidation = async () => true
83
+ }
84
+
69
85
  const target = await opts.init(value, opts, errors)
70
86
 
71
87
  const errorsCollector: ErrorHandler<T> = (args, code) => {
@@ -75,21 +91,26 @@ export const walk = async <T>(
75
91
  })
76
92
  }
77
93
 
94
+ if (!('errorsCollector' in opts)) {
95
+ opts.errorsCollector = errorsCollector
96
+ }
97
+
78
98
  const parse: Parse<T> = async (prevArgs, key, value) => {
79
99
  const collectedCommands: any[] = []
80
100
  const fromBackTrack: any[] = []
81
101
  const args: Args<T> = {
82
102
  schema: opts.schema,
83
103
  path: key ? [...prevArgs.path, key] : prevArgs.path,
104
+ key: key ?? prevArgs.path[prevArgs.path.length - 1],
84
105
  parentValue: value ? prevArgs.value : undefined,
85
106
  value: value ?? prevArgs.value,
86
107
  target,
87
- parse: prevArgs.parse,
108
+ parse,
88
109
  collect: (args) => {
89
110
  collectedCommands.push(opts.collect(args))
90
111
  },
91
- backtrack: (args) => {
92
- fromBackTrack.push(opts.backtrack(args))
112
+ backtrack: (args, commands) => {
113
+ fromBackTrack.push(opts.backtrack(args, commands))
93
114
  },
94
115
  error: errorsCollector,
95
116
  requiresAsyncValidation: opts.requiresAsyncValidation,
@@ -98,10 +119,20 @@ export const walk = async <T>(
98
119
  const q: Promise<Args<T> | void>[] = []
99
120
  if (Array.isArray(args.value)) {
100
121
  for (let i = 0; i < args.value.length; i++) {
101
- //
102
122
  const parser = opts.parsers.keys[i] || opts.parsers.any
123
+ const j = i
103
124
  q.push(
104
- parser({ ...args, value: args.value[i], path: [...args.path, i] })
125
+ (async () => {
126
+ const newArgs = await parser({
127
+ ...args,
128
+ value: args.value[j],
129
+ path: [...args.path, j],
130
+ key: j,
131
+ })
132
+ if (newArgs) {
133
+ return parse(newArgs)
134
+ }
135
+ })()
105
136
  )
106
137
  }
107
138
  } else {
@@ -113,8 +144,8 @@ export const walk = async <T>(
113
144
  ...args,
114
145
  value: args.value[key],
115
146
  path: [...args.path, key],
147
+ key,
116
148
  })
117
-
118
149
  if (newArgs) {
119
150
  return parse(newArgs)
120
151
  }
@@ -122,11 +153,13 @@ export const walk = async <T>(
122
153
  )
123
154
  }
124
155
  }
156
+
125
157
  await Promise.all(q)
158
+
126
159
  if (fromBackTrack.length) {
127
- opts.backtrack(fromBackTrack)
160
+ args.backtrack(args, fromBackTrack)
128
161
  } else if (collectedCommands.length) {
129
- opts.backtrack(collectedCommands)
162
+ args.backtrack(args, collectedCommands)
130
163
  }
131
164
  }
132
165
  }
@@ -143,7 +176,7 @@ export const walk = async <T>(
143
176
  requiresAsyncValidation: opts.requiresAsyncValidation,
144
177
  }
145
178
 
146
- parse(args)
179
+ await parse(args)
147
180
 
148
181
  return {
149
182
  target,
package/test/walker.ts CHANGED
@@ -45,6 +45,7 @@ test('walker', async (t) => {
45
45
  $list: async (args) => {
46
46
  return {
47
47
  ...args,
48
+
48
49
  value: { flapdrol: true },
49
50
  }
50
51
  },
@@ -53,22 +54,18 @@ test('walker', async (t) => {
53
54
  // string: () => {}
54
55
  },
55
56
  any: async (args) => {
57
+ args.collect(args)
56
58
  return args
57
59
  },
58
60
  },
59
61
  collect: (args) => {
60
- // console.log(' lulz collect dat command', args.path)
61
62
  return args.path.join('.')
62
63
  },
63
- backtrack: (collectedCommands) => {
64
+ backtrack: (args, collectedCommands) => {
64
65
  console.log(' \n-----------BACK TRACK GOOD GO', collectedCommands)
65
66
  // if return next btrack will not receive backtrack from commands
66
67
  return collectedCommands
67
68
  },
68
- requiresAsyncValidation: async (validateType) => {
69
- // console.info('lullz async validaion at the end!')
70
- return true
71
- },
72
69
  },
73
70
  {
74
71
  gurk: [1, 2, 3, 4],
@@ -93,7 +90,7 @@ test('walker', async (t) => {
93
90
  )
94
91
 
95
92
  console.info('------------')
96
- // console.info(x)
93
+ console.info(x)
97
94
 
98
95
  t.true(true)
99
96
  })