@kollors/deep-json-server 0.8.1 → 1.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 (67) hide show
  1. package/README.md +286 -410
  2. package/README.ru.md +278 -404
  3. package/dist/index.d.ts +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/cli.js +50 -63
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/config.d.ts +16 -2
  8. package/dist/src/config.js +24 -8
  9. package/dist/src/config.js.map +1 -1
  10. package/dist/src/constants.d.ts +1 -1
  11. package/dist/src/constants.js +1 -1
  12. package/dist/src/constants.js.map +1 -1
  13. package/dist/src/database.d.ts +4 -3
  14. package/dist/src/database.js +32 -19
  15. package/dist/src/database.js.map +1 -1
  16. package/dist/src/engine.d.ts +47 -0
  17. package/dist/src/engine.js +438 -0
  18. package/dist/src/engine.js.map +1 -0
  19. package/dist/src/files/disk-store.js +13 -2
  20. package/dist/src/files/disk-store.js.map +1 -1
  21. package/dist/src/files/openapi.d.ts +3 -0
  22. package/dist/src/files/openapi.js +86 -0
  23. package/dist/src/files/openapi.js.map +1 -0
  24. package/dist/src/graphql.d.ts +4 -0
  25. package/dist/src/graphql.js +223 -0
  26. package/dist/src/graphql.js.map +1 -0
  27. package/dist/src/model.d.ts +67 -0
  28. package/dist/src/model.js +319 -0
  29. package/dist/src/model.js.map +1 -0
  30. package/dist/src/openapi/document.d.ts +7 -7
  31. package/dist/src/openapi/document.js +234 -320
  32. package/dist/src/openapi/document.js.map +1 -1
  33. package/dist/src/openapi/index.d.ts +3 -6
  34. package/dist/src/openapi/index.js +2 -3
  35. package/dist/src/openapi/index.js.map +1 -1
  36. package/dist/src/query/filter.d.ts +0 -5
  37. package/dist/src/query/filter.js +6 -170
  38. package/dist/src/query/filter.js.map +1 -1
  39. package/dist/src/query/options.d.ts +31 -0
  40. package/dist/src/query/options.js +135 -0
  41. package/dist/src/query/options.js.map +1 -0
  42. package/dist/src/server.d.ts +4 -3
  43. package/dist/src/server.js +113 -135
  44. package/dist/src/server.js.map +1 -1
  45. package/dist/src/types.d.ts +1 -3
  46. package/dist/src/utils.d.ts +0 -1
  47. package/dist/src/utils.js +0 -1
  48. package/dist/src/utils.js.map +1 -1
  49. package/package.json +13 -8
  50. package/dist/src/openapi/config.d.ts +0 -11
  51. package/dist/src/openapi/config.js +0 -204
  52. package/dist/src/openapi/config.js.map +0 -1
  53. package/dist/src/openapi/inference.d.ts +0 -14
  54. package/dist/src/openapi/inference.js +0 -145
  55. package/dist/src/openapi/inference.js.map +0 -1
  56. package/dist/src/query/index.d.ts +0 -3
  57. package/dist/src/query/index.js +0 -4
  58. package/dist/src/query/index.js.map +0 -1
  59. package/dist/src/query/pagination.d.ts +0 -11
  60. package/dist/src/query/pagination.js +0 -28
  61. package/dist/src/query/pagination.js.map +0 -1
  62. package/dist/src/query/sort.d.ts +0 -1
  63. package/dist/src/query/sort.js +0 -54
  64. package/dist/src/query/sort.js.map +0 -1
  65. package/dist/src/relations.d.ts +0 -12
  66. package/dist/src/relations.js +0 -155
  67. package/dist/src/relations.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { Ajv } from 'ajv';
