@kollors/deep-json-server 0.9.0 → 1.0.0-alpha.10
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 +566 -347
- package/README.ru.md +560 -341
- package/dist/bin/deep-json-server.js +1 -1
- package/dist/bin/deep-json-server.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/src/auth/contract.d.ts +31 -0
- package/dist/src/auth/contract.js +12 -0
- package/dist/src/auth/contract.js.map +1 -0
- package/dist/src/auth/input.d.ts +18 -0
- package/dist/src/auth/input.js +34 -0
- package/dist/src/auth/input.js.map +1 -0
- package/dist/src/auth/password.d.ts +17 -0
- package/dist/src/auth/password.js +41 -0
- package/dist/src/auth/password.js.map +1 -0
- package/dist/src/auth/public.d.ts +3 -0
- package/dist/src/auth/public.js +5 -0
- package/dist/src/auth/public.js.map +1 -0
- package/dist/src/auth/routes.d.ts +6 -0
- package/dist/src/auth/routes.js +18 -0
- package/dist/src/auth/routes.js.map +1 -0
- package/dist/src/auth/service.d.ts +78 -0
- package/dist/src/auth/service.js +218 -0
- package/dist/src/auth/service.js.map +1 -0
- package/dist/src/auth/store.d.ts +26 -0
- package/dist/src/auth/store.js +82 -0
- package/dist/src/auth/store.js.map +1 -0
- package/dist/src/cli/index.d.ts +7 -0
- package/dist/src/cli/index.js +122 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/core/config-values.d.ts +28 -0
- package/dist/src/core/config-values.js +53 -0
- package/dist/src/core/config-values.js.map +1 -0
- package/dist/src/{constants.d.ts → core/constants.d.ts} +2 -1
- package/dist/src/{constants.js → core/constants.js} +2 -1
- package/dist/src/core/constants.js.map +1 -0
- package/dist/src/core/database.d.ts +48 -0
- package/dist/src/{database.js → core/database.js} +64 -29
- package/dist/src/core/database.js.map +1 -0
- package/dist/src/core/engine.d.ts +65 -0
- package/dist/src/core/engine.js +312 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/errors.d.ts +9 -0
- package/dist/src/core/errors.js +12 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/http-errors.d.ts +9 -0
- package/dist/src/core/http-errors.js +15 -0
- package/dist/src/core/http-errors.js.map +1 -0
- package/dist/src/core/lifecycle/mutation.d.ts +49 -0
- package/dist/src/core/lifecycle/mutation.js +170 -0
- package/dist/src/core/lifecycle/mutation.js.map +1 -0
- package/dist/src/core/lifecycle/options.d.ts +21 -0
- package/dist/src/core/lifecycle/options.js +19 -0
- package/dist/src/core/lifecycle/options.js.map +1 -0
- package/dist/src/core/model.d.ts +145 -0
- package/dist/src/core/model.js +510 -0
- package/dist/src/core/model.js.map +1 -0
- package/dist/src/core/mutations/write.d.ts +26 -0
- package/dist/src/core/mutations/write.js +284 -0
- package/dist/src/core/mutations/write.js.map +1 -0
- package/dist/src/core/operations.d.ts +33 -0
- package/dist/src/core/operations.js +10 -0
- package/dist/src/core/operations.js.map +1 -0
- package/dist/src/core/pagination.d.ts +10 -0
- package/dist/src/core/pagination.js +13 -0
- package/dist/src/core/pagination.js.map +1 -0
- package/dist/src/core/paths.d.ts +16 -0
- package/dist/src/core/paths.js +64 -0
- package/dist/src/core/paths.js.map +1 -0
- package/dist/src/core/query/contract.d.ts +6 -0
- package/dist/src/core/query/contract.js +22 -0
- package/dist/src/core/query/contract.js.map +1 -0
- package/dist/src/core/query/filter.d.ts +6 -0
- package/dist/src/core/query/filter.js +100 -0
- package/dist/src/core/query/filter.js.map +1 -0
- package/dist/src/core/query/options.d.ts +30 -0
- package/dist/src/core/query/options.js +44 -0
- package/dist/src/core/query/options.js.map +1 -0
- package/dist/src/core/records.d.ts +46 -0
- package/dist/src/core/records.js +69 -0
- package/dist/src/core/records.js.map +1 -0
- package/dist/src/core/relation-metadata.d.ts +15 -0
- package/dist/src/{relation-metadata.js → core/relation-metadata.js} +7 -2
- package/dist/src/core/relation-metadata.js.map +1 -0
- package/dist/src/core/storage.d.ts +2 -0
- package/dist/src/core/storage.js +2 -0
- package/dist/src/core/storage.js.map +1 -0
- package/dist/src/core/types.d.ts +10 -0
- package/dist/src/{types.js.map → core/types.js.map} +1 -1
- package/dist/src/core/utils.d.ts +56 -0
- package/dist/src/core/utils.js +102 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/files/contract.d.ts +32 -30
- package/dist/src/files/contract.js +29 -48
- package/dist/src/files/contract.js.map +1 -1
- package/dist/src/files/disk-store.d.ts +5 -1
- package/dist/src/files/disk-store.js +61 -33
- package/dist/src/files/disk-store.js.map +1 -1
- package/dist/src/files/http.d.ts +36 -0
- package/dist/src/files/http.js +53 -0
- package/dist/src/files/http.js.map +1 -0
- package/dist/src/files/index.d.ts +5 -4
- package/dist/src/files/index.js +7 -2
- package/dist/src/files/index.js.map +1 -1
- package/dist/src/files/memory-store.d.ts +4 -1
- package/dist/src/files/memory-store.js +29 -22
- package/dist/src/files/memory-store.js.map +1 -1
- package/dist/src/files/routes.d.ts +3 -0
- package/dist/src/files/routes.js +27 -2
- package/dist/src/files/routes.js.map +1 -1
- package/dist/src/files/streams.d.ts +5 -0
- package/dist/src/files/streams.js +20 -0
- package/dist/src/files/streams.js.map +1 -0
- package/dist/src/graphql/entry.d.ts +12 -0
- package/dist/src/graphql/entry.js +13 -0
- package/dist/src/graphql/entry.js.map +1 -0
- package/dist/src/graphql/generate.d.ts +12 -0
- package/dist/src/graphql/generate.js +19 -0
- package/dist/src/graphql/generate.js.map +1 -0
- package/dist/src/graphql/preflight.d.ts +6 -0
- package/dist/src/graphql/preflight.js +42 -0
- package/dist/src/graphql/preflight.js.map +1 -0
- package/dist/src/graphql/resolvers.d.ts +17 -0
- package/dist/src/graphql/resolvers.js +44 -0
- package/dist/src/graphql/resolvers.js.map +1 -0
- package/dist/src/graphql/routes.d.ts +8 -0
- package/dist/src/graphql/routes.js +30 -0
- package/dist/src/graphql/routes.js.map +1 -0
- package/dist/src/graphql/schema.d.ts +6 -0
- package/dist/src/graphql/schema.js +230 -0
- package/dist/src/graphql/schema.js.map +1 -0
- package/dist/src/graphql/write.d.ts +4 -0
- package/dist/src/graphql/write.js +10 -0
- package/dist/src/graphql/write.js.map +1 -0
- package/dist/src/openapi/auth.d.ts +13 -0
- package/dist/src/openapi/auth.js +139 -0
- package/dist/src/openapi/auth.js.map +1 -0
- package/dist/src/openapi/document.d.ts +11 -7
- package/dist/src/openapi/document.js +287 -318
- package/dist/src/openapi/document.js.map +1 -1
- package/dist/src/openapi/entry.d.ts +14 -0
- package/dist/src/openapi/entry.js +13 -0
- package/dist/src/openapi/entry.js.map +1 -0
- package/dist/src/openapi/files.d.ts +6 -0
- package/dist/src/openapi/files.js +87 -0
- package/dist/src/openapi/files.js.map +1 -0
- package/dist/src/openapi/generate.d.ts +19 -0
- package/dist/src/openapi/generate.js +41 -0
- package/dist/src/openapi/generate.js.map +1 -0
- package/dist/src/openapi/helpers.d.ts +26 -0
- package/dist/src/openapi/helpers.js +13 -0
- package/dist/src/openapi/helpers.js.map +1 -0
- package/dist/src/openapi/options.d.ts +18 -0
- package/dist/src/openapi/options.js +13 -0
- package/dist/src/openapi/options.js.map +1 -0
- package/dist/src/{types.d.ts → openapi/types.d.ts} +2 -12
- package/dist/src/openapi/types.js +2 -0
- package/dist/src/openapi/types.js.map +1 -0
- package/dist/src/openapi/write.d.ts +5 -0
- package/dist/src/openapi/write.js +12 -0
- package/dist/src/openapi/write.js.map +1 -0
- package/dist/src/rest/options.d.ts +22 -0
- package/dist/src/rest/options.js +65 -0
- package/dist/src/rest/options.js.map +1 -0
- package/dist/src/rest/projection.d.ts +13 -0
- package/dist/src/rest/projection.js +61 -0
- package/dist/src/rest/projection.js.map +1 -0
- package/dist/src/rest/routes.d.ts +7 -0
- package/dist/src/rest/routes.js +49 -0
- package/dist/src/rest/routes.js.map +1 -0
- package/dist/src/server/config.d.ts +74 -0
- package/dist/src/server/config.js +142 -0
- package/dist/src/server/config.js.map +1 -0
- package/dist/src/server/create.d.ts +16 -0
- package/dist/src/server/create.js +133 -0
- package/dist/src/server/create.js.map +1 -0
- package/dist/src/server/features.d.ts +4 -0
- package/dist/src/server/features.js +11 -0
- package/dist/src/server/features.js.map +1 -0
- package/dist/src/server/model.d.ts +6 -0
- package/dist/src/server/model.js +14 -0
- package/dist/src/server/model.js.map +1 -0
- package/dist/src/server/public.d.ts +2 -0
- package/dist/src/server/public.js +2 -0
- package/dist/src/server/public.js.map +1 -0
- package/package.json +25 -4
- package/dist/src/cli.d.ts +0 -4
- package/dist/src/cli.js +0 -80
- package/dist/src/cli.js.map +0 -1
- package/dist/src/config.d.ts +0 -54
- package/dist/src/config.js +0 -145
- package/dist/src/config.js.map +0 -1
- package/dist/src/constants.js.map +0 -1
- package/dist/src/database.d.ts +0 -20
- package/dist/src/database.js.map +0 -1
- package/dist/src/openapi/config.d.ts +0 -11
- package/dist/src/openapi/config.js +0 -204
- package/dist/src/openapi/config.js.map +0 -1
- package/dist/src/openapi/index.d.ts +0 -10
- package/dist/src/openapi/index.js +0 -27
- package/dist/src/openapi/index.js.map +0 -1
- package/dist/src/openapi/inference.d.ts +0 -14
- package/dist/src/openapi/inference.js +0 -145
- package/dist/src/openapi/inference.js.map +0 -1
- package/dist/src/query/filter.d.ts +0 -6
- package/dist/src/query/filter.js +0 -248
- package/dist/src/query/filter.js.map +0 -1
- package/dist/src/query/index.d.ts +0 -3
- package/dist/src/query/index.js +0 -4
- package/dist/src/query/index.js.map +0 -1
- package/dist/src/query/pagination.d.ts +0 -11
- package/dist/src/query/pagination.js +0 -28
- package/dist/src/query/pagination.js.map +0 -1
- package/dist/src/query/sort.d.ts +0 -1
- package/dist/src/query/sort.js +0 -54
- package/dist/src/query/sort.js.map +0 -1
- package/dist/src/relation-metadata.d.ts +0 -10
- package/dist/src/relation-metadata.js.map +0 -1
- package/dist/src/relations.d.ts +0 -12
- package/dist/src/relations.js +0 -155
- package/dist/src/relations.js.map +0 -1
- package/dist/src/server.d.ts +0 -13
- package/dist/src/server.js +0 -188
- package/dist/src/server.js.map +0 -1
- package/dist/src/utils.d.ts +0 -20
- package/dist/src/utils.js +0 -63
- package/dist/src/utils.js.map +0 -1
- /package/dist/src/{types.js → core/types.js} +0 -0
package/dist/src/cli.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import process from 'node:process';
|
|
2
|
-
import { readServerConfig } from './config.js';
|
|
3
|
-
import { DEFAULT_HOST, DEFAULT_PORT } from './constants.js';
|
|
4
|
-
import { createServer } from './server.js';
|
|
5
|
-
const HELP_TEXT = `Deep JSON Server
|
|
6
|
-
|
|
7
|
-
Использование:
|
|
8
|
-
deep-json-server [--files] [--openapi | --openapi-only] <server.config.js>
|
|
9
|
-
|
|
10
|
-
Параметры:
|
|
11
|
-
--files Добавить файловые маршруты в сервер и OpenAPI
|
|
12
|
-
--openapi Сгенерировать OpenAPI и запустить сервер
|
|
13
|
-
--openapi-only Сгенерировать OpenAPI и завершить работу
|
|
14
|
-
--help Показать справку`;
|
|
15
|
-
const parseArguments = (args) => {
|
|
16
|
-
const options = { files: false, openapiMode: 'none' };
|
|
17
|
-
let configPath;
|
|
18
|
-
args.forEach((argument) => {
|
|
19
|
-
if (argument === '--files') {
|
|
20
|
-
options.files = true;
|
|
21
|
-
}
|
|
22
|
-
else if (argument === '--openapi') {
|
|
23
|
-
if (options.openapiMode !== 'none') {
|
|
24
|
-
throw new Error('Параметры --openapi и --openapi-only нельзя использовать одновременно');
|
|
25
|
-
}
|
|
26
|
-
options.openapiMode = 'generate';
|
|
27
|
-
}
|
|
28
|
-
else if (argument === '--openapi-only') {
|
|
29
|
-
if (options.openapiMode !== 'none') {
|
|
30
|
-
throw new Error('Параметры --openapi и --openapi-only нельзя использовать одновременно');
|
|
31
|
-
}
|
|
32
|
-
options.openapiMode = 'only';
|
|
33
|
-
}
|
|
34
|
-
else if (argument.startsWith('-')) {
|
|
35
|
-
throw new Error(`Неизвестный параметр: ${argument}`);
|
|
36
|
-
}
|
|
37
|
-
else if (configPath == null) {
|
|
38
|
-
configPath = argument;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
throw new Error('Можно указать только один файл конфигурации');
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
if (configPath == null) {
|
|
45
|
-
throw new Error('Укажите путь к файлу конфигурации');
|
|
46
|
-
}
|
|
47
|
-
return { configPath, ...options };
|
|
48
|
-
};
|
|
49
|
-
const validateModeConfig = (config, { files, openapiMode }) => {
|
|
50
|
-
if (openapiMode !== 'none' && config.openapi.path == null) {
|
|
51
|
-
throw new Error(`Для --openapi${openapiMode === 'only' ? '-only' : ''} укажите ключ config.openapi.path`);
|
|
52
|
-
}
|
|
53
|
-
if (files && config.files == null) {
|
|
54
|
-
throw new Error('Для --files укажите секцию config.files');
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
export async function runCli(args = process.argv.slice(2), services = { createServer }) {
|
|
58
|
-
if (args.includes('--help')) {
|
|
59
|
-
process.stdout.write(`${HELP_TEXT}\n`);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const { configPath, files, openapiMode } = parseArguments(args);
|
|
63
|
-
const config = await readServerConfig(configPath);
|
|
64
|
-
const host = config.server.host ?? process.env.HOST ?? DEFAULT_HOST;
|
|
65
|
-
const port = config.server.port ?? Number(process.env.PORT ?? DEFAULT_PORT);
|
|
66
|
-
validateModeConfig(config, { files, openapiMode });
|
|
67
|
-
const runtimeConfig = { ...config, server: { ...config.server, host, port } };
|
|
68
|
-
const serverFacade = await services.createServer(runtimeConfig, { files });
|
|
69
|
-
if (openapiMode !== 'none') {
|
|
70
|
-
await serverFacade.openapi();
|
|
71
|
-
process.stdout.write(`OpenAPI-схема сохранена в ${config.openapi.path}\n`);
|
|
72
|
-
}
|
|
73
|
-
if (openapiMode === 'only') {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const fastify = serverFacade.fastify();
|
|
77
|
-
await fastify.listen();
|
|
78
|
-
fastify.log.info({ database: 'path' in config.database ? config.database.path : 'memory' }, 'Deep JSON Server запущен');
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.d.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { FastifyServerOptions } from 'fastify';
|
|
2
|
-
import type { DatabaseData, JsonObject } from './types.js';
|
|
3
|
-
export type DatabaseSchema = JsonObject;
|
|
4
|
-
export type DatabaseConfig = {
|
|
5
|
-
data: DatabaseData;
|
|
6
|
-
path?: never;
|
|
7
|
-
schema?: DatabaseSchema | string;
|
|
8
|
-
} | {
|
|
9
|
-
data?: never;
|
|
10
|
-
path: string;
|
|
11
|
-
schema?: DatabaseSchema | string;
|
|
12
|
-
};
|
|
13
|
-
export interface MemoryFile {
|
|
14
|
-
content: Uint8Array;
|
|
15
|
-
directory?: string;
|
|
16
|
-
mimeType: string;
|
|
17
|
-
name: string;
|
|
18
|
-
}
|
|
19
|
-
export type FilesConfig = {
|
|
20
|
-
data: MemoryFile[];
|
|
21
|
-
directory?: never;
|
|
22
|
-
metadata?: never;
|
|
23
|
-
} | {
|
|
24
|
-
data?: never;
|
|
25
|
-
directory: string;
|
|
26
|
-
metadata: string;
|
|
27
|
-
};
|
|
28
|
-
export interface OpenapiConfig {
|
|
29
|
-
path?: string;
|
|
30
|
-
}
|
|
31
|
-
export interface ServerConfig {
|
|
32
|
-
cors?: boolean;
|
|
33
|
-
host?: string;
|
|
34
|
-
logger?: FastifyServerOptions['logger'];
|
|
35
|
-
maxFileSize?: number;
|
|
36
|
-
maxPageSize?: number;
|
|
37
|
-
port?: number;
|
|
38
|
-
}
|
|
39
|
-
export interface DeepJsonServerConfig {
|
|
40
|
-
database: DatabaseConfig;
|
|
41
|
-
files?: FilesConfig;
|
|
42
|
-
openapi?: OpenapiConfig;
|
|
43
|
-
server?: ServerConfig;
|
|
44
|
-
}
|
|
45
|
-
export interface NormalizedServerConfig {
|
|
46
|
-
database: DatabaseConfig;
|
|
47
|
-
files?: FilesConfig;
|
|
48
|
-
openapi: OpenapiConfig;
|
|
49
|
-
server: ServerConfig;
|
|
50
|
-
}
|
|
51
|
-
/** Validates configuration and resolves relative paths. */
|
|
52
|
-
export declare const normalizeServerConfig: (config: DeepJsonServerConfig, directoryPath?: string) => NormalizedServerConfig;
|
|
53
|
-
/** Loads an ES module config and resolves paths from its directory. */
|
|
54
|
-
export declare function readServerConfig(configPath: string): Promise<NormalizedServerConfig>;
|
package/dist/src/config.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { dirname, resolve } from 'node:path';
|
|
2
|
-
import { pathToFileURL } from 'node:url';
|
|
3
|
-
import { assertKnownKeys, isObject } from './utils.js';
|
|
4
|
-
const CONFIG_KEYS = new Set(['database', 'files', 'openapi', 'server']);
|
|
5
|
-
const DATABASE_KEYS = new Set(['data', 'path', 'schema']);
|
|
6
|
-
const FILES_KEYS = new Set(['data', 'directory', 'metadata']);
|
|
7
|
-
const OPENAPI_KEYS = new Set(['path']);
|
|
8
|
-
const SERVER_KEYS = new Set(['cors', 'host', 'logger', 'maxFileSize', 'maxPageSize', 'port']);
|
|
9
|
-
let configImportIndex = 0;
|
|
10
|
-
function getObject(value, path, required = false) {
|
|
11
|
-
if (value == null && !required) {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
if (!isObject(value)) {
|
|
15
|
-
throw new Error(`Ключ ${path} должен быть JSON-объектом`);
|
|
16
|
-
}
|
|
17
|
-
return value;
|
|
18
|
-
}
|
|
19
|
-
function getString(value, path, required = false) {
|
|
20
|
-
if (value == null && !required) {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
if (typeof value !== 'string' || value.trim() === '') {
|
|
24
|
-
throw new Error(`Ключ ${path} должен содержать непустую строку`);
|
|
25
|
-
}
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
const resolveConfigPath = (value, directoryPath) => (value == null ? undefined : resolve(directoryPath, value));
|
|
29
|
-
const getPositiveInteger = (value, path) => {
|
|
30
|
-
if (value == null) {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
|
|
34
|
-
throw new Error(`Ключ ${path} должен быть положительным целым числом`);
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
};
|
|
38
|
-
const normalizeSchema = (schema, directoryPath) => {
|
|
39
|
-
if (schema == null) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
if (typeof schema === 'string') {
|
|
43
|
-
return resolveConfigPath(getString(schema, 'config.database.schema', true), directoryPath);
|
|
44
|
-
}
|
|
45
|
-
return getObject(schema, 'config.database.schema', true);
|
|
46
|
-
};
|
|
47
|
-
const normalizeDatabase = (value, directoryPath) => {
|
|
48
|
-
const database = getObject(value, 'config.database', true);
|
|
49
|
-
assertKnownKeys(database, DATABASE_KEYS, 'config.database');
|
|
50
|
-
const hasData = database.data != null;
|
|
51
|
-
const hasPath = database.path != null;
|
|
52
|
-
if (hasData === hasPath) {
|
|
53
|
-
throw new Error('Укажите ровно один из ключей config.database.path и config.database.data');
|
|
54
|
-
}
|
|
55
|
-
const schema = normalizeSchema(database.schema, directoryPath);
|
|
56
|
-
if (hasData) {
|
|
57
|
-
return { data: getObject(database.data, 'config.database.data', true), schema };
|
|
58
|
-
}
|
|
59
|
-
return { path: resolveConfigPath(getString(database.path, 'config.database.path', true), directoryPath), schema };
|
|
60
|
-
};
|
|
61
|
-
const normalizeFiles = (value, directoryPath) => {
|
|
62
|
-
const files = getObject(value, 'config.files');
|
|
63
|
-
if (files == null) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
assertKnownKeys(files, FILES_KEYS, 'config.files');
|
|
67
|
-
const hasData = files.data != null;
|
|
68
|
-
const hasDiskStorage = files.directory != null || files.metadata != null;
|
|
69
|
-
if (hasData === hasDiskStorage) {
|
|
70
|
-
throw new Error('Укажите либо config.files.data, либо пару config.files.directory и config.files.metadata');
|
|
71
|
-
}
|
|
72
|
-
if (hasData) {
|
|
73
|
-
if (!Array.isArray(files.data)) {
|
|
74
|
-
throw new Error('Ключ config.files.data должен содержать массив');
|
|
75
|
-
}
|
|
76
|
-
return { data: files.data };
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
directory: resolveConfigPath(getString(files.directory, 'config.files.directory', true), directoryPath),
|
|
80
|
-
metadata: resolveConfigPath(getString(files.metadata, 'config.files.metadata', true), directoryPath),
|
|
81
|
-
};
|
|
82
|
-
};
|
|
83
|
-
const normalizeConfig = (config, directoryPath = '.') => {
|
|
84
|
-
if (!isObject(config)) {
|
|
85
|
-
throw new Error('Конфигурация сервера должна содержать JSON-объект');
|
|
86
|
-
}
|
|
87
|
-
assertKnownKeys(config, CONFIG_KEYS, 'config');
|
|
88
|
-
const database = normalizeDatabase(config.database, directoryPath);
|
|
89
|
-
const files = normalizeFiles(config.files, directoryPath);
|
|
90
|
-
const openapi = getObject(config.openapi, 'config.openapi') ?? {};
|
|
91
|
-
const server = getObject(config.server, 'config.server') ?? {};
|
|
92
|
-
assertKnownKeys(openapi, OPENAPI_KEYS, 'config.openapi');
|
|
93
|
-
assertKnownKeys(server, SERVER_KEYS, 'config.server');
|
|
94
|
-
const openapiPath = getString(openapi.path, 'config.openapi.path');
|
|
95
|
-
const cors = server.cors;
|
|
96
|
-
const host = getString(server.host, 'config.server.host');
|
|
97
|
-
const logger = server.logger;
|
|
98
|
-
const maxFileSize = getPositiveInteger(server.maxFileSize, 'config.server.maxFileSize');
|
|
99
|
-
const maxPageSize = getPositiveInteger(server.maxPageSize, 'config.server.maxPageSize');
|
|
100
|
-
const port = server.port;
|
|
101
|
-
if (port != null && (typeof port !== 'number' || !Number.isInteger(port) || port < 0 || port > 65_535)) {
|
|
102
|
-
throw new Error('Ключ config.server.port должен быть целым числом от 0 до 65535');
|
|
103
|
-
}
|
|
104
|
-
if (logger != null && typeof logger !== 'boolean' && !isObject(logger)) {
|
|
105
|
-
throw new Error('Ключ config.server.logger должен содержать boolean или JSON-объект');
|
|
106
|
-
}
|
|
107
|
-
if (cors != null && typeof cors !== 'boolean') {
|
|
108
|
-
throw new Error('Ключ config.server.cors должен содержать boolean');
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
database,
|
|
112
|
-
files,
|
|
113
|
-
openapi: { path: resolveConfigPath(openapiPath, directoryPath) },
|
|
114
|
-
server: {
|
|
115
|
-
cors: cors,
|
|
116
|
-
host,
|
|
117
|
-
logger: logger,
|
|
118
|
-
maxFileSize,
|
|
119
|
-
maxPageSize,
|
|
120
|
-
port: port,
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
|
-
/** Validates configuration and resolves relative paths. */
|
|
125
|
-
export const normalizeServerConfig = (config, directoryPath) => normalizeConfig(config, directoryPath);
|
|
126
|
-
/** Loads an ES module config and resolves paths from its directory. */
|
|
127
|
-
export async function readServerConfig(configPath) {
|
|
128
|
-
const resolvedConfigPath = resolve(getString(configPath, 'config', true));
|
|
129
|
-
let config;
|
|
130
|
-
try {
|
|
131
|
-
const configUrl = pathToFileURL(resolvedConfigPath);
|
|
132
|
-
// Bypass the module cache so repeated reads use the latest config.
|
|
133
|
-
configUrl.searchParams.set('deep-json-server-import', String(configImportIndex++));
|
|
134
|
-
config = (await import(configUrl.href)).default;
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
138
|
-
throw new Error(`Не удалось загрузить конфигурацию ${resolvedConfigPath}: ${message}`, { cause: error });
|
|
139
|
-
}
|
|
140
|
-
if (!isObject(config)) {
|
|
141
|
-
throw new Error('Конфигурация сервера должна экспортировать JSON-объект через export default');
|
|
142
|
-
}
|
|
143
|
-
return normalizeConfig(config, dirname(resolvedConfigPath));
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=config.js.map
|
package/dist/src/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC"}
|
package/dist/src/database.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { DatabaseConfig } from './config.js';
|
|
2
|
-
import type { DatabaseData, DatabaseRecord } from './types.js';
|
|
3
|
-
export interface DatabaseContainer {
|
|
4
|
-
data: DatabaseData;
|
|
5
|
-
}
|
|
6
|
-
export interface DatabaseStore {
|
|
7
|
-
database: DatabaseContainer;
|
|
8
|
-
path?: string;
|
|
9
|
-
read(): Promise<DatabaseData>;
|
|
10
|
-
update<T>(operation: (database: DatabaseContainer) => T): Promise<T>;
|
|
11
|
-
}
|
|
12
|
-
export declare const validateJsonValue: (value: unknown, path: string, ancestors?: WeakSet<object>) => void;
|
|
13
|
-
export declare const validateDatabase: (data: unknown) => DatabaseData;
|
|
14
|
-
export declare const readJsonObjectFile: (path: string, label: string) => Promise<Record<string, unknown>>;
|
|
15
|
-
export declare const readDatabaseFile: (databasePath: string) => Promise<DatabaseData>;
|
|
16
|
-
/** Creates a disk- or memory-backed database with serialized updates. */
|
|
17
|
-
export declare const createDatabaseStore: (config: DatabaseConfig) => Promise<DatabaseStore>;
|
|
18
|
-
export declare const getCollection: (database: DatabaseContainer, resource: string) => DatabaseRecord[];
|
|
19
|
-
export declare const findItemIndex: (collection: DatabaseRecord[], id: unknown) => number;
|
|
20
|
-
export declare const createId: (collection: DatabaseRecord[]) => string;
|
package/dist/src/database.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSchema } from '../config.js';
|
|
2
|
-
import type { JsonObject, OpenapiSchema } from '../types.js';
|
|
3
|
-
export interface ResourceSchemaConfig {
|
|
4
|
-
formats: Record<string, string>;
|
|
5
|
-
name?: string;
|
|
6
|
-
properties: Record<string, OpenapiSchema>;
|
|
7
|
-
required: string[];
|
|
8
|
-
}
|
|
9
|
-
export declare const normalizeSchemaConfig: (schemaConfig: JsonObject, resources: string[]) => Record<string, ResourceSchemaConfig>;
|
|
10
|
-
export declare const applyConfiguredFields: (schema: OpenapiSchema, resource: string, resourceConfig: ResourceSchemaConfig) => OpenapiSchema;
|
|
11
|
-
export declare const resolveSchemaConfig: (schema: DatabaseSchema | string | undefined) => Promise<DatabaseSchema>;
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { readJsonObjectFile, validateJsonValue } from '../database.js';
|
|
2
|
-
import { assertKnownKeys, isObject } from '../utils.js';
|
|
3
|
-
import { applyRequiredFields, getSchemasAtPath, updateSchemasAtPath } from './inference.js';
|
|
4
|
-
const SCHEMA_CONFIG_KEYS = new Set(['$info', '$schema']);
|
|
5
|
-
const RESOURCE_CONFIG_KEYS = new Set(['formats', 'name', 'properties', 'required']);
|
|
6
|
-
const OPENAPI_TYPES = new Set(['array', 'boolean', 'integer', 'number', 'object', 'string']);
|
|
7
|
-
const COMPONENT_NAME_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
8
|
-
const SCHEMA_OVERRIDE_KEYS = new Set([
|
|
9
|
-
'$ref',
|
|
10
|
-
'additionalProperties',
|
|
11
|
-
'allOf',
|
|
12
|
-
'anyOf',
|
|
13
|
-
'default',
|
|
14
|
-
'deprecated',
|
|
15
|
-
'description',
|
|
16
|
-
'enum',
|
|
17
|
-
'example',
|
|
18
|
-
'format',
|
|
19
|
-
'items',
|
|
20
|
-
'maximum',
|
|
21
|
-
'maxItems',
|
|
22
|
-
'maxLength',
|
|
23
|
-
'minimum',
|
|
24
|
-
'minItems',
|
|
25
|
-
'minLength',
|
|
26
|
-
'not',
|
|
27
|
-
'nullable',
|
|
28
|
-
'oneOf',
|
|
29
|
-
'pattern',
|
|
30
|
-
'properties',
|
|
31
|
-
'readOnly',
|
|
32
|
-
'required',
|
|
33
|
-
'title',
|
|
34
|
-
'type',
|
|
35
|
-
'uniqueItems',
|
|
36
|
-
'writeOnly',
|
|
37
|
-
]);
|
|
38
|
-
const STRING_SCHEMA_KEYS = ['description', 'format', 'pattern', 'title'];
|
|
39
|
-
const NUMBER_SCHEMA_KEYS = ['maximum', 'minimum'];
|
|
40
|
-
const INTEGER_SCHEMA_KEYS = ['maxItems', 'maxLength', 'minItems', 'minLength'];
|
|
41
|
-
const BOOLEAN_SCHEMA_KEYS = ['deprecated', 'nullable', 'readOnly', 'uniqueItems', 'writeOnly'];
|
|
42
|
-
function validateSchemaOverride(schema, path) {
|
|
43
|
-
if (!isObject(schema)) {
|
|
44
|
-
throw new Error(`OpenAPI-схема свойства «${path}» должна содержать JSON-объект`);
|
|
45
|
-
}
|
|
46
|
-
assertKnownKeys(schema, SCHEMA_OVERRIDE_KEYS, `properties.${path}`);
|
|
47
|
-
if (schema.type != null && (typeof schema.type !== 'string' || !OPENAPI_TYPES.has(schema.type))) {
|
|
48
|
-
throw new Error(`type свойства «${path}» должен содержать поддерживаемый тип OpenAPI`);
|
|
49
|
-
}
|
|
50
|
-
if (schema.required != null && (!Array.isArray(schema.required) || schema.required.some((key) => typeof key !== 'string' || key === ''))) {
|
|
51
|
-
throw new Error(`required свойства «${path}» должен содержать массив непустых строк`);
|
|
52
|
-
}
|
|
53
|
-
if (schema.$ref != null && (typeof schema.$ref !== 'string' || schema.$ref === '')) {
|
|
54
|
-
throw new Error(`$ref свойства «${path}» должен содержать непустую строку`);
|
|
55
|
-
}
|
|
56
|
-
STRING_SCHEMA_KEYS.forEach((key) => {
|
|
57
|
-
if (schema[key] != null && typeof schema[key] !== 'string') {
|
|
58
|
-
throw new Error(`${key} свойства «${path}» должен содержать строку`);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
NUMBER_SCHEMA_KEYS.forEach((key) => {
|
|
62
|
-
if (schema[key] != null && (typeof schema[key] !== 'number' || !Number.isFinite(schema[key]))) {
|
|
63
|
-
throw new Error(`${key} свойства «${path}» должен содержать конечное число`);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
INTEGER_SCHEMA_KEYS.forEach((key) => {
|
|
67
|
-
if (schema[key] != null && (typeof schema[key] !== 'number' || !Number.isInteger(schema[key]) || schema[key] < 0)) {
|
|
68
|
-
throw new Error(`${key} свойства «${path}» должен содержать неотрицательное целое число`);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
BOOLEAN_SCHEMA_KEYS.forEach((key) => {
|
|
72
|
-
if (schema[key] != null && typeof schema[key] !== 'boolean') {
|
|
73
|
-
throw new Error(`${key} свойства «${path}» должен содержать boolean`);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
if (schema.enum != null && (!Array.isArray(schema.enum) || schema.enum.length === 0)) {
|
|
77
|
-
throw new Error(`enum свойства «${path}» должен содержать непустой массив`);
|
|
78
|
-
}
|
|
79
|
-
if (schema.properties != null) {
|
|
80
|
-
if (!isObject(schema.properties)) {
|
|
81
|
-
throw new Error(`properties свойства «${path}» должен содержать JSON-объект`);
|
|
82
|
-
}
|
|
83
|
-
Object.entries(schema.properties).forEach(([key, value]) => {
|
|
84
|
-
validateSchemaOverride(value, `${path}.${key}`);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
if (schema.items != null) {
|
|
88
|
-
validateSchemaOverride(schema.items, `${path}[]`);
|
|
89
|
-
}
|
|
90
|
-
for (const keyword of ['allOf', 'anyOf', 'oneOf']) {
|
|
91
|
-
if (schema[keyword] != null) {
|
|
92
|
-
if (!Array.isArray(schema[keyword]) || schema[keyword].length === 0) {
|
|
93
|
-
throw new Error(`${keyword} свойства «${path}» должен содержать непустой массив`);
|
|
94
|
-
}
|
|
95
|
-
schema[keyword].forEach((value, index) => {
|
|
96
|
-
validateSchemaOverride(value, `${path}.${keyword}[${index}]`);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
if (schema.not != null) {
|
|
101
|
-
validateSchemaOverride(schema.not, `${path}.not`);
|
|
102
|
-
}
|
|
103
|
-
if (schema.additionalProperties != null && typeof schema.additionalProperties !== 'boolean') {
|
|
104
|
-
validateSchemaOverride(schema.additionalProperties, `${path}.additionalProperties`);
|
|
105
|
-
}
|
|
106
|
-
if (schema.type != null) {
|
|
107
|
-
const objectKeywords = ['additionalProperties', 'properties', 'required'];
|
|
108
|
-
const arrayKeywords = ['items', 'maxItems', 'minItems', 'uniqueItems'];
|
|
109
|
-
const stringKeywords = ['maxLength', 'minLength', 'pattern'];
|
|
110
|
-
const numberKeywords = ['maximum', 'minimum'];
|
|
111
|
-
const incompatibleKeyword = [
|
|
112
|
-
...(schema.type === 'object' ? [] : objectKeywords),
|
|
113
|
-
...(schema.type === 'array' ? [] : arrayKeywords),
|
|
114
|
-
...(schema.type === 'string' ? [] : stringKeywords),
|
|
115
|
-
...(['integer', 'number'].includes(schema.type) ? [] : numberKeywords),
|
|
116
|
-
].find((key) => schema[key] != null);
|
|
117
|
-
if (incompatibleKeyword != null) {
|
|
118
|
-
throw new Error(`${incompatibleKeyword} свойства «${path}» несовместим с type «${schema.type}»`);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
export const normalizeSchemaConfig = (schemaConfig, resources) => {
|
|
123
|
-
validateJsonValue(schemaConfig, 'Схема базы данных');
|
|
124
|
-
assertKnownKeys(schemaConfig, SCHEMA_CONFIG_KEYS, 'schema');
|
|
125
|
-
const info = schemaConfig.$info;
|
|
126
|
-
const normalizedInfo = isObject(info) ? info : undefined;
|
|
127
|
-
if (Object.hasOwn(schemaConfig, '$info') && (normalizedInfo == null || !['title', 'version'].every((key) => typeof normalizedInfo[key] === 'string' && normalizedInfo[key].trim() !== ''))) {
|
|
128
|
-
throw new Error('$info должен содержать непустые строковые поля title и version');
|
|
129
|
-
}
|
|
130
|
-
if (Object.hasOwn(schemaConfig, '$schema') && !isObject(schemaConfig.$schema)) {
|
|
131
|
-
throw new Error('$schema должен содержать JSON-объект');
|
|
132
|
-
}
|
|
133
|
-
const resourceConfigs = (schemaConfig.$schema ?? {});
|
|
134
|
-
Object.entries(resourceConfigs).forEach(([resource, resourceConfig]) => {
|
|
135
|
-
if (!resources.includes(resource)) {
|
|
136
|
-
throw new Error(`В $schema указан неизвестный ресурс «${resource}»`);
|
|
137
|
-
}
|
|
138
|
-
if (!isObject(resourceConfig)) {
|
|
139
|
-
throw new Error(`Настройки ресурса «${resource}» должны содержать JSON-объект`);
|
|
140
|
-
}
|
|
141
|
-
assertKnownKeys(resourceConfig, RESOURCE_CONFIG_KEYS, `$schema.${resource}`);
|
|
142
|
-
if (resourceConfig.name != null && (typeof resourceConfig.name !== 'string' || !COMPONENT_NAME_PATTERN.test(resourceConfig.name))) {
|
|
143
|
-
throw new Error(`$schema.${resource}.name должен соответствовать шаблону ${COMPONENT_NAME_PATTERN}`);
|
|
144
|
-
}
|
|
145
|
-
if (resourceConfig.required != null && (!Array.isArray(resourceConfig.required) || resourceConfig.required.some((path) => typeof path !== 'string' || path === ''))) {
|
|
146
|
-
throw new Error(`$schema.${resource}.required должен содержать массив непустых строк`);
|
|
147
|
-
}
|
|
148
|
-
if (resourceConfig.formats != null &&
|
|
149
|
-
(!isObject(resourceConfig.formats) || Object.entries(resourceConfig.formats).some(([path, format]) => path === '' || typeof format !== 'string' || format === ''))) {
|
|
150
|
-
throw new Error(`$schema.${resource}.formats должен содержать JSON-объект с непустыми строковыми путями и форматами`);
|
|
151
|
-
}
|
|
152
|
-
if (resourceConfig.properties != null) {
|
|
153
|
-
if (!isObject(resourceConfig.properties)) {
|
|
154
|
-
throw new Error(`$schema.${resource}.properties должен содержать JSON-объект`);
|
|
155
|
-
}
|
|
156
|
-
Object.entries(resourceConfig.properties).forEach(([key, value]) => {
|
|
157
|
-
validateSchemaOverride(value, `${resource}.${key}`);
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
return Object.fromEntries(resources.map((resource) => {
|
|
162
|
-
const resourceConfig = (resourceConfigs[resource] ?? {});
|
|
163
|
-
return [
|
|
164
|
-
resource,
|
|
165
|
-
{
|
|
166
|
-
formats: (resourceConfig.formats ?? {}),
|
|
167
|
-
name: typeof resourceConfig.name === 'string' ? resourceConfig.name : undefined,
|
|
168
|
-
properties: (resourceConfig.properties ?? {}),
|
|
169
|
-
required: (resourceConfig.required ?? []),
|
|
170
|
-
},
|
|
171
|
-
];
|
|
172
|
-
}));
|
|
173
|
-
};
|
|
174
|
-
export const applyConfiguredFields = (schema, resource, resourceConfig) => {
|
|
175
|
-
const { formats, required: requiredFields } = resourceConfig;
|
|
176
|
-
[...requiredFields, ...Object.keys(formats)].forEach((path) => {
|
|
177
|
-
if (getSchemasAtPath(schema, path.split('.')).length === 0) {
|
|
178
|
-
throw new Error(`Путь «${path}» из настроек ресурса «${resource}» отсутствует в итоговой схеме`);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
const schemaWithFormats = Object.entries(formats).reduce((result, [path, format]) => {
|
|
182
|
-
const schemas = getSchemasAtPath(result, path.split('.'));
|
|
183
|
-
if (!schemas.some((nestedSchema) => nestedSchema.type === 'string')) {
|
|
184
|
-
throw new Error(`Формат «${format}» для пути «${resource}.${path}» можно применить только к строковому полю`);
|
|
185
|
-
}
|
|
186
|
-
return updateSchemasAtPath(result, path.split('.'), (nestedSchema) => (nestedSchema.type === 'string' ? { ...nestedSchema, format } : nestedSchema));
|
|
187
|
-
}, schema);
|
|
188
|
-
return applyRequiredFields(schemaWithFormats, '', new Set(requiredFields));
|
|
189
|
-
};
|
|
190
|
-
export const resolveSchemaConfig = async (schema) => {
|
|
191
|
-
if (schema == null) {
|
|
192
|
-
return {};
|
|
193
|
-
}
|
|
194
|
-
if (typeof schema === 'string') {
|
|
195
|
-
return (await readJsonObjectFile(schema, 'Файл схемы базы данных'));
|
|
196
|
-
}
|
|
197
|
-
if (!isObject(schema)) {
|
|
198
|
-
throw new Error('Схема базы данных должна содержать JSON-объект');
|
|
199
|
-
}
|
|
200
|
-
const clonedSchema = structuredClone(schema);
|
|
201
|
-
validateJsonValue(clonedSchema, 'Схема базы данных');
|
|
202
|
-
return clonedSchema;
|
|
203
|
-
};
|
|
204
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/openapi/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { DatabaseData, JsonObject, OpenapiDocument } from '../types.js';
|
|
2
|
-
export declare const createOpenapi: ({ database, files, host, maxPageSize, port, schema, }: {
|
|
3
|
-
database: DatabaseData;
|
|
4
|
-
files: boolean;
|
|
5
|
-
host?: string;
|
|
6
|
-
maxPageSize: number;
|
|
7
|
-
port?: number;
|
|
8
|
-
schema: JsonObject;
|
|
9
|
-
}) => OpenapiDocument;
|
|
10
|
-
export declare const writeOpenapi: (document: OpenapiDocument, outputPath: string) => Promise<void>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
|
-
import { stringify } from 'yaml';
|
|
4
|
-
import { DEFAULT_HOST, DEFAULT_PORT } from '../constants.js';
|
|
5
|
-
import { buildOpenapiDocument } from './document.js';
|
|
6
|
-
const getServerUrl = (host, port) => {
|
|
7
|
-
const serverPort = Number(port);
|
|
8
|
-
if (typeof host !== 'string' || host === '') {
|
|
9
|
-
throw new Error('Адрес сервера не должен быть пустым');
|
|
10
|
-
}
|
|
11
|
-
if (!Number.isInteger(serverPort) || serverPort < 1 || serverPort > 65_535) {
|
|
12
|
-
throw new Error('Порт должен быть целым числом от 1 до 65535');
|
|
13
|
-
}
|
|
14
|
-
const serverHost = host.includes(':') && !host.startsWith('[') ? `[${host}]` : host;
|
|
15
|
-
return `http://${serverHost}:${serverPort}`;
|
|
16
|
-
};
|
|
17
|
-
export const createOpenapi = ({ database, files, host = DEFAULT_HOST, maxPageSize, port = DEFAULT_PORT, schema, }) => {
|
|
18
|
-
const document = buildOpenapiDocument({ database, files, maxPageSize, schema });
|
|
19
|
-
document.servers = [{ url: getServerUrl(host, port) }];
|
|
20
|
-
return document;
|
|
21
|
-
};
|
|
22
|
-
export const writeOpenapi = async (document, outputPath) => {
|
|
23
|
-
const resolvedOutputPath = resolve(outputPath);
|
|
24
|
-
await mkdir(dirname(resolvedOutputPath), { recursive: true });
|
|
25
|
-
await writeFile(resolvedOutputPath, stringify(document, { aliasDuplicateObjects: false, lineWidth: 0 }), 'utf8');
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/openapi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpF,OAAO,UAAU,UAAU,IAAI,UAAU,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,IAAI,GAAG,YAAY,EACnB,WAAW,EACX,IAAI,GAAG,YAAY,EACnB,MAAM,GAQP,EAAmB,EAAE;IACpB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhF,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEvD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,QAAyB,EAAE,UAAkB,EAAiB,EAAE;IACjG,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACnH,CAAC,CAAC"}
|