@kollors/deep-json-server 0.1.1 → 0.2.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.
package/README.md CHANGED
@@ -17,7 +17,8 @@ Add a script to `package.json`:
17
17
  ```json
18
18
  {
19
19
  "scripts": {
20
- "mock": "deep-json-server mock/database.json --port 4001"
20
+ "mock": "deep-json-server mock/database.json --port 4001",
21
+ "openapi": "deep-json-server mock/database.json --generate mock/database-schema.json mock/openapi-schema.yaml"
21
22
  }
22
23
  }
23
24
  ```
@@ -194,10 +195,41 @@ Relations are inferred by convention:
194
195
 
195
196
  They are soft references: the server resolves them when requested but does not enforce referential integrity when data is written.
196
197
 
198
+ ## OpenAPI generation
199
+
200
+ Create a small configuration file next to the database, for example `mock/database-schema.json`:
201
+
202
+ ```json
203
+ {
204
+ "movies": {
205
+ "optional": ["description"],
206
+ "formats": {
207
+ "coverSrc": "uri"
208
+ }
209
+ },
210
+ "users": {
211
+ "formats": {
212
+ "avatarSrc": "uri",
213
+ "bornAt": "date"
214
+ }
215
+ }
216
+ }
217
+ ```
218
+
219
+ Generate an OpenAPI 3.0.3 file and exit:
220
+
221
+ ```bash
222
+ deep-json-server mock/database.json --generate mock/database-schema.json mock/openapi-schema.yaml
223
+ ```
224
+
225
+ The generator infers resources and field types from all database records. Fields present in every record are required unless listed in `optional`; `formats` adds OpenAPI formats such as `date` and `uri`. Nested fields use dot paths, for example `actors.id`.
226
+
227
+ The generated document describes CRUD endpoints, pagination, sorting, deep filters, `_embed`, and response relations inferred from `...Id` and `...Ids` fields. It can be used as input for tools such as RTK Query OpenAPI Codegen. OpenAPI is generated only when `--generate` is passed; normal server startup does not rewrite the file.
228
+
197
229
  ## Programmatic API
198
230
 
199
231
  ```js
200
- import { createServer, startServer } from '@kollors/deep-json-server';
232
+ import { createServer, generateOpenApi, startServer } from '@kollors/deep-json-server';
201
233
 
202
234
  const server = await createServer({ databasePath: 'mock/database.json', logger: false });
203
235
 
@@ -206,6 +238,8 @@ const response = await server.inject({ method: 'GET', url: '/movies' });
206
238
  await server.close();
207
239
 
208
240
  await startServer({ databasePath: 'mock/database.json', host: '127.0.0.1', port: 4001 });
241
+
242
+ await generateOpenApi({ databasePath: 'mock/database.json', schemaPath: 'mock/database-schema.json', outputPath: 'mock/openapi-schema.yaml' });
209
243
  ```
210
244
 
211
245
  `createServer()` is useful for tests because it returns a Fastify instance without opening a network port.
package/README.ru.md CHANGED
@@ -17,7 +17,8 @@ npm install --save-dev @kollors/deep-json-server
17
17
  ```json
18
18
  {
19
19
  "scripts": {
20
- "mock": "deep-json-server mock/database.json --port 4001"
20
+ "mock": "deep-json-server mock/database.json --port 4001",
21
+ "openapi": "deep-json-server mock/database.json --generate mock/database-schema.json mock/openapi-schema.yaml"
21
22
  }
22
23
  }
23
24
  ```
@@ -194,10 +195,41 @@ GET /countries/1?_embed=users
194
195
 
195
196
  Это мягкие ссылки: сервер загружает их по запросу, но не проверяет ссылочную целостность при записи данных.
196
197
 
198
+ ## Генерация OpenAPI
199
+
200
+ Создайте рядом с базой небольшой файл конфигурации, например `mock/database-schema.json`:
201
+
202
+ ```json
203
+ {
204
+ "movies": {
205
+ "optional": ["description"],
206
+ "formats": {
207
+ "coverSrc": "uri"
208
+ }
209
+ },
210
+ "users": {
211
+ "formats": {
212
+ "avatarSrc": "uri",
213
+ "bornAt": "date"
214
+ }
215
+ }
216
+ }
217
+ ```
218
+
219
+ Сгенерируйте OpenAPI 3.0.3 и завершите работу:
220
+
221
+ ```bash
222
+ deep-json-server mock/database.json --generate mock/database-schema.json mock/openapi-schema.yaml
223
+ ```
224
+
225
+ Генератор определяет ресурсы и типы полей по всем записям базы. Поля, присутствующие в каждой записи, считаются обязательными, если они не перечислены в `optional`; `formats` добавляет форматы OpenAPI, например `date` и `uri`. Для вложенных полей используются пути через точку, например `actors.id`.
226
+
227
+ В сгенерированном документе описаны CRUD, пагинация, сортировка, глубокие фильтры, `_embed` и связи в ответах, определённые по полям `...Id` и `...Ids`. Файл можно передать, например, в RTK Query OpenAPI Codegen. OpenAPI создаётся только с параметром `--generate`; обычный запуск сервера файл не перезаписывает.
228
+
197
229
  ## Программный API
198
230
 
199
231
  ```js
200
- import { createServer, startServer } from '@kollors/deep-json-server';
232
+ import { createServer, generateOpenApi, startServer } from '@kollors/deep-json-server';
201
233
 
202
234
  const server = await createServer({ databasePath: 'mock/database.json', logger: false });
203
235
 
@@ -206,6 +238,8 @@ const response = await server.inject({ method: 'GET', url: '/movies' });
206
238
  await server.close();
207
239
 
208
240
  await startServer({ databasePath: 'mock/database.json', host: '127.0.0.1', port: 4001 });
241
+
242
+ await generateOpenApi({ databasePath: 'mock/database.json', schemaPath: 'mock/database-schema.json', outputPath: 'mock/openapi-schema.yaml' });
209
243
  ```
210
244
 
211
245
  `createServer()` удобен для тестов: он возвращает экземпляр Fastify, не открывая сетевой порт.