@kollors/deep-json-server 1.0.0-alpha.7 → 1.0.0-alpha.9
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 +168 -109
- package/README.ru.md +171 -112
- package/dist/index.d.ts +5 -6
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/src/auth/contract.d.ts +6 -2
- package/dist/src/auth/contract.js +8 -1
- package/dist/src/auth/contract.js.map +1 -1
- 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 +4 -0
- package/dist/src/auth/password.js +5 -1
- package/dist/src/auth/password.js.map +1 -1
- package/dist/src/auth/routes.d.ts +1 -1
- package/dist/src/auth/routes.js +4 -1
- package/dist/src/auth/routes.js.map +1 -1
- package/dist/src/auth/service.d.ts +48 -9
- package/dist/src/auth/service.js +143 -68
- package/dist/src/auth/service.js.map +1 -1
- 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 +2 -2
- package/dist/src/cli/index.js +70 -84
- package/dist/src/cli/index.js.map +1 -1
- 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/core/constants.d.ts +1 -1
- package/dist/src/core/constants.js +1 -1
- package/dist/src/core/database.d.ts +10 -12
- package/dist/src/core/database.js +4 -4
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/engine.d.ts +3 -2
- package/dist/src/core/engine.js +53 -44
- package/dist/src/core/engine.js.map +1 -1
- package/dist/src/core/lifecycle/mutation.d.ts +3 -3
- package/dist/src/core/lifecycle/mutation.js +2 -2
- package/dist/src/core/lifecycle/mutation.js.map +1 -1
- package/dist/src/core/lifecycle/options.d.ts +1 -0
- package/dist/src/core/lifecycle/options.js +2 -4
- package/dist/src/core/lifecycle/options.js.map +1 -1
- package/dist/src/core/model.d.ts +18 -3
- package/dist/src/core/model.js +17 -7
- package/dist/src/core/model.js.map +1 -1
- package/dist/src/core/mutations/write.d.ts +1 -2
- package/dist/src/core/mutations/write.js.map +1 -1
- 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 +2 -2
- package/dist/src/core/pagination.js +3 -5
- package/dist/src/core/pagination.js.map +1 -1
- package/dist/src/core/paths.d.ts +2 -2
- package/dist/src/core/paths.js +15 -5
- package/dist/src/core/paths.js.map +1 -1
- 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/files/contract.d.ts +6 -7
- package/dist/src/files/contract.js.map +1 -1
- package/dist/src/files/disk-store.js +3 -20
- package/dist/src/files/disk-store.js.map +1 -1
- package/dist/src/files/index.d.ts +1 -1
- package/dist/src/files/index.js +5 -2
- package/dist/src/files/index.js.map +1 -1
- package/dist/src/files/memory-store.js +16 -16
- package/dist/src/files/memory-store.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 +11 -2
- package/dist/src/graphql/entry.js +12 -2
- package/dist/src/graphql/entry.js.map +1 -1
- package/dist/src/graphql/{public.d.ts → generate.d.ts} +3 -2
- package/dist/src/graphql/{public.js → generate.js} +4 -2
- package/dist/src/graphql/generate.js.map +1 -0
- package/dist/src/graphql/resolvers.js +1 -1
- package/dist/src/graphql/resolvers.js.map +1 -1
- package/dist/src/graphql/schema.js +6 -3
- package/dist/src/graphql/schema.js.map +1 -1
- package/dist/src/openapi/auth.d.ts +2 -2
- package/dist/src/openapi/auth.js +82 -15
- package/dist/src/openapi/auth.js.map +1 -1
- package/dist/src/openapi/document.js +16 -13
- package/dist/src/openapi/document.js.map +1 -1
- package/dist/src/openapi/entry.d.ts +12 -1
- package/dist/src/openapi/entry.js +12 -1
- package/dist/src/openapi/entry.js.map +1 -1
- package/dist/src/openapi/{public.d.ts → generate.d.ts} +9 -16
- package/dist/src/openapi/generate.js +41 -0
- package/dist/src/openapi/generate.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/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/routes.js +6 -9
- package/dist/src/rest/routes.js.map +1 -1
- package/dist/src/server/config.d.ts +29 -34
- package/dist/src/server/config.js +83 -211
- package/dist/src/server/config.js.map +1 -1
- package/dist/src/server/create.d.ts +3 -5
- package/dist/src/server/create.js +35 -29
- package/dist/src/server/create.js.map +1 -1
- package/dist/src/server/features.d.ts +0 -11
- package/dist/src/server/features.js +0 -20
- package/dist/src/server/features.js.map +1 -1
- 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 +1 -2
- package/package.json +1 -1
- package/dist/src/graphql/lazy.d.ts +0 -10
- package/dist/src/graphql/lazy.js +0 -13
- package/dist/src/graphql/lazy.js.map +0 -1
- package/dist/src/graphql/public.js.map +0 -1
- package/dist/src/openapi/index.d.ts +0 -13
- package/dist/src/openapi/index.js +0 -37
- package/dist/src/openapi/index.js.map +0 -1
- package/dist/src/openapi/lazy.d.ts +0 -11
- package/dist/src/openapi/lazy.js +0 -13
- package/dist/src/openapi/lazy.js.map +0 -1
- package/dist/src/openapi/public.js +0 -26
- package/dist/src/openapi/public.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type OpenapiInfo = {
|
|
2
|
+
title: string;
|
|
3
|
+
version: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
};
|
|
6
|
+
/** Проверяет метаданные спецификации и возвращает независимую копию.
|
|
7
|
+
* @example normalizeOpenapiInfo({ title: 'API', version: '1' }) → { title: 'API', version: '1' }; description: 42 → ошибка.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeOpenapiInfo(value: unknown): OpenapiInfo | undefined;
|
|
10
|
+
export interface OpenapiOptions {
|
|
11
|
+
auth?: boolean;
|
|
12
|
+
files?: boolean;
|
|
13
|
+
host?: string;
|
|
14
|
+
port?: number;
|
|
15
|
+
pageSize?: number;
|
|
16
|
+
maxPageSize?: number;
|
|
17
|
+
info?: OpenapiInfo;
|
|
18
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getObject } from '../core/config-values.js';
|
|
2
|
+
/** Проверяет метаданные спецификации и возвращает независимую копию.
|
|
3
|
+
* @example normalizeOpenapiInfo({ title: 'API', version: '1' }) → { title: 'API', version: '1' }; description: 42 → ошибка.
|
|
4
|
+
*/
|
|
5
|
+
export function normalizeOpenapiInfo(value) {
|
|
6
|
+
const info = getObject(value, 'openapi.info');
|
|
7
|
+
if (!info)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (typeof info.title !== 'string' || typeof info.version !== 'string' || (info.description !== undefined && typeof info.description !== 'string'))
|
|
10
|
+
throw new Error('Invalid OpenAPI info');
|
|
11
|
+
return structuredClone(info);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/openapi/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5L,OAAO,eAAe,CAAC,IAAI,CAAgB,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OpenapiDocument } from './types.js';
|
|
2
|
+
/** Сохраняет документ в YAML, создавая родительские каталоги.
|
|
3
|
+
* @example writeOpenapi(document, './out/api.yaml') → Promise<void>; результат записан в файл.
|
|
4
|
+
*/
|
|
5
|
+
export declare const writeOpenapi: (document: OpenapiDocument, outputPath: string) => Promise<void>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { stringify } from 'yaml';
|
|
4
|
+
/** Сохраняет документ в YAML, создавая родительские каталоги.
|
|
5
|
+
* @example writeOpenapi(document, './out/api.yaml') → Promise<void>; результат записан в файл.
|
|
6
|
+
*/
|
|
7
|
+
export const writeOpenapi = async (document, outputPath) => {
|
|
8
|
+
const resolvedOutputPath = resolve(outputPath);
|
|
9
|
+
await mkdir(dirname(resolvedOutputPath), { recursive: true });
|
|
10
|
+
await writeFile(resolvedOutputPath, stringify(document, { aliasDuplicateObjects: false, lineWidth: 0 }), 'utf8');
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/openapi/write.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;AAGjC;;GAEG;AACH,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"}
|
package/dist/src/rest/routes.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { domainError } from '../core/errors.js';
|
|
2
|
+
import { MUTATIONS } from '../core/operations.js';
|
|
2
3
|
import { parseRestOptions } from './options.js';
|
|
3
4
|
import { project, validateRest } from './projection.js';
|
|
4
5
|
/** Регистрирует чтение коллекций и операции создания, замены, изменения и удаления записей.
|
|
@@ -27,23 +28,19 @@ export function registerRestRoutes(server, engine, authenticate) {
|
|
|
27
28
|
throw domainError('NOT_FOUND', 'Record not found');
|
|
28
29
|
return project(engine, ref, options.scope, plans);
|
|
29
30
|
});
|
|
30
|
-
for (const
|
|
31
|
-
['POST', 'create'],
|
|
32
|
-
['PUT', 'replace'],
|
|
33
|
-
['PATCH', 'update'],
|
|
34
|
-
['DELETE', 'delete'],
|
|
35
|
-
]) {
|
|
31
|
+
for (const { method, mode, hasKey, status } of MUTATIONS) {
|
|
36
32
|
server.route({
|
|
37
33
|
method,
|
|
38
|
-
url:
|
|
34
|
+
url: hasKey ? itemPath : path,
|
|
39
35
|
handler: async (request, reply) => {
|
|
40
|
-
const actor = authenticate
|
|
36
|
+
const actor = authenticate ? () => authenticate(request.headers.authorization) : undefined;
|
|
37
|
+
actor?.();
|
|
41
38
|
const options = parseRestOptions(request.query);
|
|
42
39
|
const result = await engine.mutate(initial, mode, request.params[initial.primary], request.body, (ref) => {
|
|
43
40
|
const plans = validateRest(engine, ref.entity, options);
|
|
44
41
|
return project(engine, ref, options.scope, plans);
|
|
45
42
|
}, actor);
|
|
46
|
-
return reply.code(
|
|
43
|
+
return reply.code(status).send(result);
|
|
47
44
|
},
|
|
48
45
|
});
|
|
49
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/rest/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,MAAc,EAAE,YAA2B;IACrG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAE,CAAC;YACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5G,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACzG,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAE,CAAC;YACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAG,OAAO,CAAC,MAAiC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,GAAG;gBAAE,MAAM,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/rest/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
+
import type { FastifyServerOptions } from 'fastify';
|
|
1
2
|
import type { AuthConfig } from '../auth/contract.js';
|
|
2
3
|
import type { DatabaseConfig } from '../core/database.js';
|
|
4
|
+
import type { ModelSchema } from '../core/model.js';
|
|
5
|
+
import type { Storage } from '../core/storage.js';
|
|
3
6
|
import type { FilesConfig } from '../files/contract.js';
|
|
7
|
+
import { type OpenapiInfo } from '../openapi/options.js';
|
|
4
8
|
export type { AuthConfig } from '../auth/contract.js';
|
|
5
|
-
import type { FastifyServerOptions } from 'fastify';
|
|
6
|
-
import type { ModelSchema } from '../core/model.js';
|
|
7
|
-
export type DatabaseSchema = ModelSchema;
|
|
8
9
|
export type { DatabaseConfig } from '../core/database.js';
|
|
10
|
+
export type { Storage } from '../core/storage.js';
|
|
9
11
|
export type { FilesConfig, MemoryFile } from '../files/contract.js';
|
|
12
|
+
export type DatabaseSchema = ModelSchema;
|
|
10
13
|
export interface OpenapiConfig {
|
|
11
|
-
enabled?: boolean;
|
|
12
14
|
endpoint?: string;
|
|
13
15
|
path?: string;
|
|
14
|
-
info?:
|
|
15
|
-
title: string;
|
|
16
|
-
version: string;
|
|
17
|
-
description?: string;
|
|
18
|
-
};
|
|
16
|
+
info?: OpenapiInfo;
|
|
19
17
|
}
|
|
20
18
|
export interface GraphqlConfig {
|
|
21
19
|
path?: string;
|
|
22
|
-
enabled?: boolean;
|
|
23
20
|
endpoint?: string;
|
|
24
21
|
}
|
|
25
22
|
export interface ServerConfig {
|
|
@@ -31,26 +28,34 @@ export interface ServerConfig {
|
|
|
31
28
|
pageSize?: number;
|
|
32
29
|
port?: number;
|
|
33
30
|
}
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
export type DeepJsonServerConfig = {
|
|
32
|
+
[S in Storage]: {
|
|
33
|
+
storage: S;
|
|
34
|
+
database: DatabaseConfig<S>;
|
|
35
|
+
files?: FilesConfig<S>;
|
|
36
|
+
auth?: AuthConfig<S>;
|
|
37
|
+
openapi?: OpenapiConfig;
|
|
38
|
+
graphql?: GraphqlConfig;
|
|
39
|
+
server?: ServerConfig;
|
|
40
|
+
};
|
|
41
|
+
}[Storage];
|
|
42
42
|
export interface NormalizedServerConfig {
|
|
43
|
+
storage: Storage;
|
|
43
44
|
database: DatabaseConfig;
|
|
44
45
|
files?: FilesConfig;
|
|
45
46
|
auth?: AuthConfig;
|
|
46
|
-
openapi
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
openapi?: OpenapiConfig & {
|
|
48
|
+
endpoint: string;
|
|
49
|
+
};
|
|
50
|
+
graphql?: GraphqlConfig & {
|
|
51
|
+
endpoint: string;
|
|
52
|
+
};
|
|
53
|
+
server: Required<ServerConfig>;
|
|
49
54
|
}
|
|
50
|
-
/**
|
|
51
|
-
* @example
|
|
55
|
+
/** Нормализует объект конфигурации без чтения содержимого файлов.
|
|
56
|
+
* @example Путь './db.json' с directory = '/tmp' → '/tmp/db.json'.
|
|
52
57
|
*/
|
|
53
|
-
export declare const normalizeServerConfig: (config: DeepJsonServerConfig,
|
|
58
|
+
export declare const normalizeServerConfig: (config: DeepJsonServerConfig, directory?: string) => NormalizedServerConfig;
|
|
54
59
|
/** Загружает default-экспорт ES-модуля, обходя кеш повторного импорта; выполняет код модуля.
|
|
55
60
|
* @example Файл /tmp/config.mjs с export default {} → { config: {}, directory: '/tmp', path: '/tmp/config.mjs' }.
|
|
56
61
|
*/
|
|
@@ -67,13 +72,3 @@ export declare const configSourcePath: (config: NormalizedServerConfig) => strin
|
|
|
67
72
|
* @example configure(config, '/tmp', '/tmp/config.mjs') → настройки; configSourcePath(result) → '/tmp/config.mjs'.
|
|
68
73
|
*/
|
|
69
74
|
export declare function configure(config: unknown, directory: string, sourcePath?: string): NormalizedServerConfig;
|
|
70
|
-
/** Выбирает настройки для указанных форматов экспорта и подставляет пустые данные вместо чтения базы.
|
|
71
|
-
* @example formats = ['graphql'] → настройки генерации GraphQL с database.data = {}.
|
|
72
|
-
*/
|
|
73
|
-
export declare function configureGeneration(source: Record<string, unknown>, formats: string[], directory: string, sourcePath: string, overrides: {
|
|
74
|
-
host?: string;
|
|
75
|
-
port?: number;
|
|
76
|
-
files?: boolean;
|
|
77
|
-
timestamps?: boolean;
|
|
78
|
-
softDelete?: boolean;
|
|
79
|
-
}): NormalizedServerConfig;
|
|
@@ -1,211 +1,109 @@
|
|
|
1
|
-
import { recordOptions } from '../core/lifecycle/options.js';
|
|
2
|
-
import { errorMessage, isPortNumber } from '../core/utils.js';
|
|
3
1
|
import { dirname, resolve } from 'node:path';
|
|
4
2
|
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { getBoolean, getObject, getPositiveInteger, getString, normalizeAddress } from '../core/config-values.js';
|
|
4
|
+
import { DEFAULT_MAX_FILE_SIZE } from '../core/constants.js';
|
|
5
5
|
import { normalizePagination } from '../core/pagination.js';
|
|
6
|
-
import { assertKnownKeys, isObject } from '../core/utils.js';
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const FILES_KEYS = new Set(['data', 'directory', 'metadata']);
|
|
10
|
-
const OPENAPI_KEYS = new Set(['path', 'info', 'enabled', 'endpoint']);
|
|
11
|
-
const GRAPHQL_KEYS = new Set(['path', 'enabled', 'endpoint']);
|
|
6
|
+
import { assertKnownKeys, errorMessage, isObject } from '../core/utils.js';
|
|
7
|
+
import { normalizeOpenapiInfo } from '../openapi/options.js';
|
|
8
|
+
const CONFIG_KEYS = new Set(['storage', 'database', 'files', 'auth', 'openapi', 'graphql', 'server']);
|
|
12
9
|
const SERVER_KEYS = new Set(['cors', 'host', 'logger', 'maxFileSize', 'maxPageSize', 'pageSize', 'port']);
|
|
13
10
|
let configImportIndex = 0;
|
|
14
|
-
/**
|
|
15
|
-
* @example
|
|
11
|
+
/** Проверяет секцию и её допустимые ключи; undefined означает отсутствие секции.
|
|
12
|
+
* @example section({}, 'auth', []) → {}; section(null, 'auth', []) → ошибка.
|
|
16
13
|
*/
|
|
17
|
-
|
|
14
|
+
function section(value, name, keys) {
|
|
15
|
+
if (value === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
const object = getObject(value, `config.${name}`, true);
|
|
18
|
+
assertKnownKeys(object, new Set(keys), `config.${name}`);
|
|
19
|
+
return object;
|
|
20
|
+
}
|
|
21
|
+
/** Проверяет путь либо начальные данные в соответствии с общим режимом хранения.
|
|
22
|
+
* @example source('db.json', 'file', 'database.source', '/tmp') → '/tmp/db.json'.
|
|
23
|
+
*/
|
|
24
|
+
function source(value, storage, name, directory, array = false) {
|
|
25
|
+
if (storage === 'file')
|
|
26
|
+
return resolve(directory, getString(value, `config.${name}`, true));
|
|
27
|
+
if (array ? !Array.isArray(value) : !isObject(value))
|
|
28
|
+
throw new Error(`config.${name} must contain ${array ? 'an array' : 'an object'} for memory storage`);
|
|
18
29
|
try {
|
|
19
30
|
return structuredClone(value);
|
|
20
31
|
}
|
|
21
32
|
catch (error) {
|
|
22
|
-
throw new Error(
|
|
33
|
+
throw new Error(`config.${name} must contain structured data`, { cause: error });
|
|
23
34
|
}
|
|
24
|
-
};
|
|
25
|
-
function getObject(value, path, required = false) {
|
|
26
|
-
if (value == null && !required) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
if (!isObject(value)) {
|
|
30
|
-
throw new Error(`Ключ ${path} должен быть JSON-объектом`);
|
|
31
|
-
}
|
|
32
|
-
return value;
|
|
33
35
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
if (typeof value !== 'string' || value.trim() === '') {
|
|
39
|
-
throw new Error(`Ключ ${path} должен содержать непустую строку`);
|
|
40
|
-
}
|
|
41
|
-
return value;
|
|
42
|
-
}
|
|
43
|
-
/** Делает заданный путь абсолютным относительно указанного каталога.
|
|
44
|
-
* @example resolveConfigPath('a.json', '/tmp') → '/tmp/a.json'; undefined → undefined.
|
|
45
|
-
*/
|
|
46
|
-
const resolveConfigPath = (value, directoryPath) => (value == null ? undefined : resolve(directoryPath, value));
|
|
47
|
-
/** Принимает положительное целое число или отсутствие значения.
|
|
48
|
-
* @example getPositiveInteger(2, 'size') → 2; getPositiveInteger(0, 'size') → ошибка.
|
|
49
|
-
*/
|
|
50
|
-
const getPositiveInteger = (value, path) => {
|
|
51
|
-
if (value == null) {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
|
|
55
|
-
throw new Error(`Ключ ${path} должен быть положительным целым числом`);
|
|
56
|
-
}
|
|
57
|
-
return value;
|
|
58
|
-
};
|
|
59
|
-
/** Принимает объект описания или разрешает путь к нему относительно каталога.
|
|
60
|
-
* @example normalizeSchema('schema.json', '/tmp') → '/tmp/schema.json'.
|
|
61
|
-
*/
|
|
62
|
-
const normalizeSchema = (schema, directoryPath) => {
|
|
63
|
-
if (schema == null) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
if (typeof schema === 'string') {
|
|
67
|
-
return resolve(directoryPath, getString(schema, 'config.database.schema', true));
|
|
68
|
-
}
|
|
69
|
-
return getObject(schema, 'config.database.schema', true);
|
|
70
|
-
};
|
|
71
|
-
/** Проверяет выбор между файлом и данными в памяти, разрешает пути и копирует данные.
|
|
72
|
-
* @example { path: 'db.json' } с каталогом /tmp → path: '/tmp/db.json'; одновременно data и path → ошибка.
|
|
73
|
-
*/
|
|
74
|
-
const normalizeDatabase = (value, directoryPath) => {
|
|
75
|
-
const database = getObject(value, 'config.database', true);
|
|
76
|
-
assertKnownKeys(database, DATABASE_KEYS, 'config.database');
|
|
77
|
-
const hasData = database.data != null;
|
|
78
|
-
const hasPath = database.path != null;
|
|
79
|
-
if (hasData === hasPath) {
|
|
80
|
-
throw new Error('Укажите ровно один из ключей config.database.path и config.database.data');
|
|
81
|
-
}
|
|
82
|
-
const schema = normalizeSchema(database.schema, directoryPath);
|
|
83
|
-
recordOptions({ timestamps: database.timestamps, softDelete: database.softDelete });
|
|
84
|
-
const flags = {
|
|
85
|
-
...(database.timestamps !== undefined ? { timestamps: database.timestamps } : {}),
|
|
86
|
-
...(database.softDelete !== undefined ? { softDelete: database.softDelete } : {}),
|
|
87
|
-
};
|
|
88
|
-
if (hasData) {
|
|
89
|
-
return { data: copyInput(getObject(database.data, 'config.database.data', true)), schema, ...flags };
|
|
90
|
-
}
|
|
91
|
-
return { path: resolve(directoryPath, getString(database.path, 'config.database.path', true)), schema, ...flags };
|
|
92
|
-
};
|
|
93
|
-
/** Проверяет выбор между файлами в памяти и дисковым хранилищем, разрешает пути.
|
|
94
|
-
* @example normalizeFiles(undefined, '/tmp') → undefined; { data: [] } → { data: [] }.
|
|
95
|
-
*/
|
|
96
|
-
const normalizeFiles = (value, directoryPath) => {
|
|
97
|
-
const files = getObject(value, 'config.files');
|
|
98
|
-
if (files == null) {
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
assertKnownKeys(files, FILES_KEYS, 'config.files');
|
|
102
|
-
const hasData = files.data != null;
|
|
103
|
-
const hasDiskStorage = files.directory != null || files.metadata != null;
|
|
104
|
-
if (hasData === hasDiskStorage) {
|
|
105
|
-
throw new Error('Укажите либо config.files.data, либо пару config.files.directory и config.files.metadata');
|
|
106
|
-
}
|
|
107
|
-
if (hasData) {
|
|
108
|
-
if (!Array.isArray(files.data)) {
|
|
109
|
-
throw new Error('Ключ config.files.data должен содержать массив');
|
|
110
|
-
}
|
|
111
|
-
return { data: copyInput(files.data) };
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
directory: resolve(directoryPath, getString(files.directory, 'config.files.directory', true)),
|
|
115
|
-
metadata: resolve(directoryPath, getString(files.metadata, 'config.files.metadata', true)),
|
|
116
|
-
};
|
|
117
|
-
};
|
|
118
|
-
/** Проверяет источник учётных записей и срок сессии; массив копирует, путь делает абсолютным.
|
|
119
|
-
* @example { users: 'users.json' } с каталогом /tmp → users: '/tmp/users.json'.
|
|
36
|
+
/** Проверяет секции настроек и возвращает независимые данные с абсолютными путями.
|
|
37
|
+
* @example { storage: 'file', database: { source: 'db.json' } } → абсолютный database.source.
|
|
120
38
|
*/
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
if (!auth)
|
|
124
|
-
return undefined;
|
|
125
|
-
assertKnownKeys(auth, new Set(['users', 'expiresIn']), 'config.auth');
|
|
126
|
-
if (typeof auth.users !== 'string' && !Array.isArray(auth.users))
|
|
127
|
-
throw new Error('config.auth.users must be a file path or user array');
|
|
128
|
-
const expiresIn = getPositiveInteger(auth.expiresIn, 'config.auth.expiresIn');
|
|
129
|
-
if (expiresIn !== undefined && expiresIn > 2147483647)
|
|
130
|
-
throw new Error('config.auth.expiresIn must be at most 2147483647 seconds');
|
|
131
|
-
return {
|
|
132
|
-
users: typeof auth.users === 'string' ? resolve(directory, getString(auth.users, 'config.auth.users', true)) : copyInput(auth.users),
|
|
133
|
-
expiresIn,
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
/** Проверяет секции настроек и возвращает нормализованный объект с абсолютными путями.
|
|
137
|
-
* @example { database: { path: 'db.json' } } с каталогом /tmp → database.path: '/tmp/db.json'.
|
|
138
|
-
*/
|
|
139
|
-
const normalizeConfig = (config, directoryPath = '.') => {
|
|
140
|
-
if (!isObject(config)) {
|
|
141
|
-
throw new Error('Конфигурация сервера должна содержать JSON-объект');
|
|
142
|
-
}
|
|
39
|
+
function normalizeConfig(value, directory = '.') {
|
|
40
|
+
const config = getObject(value, 'config', true);
|
|
143
41
|
assertKnownKeys(config, CONFIG_KEYS, 'config');
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
42
|
+
if (config.storage !== 'file' && config.storage !== 'memory')
|
|
43
|
+
throw new Error("config.storage must be 'file' or 'memory'");
|
|
44
|
+
const storage = config.storage;
|
|
45
|
+
const database = section(config.database, 'database', ['source', 'schema']);
|
|
46
|
+
if (!database)
|
|
47
|
+
throw new Error('config.database is required');
|
|
48
|
+
const normalizedDatabase = {
|
|
49
|
+
source: source(database.source, storage, 'database.source', directory),
|
|
50
|
+
...(database.schema !== undefined ? { schema: source(database.schema, storage, 'database.schema', directory) } : {}),
|
|
51
|
+
};
|
|
52
|
+
const files = section(config.files, 'files', storage === 'file' ? ['source', 'metadata'] : ['source']);
|
|
53
|
+
const normalizedFiles = files === undefined
|
|
54
|
+
? undefined
|
|
55
|
+
: storage === 'file'
|
|
56
|
+
? {
|
|
57
|
+
source: source(files.source, storage, 'files.source', directory),
|
|
58
|
+
metadata: files.metadata === undefined
|
|
59
|
+
? resolve(directory, getString(files.source, 'config.files.source', true), '_database.json')
|
|
60
|
+
: resolve(directory, getString(files.metadata, 'config.files.metadata', true)),
|
|
61
|
+
}
|
|
62
|
+
: { source: source(files.source, storage, 'files.source', directory, true) };
|
|
63
|
+
const auth = section(config.auth, 'auth', ['source', 'expiresIn']);
|
|
64
|
+
let normalizedAuth;
|
|
65
|
+
if (auth) {
|
|
66
|
+
const expiresIn = getPositiveInteger(auth.expiresIn, 'config.auth.expiresIn');
|
|
67
|
+
if (expiresIn !== undefined && expiresIn > 2147483647)
|
|
68
|
+
throw new Error('config.auth.expiresIn must be at most 2147483647 seconds');
|
|
69
|
+
normalizedAuth = { source: source(auth.source, storage, 'auth.source', directory, true), expiresIn };
|
|
70
|
+
}
|
|
71
|
+
const openapi = section(config.openapi, 'openapi', ['path', 'info', 'endpoint']);
|
|
72
|
+
const graphql = section(config.graphql, 'graphql', ['path', 'endpoint']);
|
|
73
|
+
if ((openapi || graphql) && normalizedDatabase.schema === undefined)
|
|
74
|
+
throw new Error('GraphQL and OpenAPI require an explicit model schema');
|
|
75
|
+
const exportPath = (value, name) => (value === undefined ? undefined : resolve(directory, getString(value, name, true)));
|
|
76
|
+
const openapiEndpoint = getString(openapi?.endpoint, 'config.openapi.endpoint') ?? '/openapi.json';
|
|
77
|
+
const graphqlEndpoint = getString(graphql?.endpoint, 'config.graphql.endpoint') ?? '/graphql';
|
|
78
|
+
if (!/^\/[A-Za-z][A-Za-z0-9_./-]*$/.test(openapiEndpoint))
|
|
155
79
|
throw new Error('Invalid OpenAPI endpoint');
|
|
156
|
-
if (
|
|
157
|
-
throw new Error('config.graphql.enabled must be boolean');
|
|
158
|
-
const endpoint = getString(graphql.endpoint, 'config.graphql.endpoint');
|
|
159
|
-
if (endpoint && (!/^\/[A-Za-z][A-Za-z0-9_/-]*$/.test(endpoint) || endpoint === '/'))
|
|
80
|
+
if (!/^\/[A-Za-z][A-Za-z0-9_/-]*$/.test(graphqlEndpoint))
|
|
160
81
|
throw new Error('Invalid GraphQL endpoint');
|
|
161
|
-
const
|
|
162
|
-
if (info && (typeof info.title !== 'string' || typeof info.version !== 'string'))
|
|
163
|
-
throw new Error('OpenAPI info requires title and version');
|
|
82
|
+
const server = getObject(config.server, 'config.server') ?? {};
|
|
164
83
|
assertKnownKeys(server, SERVER_KEYS, 'config.server');
|
|
165
|
-
const openapiPath = getString(openapi.path, 'config.openapi.path');
|
|
166
|
-
const cors = server.cors;
|
|
167
|
-
const host = getString(server.host, 'config.server.host');
|
|
168
84
|
const logger = server.logger;
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const pageSize = getPositiveInteger(server.pageSize, 'config.server.pageSize');
|
|
172
|
-
normalizePagination({ pageSize, maxPageSize });
|
|
173
|
-
const port = server.port;
|
|
174
|
-
if (port != null && !isPortNumber(port)) {
|
|
175
|
-
throw new Error('Ключ config.server.port должен быть целым числом от 0 до 65535');
|
|
176
|
-
}
|
|
177
|
-
if (logger != null && typeof logger !== 'boolean' && !isObject(logger)) {
|
|
178
|
-
throw new Error('Ключ config.server.logger должен содержать boolean или JSON-объект');
|
|
179
|
-
}
|
|
180
|
-
if (cors != null && typeof cors !== 'boolean') {
|
|
181
|
-
throw new Error('Ключ config.server.cors должен содержать boolean');
|
|
182
|
-
}
|
|
85
|
+
if (logger != null && typeof logger !== 'boolean' && !isObject(logger))
|
|
86
|
+
throw new Error('config.server.logger must be boolean or an object');
|
|
183
87
|
return {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
path: resolveConfigPath(openapiPath, directoryPath),
|
|
191
|
-
...(info && { info: copyInput(info) }),
|
|
192
|
-
},
|
|
193
|
-
graphql: { path: resolveConfigPath(getString(graphql.path, 'config.graphql.path'), directoryPath), enabled: graphql.enabled, endpoint },
|
|
88
|
+
storage,
|
|
89
|
+
database: normalizedDatabase,
|
|
90
|
+
files: normalizedFiles,
|
|
91
|
+
auth: normalizedAuth,
|
|
92
|
+
openapi: openapi ? { endpoint: openapiEndpoint, path: exportPath(openapi.path, 'config.openapi.path'), info: normalizeOpenapiInfo(openapi.info) } : undefined,
|
|
93
|
+
graphql: graphql ? { endpoint: graphqlEndpoint, path: exportPath(graphql.path, 'config.graphql.path') } : undefined,
|
|
194
94
|
server: {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
pageSize,
|
|
201
|
-
port: port,
|
|
95
|
+
...normalizeAddress(server),
|
|
96
|
+
...normalizePagination(server),
|
|
97
|
+
cors: getBoolean(server.cors, 'config.server.cors') ?? true,
|
|
98
|
+
logger: (logger ?? true),
|
|
99
|
+
maxFileSize: getPositiveInteger(server.maxFileSize, 'config.server.maxFileSize') ?? DEFAULT_MAX_FILE_SIZE,
|
|
202
100
|
},
|
|
203
101
|
};
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* @example
|
|
102
|
+
}
|
|
103
|
+
/** Нормализует объект конфигурации без чтения содержимого файлов.
|
|
104
|
+
* @example Путь './db.json' с directory = '/tmp' → '/tmp/db.json'.
|
|
207
105
|
*/
|
|
208
|
-
export const normalizeServerConfig = (config,
|
|
106
|
+
export const normalizeServerConfig = (config, directory) => normalizeConfig(config, directory);
|
|
209
107
|
/** Загружает default-экспорт ES-модуля, обходя кеш повторного импорта; выполняет код модуля.
|
|
210
108
|
* @example Файл /tmp/config.mjs с export default {} → { config: {}, directory: '/tmp', path: '/tmp/config.mjs' }.
|
|
211
109
|
*/
|
|
@@ -241,30 +139,4 @@ export function configure(config, directory, sourcePath) {
|
|
|
241
139
|
sourcePaths.set(normalized, sourcePath);
|
|
242
140
|
return normalized;
|
|
243
141
|
}
|
|
244
|
-
/** Выбирает настройки для указанных форматов экспорта и подставляет пустые данные вместо чтения базы.
|
|
245
|
-
* @example formats = ['graphql'] → настройки генерации GraphQL с database.data = {}.
|
|
246
|
-
*/
|
|
247
|
-
export function configureGeneration(source, formats, directory, sourcePath, overrides) {
|
|
248
|
-
assertKnownKeys(source, CONFIG_KEYS, 'config');
|
|
249
|
-
const database = getObject(source.database, 'config.database', true);
|
|
250
|
-
if (database.schema === undefined)
|
|
251
|
-
throw new Error('Generation requires an explicit model schema');
|
|
252
|
-
const openapi = formats.includes('openapi');
|
|
253
|
-
const server = openapi ? (getObject(source.server, 'config.server') ?? {}) : {};
|
|
254
|
-
return configure({
|
|
255
|
-
database: { data: {}, schema: database.schema, timestamps: overrides.timestamps ?? database.timestamps, softDelete: overrides.softDelete ?? database.softDelete },
|
|
256
|
-
auth: source.auth != null ? { users: [] } : undefined,
|
|
257
|
-
openapi: openapi ? source.openapi : undefined,
|
|
258
|
-
graphql: formats.includes('graphql') ? source.graphql : undefined,
|
|
259
|
-
files: openapi && (overrides.files || source.files != null) ? { data: [] } : undefined,
|
|
260
|
-
server: openapi
|
|
261
|
-
? {
|
|
262
|
-
host: overrides.host ?? server.host,
|
|
263
|
-
port: overrides.port ?? server.port,
|
|
264
|
-
pageSize: server.pageSize,
|
|
265
|
-
maxPageSize: server.maxPageSize,
|
|
266
|
-
}
|
|
267
|
-
: {},
|
|
268
|
-
}, directory, sourcePath);
|
|
269
|
-
}
|
|
270
142
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/server/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/server/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import type { FastifyInstance } from 'fastify';
|
|
2
2
|
import type { OpenapiDocument } from '../openapi/types.js';
|
|
3
3
|
import { type DeepJsonServerConfig, type NormalizedServerConfig } from './config.js';
|
|
4
|
-
import { type ServerFeatures } from './features.js';
|
|
5
4
|
export interface ServerFacade {
|
|
6
5
|
fastify(): FastifyInstance;
|
|
7
6
|
openapi(): Promise<OpenapiDocument>;
|
|
8
7
|
graphql(): Promise<string>;
|
|
9
8
|
}
|
|
10
|
-
export type { ServerFeatures } from './features.js';
|
|
11
9
|
/** Проверяет настройки и создаёт интерфейс запуска и генерации схем; сетевой порт ещё не открывает.
|
|
12
|
-
* @example await createServer({ database: {
|
|
10
|
+
* @example await createServer({ storage: 'memory', database: { source: { notes: [] } } }) → объект с fastify(), openapi(), graphql().
|
|
13
11
|
*/
|
|
14
|
-
export declare function createServer(config: DeepJsonServerConfig
|
|
12
|
+
export declare function createServer(config: DeepJsonServerConfig): Promise<ServerFacade>;
|
|
15
13
|
/** Собирает сервер из нормализованных настроек; хранилища открываются при инициализации HTTP-экземпляра.
|
|
16
14
|
* @example Нормализованные настройки → Promise<ServerFacade>; listen() затем открывает сетевой порт.
|
|
17
15
|
*/
|
|
18
|
-
export declare function createConfiguredServer(normalized: NormalizedServerConfig
|
|
16
|
+
export declare function createConfiguredServer(normalized: NormalizedServerConfig): Promise<ServerFacade>;
|