3
+ import addFormats from 'ajv-formats';
4
+ import { getRelationMetadata } from './relation-metadata.js';
5
+ import { assertKnownKeys, createHttpError, isObject, isSafeKey, singularize, toPascalCase } from './utils.js';
6
+ export const ajv = new Ajv({ allErrors: true, coerceTypes: false, removeAdditional: false, strict: true, ownProperties: true });
7
+ addFormats.default(ajv);
8
+ const PRIMITIVES = new Set(['string', 'number', 'boolean', 'object']);
9
+ const NAME = /^[A-Za-z][A-Za-z0-9_]*$/;
10
+ const FIELD_KEYS = new Set([
11
+ 'type',
12
+ 'description',
13
+ 'example',
14
+ 'required',
15
+ 'nullable',
16
+ 'default',
17
+ 'enum',
18
+ 'primary',
19
+ 'generated',
20
+ 'readOnly',
21
+ 'writeOnly',
22
+ 'minLength',
23
+ 'maxLength',
24
+ 'pattern',
25
+ 'format',
26
+ 'minimum',
27
+ 'maximum',
28
+ 'source',
29
+ 'target',
30
+ 'onDelete',
31
+ ]);
32
+ export const pathParts = (path) => {
33
+ const parts = path.split('.');
34
+ if (parts.some((p) => !NAME.test(p) || !isSafeKey(p)))
35
+ throw createHttpError(400, `Invalid field path: ${path}`);
36
+ return parts;
37
+ };
38
+ export const readPath = (value, path) => {
39
+ const parts = typeof path === 'string' ? pathParts(path) : path;
40
+ if (!parts.length)
41
+ return Array.isArray(value) ? value.flatMap((v) => readPath(v, [])) : value == null ? [] : [value];
42
+ if (Array.isArray(value))
43
+ return value.flatMap((v) => readPath(v, parts));
44
+ return isObject(value) && Object.hasOwn(value, parts[0]) ? readPath(value[parts[0]], parts.slice(1)) : [];
45
+ };
46
+ export const childName = (node) => node.path.split('.').at(-1);
47
+ export const nodeName = (entity, node) => (node.path ? `${entity.name}_${node.path.replaceAll('.', '_')}` : entity.name);
48
+ export const operationName = (entity) => entity.name[0].toLowerCase() + entity.name.slice(1);
49
+ const newNode = (path, field) => ({ ...field, path, base: field.type.replace(/\[\]$/, ''), many: field.type.endsWith('[]'), children: Object.create(null) });
50
+ function addField(entity, path, field, implicit = false) {
51
+ const parts = pathParts(path);
52
+ let parent = entity.root;
53
+ for (let i = 0; i < parts.length - 1; i++) {
54
+ const prefix = parts.slice(0, i + 1).join('.');
55
+ if (!parent.children[parts[i]]) {
56
+ parent.children[parts[i]] = newNode(prefix, { type: 'object' });
57
+ entity.fields[prefix] = parent.children[parts[i]];
58
+ }
59
+ parent = parent.children[parts[i]];
60
+ if (parent.base !== 'object')
61
+ throw new Error(`Field ${entity.name}.${prefix} cannot contain fields`);
62
+ }
63
+ const key = parts.at(-1);
64
+ const node = newNode(path, field);
65
+ node.implicit = implicit;
66
+ node.children = parent.children[key]?.children ?? {};
67
+ parent.children[key] = node;
68
+ entity.fields[path] = node;
69
+ return node;
70
+ }
71
+ function checkField(path, field) {
72
+ if (!isObject(field))
73
+ throw new Error(`Field ${path} must be an object`);
74
+ assertKnownKeys(field, FIELD_KEYS, path);
75
+ if (typeof field.type !== 'string' || !/^[A-Za-z][A-Za-z0-9_]*(\[\])?$/.test(field.type))
76
+ throw new Error(`Invalid type at ${path}`);
77
+ for (const key of ['required', 'nullable', 'primary', 'readOnly', 'writeOnly'])
78
+ if (field[key] !== undefined && typeof field[key] !== 'boolean')
79
+ throw new Error(`${path}.${key} must be boolean`);
80
+ for (const key of ['description', 'pattern', 'source', 'target'])
81
+ if (field[key] !== undefined && typeof field[key] !== 'string')
82
+ throw new Error(`${path}.${key} must be string`);
83
+ for (const key of ['minLength', 'maxLength', 'minimum', 'maximum'])
84
+ if (field[key] !== undefined && (typeof field[key] !== 'number' || !Number.isFinite(field[key])))
85
+ throw new Error(`${path}.${key} must be finite`);
86
+ for (const key of ['minLength', 'maxLength'])
87
+ if (field[key] !== undefined && (!Number.isSafeInteger(field[key]) || field[key] < 0))
88
+ throw new Error(`${path}.${key} must be nonnegative integer`);
89
+ if (field.readOnly && field.writeOnly)
90
+ throw new Error(`${path}: readOnly and writeOnly conflict`);
91
+ if (field.enum !== undefined && (!Array.isArray(field.enum) || !field.enum.length))
92
+ throw new Error(`${path}: enum must be nonempty array`);
93
+ if (field.generated !== undefined && !['uuid', 'increment'].includes(String(field.generated)))
94
+ throw new Error(`${path}: invalid generated`);
95
+ if (field.generated && (field.default !== undefined || field.writeOnly || field.nullable))
96
+ throw new Error(`${path}: generated conflicts with default, writeOnly or nullable`);
97
+ if (field.generated && field.type !== (field.generated === 'uuid' ? 'string' : 'number'))
98
+ throw new Error(`${path}: generated type mismatch`);
99
+ if (field.primary && (field.nullable || field.required === false || field.writeOnly || !['string', 'number'].includes(field.type) || path.includes('.')))
100
+ throw new Error(`${path}: invalid primary key`);
101
+ if (field.onDelete !== undefined && !['restrict', 'cascade'].includes(String(field.onDelete)))
102
+ throw new Error(`${path}: invalid onDelete`);
103
+ if (field.format !== undefined && !['date', 'date-time', 'email', 'uri', 'uuid'].includes(String(field.format)))
104
+ throw new Error(`${path}: unknown format`);
105
+ const base = field.type.replace(/\[\]$/, '');
106
+ if (['minLength', 'maxLength', 'pattern', 'format'].some((k) => field[k] !== undefined) && base !== 'string')
107
+ throw new Error(`${path}: string constraint on non-string field`);
108
+ if (['minimum', 'maximum'].some((k) => field[k] !== undefined) && base !== 'number')
109
+ throw new Error(`${path}: number constraint on non-number field`);
110
+ if (typeof field.pattern === 'string')
111
+ new RegExp(field.pattern, 'u');
112
+ if (typeof field.minimum === 'number' && typeof field.maximum === 'number' && field.minimum > field.maximum)
113
+ throw new Error(`${path}: minimum exceeds maximum`);
114
+ if (typeof field.minLength === 'number' && typeof field.maxLength === 'number' && field.minLength > field.maxLength)
115
+ throw new Error(`${path}: minLength exceeds maxLength`);
116
+ }
117
+ export async function loadModel(source) {
118
+ if (source === undefined)
119
+ return undefined;
120
+ const schema = typeof source === 'string' ? JSON.parse(await readFile(source, 'utf8')) : source;
121
+ if (!isObject(schema) || !Object.keys(schema).length)
122
+ throw new Error('Model schema must be a nonempty object');
123
+ if ('$schema' in schema || '$info' in schema)
124
+ throw new Error('Legacy $schema/$info format is no longer supported');
125
+ const model = { entities: [], byName: new Map(), byCollection: new Map(), explicit: true };
126
+ for (const [name, definition] of Object.entries(schema)) {
127
+ if (!NAME.test(name) || !isSafeKey(name) || PRIMITIVES.has(name) || !isObject(definition))
128
+ throw new Error(`Invalid model ${name}`);
129
+ assertKnownKeys(definition, new Set(['collection', 'api', 'fields']), name);
130
+ if (typeof definition.collection !== 'string' || !/^[A-Za-z][A-Za-z0-9_-]*$/.test(definition.collection) || !isSafeKey(definition.collection))
131
+ throw new Error(`Invalid collection for ${name}`);
132
+ if (model.byCollection.has(definition.collection))
133
+ throw new Error(`Duplicate collection ${definition.collection}`);
134
+ const api = definition.api ?? ['openapi', 'graphql'];
135
+ if (!Array.isArray(api) || api.some((v) => !['openapi', 'graphql'].includes(v)) || new Set(api).size !== api.length)
136
+ throw new Error(`Invalid api for ${name}`);
137
+ if (!isObject(definition.fields))
138
+ throw new Error(`${name}.fields must be an object`);
139
+ const entity = { name, collection: definition.collection, api, primary: '', fields: Object.create(null), root: newNode('', { type: 'object' }) };
140
+ for (const [path, field] of Object.entries(definition.fields).sort(([a], [b]) => a.split('.').length - b.split('.').length)) {
141
+ checkField(path, field);
142
+ addField(entity, path, field);
143
+ if (field.primary) {
144
+ if (entity.primary)
145
+ throw new Error(`${name}: only one primary key is supported`);
146
+ entity.primary = path;
147
+ entity.fields[path].required = true;
148
+ }
149
+ }
150
+ if (!entity.primary)
151
+ throw new Error(`${name}: primary key is required`);
152
+ model.entities.push(entity);
153
+ model.byName.set(name, entity);
154
+ model.byCollection.set(entity.collection, entity);
155
+ }
156
+ for (const entity of model.entities)
157
+ for (const node of Object.values(entity.fields)) {
158
+ if (PRIMITIVES.has(node.base)) {
159
+ if (node.source !== undefined || node.target !== undefined || node.onDelete !== undefined)
160
+ throw new Error(`${entity.name}.${node.path}: relation metadata on primitive`);
161
+ continue;
162
+ }
163
+ const target = model.byName.get(node.base);
164
+ if (!target)
165
+ throw new Error(`Unknown model ${node.base}`);
166
+ if (node.generated || node.default !== undefined || node.enum || node.primary || node.readOnly || node.writeOnly)
167
+ throw new Error(`${entity.name}.${node.path}: invalid relation options`);
168
+ node.relation = target;
169
+ node.source ??= entity.primary;
170
+ node.target ??= target.primary;
171
+ pathParts(node.source);
172
+ pathParts(node.target);
173
+ }
174
+ // Resolve omitted storage key declarations without depending on database samples.
175
+ let pending = model.entities.flatMap((entity) => Object.values(entity.fields)
176
+ .filter((n) => n.relation)
177
+ .map((node) => ({ entity, node })));
178
+ while (pending.length) {
179
+ let progress = false;
180
+ pending = pending.filter(({ entity, node }) => {
181
+ const target = node.relation;
182
+ const targetField = target.fields[node.target];
183
+ const sourceField = entity.fields[node.source];
184
+ if (sourceField && targetField)
185
+ return false;
186
+ if (!sourceField && targetField && ['string', 'number'].includes(targetField.base) && !targetField.relation) {
187
+ addField(entity, node.source, { type: targetField.base + (node.many && node.target === target.primary ? '[]' : ''), ...(node.nullable ? { nullable: true } : {}) }, true);
188
+ progress = true;
189
+ return false;
190
+ }
191
+ return true;
192
+ });
193
+ if (pending.length && !progress)
194
+ throw new Error(`Declare ambiguous relation keys: ${pending.map(({ entity, node }) => `${entity.name}.${node.path}`).join(', ')}`);
195
+ }
196
+ for (const entity of model.entities)
197
+ for (const node of Object.values(entity.fields)) {
198
+ if (node.generated && node.path.includes('.'))
199
+ throw new Error(`Generated fields must be root fields: ${entity.name}.${node.path}`);
200
+ if (node.relation) {
201
+ const sourceField = entity.fields[node.source];
202
+ const targetField = node.relation.fields[node.target];
203
+ if (sourceField.relation || targetField.relation || !['string', 'number'].includes(sourceField.base) || sourceField.base !== targetField.base)
204
+ throw new Error(`Incompatible relation keys: ${entity.name}.${node.path}`);
205
+ }
206
+ else {
207
+ const validate = ajv.compile(valueSchema(node));
208
+ for (const key of ['default', 'example'])
209
+ if (node[key] !== undefined && !validate(structuredClone(node[key])))
210
+ throw new Error(`Invalid ${key}: ${entity.name}.${node.path}`);
211
+ }
212
+ }
213
+ return model;
214
+ }
215
+ export function assertApi(model, api) {
216
+ if (!model?.explicit)
217
+ throw new Error(`${api} requires an explicit model schema`);
218
+ for (const entity of model.entities.filter((e) => e.api.includes(api)))
219
+ for (const node of Object.values(entity.fields))
220
+ if (node.relation && !node.relation.api.includes(api))
221
+ throw new Error(`${entity.name}.${node.path}: ${node.relation.name} does not enable ${api}`);
222
+ }
223
+ export function valueSchema(node) {
224
+ let schema = node.base === 'object' ? objectSchema(node, 'stored') : { type: node.base };
225
+ for (const key of ['minLength', 'maxLength', 'pattern', 'format', 'minimum', 'maximum', 'enum'])
226
+ if (node[key] !== undefined)
227
+ schema[key] = node[key];
228
+ if (node.many)
229
+ schema = { type: 'array', items: schema };
230
+ if (node.nullable)
231
+ schema = { anyOf: [schema, { type: 'null' }] };
232
+ return schema;
233
+ }
234
+ export function objectSchema(node, mode, root = false) {
235
+ const properties = {};
236
+ const required = [];
237
+ for (const [key, child] of Object.entries(node.children)) {
238
+ if (child.relation || (mode !== 'stored' && (child.generated || child.readOnly || (child.primary && mode !== 'create'))))
239
+ continue;
240
+ properties[key] =
241
+ child.base === 'object'
242
+ ? (() => {
243
+ let s = objectSchema(child, mode);
244
+ if (child.many)
245
+ s = { type: 'array', items: s };
246
+ return child.nullable ? { anyOf: [s, { type: 'null' }] } : s;
247
+ })()
248
+ : valueSchema(child);
249
+ if (child.required && !(root && mode === 'update') && !(mode !== 'stored' && child.default !== undefined))
250
+ required.push(key);
251
+ }
252
+ return { type: 'object', properties, additionalProperties: false, ...(required.length ? { required } : {}) };
253
+ }
254
+ export const validators = new WeakMap();
255
+ export function validateRecord(entity, value, mode) {
256
+ let cache = validators.get(entity);
257
+ if (!cache) {
258
+ cache = new Map();
259
+ validators.set(entity, cache);
260
+ }
261
+ let validate = cache.get(mode);
262
+ if (!validate) {
263
+ validate = ajv.compile(objectSchema(entity.root, mode, true));
264
+ cache.set(mode, validate);
265
+ }
266
+ if (!validate(value))
267
+ throw createHttpError(400, `${entity.name}: ${ajv.errorsText(validate.errors)}`);
268
+ }
269
+ export function inferModel(database) {
270
+ const model = { entities: [], byName: new Map(), byCollection: new Map(), explicit: false };
271
+ for (const [collection, records] of Object.entries(database)) {
272
+ const name = toPascalCase(singularize(collection));
273
+ const entity = { name, collection, api: [], primary: 'id', fields: Object.create(null), root: newNode('', { type: 'object' }) };
274
+ const scan = (record, prefix = '') => {
275
+ for (const [key, value] of Object.entries(record)) {
276
+ const path = prefix + key;
277
+ const sample = Array.isArray(value) ? value.find((v) => v !== null) : value;
278
+ const base = isObject(sample) ? 'object' : ['string', 'number', 'boolean'].includes(typeof sample) ? typeof sample : 'string';
279
+ if (!entity.fields[path] || sample != null)
280
+ addField(entity, path, { type: base + (Array.isArray(value) ? '[]' : '') });
281
+ if (isObject(value))
282
+ scan(value, `${path}.`);
283
+ if (Array.isArray(value))
284
+ value.filter(isObject).forEach((v) => {
285
+ scan(v, `${path}.`);
286
+ });
287
+ }
288
+ };
289
+ records.forEach((scanRecord) => {
290
+ scan(scanRecord);
291
+ });
292
+ if (!entity.fields.id)
293
+ addField(entity, 'id', { type: 'string' });
294
+ entity.fields.id.primary = true;
295
+ model.entities.push(entity);
296
+ model.byCollection.set(collection, entity);
297
+ model.byName.set(name, entity);
298
+ }
299
+ const resources = Object.keys(database);
300
+ for (const entity of model.entities)
301
+ for (const field of Object.values(entity.fields)) {
302
+ const relation = getRelationMetadata(childName(field), resources, entity.collection);
303
+ if (!relation)
304
+ continue;
305
+ const target = model.byCollection.get(relation.targetResource);
306
+ const prefix = field.path.includes('.') ? field.path.slice(0, field.path.lastIndexOf('.') + 1) : '';
307
+ const path = prefix + relation.relationName;
308
+ if (!entity.fields[path]) {
309
+ const node = addField(entity, path, { type: target.name + (relation.isMany ? '[]' : ''), source: field.path, target: 'id' });
310
+ node.relation = target;
311
+ }
312
+ if (!target.fields[relation.reverseRelationName]) {
313
+ const reverse = addField(target, relation.reverseRelationName, { type: `${entity.name}[]`, source: 'id', target: field.path });
314
+ reverse.relation = entity;
315
+ }
316
+ }
317
+ return model;
318
+ }
319
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { DatabaseData, JsonObject, OpenapiDocument } from '../types.js';
2
- export interface BuildOpenapiOptions {
3
- database: DatabaseData;
1
+ import { type Model } from '../model.js';
2
+ import type { OpenapiDocument } from '../types.js';
3
+ export declare function buildOpenapiDocument({ model, files, pageSize, maxPageSize, info, }: {
4
+ model: Model;
4
5
  files?: boolean;
6
+ pageSize?: number;
5
7
  maxPageSize?: number;
6
- schema?: JsonObject;
7
- }
8
- /** Builds an OpenAPI document without runtime server addresses. */
9
- export declare function buildOpenapiDocument(options: BuildOpenapiOptions): OpenapiDocument;
8
+ info?: Record<string, unknown>;
9
+ }): OpenapiDocument;