@based/schema 0.0.13 → 0.0.15

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.
@@ -1 +1,71 @@
1
+ // import { ParseError } from '../set/error'
2
+ // import { BasedSchema, BasedSetTarget } from '../types'
3
+ // import { walk } from '../walker'
4
+ // export const setWalker2 = (schema: BasedSchema, value: any) => {
5
+ // return walk<BasedSetTarget>(
6
+ // {
7
+ // schema,
8
+ // parsers: {
9
+ // keys: {},
10
+ // fields: {
11
+ // object: async (args) => {
12
+ // if (typeof value !== 'object') {
13
+ // args.error(args, ParseError.incorrectFormat)
14
+ // return
15
+ // }
16
+ // const isArray = Array.isArray(value)
17
+ // if (isArray) {
18
+ // args.error(args, ParseError.incorrectFormat)
19
+ // return
20
+ // }
21
+ // const q: Promise<any>[] = []
22
+ // for (const key in value) {
23
+ // q.push(args.parse(args, key, value[key]))
24
+ // }
25
+ // await Promise.all(q)
26
+ // },
27
+ // boolean: async (args) => {
28
+ // if (typeof value !== 'boolean') {
29
+ // args.error(args, ParseError.incorrectFormat)
30
+ // return
31
+ // }
32
+ // args.collect(args)
33
+ // },
34
+ // },
35
+ // any: async (args) => {
36
+ // args.error(args, ParseError.fieldDoesNotExist)
37
+ // },
38
+ // },
39
+ // init: async (value, args) => {
40
+ // let type: string
41
+ // if (value.$id) {
42
+ // type = schema.prefixToTypeMapping[value.$id.slice(0, 2)]
43
+ // if (!type) {
44
+ // args.error(args, ParseError.incorrectFieldType)
45
+ // return
46
+ // }
47
+ // }
48
+ // if (value.type) {
49
+ // if (type && value.type !== type) {
50
+ // args.error(args, ParseError.incorrectNodeType)
51
+ // return
52
+ // }
53
+ // type = value.type
54
+ // }
55
+ // const schemaType = schema.types[type]
56
+ // if (!schemaType) {
57
+ // args.error(args, ParseError.incorrectNodeType)
58
+ // return
59
+ // }
60
+ // const target: BasedSetTarget = {
61
+ // type,
62
+ // schema,
63
+ // required: [],
64
+ // }
65
+ // return { ...args, target }
66
+ // },
67
+ // },
68
+ // value
69
+ // )
70
+ // }
1
71
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/set2/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/set2/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,yDAAyD;AACzD,mCAAmC;AAEnC,mEAAmE;AACnE,iCAAiC;AACjC,QAAQ;AACR,gBAAgB;AAChB,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;AACpB,sCAAsC;AACtC,+CAA+C;AAC/C,6DAA6D;AAC7D,uBAAuB;AACvB,gBAAgB;AAChB,mDAAmD;AACnD,6BAA6B;AAC7B,6DAA6D;AAC7D,uBAAuB;AACvB,gBAAgB;AAChB,2CAA2C;AAC3C,yCAAyC;AACzC,0DAA0D;AAC1D,gBAAgB;AAChB,mCAAmC;AACnC,eAAe;AACf,uCAAuC;AACvC,gDAAgD;AAChD,6DAA6D;AAC7D,uBAAuB;AACvB,gBAAgB;AAChB,iCAAiC;AACjC,eAAe;AACf,aAAa;AACb,iCAAiC;AACjC,2DAA2D;AAC3D,aAAa;AACb,WAAW;AACX,uCAAuC;AACvC,2BAA2B;AAC3B,2BAA2B;AAC3B,qEAAqE;AACrE,yBAAyB;AACzB,8DAA8D;AAC9D,qBAAqB;AACrB,cAAc;AACd,YAAY;AACZ,4BAA4B;AAC5B,+CAA+C;AAC/C,6DAA6D;AAC7D,qBAAqB;AACrB,cAAc;AACd,8BAA8B;AAC9B,YAAY;AACZ,gDAAgD;AAChD,6BAA6B;AAC7B,2DAA2D;AAC3D,mBAAmB;AACnB,YAAY;AACZ,2CAA2C;AAC3C,kBAAkB;AAClB,oBAAoB;AACpB,0BAA0B;AAC1B,YAAY;AACZ,qCAAqC;AACrC,WAAW;AACX,SAAS;AACT,YAAY;AACZ,MAAM;AACN,IAAI"}
package/dist/walker.d.ts CHANGED
@@ -20,17 +20,14 @@ export type Args<T, K extends keyof BasedSchemaFields = keyof BasedSchemaFields>
20
20
  requiresAsyncValidation: (validationType: any) => Promise<any>;
