@based/schema 3.0.1 → 3.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.
Files changed (56) hide show
  1. package/dist/src/compat/newToOld.d.ts +2 -2
  2. package/dist/src/compat/newToOld.js +31 -173
  3. package/dist/src/compat/oldToNew.d.ts +1 -1
  4. package/dist/src/compat/oldToNew.js +25 -200
  5. package/dist/src/set/fields/string.js +1 -0
  6. package/dist/src/types.d.ts +1 -1
  7. package/dist/src/types.js +1 -0
  8. package/package.json +1 -1
  9. package/dist/display/index.d.ts +0 -2
  10. package/dist/display/index.js +0 -26
  11. package/dist/display/number.d.ts +0 -3
  12. package/dist/display/number.js +0 -89
  13. package/dist/display/string.d.ts +0 -3
  14. package/dist/display/string.js +0 -23
  15. package/dist/display/timestamp.d.ts +0 -3
  16. package/dist/display/timestamp.js +0 -127
  17. package/dist/error.d.ts +0 -19
  18. package/dist/error.js +0 -24
  19. package/dist/index.d.ts +0 -5
  20. package/dist/index.js +0 -22
  21. package/dist/languages.d.ts +0 -187
  22. package/dist/languages.js +0 -190
  23. package/dist/set/fields/array.d.ts +0 -2
  24. package/dist/set/fields/array.js +0 -123
  25. package/dist/set/fields/index.d.ts +0 -3
  26. package/dist/set/fields/index.js +0 -74
  27. package/dist/set/fields/number.d.ts +0 -4
  28. package/dist/set/fields/number.js +0 -129
  29. package/dist/set/fields/object.d.ts +0 -3
  30. package/dist/set/fields/object.js +0 -33
  31. package/dist/set/fields/references.d.ts +0 -3
  32. package/dist/set/fields/references.js +0 -128
  33. package/dist/set/fields/set.d.ts +0 -2
  34. package/dist/set/fields/set.js +0 -63
  35. package/dist/set/fields/string.d.ts +0 -3
  36. package/dist/set/fields/string.js +0 -284
  37. package/dist/set/index.d.ts +0 -3
  38. package/dist/set/index.js +0 -183
  39. package/dist/set/isValidId.d.ts +0 -2
  40. package/dist/set/isValidId.js +0 -21
  41. package/dist/set/types.d.ts +0 -0
  42. package/dist/set/types.js +0 -1
  43. package/dist/types.d.ts +0 -205
  44. package/dist/types.js +0 -27
  45. package/dist/updateSchema.d.ts +0 -2
  46. package/dist/updateSchema.js +0 -16
  47. package/dist/validateSchema.d.ts +0 -4
  48. package/dist/validateSchema.js +0 -41
  49. package/dist/walker/args.d.ts +0 -36
  50. package/dist/walker/args.js +0 -162
  51. package/dist/walker/index.d.ts +0 -6
  52. package/dist/walker/index.js +0 -49
  53. package/dist/walker/parse.d.ts +0 -3
  54. package/dist/walker/parse.js +0 -186
  55. package/dist/walker/types.d.ts +0 -45
  56. package/dist/walker/types.js +0 -10
