@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.
Files changed (71) hide show
  1. package/dist/display/index.d.ts +2 -0
  2. package/dist/display/index.js +26 -0
  3. package/dist/display/number.d.ts +3 -0
  4. package/dist/display/number.js +89 -0
  5. package/dist/display/string.d.ts +3 -0
  6. package/dist/display/string.js +23 -0
  7. package/dist/display/timestamp.d.ts +3 -0
  8. package/dist/display/timestamp.js +127 -0
  9. package/dist/error.d.ts +19 -0
  10. package/dist/error.js +24 -0
  11. package/dist/index.d.ts +5 -0
  12. package/dist/index.js +22 -0
  13. package/dist/languages.d.ts +187 -0
  14. package/dist/languages.js +190 -0
  15. package/dist/set/fields/array.d.ts +2 -0
  16. package/dist/set/fields/array.js +123 -0
  17. package/dist/set/fields/index.d.ts +3 -0
  18. package/dist/set/fields/index.js +74 -0
  19. package/dist/set/fields/number.d.ts +4 -0
  20. package/dist/set/fields/number.js +129 -0
  21. package/dist/set/fields/object.d.ts +3 -0
  22. package/dist/set/fields/object.js +33 -0
  23. package/dist/set/fields/references.d.ts +3 -0
  24. package/dist/set/fields/references.js +128 -0
  25. package/dist/set/fields/set.d.ts +2 -0
  26. package/dist/set/fields/set.js +63 -0
  27. package/dist/set/fields/string.d.ts +3 -0
  28. package/dist/set/fields/string.js +284 -0
  29. package/dist/set/index.d.ts +3 -0
  30. package/dist/set/index.js +183 -0
  31. package/dist/set/isValidId.d.ts +2 -0
  32. package/dist/set/isValidId.js +21 -0
  33. package/dist/set/types.d.ts +0 -0
  34. package/dist/set/types.js +1 -0
  35. package/dist/src/compat/index.d.ts +6 -2
  36. package/dist/src/compat/index.js +202 -2
  37. package/dist/src/compat/newToOld.d.ts +2 -2
  38. package/dist/src/compat/newToOld.js +14 -9
  39. package/dist/src/compat/oldSchemaType.d.ts +28 -4
  40. package/dist/src/compat/oldToNew.d.ts +1 -1
  41. package/dist/src/set/fields/array.js +4 -4
  42. package/dist/src/types.d.ts +1 -1
  43. package/dist/src/validateSchema/fieldValidators.js +12 -4
  44. package/dist/src/validateSchema/utils.d.ts +4 -0
  45. package/dist/src/validateSchema/utils.js +8 -0
  46. package/dist/test/array.js +4 -4
  47. package/dist/test/compat.js +38 -2
  48. package/dist/test/data/newSchemas.d.ts +2 -2
  49. package/dist/test/data/newSchemas.js +244 -7
  50. package/dist/test/rest.js +1 -1
  51. package/dist/test/validateSchema/fields.js +75 -5
  52. package/dist/test/validateSchema/realWorld.d.ts +1 -0
  53. package/dist/test/validateSchema/realWorld.js +13 -0
  54. package/dist/test/walker.js +2 -2
  55. package/dist/types.d.ts +205 -0
  56. package/dist/types.js +27 -0
  57. package/dist/updateSchema.d.ts +2 -0
  58. package/dist/updateSchema.js +16 -0
  59. package/dist/validateSchema.d.ts +4 -0
  60. package/dist/validateSchema.js +41 -0
  61. package/dist/walker/args.d.ts +36 -0
  62. package/dist/walker/args.js +162 -0
  63. package/dist/walker/index.d.ts +6 -0
  64. package/dist/walker/index.js +49 -0
  65. package/dist/walker/parse.d.ts +3 -0
  66. package/dist/walker/parse.js +186 -0
  67. package/dist/walker/types.d.ts +45 -0
  68. package/dist/walker/types.js +10 -0
  69. package/package.json +4 -3
  70. package/dist/src/compat/Untitled-1.d.ts +0 -3
  71. 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
- enum: {
15
- enum: ['tony', 'jim'],
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
- values: {
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
@@ -46,7 +46,7 @@ const schema = {
46
46
  properties: {
47
47
  bla: {
48
48
  type: 'array',
49
- values: {
49
+ items: {
50
50
  type: 'object',
51
51
  properties: {
52
52
  snux: {
@@ -319,7 +319,7 @@ test('arrays', async (t) => {
319
319
  fields: {
320
320
  arrayField: {
321
321
  type: 'array',
322
- values: {
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
- values: {
336
+ items: {
337
337
  type: 'object',
338
338
  properties: {
339
339
  aWrongObjectField: {
340
340
  type: 'object',
341
341
  // @ts-ignore
342
- values: { type: 'string' },
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
- 'values',
357
+ 'items',
358
358
  'properties',
359
359
  'aWrongObjectField',
360
- 'values',
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
@@ -45,7 +45,7 @@ const schema = {
45
45
  },
46
46
  intarray: {
47
47
  type: 'array',
48
- values: {
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
- values: {
85
+ items: {
86
86
  type: 'object',
87
87
  properties: {
88
88
  snux: {
@@ -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
@@ -0,0 +1,2 @@
1
+ import { BasedSchema, BasedSchemaPartial } from './types';
2
+ export declare const updateSchema: (newSchema: BasedSchemaPartial, oldSchema?: BasedSchema) => Promise<BasedSchema>;