@based/schema 1.0.10 → 1.1.0
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/error.d.ts +2 -1
- package/dist/error.js +1 -0
- package/dist/error.js.map +1 -1
- package/dist/set/fields/number.js +1 -1
- package/dist/set/fields/number.js.map +1 -1
- package/dist/set/fields/references.js +37 -15
- package/dist/set/fields/references.js.map +1 -1
- package/dist/set/index.d.ts +2 -1
- package/dist/set/index.js +3 -1
- package/dist/set/index.js.map +1 -1
- package/dist/walker/index.d.ts +2 -2
- package/dist/walker/index.js +4 -1
- package/dist/walker/index.js.map +1 -1
- package/dist/walker/types.d.ts +2 -1
- package/dist/walker/types.js +1 -0
- package/dist/walker/types.js.map +1 -1
- package/package.json +1 -1
- package/src/error.ts +1 -0
- package/src/set/fields/number.ts +1 -1
- package/src/set/fields/references.ts +45 -19
- package/src/set/index.ts +6 -3
- package/src/walker/index.ts +8 -2
- package/src/walker/types.ts +8 -2
- package/test/walker.ts +73 -0
package/dist/error.d.ts
CHANGED
package/dist/error.js
CHANGED
|
@@ -18,5 +18,6 @@ var ParseError;
|
|
|
18
18
|
ParseError[ParseError["invalidJSON"] = 12] = "invalidJSON";
|
|
19
19
|
ParseError[ParseError["noLanguageFound"] = 13] = "noLanguageFound";
|
|
20
20
|
ParseError[ParseError["cannotDeleteNodeFromModify"] = 14] = "cannotDeleteNodeFromModify";
|
|
21
|
+
ParseError[ParseError["nestedModifyObjectNotAllowed"] = 15] = "nestedModifyObjectNotAllowed";
|
|
21
22
|
})(ParseError = exports.ParseError || (exports.ParseError = {}));
|
|
22
23
|
//# sourceMappingURL=error.js.map
|
package/dist/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAiBX;AAjBD,WAAY,UAAU;IACpB,uEAAoB,CAAA;IACpB,qEAAmB,CAAA;IACnB,+DAAgB,CAAA;IAChB,iEAAiB,CAAA;IACjB,qEAAmB,CAAA;IACnB,iEAAiB,CAAA;IACjB,mFAA0B,CAAA;IAC1B,iEAAiB,CAAA;IACjB,yEAAqB,CAAA;IACrB,2FAA8B,CAAA;IAC9B,kFAAyB,CAAA;IACzB,4EAAsB,CAAA;IACtB,0DAAa,CAAA;IACb,kEAAiB,CAAA;IACjB,wFAA4B,CAAA;IAC5B,4FAA8B,CAAA;AAChC,CAAC,EAjBW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAiBrB"}
|
|
@@ -24,7 +24,7 @@ const validateNumber = (args, value, ignoreMinMax) => {
|
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
26
|
if (ignoreMinMax) {
|
|
27
|
-
// TODO:
|
|
27
|
+
// TODO: will be handled in the actual modify command
|
|
28
28
|
return true;
|
|
29
29
|
}
|
|
30
30
|
if (fieldSchema.maximum) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/set/fields/number.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAMxC,MAAM,cAAc,GAAG,CACrB,IAA4C,EAC5C,KAAa,EACb,YAAsB,EACb,EAAE;IACX,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAA;QACtC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,IAAI,CAAC,KAAK,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAA;QACtC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACrE,IAAI,CAAC,KAAK,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAA;QACtC,OAAO,KAAK,CAAA;KACb;IAED,IACE,WAAW,CAAC,UAAU;QACtB,KAAK,GAAG,WAAW,CAAC,UAAU;YAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC;YAC1C,CAAC,EACH;QACA,IAAI,CAAC,KAAK,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAA;QACtC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,YAAY,EAAE;QAChB,
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/set/fields/number.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,28 +24,20 @@ async function parseOperator(args, key) {
|
|
|
24
24
|
await (0, exports.reference)(n);
|
|
25
25
|
return [n.value];
|
|
26
26
|
}
|
|
27
|
-
const
|
|
28
|
-
// TODO: setting an object here , handling $alias (both async hooks)
|
|
29
|
-
// block if path contains $remove
|
|
30
|
-
if (!(0, isValidId_1.isValidId)(args.schema, args.value)) {
|
|
31
|
-
args.error(error_1.ParseError.incorrectFormat);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
27
|
+
const typeIsAllowed = (args, type) => {
|
|
34
28
|
if ('allowedTypes' in args.fieldSchema) {
|
|
35
|
-
const prefix = args.value.slice(0, 2);
|
|
36
|
-
const targetType = args.schema.prefixToTypeMapping[prefix];
|
|
37
29
|
let typeMatches = false;
|
|
38
30
|
for (const t of args.fieldSchema.allowedTypes) {
|
|
39
31
|
if (typeof t === 'string') {
|
|
40
|
-
if (t ===
|
|
41
|
-
|
|
42
|
-
break;
|
|
32
|
+
if (t === type) {
|
|
33
|
+
return true;
|
|
43
34
|
}
|
|
44
35
|
}
|
|
45
36
|
else {
|
|
46
|
-
if (t.type && t.type ===
|
|
37
|
+
if (t.type && t.type === type) {
|
|
47
38
|
typeMatches = true;
|
|
48
39
|
if (t.$filter) {
|
|
40
|
+
// stage on requires validation in target
|
|
49
41
|
// TODO: ASYNC HOOK
|
|
50
42
|
// if(!(await args.target.referenceFilterCondition(value, t.$filter))){
|
|
51
43
|
// error(args, ParseError.referenceIsIncorrectType)
|
|
@@ -61,11 +53,41 @@ const reference = async (args) => {
|
|
|
61
53
|
}
|
|
62
54
|
}
|
|
63
55
|
if (typeMatches === false) {
|
|
64
|
-
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
};
|
|
61
|
+
const reference = async (args) => {
|
|
62
|
+
// TODO: setting an object here , handling $alias (both async hooks)
|
|
63
|
+
// Block if path contains $remove (maybe not for $alias)
|
|
64
|
+
if (typeof args.value === 'object') {
|
|
65
|
+
if (args.root._opts.asyncOperationHandler) {
|
|
66
|
+
if (args.value.type && !typeIsAllowed(args, args.value.type)) {
|
|
67
|
+
args.error(error_1.ParseError.referenceIsIncorrectType);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!args.target.errors.length) {
|
|
71
|
+
args.value = await args.root._opts.asyncOperationHandler(args, 'modifyObject');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
args.error(error_1.ParseError.nestedModifyObjectNotAllowed);
|
|
65
76
|
return;
|
|
66
77
|
}
|
|
67
78
|
}
|
|
68
|
-
args.
|
|
79
|
+
if (!(0, isValidId_1.isValidId)(args.schema, args.value)) {
|
|
80
|
+
args.error(error_1.ParseError.incorrectFormat);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const prefix = args.value.slice(0, 2);
|
|
84
|
+
const targetType = args.schema.prefixToTypeMapping[prefix];
|
|
85
|
+
if (typeIsAllowed(args, targetType)) {
|
|
86
|
+
args.collect();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
args.error(error_1.ParseError.referenceIsIncorrectType);
|
|
90
|
+
}
|
|
69
91
|
};
|
|
70
92
|
exports.reference = reference;
|
|
71
93
|
const references = async (args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/set/fields/references.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAGxC,4CAAwC;AAExC,KAAK,UAAU,aAAa,CAC1B,IAAgC,EAChC,GAAW;IAEX,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACpB,GAAG;YACH,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SACvB,CAAC,CAAA;QACF,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;QAEf,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE;YACnB,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;SACtB;QACD,OAAO,EAAE,CAAA;KACV;IACD,MAAM,CAAC,GAA2C,IAAI,CAAC,MAAM,CAAC;QAC5D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,GAAG;QACH,cAAc,EAAE,IAAI;KACrB,CAAC,CAAA;IACF,MAAM,IAAA,iBAAS,EAAC,CAAC,CAAC,CAAA;IAClB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/set/fields/references.ts"],"names":[],"mappings":"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"}
|
package/dist/set/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { BasedSchema, BasedSetTarget } from '../types';
|
|
2
|
-
|
|
2
|
+
import { AsyncOperation } from '../walker';
|
|
3
|
+
export declare const setWalker: (schema: BasedSchema, value: any, asyncOperationHandler?: AsyncOperation<BasedSetTarget>) => Promise<BasedSetTarget>;
|
package/dist/set/index.js
CHANGED
|
@@ -136,6 +136,8 @@ const opts = {
|
|
|
136
136
|
args.root.target.collected.push(args);
|
|
137
137
|
},
|
|
138
138
|
};
|
|
139
|
-
const setWalker = (schema, value
|
|
139
|
+
const setWalker = (schema, value, asyncOperationHandler) => {
|
|
140
|
+
return (0, walker_1.walk)(schema, opts, value, asyncOperationHandler);
|
|
141
|
+
};
|
|
140
142
|
exports.setWalker = setWalker;
|
|
141
143
|
//# sourceMappingURL=index.js.map
|
package/dist/set/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/set/index.ts"],"names":[],"mappings":";;;AAAA,oCAAqC;AAErC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/set/index.ts"],"names":[],"mappings":"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"}
|
package/dist/walker/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BasedSchema } from '../types';
|
|
2
2
|
import { ArgsClass } from './args';
|
|
3
|
-
import { Opts } from './types';
|
|
4
|
-
export declare const walk: <T>(schema: BasedSchema, opts: Opts<T>, value: any) => Promise<T>;
|
|
3
|
+
import { AsyncOperation, Opts } from './types';
|
|
4
|
+
export declare const walk: <T>(schema: BasedSchema, opts: Opts<T>, value: any, asyncOperationHandler?: AsyncOperation<T>) => Promise<T>;
|
|
5
5
|
export { ArgsClass };
|
|
6
6
|
export * from './types';
|
package/dist/walker/index.js
CHANGED
|
@@ -17,13 +17,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.ArgsClass = exports.walk = void 0;
|
|
18
18
|
const args_1 = require("./args");
|
|
19
19
|
Object.defineProperty(exports, "ArgsClass", { enumerable: true, get: function () { return args_1.ArgsClass; } });
|
|
20
|
-
const walk = async (schema, opts, value) => {
|
|
20
|
+
const walk = async (schema, opts, value, asyncOperationHandler) => {
|
|
21
21
|
if (!('collect' in opts)) {
|
|
22
22
|
opts.collect = () => { };
|
|
23
23
|
}
|
|
24
24
|
if (!('error' in opts)) {
|
|
25
25
|
opts.error = () => { };
|
|
26
26
|
}
|
|
27
|
+
if (asyncOperationHandler) {
|
|
28
|
+
opts.asyncOperationHandler = asyncOperationHandler;
|
|
29
|
+
}
|
|
27
30
|
const argsOpts = await opts.init(value, schema, opts.error);
|
|
28
31
|
if (!argsOpts.value) {
|
|
29
32
|
argsOpts.value = value;
|
package/dist/walker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/walker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,iCAAkC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/walker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,iCAAkC;AAqCzB,0FArCA,gBAAS,OAqCA;AAlCX,MAAM,IAAI,GAAG,KAAK,EACvB,MAAmB,EACnB,IAAa,EACb,KAAU,EACV,qBAAyC,EAC7B,EAAE;IACd,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;KACxB;IAED,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;QACtB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;KACtB;IAED,IAAI,qBAAqB,EAAE;QACzB,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;KACnD;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAE3D,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;KACvB;IAED,MAAM,IAAI,GAAG,IAAI,gBAAS,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IAErB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAElB,OAAO,IAAI,CAAC,MAAM,CAAA;AACpB,CAAC,CAAA;AAhCY,QAAA,IAAI,QAgChB;AAID,0CAAuB"}
|
package/dist/walker/types.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type KeyParser<T = any> = (args: ArgsClass<T, keyof BasedSchemaFields>) =
|
|
|
9
9
|
export type FieldParsers<T = any> = {
|
|
10
10
|
[Key in keyof BasedSchemaFields]: FieldParser<Key, T>;
|
|
11
11
|
};
|
|
12
|
+
export type AsyncOperation<T> = (args: ArgsClass<T>, type?: string) => Promise<any>;
|
|
12
13
|
export type Opts<T> = {
|
|
13
14
|
init: (value: any, schema: BasedSchema, error: ErrorHandler<T>) => Promise<ArgsOpts<T>>;
|
|
14
15
|
parsers: {
|
|
@@ -24,7 +25,7 @@ export type Opts<T> = {
|
|
|
24
25
|
collect?: (args: ArgsClass<T>) => any;
|
|
25
26
|
error?: ErrorHandler<T>;
|
|
26
27
|
backtrack?: (args: ArgsClass<T>, fromBackTrack: any[], collectedCommands: any[]) => any;
|
|
27
|
-
|
|
28
|
+
asyncOperationHandler?: AsyncOperation<T>;
|
|
28
29
|
};
|
|
29
30
|
export declare enum Stopped {
|
|
30
31
|
onlyStopFieldParser = 0,
|
package/dist/walker/types.js
CHANGED
|
@@ -6,4 +6,5 @@ var Stopped;
|
|
|
6
6
|
Stopped[Stopped["onlyStopFieldParser"] = 0] = "onlyStopFieldParser";
|
|
7
7
|
Stopped[Stopped["stopAll"] = 1] = "stopAll";
|
|
8
8
|
})(Stopped = exports.Stopped || (exports.Stopped = {}));
|
|
9
|
+
// Add asyncOperations // requiresAsyncValidation -> asyncOperation: () => {}
|
|
9
10
|
//# sourceMappingURL=types.js.map
|
package/dist/walker/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/walker/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/walker/types.ts"],"names":[],"mappings":";;;AA2DA,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,mEAAmB,CAAA;IACnB,2CAAO,CAAA;AACT,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB;AAkBD,6EAA6E"}
|
package/package.json
CHANGED
package/src/error.ts
CHANGED
package/src/set/fields/number.ts
CHANGED
|
@@ -36,7 +36,7 @@ const validateNumber = (
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
if (ignoreMinMax) {
|
|
39
|
-
// TODO:
|
|
39
|
+
// TODO: will be handled in the actual modify command
|
|
40
40
|
return true
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ParseError } from '../../error'
|
|
2
|
-
import { BasedSetTarget } from '../../types'
|
|
2
|
+
import { AllowedTypes, BasedSetTarget } from '../../types'
|
|
3
3
|
import { ArgsClass, FieldParser } from '../../walker'
|
|
4
4
|
import { isValidId } from '../isValidId'
|
|
5
5
|
|
|
@@ -29,30 +29,22 @@ async function parseOperator<T>(
|
|
|
29
29
|
return [n.value]
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!isValidId(args.schema, args.value)) {
|
|
38
|
-
args.error(ParseError.incorrectFormat)
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
|
|
32
|
+
const typeIsAllowed = (
|
|
33
|
+
args: ArgsClass<BasedSetTarget, 'reference'>,
|
|
34
|
+
type: string
|
|
35
|
+
): boolean => {
|
|
42
36
|
if ('allowedTypes' in args.fieldSchema) {
|
|
43
|
-
const prefix = args.value.slice(0, 2)
|
|
44
|
-
const targetType = args.schema.prefixToTypeMapping[prefix]
|
|
45
37
|
let typeMatches = false
|
|
46
38
|
for (const t of args.fieldSchema.allowedTypes) {
|
|
47
39
|
if (typeof t === 'string') {
|
|
48
|
-
if (t ===
|
|
49
|
-
|
|
50
|
-
break
|
|
40
|
+
if (t === type) {
|
|
41
|
+
return true
|
|
51
42
|
}
|
|
52
43
|
} else {
|
|
53
|
-
if (t.type && t.type ===
|
|
44
|
+
if (t.type && t.type === type) {
|
|
54
45
|
typeMatches = true
|
|
55
46
|
if (t.$filter) {
|
|
47
|
+
// stage on requires validation in target
|
|
56
48
|
// TODO: ASYNC HOOK
|
|
57
49
|
// if(!(await args.target.referenceFilterCondition(value, t.$filter))){
|
|
58
50
|
// error(args, ParseError.referenceIsIncorrectType)
|
|
@@ -67,12 +59,46 @@ export const reference: FieldParser<'reference'> = async (args) => {
|
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
61
|
if (typeMatches === false) {
|
|
70
|
-
|
|
62
|
+
return false
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const reference: FieldParser<'reference'> = async (args) => {
|
|
69
|
+
// TODO: setting an object here , handling $alias (both async hooks)
|
|
70
|
+
// Block if path contains $remove (maybe not for $alias)
|
|
71
|
+
if (typeof args.value === 'object') {
|
|
72
|
+
if (args.root._opts.asyncOperationHandler) {
|
|
73
|
+
if (args.value.type && !typeIsAllowed(args, args.value.type)) {
|
|
74
|
+
args.error(ParseError.referenceIsIncorrectType)
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
if (!args.target.errors.length) {
|
|
78
|
+
args.value = await args.root._opts.asyncOperationHandler(
|
|
79
|
+
args,
|
|
80
|
+
'modifyObject'
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
args.error(ParseError.nestedModifyObjectNotAllowed)
|
|
71
85
|
return
|
|
72
86
|
}
|
|
73
87
|
}
|
|
74
88
|
|
|
75
|
-
args.
|
|
89
|
+
if (!isValidId(args.schema, args.value)) {
|
|
90
|
+
args.error(ParseError.incorrectFormat)
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const prefix = args.value.slice(0, 2)
|
|
95
|
+
const targetType = args.schema.prefixToTypeMapping[prefix]
|
|
96
|
+
|
|
97
|
+
if (typeIsAllowed(args, targetType)) {
|
|
98
|
+
args.collect()
|
|
99
|
+
} else {
|
|
100
|
+
args.error(ParseError.referenceIsIncorrectType)
|
|
101
|
+
}
|
|
76
102
|
}
|
|
77
103
|
|
|
78
104
|
export const references: FieldParser<'references'> = async (args) => {
|
package/src/set/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParseError } from '../error'
|
|
2
2
|
import { BasedSchema, BasedSchemaCollectProps, BasedSetTarget } from '../types'
|
|
3
|
-
import { walk, Opts } from '../walker'
|
|
3
|
+
import { walk, Opts, AsyncOperation } from '../walker'
|
|
4
4
|
import { fields } from './fields'
|
|
5
5
|
import { isValidId } from './isValidId'
|
|
6
6
|
|
|
@@ -138,5 +138,8 @@ const opts: Opts<BasedSetTarget> = {
|
|
|
138
138
|
|
|
139
139
|
export const setWalker = (
|
|
140
140
|
schema: BasedSchema,
|
|
141
|
-
value: any
|
|
142
|
-
|
|
141
|
+
value: any,
|
|
142
|
+
asyncOperationHandler?: AsyncOperation<BasedSetTarget>
|
|
143
|
+
): Promise<BasedSetTarget> => {
|
|
144
|
+
return walk<BasedSetTarget>(schema, opts, value, asyncOperationHandler)
|
|
145
|
+
}
|
package/src/walker/index.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { BasedSchema } from '../types'
|
|
2
2
|
import { ArgsClass } from './args'
|
|
3
|
-
import { Opts } from './types'
|
|
3
|
+
import { AsyncOperation, Opts } from './types'
|
|
4
4
|
|
|
5
5
|
export const walk = async <T>(
|
|
6
6
|
schema: BasedSchema,
|
|
7
7
|
opts: Opts<T>,
|
|
8
|
-
value: any
|
|
8
|
+
value: any,
|
|
9
|
+
asyncOperationHandler?: AsyncOperation<T>
|
|
9
10
|
): Promise<T> => {
|
|
10
11
|
if (!('collect' in opts)) {
|
|
11
12
|
opts.collect = () => {}
|
|
@@ -15,6 +16,10 @@ export const walk = async <T>(
|
|
|
15
16
|
opts.error = () => {}
|
|
16
17
|
}
|
|
17
18
|
|
|
19
|
+
if (asyncOperationHandler) {
|
|
20
|
+
opts.asyncOperationHandler = asyncOperationHandler
|
|
21
|
+
}
|
|
22
|
+
|
|
18
23
|
const argsOpts = await opts.init(value, schema, opts.error)
|
|
19
24
|
|
|
20
25
|
if (!argsOpts.value) {
|
|
@@ -25,6 +30,7 @@ export const walk = async <T>(
|
|
|
25
30
|
args.root = args
|
|
26
31
|
args._opts = opts
|
|
27
32
|
args._schema = schema
|
|
33
|
+
|
|
28
34
|
await args.parse()
|
|
29
35
|
|
|
30
36
|
return args.target
|
package/src/walker/types.ts
CHANGED
|
@@ -28,6 +28,11 @@ export type FieldParsers<T = any> = {
|
|
|
28
28
|
[Key in keyof BasedSchemaFields]: FieldParser<Key, T>
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
export type AsyncOperation<T> = (
|
|
32
|
+
args: ArgsClass<T>,
|
|
33
|
+
type?: string
|
|
34
|
+
) => Promise<any>
|
|
35
|
+
|
|
31
36
|
export type Opts<T> = {
|
|
32
37
|
init: (
|
|
33
38
|
value: any,
|
|
@@ -49,8 +54,7 @@ export type Opts<T> = {
|
|
|
49
54
|
fromBackTrack: any[],
|
|
50
55
|
collectedCommands: any[]
|
|
51
56
|
) => any
|
|
52
|
-
|
|
53
|
-
requiresAsyncValidation?: (validationType: any) => Promise<boolean>
|
|
57
|
+
asyncOperationHandler?: AsyncOperation<T>
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
export enum Stopped {
|
|
@@ -73,3 +77,5 @@ export type ArgsOpts<
|
|
|
73
77
|
skipCollection?: boolean
|
|
74
78
|
collect?: (args: ArgsClass<T, K>, value?: any) => any
|
|
75
79
|
}
|
|
80
|
+
|
|
81
|
+
// Add asyncOperations // requiresAsyncValidation -> asyncOperation: () => {}
|
package/test/walker.ts
CHANGED
|
@@ -7,6 +7,7 @@ const schema: BasedSchema = {
|
|
|
7
7
|
thing: {
|
|
8
8
|
prefix: 'ti',
|
|
9
9
|
fields: {
|
|
10
|
+
priority: { type: 'number' },
|
|
10
11
|
something: { type: 'string', format: 'strongPassword' },
|
|
11
12
|
},
|
|
12
13
|
},
|
|
@@ -847,5 +848,77 @@ test('string', async (t) => {
|
|
|
847
848
|
{ depth: 10 }
|
|
848
849
|
)
|
|
849
850
|
|
|
851
|
+
console.info('---- doink 36 ------')
|
|
852
|
+
r = await setWalker(schema, {
|
|
853
|
+
$id: 'bl120',
|
|
854
|
+
integer: Infinity,
|
|
855
|
+
})
|
|
856
|
+
|
|
857
|
+
console.dir(r.errors)
|
|
858
|
+
console.dir(
|
|
859
|
+
r.collected.map((v) => ({ path: v.path, value: v.value })),
|
|
860
|
+
{ depth: 10 }
|
|
861
|
+
)
|
|
862
|
+
|
|
863
|
+
console.info('---- doink 37 ------')
|
|
864
|
+
r = await setWalker(schema, {
|
|
865
|
+
$id: 'bl120',
|
|
866
|
+
integer: Infinity,
|
|
867
|
+
})
|
|
868
|
+
|
|
869
|
+
console.dir(r.errors)
|
|
870
|
+
console.dir(
|
|
871
|
+
r.collected.map((v) => ({ path: v.path, value: v.value })),
|
|
872
|
+
{ depth: 10 }
|
|
873
|
+
)
|
|
874
|
+
|
|
875
|
+
console.info('---- doink 38 ------')
|
|
876
|
+
r = await setWalker(schema, {
|
|
877
|
+
$id: 'bl120',
|
|
878
|
+
integer: -Infinity,
|
|
879
|
+
})
|
|
880
|
+
|
|
881
|
+
console.dir(r.errors)
|
|
882
|
+
console.dir(
|
|
883
|
+
r.collected.map((v) => ({ path: v.path, value: v.value })),
|
|
884
|
+
{ depth: 10 }
|
|
885
|
+
)
|
|
886
|
+
|
|
887
|
+
console.info('---- doink 39 ------')
|
|
888
|
+
r = await setWalker(
|
|
889
|
+
schema,
|
|
890
|
+
{
|
|
891
|
+
$id: 'bl120',
|
|
892
|
+
referencesToThings: [
|
|
893
|
+
{
|
|
894
|
+
type: 'thing',
|
|
895
|
+
priority: 9000,
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
type: 'thing',
|
|
899
|
+
priority: 10000,
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
type: 'flurp',
|
|
903
|
+
priority: 10000,
|
|
904
|
+
},
|
|
905
|
+
],
|
|
906
|
+
},
|
|
907
|
+
async (args, type) => {
|
|
908
|
+
console.info('GO ASYNC', args.path, args.value, type)
|
|
909
|
+
if (args.value.type === 'thing') {
|
|
910
|
+
return 'ti' + Math.floor(Math.random() * 10000).toString(16)
|
|
911
|
+
} else {
|
|
912
|
+
return 'bl1221'
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
console.dir(r.errors)
|
|
918
|
+
console.dir(
|
|
919
|
+
r.collected.map((v) => ({ path: v.path, value: v.value })),
|
|
920
|
+
{ depth: 10 }
|
|
921
|
+
)
|
|
922
|
+
|
|
850
923
|
t.true(true)
|
|
851
924
|
})
|