21
21
  error: ErrorHandler<T>;
22
22
  };
23
- export type FieldParser<T, K extends keyof BasedSchemaFields> = (args: Args<T, K>) => Promise<Args<T> | void>;
24
- export type KeyParser<T> = (args: Args<T, keyof BasedSchemaFields>) => Promise<Args<T> | void>;
23
+ export type FieldParser<K extends keyof BasedSchemaFields, T = any> = (args: Args<T, K>) => Promise<Args<T> | void>;
24
+ export type KeyParser<T = any> = (args: Args<T, keyof BasedSchemaFields>) => Promise<Args<T> | void>;
25
25
  export type Opts<T> = {
26
26
  schema: BasedSchema;
27
- init: (value: any, opts: Opts<T>, errors: {
28
- code: ParseError;
29
- message: string;
30
- }[]) => Promise<T>;
27
+ init: (args: Args<T>) => Promise<Args<T>>;
31
28
  parsers: {
32
29
  fields: Partial<{
33
- [Key in keyof BasedSchemaFields]: FieldParser<T, Key>;
30
+ [Key in keyof BasedSchemaFields]: FieldParser<Key, T>;
34
31
  }>;
35
32
  keys: {
36
33
  [key: string]: KeyParser<T>;
package/dist/walker.js CHANGED
@@ -12,16 +12,16 @@ const walk = async (opts, value) => {
12
12
  if (!('requiresAsyncValidation' in opts)) {
13
13
  opts.requiresAsyncValidation = async () => true;
14
14
  }
15
- const target = await opts.init(value, opts, errors);
16
15
  const errorsCollector = (args, code) => {
17
- errors.push({
16
+ const err = {
18
17
  code,
19
18
  message: `Error in ${args.path.join('.')}`,
20
- });
19
+ };
20
+ if (opts.errorsCollector) {
21
+ opts.errorsCollector(args, code);
22
+ }
23
+ errors.push(err);
21
24
  };
22
- if (!('errorsCollector' in opts)) {
23
- opts.errorsCollector = errorsCollector;
24
- }
25
25
  const parse = async (prevArgs, key, value) => {
26
26
  const collectedCommands = [];
27
27
  const fromBackTrack = [];
@@ -31,8 +31,8 @@ const walk = async (opts, value) => {
31
31
  key: key ?? prevArgs.path[prevArgs.path.length - 1],
32
32
  parentValue: value ? prevArgs.value : undefined,
33
33
  value: value ?? prevArgs.value,
34
- target,
35
- parse,
34
+ target: prevArgs.target,
35
+ parse: prevArgs.parse,
36
36
  collect: (args) => {
37
37
  collectedCommands.push(opts.collect(args));
38
38
  },
@@ -44,14 +44,22 @@ const walk = async (opts, value) => {
44
44
  };
45
45
  if (typeof args.value === 'object' && args.value !== null) {
46
46
  const q = [];
47
+ if (args.typeSchema && !args.fieldSchema) {
48
+ // top level
49
+ }
50
+ if (args.fieldSchema) {
51
+ //
52
+ }
47
53
  if (Array.isArray(args.value)) {
48
54
  for (let i = 0; i < args.value.length; i++) {
49
55
  const parser = opts.parsers.keys[i] || opts.parsers.any;
56
+ const j = i;
50
57
  q.push((async () => {
51
58
  const newArgs = await parser({
52
59
  ...args,
53
- value: args.value[i],
54
- path: [...args.path, i],
60
+ value: args.value[j],
61
+ path: [...args.path, j],
62
+ key: j,
55
63
  });
56
64
  if (newArgs) {
57
65
  return parse(newArgs);
@@ -67,6 +75,7 @@ const walk = async (opts, value) => {
67
75
  ...args,
68
76
  value: args.value[key],
69
77
  path: [...args.path, key],
78
+ key,
70
79
  });
71
80
  if (newArgs) {
72
81
  return parse(newArgs);
@@ -74,6 +83,7 @@ const walk = async (opts, value) => {
74
83
  })());
75
84
  }
76
85
  }
86
+ await Promise.all(q);
77
87
  if (fromBackTrack.length) {
78
88
  args.backtrack(args, fromBackTrack);
79
89
  }
@@ -82,20 +92,27 @@ const walk = async (opts, value) => {
82
92
  }
83
93
  }
84
94
  };
85
- const args = {
95
+ const args = await opts.init({
86
96
  schema: opts.schema,
87
97
  path: [],
88
98
  value,
89
- target,
90
99
  parse,
91
100
  collect: opts.collect,
92
101
  backtrack: opts.backtrack,
93
102
  error: errorsCollector,
94
103
  requiresAsyncValidation: opts.requiresAsyncValidation,
95
- };
96
- parse(args);
104
+ });
105
+ if (!args) {
106
+ return {
107
+ // TODO: temp
108
+ // @ts-ignore // for now
109
+ target: {},
110
+ errors,
111
+ };
112
+ }
113
+ await parse(args);
97
114
  return {
98
- target,
115
+ target: args.target,
99
116
  errors,
100
117
  };
101
118
  };
@@ -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.13",
3
+ "version": "0.0.15",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/set2/index.ts CHANGED
@@ -0,0 +1,71 @@
1
+ // import { ParseError } from '../set/error'
2
+ // import { BasedSchema, BasedSetTarget } from '../types'
3
+ // import { walk } from '../walker'
4
+
5
+ // export const setWalker2 = (schema: BasedSchema, value: any) => {
6
+ // return walk<BasedSetTarget>(
7
+ // {
8
+ // schema,
9
+ // parsers: {
10
+ // keys: {},
11
+ // fields: {
12
+ // object: async (args) => {
13
+ // if (typeof value !== 'object') {
14
+ // args.error(args, ParseError.incorrectFormat)
15
+ // return
16
+ // }
17
+ // const isArray = Array.isArray(value)
18
+ // if (isArray) {
19
+ // args.error(args, ParseError.incorrectFormat)
20
+ // return
21
+ // }
22
+ // const q: Promise<any>[] = []
23
+ // for (const key in value) {
24
+ // q.push(args.parse(args, key, value[key]))
25
+ // }
26
+ // await Promise.all(q)
27
+ // },
28
+ // boolean: async (args) => {
29
+ // if (typeof value !== 'boolean') {
30
+ // args.error(args, ParseError.incorrectFormat)
31
+ // return
32
+ // }
33
+ // args.collect(args)
34
+ // },
35
+ // },
36
+ // any: async (args) => {
37
+ // args.error(args, ParseError.fieldDoesNotExist)
38
+ // },
39
+ // },
40
+ // init: async (value, args) => {
41
+ // let type: string
42
+ // if (value.$id) {
43
+ // type = schema.prefixToTypeMapping[value.$id.slice(0, 2)]
44
+ // if (!type) {
45
+ // args.error(args, ParseError.incorrectFieldType)
46
+ // return
47
+ // }
48
+ // }
49
+ // if (value.type) {
50
+ // if (type && value.type !== type) {
51
+ // args.error(args, ParseError.incorrectNodeType)
52
+ // return
53
+ // }
54
+ // type = value.type
55
+ // }
56
+ // const schemaType = schema.types[type]
57
+ // if (!schemaType) {
58
+ // args.error(args, ParseError.incorrectNodeType)
59
+ // return
60
+ // }
61
+ // const target: BasedSetTarget = {
62
+ // type,
63
+ // schema,
64
+ // required: [],
65
+ // }
66
+ // return { ...args, target }
67
+ // },
68
+ // },
69
+ // value
70
+ // )
71
+ // }
package/src/walker.ts CHANGED
@@ -1,7 +1,6 @@
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'
5
4
 
6
5
  type Path = (string | number)[]
7
6
 
@@ -33,24 +32,20 @@ export type Args<
33
32
  error: ErrorHandler<T>
34
33
  }
35
34
 
36
- export type FieldParser<T, K extends keyof BasedSchemaFields> = (
35
+ export type FieldParser<K extends keyof BasedSchemaFields, T = any> = (
37
36
  args: Args<T, K>
38
37
  ) => Promise<Args<T> | void>
39
38
 
40
- export type KeyParser<T> = (
39
+ export type KeyParser<T = any> = (
41
40
  args: Args<T, keyof BasedSchemaFields>
42
41
  ) => Promise<Args<T> | void>
43
42
 
44
43
  export type Opts<T> = {
45
44
  schema: BasedSchema
46
- init: (
47
- value: any,
48
- opts: Opts<T>,
49
- errors: { code: ParseError; message: string }[]
50
- ) => Promise<T>
45
+ init: (args: Args<T>) => Promise<Args<T>>
51
46
  parsers: {
52
47
  fields: Partial<{
53
- [Key in keyof BasedSchemaFields]: FieldParser<T, Key>
48
+ [Key in keyof BasedSchemaFields]: FieldParser<Key, T>
54
49
  }>
55
50
  keys: { [key: string]: KeyParser<T> } // $list -> true
56
51
  any: KeyParser<T> // y.x
@@ -82,17 +77,15 @@ export const walk = async <T>(
82
77
  opts.requiresAsyncValidation = async () => true
83
78
  }
84
79
 
85
- const target = await opts.init(value, opts, errors)
86
-
87
80
  const errorsCollector: ErrorHandler<T> = (args, code) => {
88
- errors.push({
81
+ const err = {
89
82
  code,
90
83
  message: `Error in ${args.path.join('.')}`,
91
- })
92
- }
93
-
94
- if (!('errorsCollector' in opts)) {
95
- opts.errorsCollector = errorsCollector
84
+ }
85
+ if (opts.errorsCollector) {
86
+ opts.errorsCollector(args, code)
87
+ }
88
+ errors.push(err)
96
89
  }
97
90
 
98
91
  const parse: Parse<T> = async (prevArgs, key, value) => {
@@ -104,8 +97,8 @@ export const walk = async <T>(
104
97
  key: key ?? prevArgs.path[prevArgs.path.length - 1],
105
98
  parentValue: value ? prevArgs.value : undefined,
106
99
  value: value ?? prevArgs.value,
107
- target,
108
- parse,
100
+ target: prevArgs.target,
101
+ parse: prevArgs.parse,
109
102
  collect: (args) => {
110
103
  collectedCommands.push(opts.collect(args))
111
104
  },
@@ -117,15 +110,26 @@ export const walk = async <T>(
117
110
  }
118
111
  if (typeof args.value === 'object' && args.value !== null) {
119
112
  const q: Promise<Args<T> | void>[] = []
113
+
114
+ if (args.typeSchema && !args.fieldSchema) {
115
+ // top level
116
+ }
117
+
118
+ if (args.fieldSchema) {
119
+ //
120
+ }
121
+
120
122
  if (Array.isArray(args.value)) {
121
123
  for (let i = 0; i < args.value.length; i++) {
122
124
  const parser = opts.parsers.keys[i] || opts.parsers.any
125
+ const j = i
123
126
  q.push(
124
127
  (async () => {
125
128
  const newArgs = await parser({
126
129
  ...args,
127
- value: args.value[i],
128
- path: [...args.path, i],
130
+ value: args.value[j],
131
+ path: [...args.path, j],
132
+ key: j,
129
133
  })
130
134
  if (newArgs) {
131
135
  return parse(newArgs)
@@ -142,6 +146,7 @@ export const walk = async <T>(
142
146
  ...args,
143
147
  value: args.value[key],
144
148
  path: [...args.path, key],
149
+ key,
145
150
  })
146
151
  if (newArgs) {
147
152
  return parse(newArgs)
@@ -151,6 +156,7 @@ export const walk = async <T>(
151
156
  }
152
157
  }
153
158
 
159
+ await Promise.all(q)
154
160
  if (fromBackTrack.length) {
155
161
  args.backtrack(args, fromBackTrack)
156
162
  } else if (collectedCommands.length) {
@@ -158,23 +164,28 @@ export const walk = async <T>(
158
164
  }
159
165
  }
160
166
  }
161
-
162
- const args: Args<T> = {
167
+ const args: Args<T> = await opts.init(<Args<T>>{
163
168
  schema: opts.schema,
164
169
  path: [],
165
170
  value,
166
- target,
167
171
  parse,
168
172
  collect: opts.collect,
169
173
  backtrack: opts.backtrack,
170
174
  error: errorsCollector,
171
175
  requiresAsyncValidation: opts.requiresAsyncValidation,
176
+ })
177
+
178
+ if (!args) {
179
+ return {
180
+ // TODO: temp
181
+ // @ts-ignore // for now
182
+ target: {},
183
+ errors,
184
+ }
172
185
  }
173
-
174
- parse(args)
175
-
186
+ await parse(args)
176
187
  return {
177
- target,
188
+ target: args.target,
178
189
  errors,
179
190
  }
180
191
  }
package/test/walker.ts CHANGED
@@ -36,9 +36,9 @@ test('walker', async (t) => {
36
36
  const x = await walk(
37
37
  {
38
38
  schema,
39
- init: async () => {
40
- console.log('init!\n')
41
- return { lullz: true }
39
+ init: async (args) => {
40
+ console.log('init!\n', args)
41
+ return { ...args, target: { lullz: true } }
42
42
  },
43
43
  parsers: {
44
44
  keys: {