@@ -1,3 +0,0 @@
1
- import { FieldParsers } from '../../walker';
2
- import { BasedSetTarget } from '../../types';
3
- export declare const fields: Partial<FieldParsers<BasedSetTarget>>;
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fields = void 0;
4
- const error_1 = require("../../error");
5
- const array_1 = require("./array");
6
- const object_1 = require("./object");
7
- const number_1 = require("./number");
8
- const string_1 = require("./string");
9
- const references_1 = require("./references");
10
- const set_1 = require("./set");
11
- const hash_1 = require("@saulx/hash");
12
- const utils_1 = require("@saulx/utils");
13
- exports.fields = {
14
- array: array_1.array,
15
- object: object_1.object,
16
- record: object_1.record,
17
- number: number_1.number,
18
- integer: number_1.integer,
19
- timestamp: number_1.timestamp,
20
- string: string_1.string,
21
- set: set_1.set,
22
- text: string_1.text,
23
- reference: references_1.reference,
24
- references: references_1.references,
25
- cardinality: async (args) => {
26
- let hashedValue;
27
- if (args.value && typeof args.value === 'object') {
28
- args.stop();
29
- if (args.value.$default !== undefined) {
30
- args.error(error_1.ParseError.defaultNotSupported);
31
- return;
32
- }
33
- if (args.value.$value !== undefined) {
34
- hashedValue = (0, hash_1.hashObjectIgnoreKeyOrder)(args.value.$value).toString(16);
35
- }
36
- else {
37
- hashedValue = (0, hash_1.hashObjectIgnoreKeyOrder)(args.value).toString(16);
38
- }
39
- }
40
- else {
41
- hashedValue = (0, hash_1.hash)(args.value).toString(16);
42
- }
43
- args.collect(hashedValue);
44
- },
45
- boolean: async (args) => {
46
- if (typeof args.value !== 'boolean') {
47
- args.error(error_1.ParseError.incorrectFormat);
48
- return;
49
- }
50
- args.collect();
51
- },
52
- json: async (args) => {
53
- args.stop();
54
- try {
55
- const parsedValue = JSON.stringify(args.value);
56
- args.collect(parsedValue);
57
- }
58
- catch (err) {
59
- args.error(error_1.ParseError.invalidJSON);
60
- }
61
- },
62
- enum: async (args) => {
63
- // args.stop()
64
- const enumValues = args.fieldSchema.enum;
65
- for (let i = 0; i < enumValues.length; i++) {
66
- if ((0, utils_1.deepEqual)(enumValues[i], args.value)) {
67
- args.collect(i);
68
- return;
69
- }
70
- }
71
- args.error(error_1.ParseError.incorrectFormat);
72
- },
73
- };
74
- //# sourceMappingURL=index.js.map
@@ -1,4 +0,0 @@
1
- import { FieldParser } from '../../walker';
2
- export declare const number: FieldParser<'number'>;
3
- export declare const integer: FieldParser<'integer'>;
4
- export declare const timestamp: FieldParser<'timestamp'>;
@@ -1,129 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.timestamp = exports.integer = exports.number = void 0;
4
- const error_1 = require("../../error");
5
- const validateNumber = (args, value, ignoreMinMax) => {
6
- const { fieldSchema } = args;
7
- if (typeof value !== 'number') {
8
- args.error(error_1.ParseError.incorrectFormat);
9
- return false;
10
- }
11
- if (isNaN(value)) {
12
- args.error(error_1.ParseError.incorrectFormat);
13
- return false;
14
- }
15
- if (value === Infinity || value === -Infinity) {
16
- args.error(error_1.ParseError.infinityNotSupported);
17
- return false;
18
- }
19
- if (fieldSchema.type === 'integer' && value - Math.floor(value) !== 0) {
20
- args.error(error_1.ParseError.incorrectFormat);
21
- return false;
22
- }
23
- if (fieldSchema.multipleOf &&
24
- value / fieldSchema.multipleOf -
25
- Math.floor(value / fieldSchema.multipleOf) !==
26
- 0) {
27
- args.error(error_1.ParseError.incorrectFormat);
28
- return false;
29
- }
30
- if (ignoreMinMax) {
31
- // TODO: will be handled in the actual modify command
32
- return true;
33
- }
34
- if (fieldSchema.maximum) {
35
- if (fieldSchema.exclusiveMaximum) {
36
- if (value >= fieldSchema.maximum) {
37
- args.error(error_1.ParseError.exceedsMaximum);
38
- return false;
39
- }
40
- }
41
- else if (value > fieldSchema.maximum) {
42
- args.error(error_1.ParseError.exceedsMaximum);
43
- return false;
44
- }
45
- }
46
- if (fieldSchema.minimum) {
47
- if (fieldSchema.exclusiveMinimum) {
48
- if (value <= fieldSchema.minimum) {
49
- args.error(error_1.ParseError.subceedsMinimum);
50
- return false;
51
- }
52
- }
53
- else if (value < fieldSchema.minimum) {
54
- args.error(error_1.ParseError.subceedsMinimum);
55
- return false;
56
- }
57
- }
58
- return true;
59
- };
60
- const validate = (args, value) => {
61
- if (value === null) {
62
- return false;
63
- }
64
- if (typeof value !== 'object') {
65
- return validateNumber(args, value);
66
- }
67
- if ('$value' in value) {
68
- return;
69
- }
70
- args.stop();
71
- for (const key in value) {
72
- if (key === '$default') {
73
- if (!validateNumber(args, value.$default)) {
74
- return false;
75
- }
76
- }
77
- else if (key === '$increment') {
78
- if (!validateNumber(args, value.$increment, true)) {
79
- return false;
80
- }
81
- }
82
- else if (key === '$decrement') {
83
- if (!validateNumber(args, value.$decrement, true)) {
84
- return false;
85
- }
86
- }
87
- else {
88
- args.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
89
- return false;
90
- }
91
- }
92
- return true;
93
- };
94
- const number = async (args) => {
95
- if (!validate(args, args.value)) {
96
- return;
97
- }
98
- args.collect();
99
- };
100
- exports.number = number;
101
- const integer = async (args) => {
102
- if (!validate(args, args.value)) {
103
- return;
104
- }
105
- args.collect();
106
- };
107
- exports.integer = integer;
108
- const timestamp = async (args) => {
109
- if (typeof args.value === 'string') {
110
- if (args.value === 'now') {
111
- // TODO: + 1s + 10s etc
112
- args.value = Date.now();
113
- }
114
- else {
115
- const d = new Date(args.value);
116
- args.value = d.valueOf();
117
- if (isNaN(args.value)) {
118
- args.error(error_1.ParseError.incorrectFormat);
119
- return;
120
- }
121
- }
122
- }
123
- if (!validateNumber(args, args.value)) {
124
- return;
125
- }
126
- args.collect();
127
- };
128
- exports.timestamp = timestamp;
129
- //# sourceMappingURL=number.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParser } from '../../walker';
2
- export declare const object: FieldParser<'object'>;
3
- export declare const record: FieldParser<'record'>;
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.record = exports.object = void 0;
4
- const error_1 = require("../../error");
5
- const object = async (args) => {
6
- if (typeof args.value !== 'object' || args.value === null) {
7
- args.error(error_1.ParseError.incorrectFormat);
8
- return;
9
- }
10
- const isArray = Array.isArray(args.value);
11
- if (isArray) {
12
- args.error(error_1.ParseError.incorrectFormat);
13
- return;
14
- }
15
- args.collect();
16
- return args;
17
- };
18
- exports.object = object;
19
- const record = async (args) => {
20
- if (typeof args.value !== 'object' || args.value === null) {
21
- args.error(error_1.ParseError.incorrectFormat);
22
- return;
23
- }
24
- const isArray = Array.isArray(args.value);
25
- if (isArray) {
26
- args.error(error_1.ParseError.incorrectFormat);
27
- return;
28
- }
29
- args.collect();
30
- return args;
31
- };
32
- exports.record = record;
33
- //# sourceMappingURL=object.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParser } from '../../walker';
2
- export declare const reference: FieldParser<'reference'>;
3
- export declare const references: FieldParser<'references'>;
@@ -1,128 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.references = exports.reference = void 0;
4
- const error_1 = require("../../error");
5
- const isValidId_1 = require("../isValidId");
6
- async function parseOperator(args, key) {
7
- if (Array.isArray(args.value[key])) {
8
- const n = args.create({
9
- key,
10
- skipCollection: true,
11
- value: args.value[key],
12
- });
13
- await n.parse();
14
- if (n.value?.$value) {
15
- return n.value.$value;
16
- }
17
- return [];
18
- }
19
- const n = args.create({
20
- value: args.value[key],
21
- key,
22
- skipCollection: true,
23
- });
24
- await (0, exports.reference)(n);
25
- return [n.value];
26
- }
27
- const typeIsAllowed = (args, type) => {
28
- if ('allowedTypes' in args.fieldSchema) {
29
- let typeMatches = false;
30
- for (const t of args.fieldSchema.allowedTypes) {
31
- if (typeof t === 'string') {
32
- if (t === type) {
33
- return true;
34
- }
35
- }
36
- else {
37
- if (t.type && t.type === type) {
38
- typeMatches = true;
39
- if (t.$filter) {
40
- // stage on requires validation in target
41
- // TODO: ASYNC REQUIRED HOOK
42
- // if(!(await args.target.referenceFilterCondition(value, t.$filter))){
43
- // error(args, ParseError.referenceIsIncorrectType)
44
- // return
45
- // }
46
- }
47
- }
48
- else if (!t.type && t.$filter) {
49
- // if(!(await args.target.referenceFilterCondition))
50
- // error(args, ParseError.referenceIsIncorrectType, )
51
- // return
52
- }
53
- }
54
- }
55
- if (typeMatches === false) {
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);
76
- return;
77
- }
78
- }
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
- }
91
- };
92
- exports.reference = reference;
93
- const references = async (args) => {
94
- const { value } = args;
95
- if (typeof value !== 'object' || value === null) {
96
- args.error(error_1.ParseError.incorrectFormat);
97
- return;
98
- }
99
- args.stop();
100
- if (Array.isArray(value)) {
101
- const parseValues = await Promise.all(value.map(async (id, key) => {
102
- const n = args.create({
103
- value: id,
104
- key,
105
- skipCollection: true,
106
- });
107
- await (0, exports.reference)(n);
108
- return n.value;
109
- }));
110
- args.value = { $value: parseValues };
111
- }
112
- else {
113
- for (const key in args.value) {
114
- if (key === '$add') {
115
- args.value.$add = await parseOperator(args, key);
116
- }
117
- else if (key === '$remove') {
118
- args.value.$remove = await parseOperator(args, key);
119
- }
120
- else {
121
- args.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
122
- }
123
- }
124
- }
125
- args.collect();
126
- };
127
- exports.references = references;
128
- //# sourceMappingURL=references.js.map
@@ -1,2 +0,0 @@
1
- import { FieldParser } from '../../walker';
2
- export declare const set: FieldParser<'set'>;
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.set = void 0;
4
- const error_1 = require("../../error");
5
- async function parseOperator(args, key) {
6
- if (Array.isArray(args.value[key])) {
7
- const n = args.create({
8
- key,
9
- skipCollection: true,
10
- value: args.value[key],
11
- });
12
- await n.parse();
13
- if (n.value?.$value) {
14
- return n.value.$value;
15
- }
16
- return [];
17
- }
18
- const n = args.create({
19
- key,
20
- skipCollection: true,
21
- value: args.value[key],
22
- fieldSchema: args.fieldSchema.items,
23
- });
24
- await n.parse();
25
- return [n.value];
26
- }
27
- const set = async (args) => {
28
- if (typeof args.value !== 'object' || args.value === null) {
29
- args.error(error_1.ParseError.incorrectFormat);
30
- return;
31
- }
32
- args.stop();
33
- const isArray = Array.isArray(args.value);
34
- if (isArray) {
35
- const newArgs = [];
36
- for (let i = 0; i < args.value.length; i++) {
37
- newArgs.push(args.create({
38
- key: i,
39
- value: args.value[i],
40
- fieldSchema: args.fieldSchema.items,
41
- skipCollection: true,
42
- }));
43
- }
44
- await Promise.all(newArgs.map((args) => args.parse()));
45
- args.value = { $value: newArgs.map((args) => args.value) };
46
- }
47
- else {
48
- for (const key in args.value) {
49
- if (key === '$add') {
50
- args.value.$add = await parseOperator(args, key);
51
- }
52
- else if (key === '$remove') {
53
- args.value.$remove = await parseOperator(args, key);
54
- }
55
- else {
56
- args.create({ key }).error(error_1.ParseError.fieldDoesNotExist);
57
- }
58
- }
59
- }
60
- args.collect();
61
- };
62
- exports.set = set;
63
- //# sourceMappingURL=set.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParser } from '../../walker';
2
- export declare const string: FieldParser<'string'>;
3
- export declare const text: FieldParser<'text'>;