@based/schema 2.7.0 → 3.0.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/display/index.d.ts +2 -0
- package/dist/display/index.js +26 -0
- package/dist/display/number.d.ts +3 -0
- package/dist/display/number.js +89 -0
- package/dist/display/string.d.ts +3 -0
- package/dist/display/string.js +23 -0
- package/dist/display/timestamp.d.ts +3 -0
- package/dist/display/timestamp.js +127 -0
- package/dist/error.d.ts +19 -0
- package/dist/error.js +24 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -0
- package/dist/languages.d.ts +187 -0
- package/dist/languages.js +190 -0
- package/dist/set/fields/array.d.ts +2 -0
- package/dist/set/fields/array.js +123 -0
- package/dist/set/fields/index.d.ts +3 -0
- package/dist/set/fields/index.js +74 -0
- package/dist/set/fields/number.d.ts +4 -0
- package/dist/set/fields/number.js +129 -0
- package/dist/set/fields/object.d.ts +3 -0
- package/dist/set/fields/object.js +33 -0
- package/dist/set/fields/references.d.ts +3 -0
- package/dist/set/fields/references.js +128 -0
- package/dist/set/fields/set.d.ts +2 -0
- package/dist/set/fields/set.js +63 -0
- package/dist/set/fields/string.d.ts +3 -0
- package/dist/set/fields/string.js +284 -0
- package/dist/set/index.d.ts +3 -0
- package/dist/set/index.js +183 -0
- package/dist/set/isValidId.d.ts +2 -0
- package/dist/set/isValidId.js +21 -0
- package/dist/set/types.d.ts +0 -0
- package/dist/set/types.js +1 -0
- package/dist/src/compat/index.d.ts +6 -2
- package/dist/src/compat/index.js +202 -2
- package/dist/src/compat/newToOld.d.ts +2 -2
- package/dist/src/compat/newToOld.js +14 -9
- package/dist/src/compat/oldSchemaType.d.ts +28 -4
- package/dist/src/compat/oldToNew.d.ts +1 -1
- package/dist/src/set/fields/array.js +4 -4
- package/dist/src/types.d.ts +1 -1
- package/dist/src/validateSchema/fieldValidators.js +12 -4
- package/dist/src/validateSchema/utils.d.ts +4 -0
- package/dist/src/validateSchema/utils.js +8 -0
- package/dist/test/array.js +4 -4
- package/dist/test/compat.js +38 -2
- package/dist/test/data/newSchemas.d.ts +2 -2
- package/dist/test/data/newSchemas.js +244 -7
- package/dist/test/rest.js +1 -1
- package/dist/test/validateSchema/fields.js +75 -5
- package/dist/test/validateSchema/realWorld.d.ts +1 -0
- package/dist/test/validateSchema/realWorld.js +13 -0
- package/dist/test/walker.js +2 -2
- package/dist/types.d.ts +205 -0
- package/dist/types.js +27 -0
- package/dist/updateSchema.d.ts +2 -0
- package/dist/updateSchema.js +16 -0
- package/dist/validateSchema.d.ts +4 -0
- package/dist/validateSchema.js +41 -0
- package/dist/walker/args.d.ts +36 -0
- package/dist/walker/args.js +162 -0
- package/dist/walker/index.d.ts +6 -0
- package/dist/walker/index.js +49 -0
- package/dist/walker/parse.d.ts +3 -0
- package/dist/walker/parse.js +186 -0
- package/dist/walker/types.d.ts +45 -0
- package/dist/walker/types.js +10 -0
- package/package.json +4 -3
- package/dist/src/compat/Untitled-1.d.ts +0 -3
- package/dist/src/compat/Untitled-1.js +0 -205
|
@@ -1,4 +1,240 @@
|
|
|
1
|
+
const defaultFields = {
|
|
2
|
+
createdAt: {
|
|
3
|
+
readOnly: true,
|
|
4
|
+
type: 'timestamp',
|
|
5
|
+
},
|
|
6
|
+
updatedAt: {
|
|
7
|
+
readOnly: true,
|
|
8
|
+
type: 'timestamp',
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
const testSchema = {
|
|
12
|
+
language: 'en',
|
|
13
|
+
translations: ['pt', 'es'],
|
|
14
|
+
root: {
|
|
15
|
+
fields: {
|
|
16
|
+
currentSeason: {
|
|
17
|
+
type: 'reference',
|
|
18
|
+
title: 'Currently active season',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
types: {
|
|
23
|
+
file: {
|
|
24
|
+
fields: {
|
|
25
|
+
...defaultFields,
|
|
26
|
+
width: {
|
|
27
|
+
type: 'number',
|
|
28
|
+
},
|
|
29
|
+
height: {
|
|
30
|
+
type: 'number',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
country: {
|
|
35
|
+
prefix: 'co',
|
|
36
|
+
title: 'Country',
|
|
37
|
+
description: 'This is the country',
|
|
38
|
+
fields: {
|
|
39
|
+
...defaultFields,
|
|
40
|
+
name: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
title: 'Country code',
|
|
43
|
+
},
|
|
44
|
+
title: {
|
|
45
|
+
type: 'text',
|
|
46
|
+
title: 'Translated country name',
|
|
47
|
+
},
|
|
48
|
+
circleImage: {
|
|
49
|
+
type: 'reference',
|
|
50
|
+
title: 'Circular flag image',
|
|
51
|
+
},
|
|
52
|
+
heartImage: {
|
|
53
|
+
type: 'reference',
|
|
54
|
+
title: 'Heart-shaped flag image',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
season: {
|
|
59
|
+
prefix: 'se',
|
|
60
|
+
fields: {
|
|
61
|
+
...defaultFields,
|
|
62
|
+
name: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
title: 'Season name',
|
|
65
|
+
},
|
|
66
|
+
winner: {
|
|
67
|
+
type: 'reference',
|
|
68
|
+
allowedTypes: ['contestant'],
|
|
69
|
+
},
|
|
70
|
+
countries: {
|
|
71
|
+
type: 'references',
|
|
72
|
+
title: 'Participating countries',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
episode: {
|
|
77
|
+
prefix: 'ep',
|
|
78
|
+
fields: {
|
|
79
|
+
...defaultFields,
|
|
80
|
+
episodeType: {
|
|
81
|
+
type: 'string', // redemption, grandFinal, nationalFinal or nationalQualifier
|
|
82
|
+
title: 'Type of episode',
|
|
83
|
+
},
|
|
84
|
+
title: {
|
|
85
|
+
type: 'text',
|
|
86
|
+
title: 'Episode title',
|
|
87
|
+
},
|
|
88
|
+
image: {
|
|
89
|
+
type: 'reference',
|
|
90
|
+
allowedTypes: ['file'],
|
|
91
|
+
},
|
|
92
|
+
startTime: {
|
|
93
|
+
type: 'timestamp',
|
|
94
|
+
title: 'Start time',
|
|
95
|
+
},
|
|
96
|
+
endTime: {
|
|
97
|
+
type: 'timestamp',
|
|
98
|
+
title: 'End time',
|
|
99
|
+
},
|
|
100
|
+
producer: {
|
|
101
|
+
type: 'reference',
|
|
102
|
+
allowedTypes: ['broadcaster'],
|
|
103
|
+
},
|
|
104
|
+
distributors: {
|
|
105
|
+
type: 'references',
|
|
106
|
+
allowedTypes: ['broadcaster'],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
votingWindow: {
|
|
111
|
+
prefix: 'vo',
|
|
112
|
+
fields: {
|
|
113
|
+
...defaultFields,
|
|
114
|
+
startTime: {
|
|
115
|
+
type: 'timestamp',
|
|
116
|
+
},
|
|
117
|
+
closeTime: {
|
|
118
|
+
type: 'timestamp',
|
|
119
|
+
},
|
|
120
|
+
endTime: {
|
|
121
|
+
type: 'timestamp',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
contestant: {
|
|
126
|
+
prefix: 'ct',
|
|
127
|
+
fields: {
|
|
128
|
+
...defaultFields,
|
|
129
|
+
name: {
|
|
130
|
+
type: 'string',
|
|
131
|
+
},
|
|
132
|
+
song: {
|
|
133
|
+
type: 'string',
|
|
134
|
+
},
|
|
135
|
+
songUrl: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
format: 'URL',
|
|
138
|
+
},
|
|
139
|
+
writer: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
},
|
|
142
|
+
image: {
|
|
143
|
+
type: 'reference',
|
|
144
|
+
allowedTypes: ['file'],
|
|
145
|
+
},
|
|
146
|
+
content: {
|
|
147
|
+
type: 'text',
|
|
148
|
+
format: 'html',
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
broadcaster: {
|
|
153
|
+
prefix: 'br',
|
|
154
|
+
fields: {
|
|
155
|
+
...defaultFields,
|
|
156
|
+
name: {
|
|
157
|
+
type: 'string',
|
|
158
|
+
},
|
|
159
|
+
email: {
|
|
160
|
+
type: 'string',
|
|
161
|
+
format: 'email',
|
|
162
|
+
},
|
|
163
|
+
image: {
|
|
164
|
+
type: 'reference',
|
|
165
|
+
allowedTypes: ['file'],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
feed: {
|
|
170
|
+
prefix: 'fe',
|
|
171
|
+
fields: {
|
|
172
|
+
...defaultFields,
|
|
173
|
+
title: {
|
|
174
|
+
type: 'text',
|
|
175
|
+
},
|
|
176
|
+
content: {
|
|
177
|
+
type: 'text',
|
|
178
|
+
format: 'html',
|
|
179
|
+
},
|
|
180
|
+
imageUrl: {
|
|
181
|
+
type: 'string',
|
|
182
|
+
format: 'URL',
|
|
183
|
+
},
|
|
184
|
+
videoUrl: {
|
|
185
|
+
type: 'string',
|
|
186
|
+
format: 'URL',
|
|
187
|
+
},
|
|
188
|
+
url: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
format: 'URL',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
user: {
|
|
195
|
+
prefix: 'us',
|
|
196
|
+
fields: {
|
|
197
|
+
...defaultFields,
|
|
198
|
+
name: { type: 'string' },
|
|
199
|
+
language: { type: 'string' },
|
|
200
|
+
notify: { type: 'boolean' },
|
|
201
|
+
country: { type: 'string' },
|
|
202
|
+
customerId: {
|
|
203
|
+
// stripe customerId
|
|
204
|
+
type: 'string',
|
|
205
|
+
},
|
|
206
|
+
credits: {
|
|
207
|
+
type: 'record',
|
|
208
|
+
values: {
|
|
209
|
+
type: 'object',
|
|
210
|
+
properties: {
|
|
211
|
+
purchased: {
|
|
212
|
+
type: 'number',
|
|
213
|
+
},
|
|
214
|
+
earned: {
|
|
215
|
+
type: 'number',
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
voteHistory: {
|
|
221
|
+
type: 'record',
|
|
222
|
+
values: {
|
|
223
|
+
type: 'record',
|
|
224
|
+
values: {
|
|
225
|
+
type: 'record',
|
|
226
|
+
values: {
|
|
227
|
+
type: 'number',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
};
|
|
1
236
|
export const newSchemas = [
|
|
237
|
+
testSchema,
|
|
2
238
|
{
|
|
3
239
|
types: {
|
|
4
240
|
thing: {
|
|
@@ -11,9 +247,13 @@ export const newSchemas = [
|
|
|
11
247
|
bla: {
|
|
12
248
|
prefix: 'bl',
|
|
13
249
|
fields: {
|
|
14
|
-
|
|
15
|
-
|
|
250
|
+
createdAt: {
|
|
251
|
+
type: 'timestamp',
|
|
252
|
+
readOnly: true,
|
|
16
253
|
},
|
|
254
|
+
// enum: {
|
|
255
|
+
// enum: ['tony', 'jim'],
|
|
256
|
+
// },
|
|
17
257
|
setOfNumbers: {
|
|
18
258
|
type: 'set',
|
|
19
259
|
items: {
|
|
@@ -44,7 +284,7 @@ export const newSchemas = [
|
|
|
44
284
|
properties: {
|
|
45
285
|
bla: {
|
|
46
286
|
type: 'array',
|
|
47
|
-
|
|
287
|
+
items: {
|
|
48
288
|
type: 'object',
|
|
49
289
|
properties: {
|
|
50
290
|
snux: {
|
|
@@ -69,7 +309,6 @@ export const newSchemas = [
|
|
|
69
309
|
},
|
|
70
310
|
},
|
|
71
311
|
},
|
|
72
|
-
$defs: {},
|
|
73
312
|
language: 'en',
|
|
74
313
|
translations: ['de', 'nl', 'ro', 'za', 'ae'],
|
|
75
314
|
root: {
|
|
@@ -107,7 +346,6 @@ export const newSchemas = [
|
|
|
107
346
|
},
|
|
108
347
|
},
|
|
109
348
|
},
|
|
110
|
-
$defs: {},
|
|
111
349
|
language: 'en',
|
|
112
350
|
root: {
|
|
113
351
|
fields: {},
|
|
@@ -120,7 +358,6 @@ export const newSchemas = [
|
|
|
120
358
|
{
|
|
121
359
|
language: 'en',
|
|
122
360
|
translations: ['nl'],
|
|
123
|
-
$defs: {},
|
|
124
361
|
prefixToTypeMapping: {},
|
|
125
362
|
root: {
|
|
126
363
|
fields: {},
|
|
@@ -239,7 +476,7 @@ export const newSchemas = [
|
|
|
239
476
|
bidirectional: { fromField: 'usedIn' },
|
|
240
477
|
},
|
|
241
478
|
hits: { type: 'number' }, // get a bit more going here maybe? what does this mean
|
|
242
|
-
membership: { enum: ['Need membership', 'Free'] },
|
|
479
|
+
// membership: { enum: ['Need membership', 'Free'] },
|
|
243
480
|
location: { type: 'text' }, // or string its just city name or smth
|
|
244
481
|
bio: { type: 'text', format: 'json' }, //has a href and stuff so aarich text
|
|
245
482
|
tweet: { type: 'string' }, // ask if it needs translation // 'The 2009 allocation of solar subsidies in Solvakia "was rigged," say a US cable. PM Fico denies it.',
|
package/dist/test/rest.js
CHANGED
|
@@ -319,7 +319,7 @@ test('arrays', async (t) => {
|
|
|
319
319
|
fields: {
|
|
320
320
|
arrayField: {
|
|
321
321
|
type: 'array',
|
|
322
|
-
|
|
322
|
+
items: {
|
|
323
323
|
type: 'string',
|
|
324
324
|
},
|
|
325
325
|
},
|
|
@@ -333,13 +333,13 @@ test('arrays', async (t) => {
|
|
|
333
333
|
fields: {
|
|
334
334
|
arrayField: {
|
|
335
335
|
type: 'array',
|
|
336
|
-
|
|
336
|
+
items: {
|
|
337
337
|
type: 'object',
|
|
338
338
|
properties: {
|
|
339
339
|
aWrongObjectField: {
|
|
340
340
|
type: 'object',
|
|
341
341
|
// @ts-ignore
|
|
342
|
-
|
|
342
|
+
items: { type: 'string' },
|
|
343
343
|
},
|
|
344
344
|
},
|
|
345
345
|
},
|
|
@@ -354,13 +354,83 @@ test('arrays', async (t) => {
|
|
|
354
354
|
'root',
|
|
355
355
|
'fields',
|
|
356
356
|
'arrayField',
|
|
357
|
-
'
|
|
357
|
+
'items',
|
|
358
358
|
'properties',
|
|
359
359
|
'aWrongObjectField',
|
|
360
|
-
'
|
|
360
|
+
'items',
|
|
361
361
|
],
|
|
362
362
|
},
|
|
363
363
|
],
|
|
364
364
|
});
|
|
365
365
|
});
|
|
366
|
+
test('enum', async (t) => {
|
|
367
|
+
t.deepEqual(await validateSchema({
|
|
368
|
+
root: {
|
|
369
|
+
fields: {
|
|
370
|
+
enumField: {
|
|
371
|
+
enum: ['one', 'two'],
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
}), {
|
|
376
|
+
valid: true,
|
|
377
|
+
});
|
|
378
|
+
t.deepEqual(await validateSchema({
|
|
379
|
+
root: {
|
|
380
|
+
fields: {
|
|
381
|
+
enumField: {
|
|
382
|
+
enum: [1, 2],
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
}), {
|
|
387
|
+
valid: true,
|
|
388
|
+
});
|
|
389
|
+
t.deepEqual(await validateSchema({
|
|
390
|
+
root: {
|
|
391
|
+
fields: {
|
|
392
|
+
enumField: {
|
|
393
|
+
enum: [{ one: 'one' }, { two: 'two' }],
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
}), {
|
|
398
|
+
valid: true,
|
|
399
|
+
});
|
|
400
|
+
t.deepEqual(await validateSchema({
|
|
401
|
+
root: {
|
|
402
|
+
fields: {
|
|
403
|
+
enumField: {
|
|
404
|
+
// @ts-ignore
|
|
405
|
+
enum: 'invalidEnum',
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
}), {
|
|
410
|
+
errors: [
|
|
411
|
+
{
|
|
412
|
+
code: ParseError.incorrectFormat,
|
|
413
|
+
path: ['root', 'fields', 'enumField', 'enum'],
|
|
414
|
+
},
|
|
415
|
+
],
|
|
416
|
+
});
|
|
417
|
+
t.deepEqual(await validateSchema({
|
|
418
|
+
root: {
|
|
419
|
+
fields: {
|
|
420
|
+
enumField: {
|
|
421
|
+
enum: ['one', 'two'],
|
|
422
|
+
// @ts-ignore
|
|
423
|
+
invalidProperty: 'invalid',
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
}), {
|
|
428
|
+
errors: [
|
|
429
|
+
{
|
|
430
|
+
code: ParseError.invalidProperty,
|
|
431
|
+
path: ['root', 'fields', 'enumField', 'invalidProperty'],
|
|
432
|
+
},
|
|
433
|
+
],
|
|
434
|
+
});
|
|
435
|
+
});
|
|
366
436
|
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { newSchemas } from '../data/newSchemas.js';
|
|
3
|
+
import { validateSchema } from '../../src/index.js';
|
|
4
|
+
test('these schemas should work', async (t) => {
|
|
5
|
+
await Promise.all(newSchemas.map(async (validSchema) => {
|
|
6
|
+
const validation = await validateSchema(validSchema);
|
|
7
|
+
if (!validation.valid) {
|
|
8
|
+
console.dir(validation.errors, { depth: null });
|
|
9
|
+
}
|
|
10
|
+
t.true(validation.valid);
|
|
11
|
+
}));
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=realWorld.js.map
|
package/dist/test/walker.js
CHANGED
|
@@ -45,7 +45,7 @@ const schema = {
|
|
|
45
45
|
},
|
|
46
46
|
intarray: {
|
|
47
47
|
type: 'array',
|
|
48
|
-
|
|
48
|
+
items: {
|
|
49
49
|
type: 'integer',
|
|
50
50
|
},
|
|
51
51
|
},
|
|
@@ -82,7 +82,7 @@ const schema = {
|
|
|
82
82
|
properties: {
|
|
83
83
|
bla: {
|
|
84
84
|
type: 'array',
|
|
85
|
-
|
|
85
|
+
items: {
|
|
86
86
|
type: 'object',
|
|
87
87
|
properties: {
|
|
88
88
|
snux: {
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import type { Language } from './languages';
|
|
2
|
+
import type { PartialDeep } from 'type-fest';
|
|
3
|
+
import { ParseError } from './error';
|
|
4
|
+
import { ArgsClass, Path } from './walker';
|
|
5
|
+
import { StringFormat } from './display/string';
|
|
6
|
+
import { NumberFormat } from './display/number';
|
|
7
|
+
import { DateFormat } from './display/timestamp';
|
|
8
|
+
export type AllowedTypes = (string | {
|
|
9
|
+
type?: string;
|
|
10
|
+
$filter: any | any[];
|
|
11
|
+
})[];
|
|
12
|
+
export declare const basedSchemaFieldTypes: readonly ["array", "object", "record", "set", "string", "boolean", "number", "json", "integer", "timestamp", "reference", "references", "text", "enum", "cardinality"];
|
|
13
|
+
export type BasedSchemaFieldType = (typeof basedSchemaFieldTypes)[number];
|
|
14
|
+
export declare const isCollection: (type: string) => boolean;
|
|
15
|
+
export type BasedSchemaPattern = string;
|
|
16
|
+
export type BasedSchemaLanguage = Language;
|
|
17
|
+
export declare const languages: string[];
|
|
18
|
+
export type BasedSchemaTypePrefix = string;
|
|
19
|
+
export type BasedSchemaContentMediaType = 'text/html' | 'text/plain' | 'text/markdown' | 'image/png' | 'image/jpeg' | 'video/mp4' | 'image/*' | 'video/*' | 'audio/*' | '*/*' | `${string}/${string}`;
|
|
20
|
+
export type BasedSchemaFieldShared = {
|
|
21
|
+
hooks?: {
|
|
22
|
+
interval?: number;
|
|
23
|
+
hook: string;
|
|
24
|
+
} | {
|
|
25
|
+
interval?: number;
|
|
26
|
+
hook: string;
|
|
27
|
+
}[];
|
|
28
|
+
type?: BasedSchemaFieldType;
|
|
29
|
+
$id?: string;
|
|
30
|
+
$schema?: string;
|
|
31
|
+
isRequired?: boolean;
|
|
32
|
+
title?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
index?: number;
|
|
35
|
+
readOnly?: boolean;
|
|
36
|
+
writeOnly?: boolean;
|
|
37
|
+
$comment?: string;
|
|
38
|
+
examples?: any[];
|
|
39
|
+
default?: any;
|
|
40
|
+
customValidator?: (value: any, path: (number | string)[], target: BasedSetTarget) => Promise<boolean>;
|
|
41
|
+
$defs?: {
|
|
42
|
+
[key: string]: BasedSchemaField;
|
|
43
|
+
};
|
|
44
|
+
$delete?: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type BasedSchemaStringShared = {
|
|
47
|
+
minLength?: number;
|
|
48
|
+
maxLength?: number;
|
|
49
|
+
contentMediaEncoding?: string;
|
|
50
|
+
contentMediaType?: BasedSchemaContentMediaType;
|
|
51
|
+
pattern?: BasedSchemaPattern;
|
|
52
|
+
format?: 'email' | 'URL' | 'MACAddress' | 'IP' | 'IPRange' | 'FQDN' | 'IBAN' | 'BIC' | 'alpha' | 'alphaLocales' | 'alphanumeric' | 'alphanumericLocales' | 'passportNumber' | 'port' | 'lowercase' | 'uppercase' | 'ascii' | 'semVer' | 'surrogatePair' | 'IMEI' | 'hexadecimal' | 'octal' | 'hexColor' | 'rgbColor' | 'HSL' | 'ISRC' | 'MD5' | 'JWT' | 'UUID' | 'luhnNumber' | 'creditCard' | 'identityCard' | 'EAN' | 'ISIN' | 'ISBN' | 'ISSN' | 'mobilePhone' | 'mobilePhoneLocales' | 'postalCode' | 'postalCodeLocales' | 'ethereumAddress' | 'currency' | 'btcAddress' | 'ISO6391' | 'ISO8601' | 'RFC3339' | 'ISO31661Alpha2' | 'ISO31661Alpha3' | 'ISO4217' | 'base32' | 'base58' | 'base64' | 'dataURI' | 'magnetURI' | 'mimeType' | 'latLong' | 'slug' | 'strongPassword' | 'taxID' | 'licensePlate' | 'VAT';
|
|
53
|
+
display?: StringFormat;
|
|
54
|
+
multiline?: boolean;
|
|
55
|
+
};
|
|
56
|
+
type NumberDefaults = {
|
|
57
|
+
multipleOf?: number;
|
|
58
|
+
minimum?: number;
|
|
59
|
+
maximum?: number;
|
|
60
|
+
exclusiveMaximum?: boolean;
|
|
61
|
+
exclusiveMinimum?: boolean;
|
|
62
|
+
};
|
|
63
|
+
export type BasedNumberDisplay = NumberFormat;
|
|
64
|
+
export type BasedTimestampDisplay = DateFormat;
|
|
65
|
+
export type BasedSchemaFieldString = {
|
|
66
|
+
type: 'string';
|
|
67
|
+
} & BasedSchemaFieldShared & BasedSchemaStringShared;
|
|
68
|
+
export type BasedSchemaFieldEnum = {
|
|
69
|
+
enum: any[];
|
|
70
|
+
type?: '';
|
|
71
|
+
} & BasedSchemaFieldShared;
|
|
72
|
+
export type BasedSchemaFieldCardinality = {
|
|
73
|
+
type: 'cardinality';
|
|
74
|
+
} & BasedSchemaFieldShared;
|
|
75
|
+
export type BasedSchemaFieldNumber = NumberDefaults & {
|
|
76
|
+
type: 'number';
|
|
77
|
+
display?: BasedNumberDisplay;
|
|
78
|
+
} & BasedSchemaFieldShared;
|
|
79
|
+
export type BasedSchemaFieldInteger = NumberDefaults & {
|
|
80
|
+
type: 'integer';
|
|
81
|
+
display?: BasedNumberDisplay;
|
|
82
|
+
} & BasedSchemaFieldShared;
|
|
83
|
+
export type BasedSchemaFieldTimeStamp = NumberDefaults & {
|
|
84
|
+
type: 'timestamp';
|
|
85
|
+
display?: BasedTimestampDisplay;
|
|
86
|
+
} & BasedSchemaFieldShared;
|
|
87
|
+
export type BasedSchemaFieldBoolean = {
|
|
88
|
+
type: 'boolean';
|
|
89
|
+
} & BasedSchemaFieldShared;
|
|
90
|
+
export type BasedSchemaFieldJSON = {
|
|
91
|
+
type: 'json';
|
|
92
|
+
} & BasedSchemaFieldShared;
|
|
93
|
+
export type BasedSchemaFieldPrimitive = BasedSchemaFieldString | BasedSchemaFieldNumber | BasedSchemaFieldInteger | BasedSchemaFieldTimeStamp | BasedSchemaFieldJSON | BasedSchemaFieldBoolean | BasedSchemaFieldEnum;
|
|
94
|
+
export type BasedSchemaFieldText = {
|
|
95
|
+
type: 'text';
|
|
96
|
+
required?: BasedSchemaLanguage[];
|
|
97
|
+
} & BasedSchemaFieldShared & BasedSchemaStringShared;
|
|
98
|
+
export type BasedSchemaFieldObject = {
|
|
99
|
+
type: 'object';
|
|
100
|
+
properties: {
|
|
101
|
+
[name: string]: BasedSchemaField;
|
|
102
|
+
};
|
|
103
|
+
required?: string[];
|
|
104
|
+
} & BasedSchemaFieldShared;
|
|
105
|
+
export type BasedSchemaFieldRecord = {
|
|
106
|
+
type: 'record';
|
|
107
|
+
values: BasedSchemaField;
|
|
108
|
+
} & BasedSchemaFieldShared;
|
|
109
|
+
export type BasedSchemaFieldArray = {
|
|
110
|
+
type: 'array';
|
|
111
|
+
values: BasedSchemaField;
|
|
112
|
+
} & BasedSchemaFieldShared;
|
|
113
|
+
export type BasedSchemaFieldSet = {
|
|
114
|
+
type: 'set';
|
|
115
|
+
items: BasedSchemaFieldPrimitive;
|
|
116
|
+
} & BasedSchemaFieldShared;
|
|
117
|
+
export type BasedSchemaFieldEnumerable = BasedSchemaFieldText | BasedSchemaFieldObject | BasedSchemaFieldRecord | BasedSchemaFieldArray | BasedSchemaFieldSet;
|
|
118
|
+
export type BasedSchemaFieldReference = {
|
|
119
|
+
type: 'reference';
|
|
120
|
+
bidirectional?: {
|
|
121
|
+
fromField: string;
|
|
122
|
+
};
|
|
123
|
+
allowedTypes?: AllowedTypes;
|
|
124
|
+
} & BasedSchemaFieldShared;
|
|
125
|
+
export type BasedSchemaFieldReferences = {
|
|
126
|
+
type: 'references';
|
|
127
|
+
bidirectional?: {
|
|
128
|
+
fromField: string;
|
|
129
|
+
};
|
|
130
|
+
allowedTypes?: AllowedTypes;
|
|
131
|
+
} & BasedSchemaFieldShared;
|
|
132
|
+
export type BasedSchemaFields = {
|
|
133
|
+
string: BasedSchemaFieldString;
|
|
134
|
+
number: BasedSchemaFieldNumber;
|
|
135
|
+
integer: BasedSchemaFieldInteger;
|
|
136
|
+
timestamp: BasedSchemaFieldTimeStamp;
|
|
137
|
+
json: BasedSchemaFieldJSON;
|
|
138
|
+
boolean: BasedSchemaFieldBoolean;
|
|
139
|
+
enum: BasedSchemaFieldEnum;
|
|
140
|
+
array: BasedSchemaFieldArray;
|
|
141
|
+
object: BasedSchemaFieldObject;
|
|
142
|
+
set: BasedSchemaFieldSet;
|
|
143
|
+
record: BasedSchemaFieldRecord;
|
|
144
|
+
reference: BasedSchemaFieldReference;
|
|
145
|
+
references: BasedSchemaFieldReferences;
|
|
146
|
+
text: BasedSchemaFieldText;
|
|
147
|
+
cardinality: BasedSchemaFieldCardinality;
|
|
148
|
+
};
|
|
149
|
+
export type BasedSchemaField = BasedSchemaFields[keyof BasedSchemaFields] | (BasedSchemaFieldShared & {
|
|
150
|
+
type?: '';
|
|
151
|
+
isRequired?: boolean;
|
|
152
|
+
$ref: string;
|
|
153
|
+
});
|
|
154
|
+
export type BasedSchemaType = {
|
|
155
|
+
fields: {
|
|
156
|
+
[name: string]: BasedSchemaField;
|
|
157
|
+
};
|
|
158
|
+
title?: string;
|
|
159
|
+
description?: string;
|
|
160
|
+
prefix?: BasedSchemaTypePrefix;
|
|
161
|
+
examples?: any[];
|
|
162
|
+
required?: string[];
|
|
163
|
+
$defs?: {
|
|
164
|
+
[key: string]: BasedSchemaField;
|
|
165
|
+
};
|
|
166
|
+
$delete?: boolean;
|
|
167
|
+
};
|
|
168
|
+
export type BasedSchema = {
|
|
169
|
+
language: BasedSchemaLanguage;
|
|
170
|
+
translations?: BasedSchemaLanguage[];
|
|
171
|
+
languageFallbacks?: Partial<Record<BasedSchemaLanguage, BasedSchemaLanguage[]>>;
|
|
172
|
+
root: BasedSchemaType;
|
|
173
|
+
$defs: {
|
|
174
|
+
[name: string]: BasedSchemaField;
|
|
175
|
+
};
|
|
176
|
+
types: {
|
|
177
|
+
[type: string]: BasedSchemaType;
|
|
178
|
+
};
|
|
179
|
+
prefixToTypeMapping: {
|
|
180
|
+
[prefix: string]: string;
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
export type BasedSchemaTypePartial = PartialDeep<BasedSchemaType>;
|
|
184
|
+
export type BasedSchemaFieldPartial = PartialDeep<BasedSchemaField>;
|
|
185
|
+
export type BasedSchemaPartial = PartialDeep<BasedSchema>;
|
|
186
|
+
export type BasedSetTarget = {
|
|
187
|
+
type: string;
|
|
188
|
+
$alias?: string;
|
|
189
|
+
$id?: string;
|
|
190
|
+
schema: BasedSchema;
|
|
191
|
+
$merge?: boolean;
|
|
192
|
+
$language?: BasedSchemaLanguage;
|
|
193
|
+
required: (number | string)[][];
|
|
194
|
+
collected: BasedSchemaCollectProps[];
|
|
195
|
+
errors: {
|
|
196
|
+
code: ParseError;
|
|
197
|
+
path: Path;
|
|
198
|
+
}[];
|
|
199
|
+
};
|
|
200
|
+
export type BasedSchemaCollectProps = ArgsClass<BasedSetTarget> & {
|
|
201
|
+
root: ArgsClass<BasedSetTarget> & {
|
|
202
|
+
typeSchema: BasedSchemaType;
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
export {};
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.languages = exports.isCollection = exports.basedSchemaFieldTypes = void 0;
|
|
4
|
+
const languages_1 = require("./languages");
|
|
5
|
+
exports.basedSchemaFieldTypes = [
|
|
6
|
+
'array',
|
|
7
|
+
'object',
|
|
8
|
+
'record',
|
|
9
|
+
'set',
|
|
10
|
+
'string',
|
|
11
|
+
'boolean',
|
|
12
|
+
'number',
|
|
13
|
+
'json',
|
|
14
|
+
'integer',
|
|
15
|
+
'timestamp',
|
|
16
|
+
'reference',
|
|
17
|
+
'references',
|
|
18
|
+
'text',
|
|
19
|
+
'enum',
|
|
20
|
+
'cardinality',
|
|
21
|
+
];
|
|
22
|
+
const isCollection = (type) => {
|
|
23
|
+
return type === 'array' || type === 'object' || type === 'record';
|
|
24
|
+
};
|
|
25
|
+
exports.isCollection = isCollection;
|
|
26
|
+
exports.languages = Object.keys(languages_1.languages);
|
|
27
|
+
//# sourceMappingURL=types.js.map
|