@based/schema 4.1.1 → 5.0.0-alpha.1

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 (123) hide show
  1. package/README.md +152 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +2 -0
  4. package/dist/lang.d.ts +153 -0
  5. package/dist/lang.js +153 -0
  6. package/dist/mermaid.d.ts +3 -0
  7. package/dist/mermaid.js +24 -0
  8. package/dist/parse/assert.d.ts +2 -1
  9. package/dist/parse/assert.js +9 -3
  10. package/dist/parse/errors.d.ts +2 -0
  11. package/dist/parse/errors.js +2 -0
  12. package/dist/parse/index.d.ts +5 -4
  13. package/dist/parse/index.js +43 -41
  14. package/dist/parse/props.js +168 -75
  15. package/dist/parse/utils.d.ts +2 -2
  16. package/dist/parse/utils.js +11 -2
  17. package/dist/types.d.ts +72 -23
  18. package/dist/types.js +93 -0
  19. package/package.json +4 -3
  20. package/dist/parsePayload/index.d.ts +0 -3
  21. package/dist/parsePayload/index.js +0 -2
  22. package/dist/parseSchema/assert.d.ts +0 -6
  23. package/dist/parseSchema/assert.js +0 -27
  24. package/dist/parseSchema/errors.d.ts +0 -19
  25. package/dist/parseSchema/errors.js +0 -19
  26. package/dist/parseSchema/index.d.ts +0 -20
  27. package/dist/parseSchema/index.js +0 -132
  28. package/dist/parseSchema/props.d.ts +0 -7
  29. package/dist/parseSchema/props.js +0 -256
  30. package/dist/parseSchema/utils.d.ts +0 -3
  31. package/dist/parseSchema/utils.js +0 -29
  32. package/dist/src/compat/index.d.ts +0 -6
  33. package/dist/src/compat/index.js +0 -217
  34. package/dist/src/compat/oldSchemaType.d.ts +0 -93
  35. package/dist/src/compat/oldSchemaType.js +0 -2
  36. package/dist/src/display/index.d.ts +0 -2
  37. package/dist/src/display/index.js +0 -16
  38. package/dist/src/display/number.d.ts +0 -4
  39. package/dist/src/display/number.js +0 -97
  40. package/dist/src/display/string.d.ts +0 -5
  41. package/dist/src/display/string.js +0 -26
  42. package/dist/src/display/timestamp.d.ts +0 -5
  43. package/dist/src/display/timestamp.js +0 -134
  44. package/dist/src/error.d.ts +0 -21
  45. package/dist/src/error.js +0 -23
  46. package/dist/src/index.d.ts +0 -6
  47. package/dist/src/index.js +0 -7
  48. package/dist/src/languages.d.ts +0 -188
  49. package/dist/src/languages.js +0 -188
  50. package/dist/src/set/fields/array.d.ts +0 -2
  51. package/dist/src/set/fields/array.js +0 -119
  52. package/dist/src/set/fields/index.d.ts +0 -3
  53. package/dist/src/set/fields/index.js +0 -85
  54. package/dist/src/set/fields/number.d.ts +0 -4
  55. package/dist/src/set/fields/number.js +0 -123
  56. package/dist/src/set/fields/object.d.ts +0 -3
  57. package/dist/src/set/fields/object.js +0 -28
  58. package/dist/src/set/fields/references.d.ts +0 -3
  59. package/dist/src/set/fields/references.js +0 -136
  60. package/dist/src/set/fields/set.d.ts +0 -2
  61. package/dist/src/set/fields/set.js +0 -59
  62. package/dist/src/set/fields/string.d.ts +0 -3
  63. package/dist/src/set/fields/string.js +0 -289
  64. package/dist/src/set/index.d.ts +0 -3
  65. package/dist/src/set/index.js +0 -205
  66. package/dist/src/set/isValidId.d.ts +0 -2
  67. package/dist/src/set/isValidId.js +0 -17
  68. package/dist/src/types.d.ts +0 -205
  69. package/dist/src/types.js +0 -113
  70. package/dist/src/updateSchema.d.ts +0 -2
  71. package/dist/src/updateSchema.js +0 -12
  72. package/dist/src/validateSchema/basedSchemaTypeValidator.d.ts +0 -3
  73. package/dist/src/validateSchema/basedSchemaTypeValidator.js +0 -45
  74. package/dist/src/validateSchema/fieldValidators.d.ts +0 -27
  75. package/dist/src/validateSchema/fieldValidators.js +0 -360
  76. package/dist/src/validateSchema/index.d.ts +0 -17
  77. package/dist/src/validateSchema/index.js +0 -109
  78. package/dist/src/validateSchema/utils.d.ts +0 -25
  79. package/dist/src/validateSchema/utils.js +0 -61
  80. package/dist/src/walker/args.d.ts +0 -36
  81. package/dist/src/walker/args.js +0 -158
  82. package/dist/src/walker/index.d.ts +0 -6
  83. package/dist/src/walker/index.js +0 -31
  84. package/dist/src/walker/parse.d.ts +0 -3
  85. package/dist/src/walker/parse.js +0 -182
  86. package/dist/src/walker/types.d.ts +0 -45
  87. package/dist/src/walker/types.js +0 -7
  88. package/dist/test/array.d.ts +0 -1
  89. package/dist/test/array.js +0 -342
  90. package/dist/test/compat.d.ts +0 -1
  91. package/dist/test/compat.js +0 -97
  92. package/dist/test/data/newSchemas.d.ts +0 -2
  93. package/dist/test/data/newSchemas.js +0 -489
  94. package/dist/test/data/oldSchemas.d.ts +0 -2
  95. package/dist/test/data/oldSchemas.js +0 -5058
  96. package/dist/test/display.d.ts +0 -1
  97. package/dist/test/display.js +0 -103
  98. package/dist/test/json.d.ts +0 -1
  99. package/dist/test/json.js +0 -40
  100. package/dist/test/number.d.ts +0 -1
  101. package/dist/test/number.js +0 -374
  102. package/dist/test/reference.d.ts +0 -1
  103. package/dist/test/reference.js +0 -188
  104. package/dist/test/rest.d.ts +0 -1
  105. package/dist/test/rest.js +0 -168
  106. package/dist/test/set.d.ts +0 -1
  107. package/dist/test/set.js +0 -95
  108. package/dist/test/string.d.ts +0 -1
  109. package/dist/test/string.js +0 -120
  110. package/dist/test/text.d.ts +0 -1
  111. package/dist/test/text.js +0 -324
  112. package/dist/test/utils/index.d.ts +0 -11
  113. package/dist/test/utils/index.js +0 -17
  114. package/dist/test/validateSchema/basic.d.ts +0 -1
  115. package/dist/test/validateSchema/basic.js +0 -94
  116. package/dist/test/validateSchema/fields.d.ts +0 -1
  117. package/dist/test/validateSchema/fields.js +0 -436
  118. package/dist/test/validateSchema/languages.d.ts +0 -1
  119. package/dist/test/validateSchema/languages.js +0 -124
  120. package/dist/test/validateSchema/realWorld.d.ts +0 -1
  121. package/dist/test/validateSchema/realWorld.js +0 -13
  122. package/dist/test/walker.d.ts +0 -1
  123. package/dist/test/walker.js +0 -289
