@kollors/deep-json-server 0.9.0 → 1.0.0-alpha.2

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