@based/schema 0.0.14 → 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,6 +44,12 @@ 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;
@@ -86,20 +92,27 @@ const walk = async (opts, value) => {
86
92
  }
87
93
  }
88
94
  };
89
- const args = {
95
+ const args = await opts.init({
90
96
  schema: opts.schema,
91
97
  path: [],
92
98
  value,
93
- target,
94
99
  parse,
95
100
  collect: opts.collect,
96
101
  backtrack: opts.backtrack,
97
102
  error: errorsCollector,
98
103
  requiresAsyncValidation: opts.requiresAsyncValidation,
99
- };
104
+ });
105
+ if (!args) {
106
+ return {
107
+ // TODO: temp
108
+ // @ts-ignore // for now
109
+ target: {},
110
+ errors,
111
+ };
112
+ }
100
113
  await parse(args);
101
114
  return {
102
- target,
115
+ target: args.target,
103
116
  errors,
104
117
  };
105
118
  };
@@ -1 +1 @@
1
- {"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":";;;AA+DO,MAAM,IAAI,GAAG,KAAK,EACvB,IAAa,EACb,KAAU,EAIT,EAAE;IACH,MAAM,MAAM,GAA4C,EAAE,CAAA;IAE1D,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;KACxB;IAED,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;QAC1B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;KAC1B;IAED,IAAI,CAAC,CAAC,yBAAyB,IAAI,IAAI,CAAC,EAAE;QACxC,IAAI,CAAC,uBAAuB,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAA;KAChD;IAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAEnD,MAAM,eAAe,GAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,OAAO,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SAC3C,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,IAAI,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE;QAChC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;KACvC;IAED,MAAM,KAAK,GAAa,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrD,MAAM,iBAAiB,GAAU,EAAE,CAAA;QACnC,MAAM,aAAa,GAAU,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAY;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACnD,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACnD,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC/C,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK;YAC9B,MAAM;YACN,KAAK;YACL,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YAC5C,CAAC;YACD,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;YACpD,CAAC;YACD,KAAK,EAAE,eAAe;YACtB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;SACtD,CAAA;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACzD,MAAM,CAAC,GAA8B,EAAE,CAAA;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;oBACvD,MAAM,CAAC,GAAG,CAAC,CAAA;oBACX,CAAC,CAAC,IAAI,CACJ,CAAC,KAAK,IAAI,EAAE;wBACV,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;4BAC3B,GAAG,IAAI;4BACP,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;4BACpB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;4BACvB,GAAG,EAAE,CAAC;yBACP,CAAC,CAAA;wBACF,IAAI,OAAO,EAAE;4BACX,OAAO,KAAK,CAAC,OAAO,CAAC,CAAA;yBACtB;oBACH,CAAC,CAAC,EAAE,CACL,CAAA;iBACF;aACF;iBAAM;gBACL,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;oBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;oBACzD,CAAC,CAAC,IAAI,CACJ,CAAC,KAAK,IAAI,EAAE;wBACV,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;4BAC3B,GAAG,IAAI;4BACP,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;4BACtB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4BACzB,GAAG;yBACJ,CAAC,CAAA;wBACF,IAAI,OAAO,EAAE;4BACX,OAAO,KAAK,CAAC,OAAO,CAAC,CAAA;yBACtB;oBACH,CAAC,CAAC,EAAE,CACL,CAAA;iBACF;aACF;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAEpB,IAAI,aAAa,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;aACpC;iBAAM,IAAI,iBAAiB,CAAC,MAAM,EAAE;gBACnC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;aACxC;SACF;IACH,CAAC,CAAA;IAED,MAAM,IAAI,GAAY;QACpB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,EAAE;QACR,KAAK;QACL,MAAM;QACN,KAAK;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,eAAe;QACtB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;KACtD,CAAA;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;IAEjB,OAAO;QACL,MAAM;QACN,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AAzHY,QAAA,IAAI,QAyHhB"}
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.14",
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,6 +110,15 @@ 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
@@ -155,7 +157,6 @@ export const walk = async <T>(
155
157
  }
156
158
 
157
159
  await Promise.all(q)
158
-
159
160
  if (fromBackTrack.length) {
160
161
  args.backtrack(args, fromBackTrack)
161
162
  } else if (collectedCommands.length) {
@@ -163,23 +164,28 @@ export const walk = async <T>(
163
164
  }
164
165
  }
165
166
  }
166
-
167
- const args: Args<T> = {
167
+ const args: Args<T> = await opts.init(<Args<T>>{
168
168
  schema: opts.schema,
169
169
  path: [],
170
170
  value,
171
- target,
172
171
  parse,
173
172
  collect: opts.collect,
174
173
  backtrack: opts.backtrack,
175
174
  error: errorsCollector,
176
175
  requiresAsyncValidation: opts.requiresAsyncValidation,
176
+ })
177
+
178
+ if (!args) {
179
+ return {
180
+ // TODO: temp
181
+ // @ts-ignore // for now
182
+ target: {},
183
+ errors,
184
+ }
177
185
  }
178
-
179
186
  await parse(args)
180
-
181
187
  return {
182
- target,
188
+ target: args.target,
183
189
  errors,
184
190
  }
185
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: {