@@ -1,188 +0,0 @@
1
- export const languages = {
2
- ab: 'Abkhazian',
3
- aa: 'Afar',
4
- af: 'Afrikaans',
5
- ak: 'Akan',
6
- sq: 'Albanian',
7
- am: 'Amharic',
8
- ar: 'Arabic',
9
- an: 'Aragonese',
10
- hy: 'Armenian',
11
- as: 'Assamese',
12
- av: 'Avaric',
13
- ae: 'Avestan',
14
- ay: 'Aymara',
15
- az: 'Azerbaijani',
16
- bm: 'Bambara',
17
- ba: 'Bashkir',
18
- eu: 'Basque',
19
- be: 'Belarusian',
20
- bn: 'Bengali',
21
- bh: 'Bihari languages',
22
- bi: 'Bislama',
23
- bs: 'Bosnian',
24
- br: 'Breton',
25
- bg: 'Bulgarian',
26
- my: 'Burmese',
27
- ca: 'Catalan, Valencian',
28
- km: 'Central Khmer',
29
- ch: 'Chamorro',
30
- ce: 'Chechen',
31
- ny: 'Chichewa, Chewa, Nyanja',
32
- zh: 'Chinese',
33
- cu: 'Church Slavonic, Old Bulgarian, Old Church Slavonic',
34
- cv: 'Chuvash',
35
- kw: 'Cornish',
36
- co: 'Corsican',
37
- cr: 'Cree',
38
- hr: 'Croatian',
39
- cs: 'Czech',
40
- da: 'Danish',
41
- dv: 'Divehi, Dhivehi, Maldivian',
42
- nl: 'Dutch, Flemish',
43
- dz: 'Dzongkha',
44
- en: 'English',
45
- eo: 'Esperanto',
46
- et: 'Estonian',
47
- ee: 'Ewe',
48
- fo: 'Faroese',
49
- fj: 'Fijian',
50
- fi: 'Finnish',
51
- fr: 'French',
52
- ff: 'Fulah',
53
- gd: 'Gaelic, Scottish Gaelic',
54
- gl: 'Galician',
55
- lg: 'Ganda',
56
- ka: 'Georgian',
57
- de: 'German',
58
- gsw: 'Swiss German',
59
- ki: 'Gikuyu, Kikuyu',
60
- el: 'Greek (Modern)',
61
- kl: 'Greenlandic, Kalaallisut',
62
- gn: 'Guarani',
63
- gu: 'Gujarati',
64
- ht: 'Haitian, Haitian Creole',
65
- ha: 'Hausa',
66
- he: 'Hebrew',
67
- hz: 'Herero',
68
- hi: 'Hindi',
69
- ho: 'Hiri Motu',
70
- hu: 'Hungarian',
71
- is: 'Icelandic',
72
- io: 'Ido',
73
- ig: 'Igbo',
74
- id: 'Indonesian',
75
- ia: 'Interlingua (International Auxiliary Language Association)',
76
- ie: 'Interlingue',
77
- iu: 'Inuktitut',
78
- ik: 'Inupiaq',
79
- ga: 'Irish',
80
- it: 'Italian',
81
- ja: 'Japanese',
82
- jv: 'Javanese',
83
- kn: 'Kannada',
84
- kr: 'Kanuri',
85
- ks: 'Kashmiri',
86
- kk: 'Kazakh',
87
- rw: 'Kinyarwanda',
88
- kv: 'Komi',
89
- kg: 'Kongo',
90
- ko: 'Korean',
91
- kj: 'Kwanyama, Kuanyama',
92
- ku: 'Kurdish',
93
- ky: 'Kyrgyz',
94
- lo: 'Lao',
95
- la: 'Latin',
96
- lv: 'Latvian',
97
- lb: 'Letzeburgesch, Luxembourgish',
98
- li: 'Limburgish, Limburgan, Limburger',
99
- ln: 'Lingala',
100
- lt: 'Lithuanian',
101
- lu: 'Luba-Katanga',
102
- mk: 'Macedonian',
103
- mg: 'Malagasy',
104
- ms: 'Malay',
105
- ml: 'Malayalam',
106
- mt: 'Maltese',
107
- gv: 'Manx',
108
- mi: 'Maori',
109
- mr: 'Marathi',
110
- mh: 'Marshallese',
111
- ro: 'Moldovan, Moldavian, Romanian',
112
- mn: 'Mongolian',
113
- na: 'Nauru',
114
- nv: 'Navajo, Navaho',
115
- nd: 'Northern Ndebele',
116
- ng: 'Ndonga',
117
- ne: 'Nepali',
118
- se: 'Northern Sami',
119
- no: 'Norwegian',
120
- nb: 'Norwegian Bokmål',
121
- nn: 'Norwegian Nynorsk',
122
- ii: 'Nuosu, Sichuan Yi',
123
- oc: 'Occitan (post 1500)',
124
- oj: 'Ojibwa',
125
- or: 'Oriya',
126
- om: 'Oromo',
127
- os: 'Ossetian, Ossetic',
128
- pi: 'Pali',
129
- pa: 'Panjabi, Punjabi',
130
- ps: 'Pashto, Pushto',
131
- fa: 'Persian',
132
- pl: 'Polish',
133
- pt: 'Portuguese',
134
- qu: 'Quechua',
135
- rm: 'Romansh',
136
- rn: 'Rundi',
137
- ru: 'Russian',
138
- sm: 'Samoan',
139
- sg: 'Sango',
140
- sa: 'Sanskrit',
141
- sc: 'Sardinian',
142
- sr: 'Serbian',
143
- sn: 'Shona',
144
- sd: 'Sindhi',
145
- si: 'Sinhala, Sinhalese',
146
- sk: 'Slovak',
147
- sl: 'Slovenian',
148
- so: 'Somali',
149
- st: 'Sotho, Southern',
150
- nr: 'South Ndebele',
151
- es: 'Spanish, Castilian',
152
- su: 'Sundanese',
153
- sw: 'Swahili',
154
- ss: 'Swati',
155
- sv: 'Swedish',
156
- tl: 'Tagalog',
157
- ty: 'Tahitian',
158
- tg: 'Tajik',
159
- ta: 'Tamil',
160
- tt: 'Tatar',
161
- te: 'Telugu',
162
- th: 'Thai',
163
- bo: 'Tibetan',
164
- ti: 'Tigrinya',
165
- to: 'Tonga (Tonga Islands)',
166
- ts: 'Tsonga',
167
- tn: 'Tswana',
168
- tr: 'Turkish',
169
- tk: 'Turkmen',
170
- tw: 'Twi',
171
- ug: 'Uighur, Uyghur',
172
- uk: 'Ukrainian',
173
- ur: 'Urdu',
174
- uz: 'Uzbek',
175
- ve: 'Venda',
176
- vi: 'Vietnamese',
177
- vo: 'Volap_k',
178
- wa: 'Walloon',
179
- cy: 'Welsh',
180
- fy: 'Western Frisian',
181
- wo: 'Wolof',
182
- xh: 'Xhosa',
183
- yi: 'Yiddish',
184
- yo: 'Yoruba',
185
- za: 'Zhuang, Chuang',
186
- zu: 'Zulu',
187
- };
188
- //# sourceMappingURL=languages.js.map
@@ -1,2 +0,0 @@
1
- import { FieldParser } from '../../walker/index.js';
2
- export declare const array: FieldParser<'array'>;
@@ -1,119 +0,0 @@
1
- import { setByPath } from '@saulx/utils';
2
- import { ParseError } from '../../error.js';
3
- const collectOperation = (fromArgs, collected, value, makeNegative) => {
4
- fromArgs.collect(value);
5
- if (collected.length) {
6
- const collect = fromArgs.root._opts.collect;
7
- for (const args of collected) {
8
- if (makeNegative) {
9
- args.path[fromArgs.path.length] =
10
- args.path[fromArgs.path.length] - makeNegative;
11
- collect(args);
12
- }
13
- else {
14
- collect(args);
15
- }
16
- }
17
- }
18
- };
19
- const parseArray = async (args, value, idx = 0) => {
20
- const fromValue = Array.isArray(value) ? value : [value];
21
- const q = [];
22
- const arr = new Array(fromValue.length);
23
- const collectNested = ['object', 'record', 'text'].includes(args.fieldSchema.items.type);
24
- const collected = [];
25
- for (let i = 0; i < fromValue.length; i++) {
26
- q.push(args.parse({
27
- key: i + idx,
28
- value: fromValue[i],
29
- fieldSchema: args.fieldSchema.items,
30
- collect: (nArgs) => {
31
- const p = nArgs.path.slice(args.path.length);
32
- // @ts-ignore
33
- p[0] = p[0] - idx;
34
- setByPath(arr, p, nArgs.value);
35
- if (collectNested) {
36
- collected.push(nArgs);
37
- }
38
- },
39
- }));
40
- }
41
- await Promise.all(q);
42
- return { arr, collected };
43
- };
44
- const operations = {
45
- $insert: async (args, value) => {
46
- if (typeof value.$insert.$idx !== 'number') {
47
- args.error(ParseError.incorrectFormat);
48
- return;
49
- }
50
- const { collected, arr } = await parseArray(args, value.$insert.$value, value.$insert.$idx);
51
- value.$insert.$value = arr;
52
- collectOperation(args, collected, value);
53
- },
54
- $push: async (args, value) => {
55
- const { collected, arr } = await parseArray(args, value.$push.$value ?? value.$push);
56
- value.$push = arr;
57
- collectOperation(args, collected, value, arr.length);
58
- },
59
- $unshift: async (args, value) => {
60
- const { collected, arr } = await parseArray(args, value.$unshift.$value ?? value.$unshift);
61
- value.$unshift = arr;
62
- collectOperation(args, collected, value);
63
- },
64
- $remove: async (args, value) => {
65
- if (typeof value.$remove.$idx !== 'number') {
66
- args.error(ParseError.incorrectFormat);
67
- return;
68
- }
69
- args.collect(value);
70
- },
71
- $assign: async (args, value) => {
72
- if (typeof value.$assign !== 'object' ||
73
- typeof value.$assign.$idx !== 'number') {
74
- args.error(ParseError.incorrectFormat);
75
- return;
76
- }
77
- await args.parse({
78
- key: value.$assign.$idx,
79
- value: value.$assign.$value,
80
- fieldSchema: args.fieldSchema.items,
81
- });
82
- },
83
- };
84
- export const array = async (args) => {
85
- args.stop();
86
- if (typeof args.value !== 'object') {
87
- args.error(ParseError.incorrectFormat);
88
- return;
89
- }
90
- let value = '$value' in args.value ? args.value.$value : args.value;
91
- if (Array.isArray(value)) {
92
- const q = [];
93
- args.collect({ $delete: true });
94
- for (let i = 0; i < value.length; i++) {
95
- q.push(args.parse({
96
- key: i,
97
- value: args.value[i],
98
- fieldSchema: args.fieldSchema.items,
99
- }));
100
- }
101
- await Promise.all(q);
102
- return;
103
- }
104
- let hasOperation = false;
105
- for (const key in value) {
106
- if (operations[key]) {
107
- if (hasOperation) {
108
- args.error(ParseError.multipleOperationsNotAllowed);
109
- return;
110
- }
111
- await operations[key](args, value);
112
- hasOperation = true;
113
- }
114
- else {
115
- args.error(ParseError.fieldDoesNotExist);
116
- }
117
- }
118
- };
119
- //# sourceMappingURL=array.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParsers } from '../../walker/index.js';
2
- import { BasedSetTarget } from '../../types.js';
3
- export declare const fields: Partial<FieldParsers<BasedSetTarget>>;
@@ -1,85 +0,0 @@
1
- import { ParseError } from '../../error.js';
2
- import { array } from './array.js';
3
- import { object, record } from './object.js';
4
- import { number, integer, timestamp } from './number.js';
5
- import { string, text } from './string.js';
6
- import { reference, references } from './references.js';
7
- import { set } from './set.js';
8
- import { hashObjectIgnoreKeyOrder, hash } from '@saulx/hash';
9
- import { deepEqual } from '@saulx/utils';
10
- export const fields = {
11
- array,
12
- object,
13
- record,
14
- number,
15
- integer,
16
- timestamp,
17
- string,
18
- set,
19
- text,
20
- reference,
21
- references,
22
- cardinality: async (args) => {
23
- let hashedValue;
24
- if (args.value && typeof args.value === 'object') {
25
- args.stop();
26
- if (args.value.$default !== undefined) {
27
- args.error(ParseError.defaultNotSupported);
28
- return;
29
- }
30
- if (args.value.$value !== undefined) {
31
- hashedValue = hashObjectIgnoreKeyOrder(args.value.$value).toString(16);
32
- }
33
- else {
34
- hashedValue = hashObjectIgnoreKeyOrder(args.value).toString(16);
35
- }
36
- }
37
- else {
38
- hashedValue = hash(args.value).toString(16);
39
- }
40
- args.collect(hashedValue);
41
- },
42
- boolean: async (args) => {
43
- if (typeof args.value !== 'boolean') {
44
- args.error(ParseError.incorrectFormat);
45
- return;
46
- }
47
- args.collect();
48
- },
49
- json: async (args) => {
50
- args.stop();
51
- try {
52
- const parsedValue = JSON.stringify(args.value);
53
- args.collect(parsedValue);
54
- }
55
- catch (err) {
56
- args.error(ParseError.invalidJSON);
57
- }
58
- },
59
- enum: async (args) => {
60
- const enumValues = args.fieldSchema.enum;
61
- for (let i = 0; i < enumValues.length; i++) {
62
- if (deepEqual(enumValues[i], args.value)) {
63
- args.collect(i);
64
- return;
65
- }
66
- }
67
- args.error(ParseError.incorrectFormat);
68
- },
69
- any: async (args) => {
70
- args.stop();
71
- if (typeof args.value !== 'object') {
72
- args.collect(args.value);
73
- return;
74
- }
75
- const q = [];
76
- for (const key in args.value) {
77
- q.push(args.parse({
78
- key: key,
79
- value: args.value[key],
80
- fieldSchema: { type: 'any' },
81
- }));
82
- }
83
- },
84
- };
85
- //# sourceMappingURL=index.js.map
@@ -1,4 +0,0 @@
1
- import { FieldParser } from '../../walker/index.js';
2
- export declare const number: FieldParser<'number'>;
3
- export declare const integer: FieldParser<'integer'>;
4
- export declare const timestamp: FieldParser<'timestamp'>;
@@ -1,123 +0,0 @@
1
- import { ParseError } from '../../error.js';
2
- const validateNumber = (args, value, ignoreMinMax) => {
3
- const { fieldSchema } = args;
4
- if (typeof value !== 'number') {
5
- args.error(ParseError.incorrectFormat);
6
- return false;
7
- }
8
- if (isNaN(value)) {
9
- args.error(ParseError.incorrectFormat);
10
- return false;
11
- }
12
- if (value === Infinity || value === -Infinity) {
13
- args.error(ParseError.infinityNotSupported);
14
- return false;
15
- }
16
- if (fieldSchema.type === 'integer' && value - Math.floor(value) !== 0) {
17
- args.error(ParseError.incorrectFormat);
18
- return false;
19
- }
20
- if (fieldSchema.multipleOf &&
21
- value / fieldSchema.multipleOf -
22
- Math.floor(value / fieldSchema.multipleOf) !==
23
- 0) {
24
- args.error(ParseError.incorrectFormat);
25
- return false;
26
- }
27
- if (ignoreMinMax) {
28
- // TODO: will be handled in the actual modify command
29
- return true;
30
- }
31
- if (fieldSchema.maximum) {
32
- if (fieldSchema.exclusiveMaximum) {
33
- if (value >= fieldSchema.maximum) {
34
- args.error(ParseError.exceedsMaximum);
35
- return false;
36
- }
37
- }
38
- else if (value > fieldSchema.maximum) {
39
- args.error(ParseError.exceedsMaximum);
40
- return false;
41
- }
42
- }
43
- if (fieldSchema.minimum) {
44
- if (fieldSchema.exclusiveMinimum) {
45
- if (value <= fieldSchema.minimum) {
46
- args.error(ParseError.subceedsMinimum);
47
- return false;
48
- }
49
- }
50
- else if (value < fieldSchema.minimum) {
51
- args.error(ParseError.subceedsMinimum);
52
- return false;
53
- }
54
- }
55
- return true;
56
- };
57
- const validate = (args, value) => {
58
- if (value === null) {
59
- return false;
60
- }
61
- if (typeof value !== 'object') {
62
- return validateNumber(args, value);
63
- }
64
- if ('$value' in value) {
65
- return;
66
- }
67
- args.stop();
68
- for (const key in value) {
69
- if (key === '$default') {
70
- if (!validateNumber(args, value.$default)) {
71
- return false;
72
- }
73
- }
74
- else if (key === '$increment') {
75
- if (!validateNumber(args, value.$increment, true)) {
76
- return false;
77
- }
78
- }
79
- else if (key === '$decrement') {
80
- if (!validateNumber(args, value.$decrement, true)) {
81
- return false;
82
- }
83
- }
84
- else {
85
- args.create({ key }).error(ParseError.fieldDoesNotExist);
86
- return false;
87
- }
88
- }
89
- return true;
90
- };
91
- export const number = async (args) => {
92
- if (!validate(args, args.value)) {
93
- return;
94
- }
95
- args.collect();
96
- };
97
- export const integer = async (args) => {
98
- if (!validate(args, args.value)) {
99
- return;
100
- }
101
- args.collect();
102
- };
103
- export const timestamp = async (args) => {
104
- if (typeof args.value === 'string') {
105
- if (args.value === 'now') {
106
- // TODO: + 1s + 10s etc
107
- args.value = Date.now();
108
- }
109
- else {
110
- const d = new Date(args.value);
111
- args.value = d.valueOf();
112
- if (isNaN(args.value)) {
113
- args.error(ParseError.incorrectFormat);
114
- return;
115
- }
116
- }
117
- }
118
- if (!validateNumber(args, args.value)) {
119
- return;
120
- }
121
- args.collect();
122
- };
123
- //# sourceMappingURL=number.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParser } from '../../walker/index.js';
2
- export declare const object: FieldParser<'object'>;
3
- export declare const record: FieldParser<'record'>;
@@ -1,28 +0,0 @@
1
- import { ParseError } from '../../error.js';
2
- export const object = async (args) => {
3
- if (typeof args.value !== 'object' || args.value === null) {
4
- args.error(ParseError.incorrectFormat);
5
- return;
6
- }
7
- const isArray = Array.isArray(args.value);
8
- if (isArray) {
9
- args.error(ParseError.incorrectFormat);
10
- return;
11
- }
12
- args.collect();
13
- return args;
14
- };
15
- export const record = async (args) => {
16
- if (typeof args.value !== 'object' || args.value === null) {
17
- args.error(ParseError.incorrectFormat);
18
- return;
19
- }
20
- const isArray = Array.isArray(args.value);
21
- if (isArray) {
22
- args.error(ParseError.incorrectFormat);
23
- return;
24
- }
25
- args.collect();
26
- return args;
27
- };
28
- //# sourceMappingURL=object.js.map
@@ -1,3 +0,0 @@
1
- import { FieldParser } from '../../walker/index.js';
2
- export declare const reference: FieldParser<'reference'>;
3
- export declare const references: FieldParser<'references'>;
@@ -1,136 +0,0 @@
1
- import { ParseError } from '../../error.js';
2
- import { isValidId } from '../isValidId.js';
3
- async function parseOperator(args, key) {
4
- if (Array.isArray(args.value[key])) {
5
- const n = args.create({
6
- key,
7
- skipCollection: true,
8
- value: args.value[key],
9
- });
10
- await n.parse();
11
- if (n.value?.$value) {
12
- return n.value.$value;
13
- }
14
- return [];
15
- }
16
- const n = args.create({
17
- value: args.value[key],
18
- key,
19
- skipCollection: true,
20
- });
21
- await reference(n);
22
- return [n.value];
23
- }
24
- const typeIsAllowed = (args, type) => {
25
- if ('allowedType' in args.fieldSchema) {
26
- const t = args.fieldSchema.allowedType;
27
- return typeof t === 'string' && t === type;
28
- }
29
- return true;
30
- };
31
- export const reference = async (args) => {
32
- // TODO: setting an object here , handling $alias (both async hooks)
33
- // Block if path contains $remove (maybe not for $alias)
34
- if (typeof args.value === 'object') {
35
- if (args.root._opts.asyncOperationHandler) {
36
- if (args.value.type && !typeIsAllowed(args, args.value.type)) {
37
- args.error(ParseError.referenceIsIncorrectType);
38
- return;
39
- }
40
- if (!args.target.errors.length) {
41
- args.value = await args.root._opts.asyncOperationHandler(args, 'modifyObject');
42
- }
43
- }
44
- else {
45
- args.error(ParseError.nestedModifyObjectNotAllowed);
46
- return;
47
- }
48
- }
49
- if (!isValidId(args.schema, args.value)) {
50
- args.error(ParseError.incorrectFormat);
51
- return;
52
- }
53
- const prefix = args.value.slice(0, 2);
54
- const targetType = args.schema.prefixToTypeMapping[prefix];
55
- if (typeIsAllowed(args, targetType)) {
56
- args.collect();
57
- }
58
- else {
59
- args.error(ParseError.referenceIsIncorrectType);
60
- }
61
- };
62
- function parseSortableOp(args, value, op) {
63
- if (typeof value[op] !== 'object') {
64
- args.error(ParseError.incorrectFormat);
65
- return;
66
- }
67
- if (!args.fieldSchema.sortable) {
68
- args.error(ParseError.incorrectFieldType);
69
- return;
70
- }
71
- switch (typeof value[op].$idx) {
72
- case 'bigint':
73
- break;
74
- case 'number':
75
- value[op].$idx = BigInt(value[op].$idx);
76
- break;
77
- default:
78
- args.error(ParseError.incorrectFormat);
79
- return;
80
- }
81
- if (Array.isArray(value[op].$value)) {
82
- // NOP
83
- }
84
- else if (typeof value[op].$value === 'string') {
85
- value[op].$value = [value[op].$value];
86
- }
87
- else {
88
- args.error(ParseError.incorrectFormat);
89
- return;
90
- }
91
- }
92
- export const references = async (args) => {
93
- const { value } = args;
94
- if (typeof value !== 'object' || value === null) {
95
- args.error(ParseError.incorrectFormat);
96
- return;
97
- }
98
- args.stop();
99
- if (Array.isArray(value)) {
100
- const parseValues = await Promise.all(value.map(async (id, key) => {
101
- const n = args.create({
102
- value: id,
103
- key,
104
- skipCollection: true,
105
- });
106
- await reference(n);
107
- return n.value;
108
- }));
109
- args.value = { $value: parseValues };
110
- }
111
- else {
112
- for (const key in args.value) {
113
- if (key === '$add') {
114
- args.value.$add = await parseOperator(args, key);
115
- }
116
- else if (key === '$remove') {
117
- args.value.$remove = await parseOperator(args, key);
118
- }
119
- else if (key === '$assign') {
120
- parseSortableOp(args, value, '$assign');
121
- }
122
- else if (key === '$insert') {
123
- parseSortableOp(args, value, '$insert');
124
- }
125
- else if (key === '$move') {
126
- parseSortableOp(args, value, '$move');
127
- value.$move.$value.reverse();
128
- }
129
- else {
130
- args.create({ key }).error(ParseError.fieldDoesNotExist);
131
- }
132
- }
133
- }
134
- args.collect();
135
- };
136
- //# sourceMappingURL=references.js.map