@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.
Files changed (127) hide show
  1. package/README.md +168 -109
  2. package/README.ru.md +171 -112
  3. package/dist/index.d.ts +5 -6
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/auth/contract.d.ts +6 -2
  7. package/dist/src/auth/contract.js +8 -1
  8. package/dist/src/auth/contract.js.map +1 -1
  9. package/dist/src/auth/input.d.ts +18 -0
  10. package/dist/src/auth/input.js +34 -0
  11. package/dist/src/auth/input.js.map +1 -0
  12. package/dist/src/auth/password.d.ts +4 -0
  13. package/dist/src/auth/password.js +5 -1
  14. package/dist/src/auth/password.js.map +1 -1
  15. package/dist/src/auth/routes.d.ts +1 -1
  16. package/dist/src/auth/routes.js +4 -1
  17. package/dist/src/auth/routes.js.map +1 -1
  18. package/dist/src/auth/service.d.ts +48 -9
  19. package/dist/src/auth/service.js +143 -68
  20. package/dist/src/auth/service.js.map +1 -1
  21. package/dist/src/auth/store.d.ts +26 -0
  22. package/dist/src/auth/store.js +82 -0
  23. package/dist/src/auth/store.js.map +1 -0
  24. package/dist/src/cli/index.d.ts +2 -2
  25. package/dist/src/cli/index.js +70 -84
  26. package/dist/src/cli/index.js.map +1 -1
  27. package/dist/src/core/config-values.d.ts +28 -0
  28. package/dist/src/core/config-values.js +53 -0
  29. package/dist/src/core/config-values.js.map +1 -0
  30. package/dist/src/core/constants.d.ts +1 -1
  31. package/dist/src/core/constants.js +1 -1
  32. package/dist/src/core/database.d.ts +10 -12
  33. package/dist/src/core/database.js +4 -4
  34. package/dist/src/core/database.js.map +1 -1
  35. package/dist/src/core/engine.d.ts +3 -2
  36. package/dist/src/core/engine.js +53 -44
  37. package/dist/src/core/engine.js.map +1 -1
  38. package/dist/src/core/lifecycle/mutation.d.ts +3 -3
  39. package/dist/src/core/lifecycle/mutation.js +2 -2
  40. package/dist/src/core/lifecycle/mutation.js.map +1 -1
  41. package/dist/src/core/lifecycle/options.d.ts +1 -0
  42. package/dist/src/core/lifecycle/options.js +2 -4
  43. package/dist/src/core/lifecycle/options.js.map +1 -1
  44. package/dist/src/core/model.d.ts +18 -3
  45. package/dist/src/core/model.js +17 -7
  46. package/dist/src/core/model.js.map +1 -1
  47. package/dist/src/core/mutations/write.d.ts +1 -2
  48. package/dist/src/core/mutations/write.js.map +1 -1
  49. package/dist/src/core/operations.d.ts +33 -0
  50. package/dist/src/core/operations.js +10 -0
  51. package/dist/src/core/operations.js.map +1 -0
  52. package/dist/src/core/pagination.d.ts +2 -2
  53. package/dist/src/core/pagination.js +3 -5
  54. package/dist/src/core/pagination.js.map +1 -1
  55. package/dist/src/core/paths.d.ts +2 -2
  56. package/dist/src/core/paths.js +15 -5
  57. package/dist/src/core/paths.js.map +1 -1
  58. package/dist/src/core/storage.d.ts +2 -0
  59. package/dist/src/core/storage.js +2 -0
  60. package/dist/src/core/storage.js.map +1 -0
  61. package/dist/src/files/contract.d.ts +6 -7
  62. package/dist/src/files/contract.js.map +1 -1
  63. package/dist/src/files/disk-store.js +3 -20
  64. package/dist/src/files/disk-store.js.map +1 -1
  65. package/dist/src/files/index.d.ts +1 -1
  66. package/dist/src/files/index.js +5 -2
  67. package/dist/src/files/index.js.map +1 -1
  68. package/dist/src/files/memory-store.js +16 -16
  69. package/dist/src/files/memory-store.js.map +1 -1
  70. package/dist/src/files/streams.d.ts +5 -0
  71. package/dist/src/files/streams.js +20 -0
  72. package/dist/src/files/streams.js.map +1 -0
  73. package/dist/src/graphql/entry.d.ts +11 -2
  74. package/dist/src/graphql/entry.js +12 -2
  75. package/dist/src/graphql/entry.js.map +1 -1
  76. package/dist/src/graphql/{public.d.ts → generate.d.ts} +3 -2
  77. package/dist/src/graphql/{public.js → generate.js} +4 -2
  78. package/dist/src/graphql/generate.js.map +1 -0
  79. package/dist/src/graphql/resolvers.js +1 -1
  80. package/dist/src/graphql/resolvers.js.map +1 -1
  81. package/dist/src/graphql/schema.js +6 -3
  82. package/dist/src/graphql/schema.js.map +1 -1
  83. package/dist/src/openapi/auth.d.ts +2 -2
  84. package/dist/src/openapi/auth.js +82 -15
  85. package/dist/src/openapi/auth.js.map +1 -1
  86. package/dist/src/openapi/document.js +16 -13
  87. package/dist/src/openapi/document.js.map +1 -1
  88. package/dist/src/openapi/entry.d.ts +12 -1
  89. package/dist/src/openapi/entry.js +12 -1
  90. package/dist/src/openapi/entry.js.map +1 -1
  91. package/dist/src/openapi/{public.d.ts → generate.d.ts} +9 -16
  92. package/dist/src/openapi/generate.js +41 -0
  93. package/dist/src/openapi/generate.js.map +1 -0
  94. package/dist/src/openapi/options.d.ts +18 -0
  95. package/dist/src/openapi/options.js +13 -0
  96. package/dist/src/openapi/options.js.map +1 -0
  97. package/dist/src/openapi/write.d.ts +5 -0
  98. package/dist/src/openapi/write.js +12 -0
  99. package/dist/src/openapi/write.js.map +1 -0
  100. package/dist/src/rest/routes.js +6 -9
  101. package/dist/src/rest/routes.js.map +1 -1
  102. package/dist/src/server/config.d.ts +29 -34
  103. package/dist/src/server/config.js +83 -211
  104. package/dist/src/server/config.js.map +1 -1
  105. package/dist/src/server/create.d.ts +3 -5
  106. package/dist/src/server/create.js +35 -29
  107. package/dist/src/server/create.js.map +1 -1
  108. package/dist/src/server/features.d.ts +0 -11
  109. package/dist/src/server/features.js +0 -20
  110. package/dist/src/server/features.js.map +1 -1
  111. package/dist/src/server/model.d.ts +6 -0
  112. package/dist/src/server/model.js +14 -0
  113. package/dist/src/server/model.js.map +1 -0
  114. package/dist/src/server/public.d.ts +1 -2
  115. package/package.json +1 -1
  116. package/dist/src/graphql/lazy.d.ts +0 -10
  117. package/dist/src/graphql/lazy.js +0 -13
  118. package/dist/src/graphql/lazy.js.map +0 -1
  119. package/dist/src/graphql/public.js.map +0 -1
  120. package/dist/src/openapi/index.d.ts +0 -13
  121. package/dist/src/openapi/index.js +0 -37
  122. package/dist/src/openapi/index.js.map +0 -1
  123. package/dist/src/openapi/lazy.d.ts +0 -11
  124. package/dist/src/openapi/lazy.js +0 -13
  125. package/dist/src/openapi/lazy.js.map +0 -1
  126. package/dist/src/openapi/public.js +0 -26
  127. 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"}
@@ -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 [method, mode] of [
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: mode === 'create' ? path : itemPath,
34
+ url: hasKey ? itemPath : path,
39
35
  handler: async (request, reply) => {
40
- const actor = authenticate?.(request.headers.authorization);
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(mode === 'create' ? 201 : 200).send(result);
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":"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"}
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 interface DeepJsonServerConfig {
35
- database: DatabaseConfig;
36
- files?: FilesConfig;
37
- auth?: AuthConfig;
38
- openapi?: OpenapiConfig;
39
- graphql?: GraphqlConfig;
40
- server?: ServerConfig;
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: OpenapiConfig;
47
- graphql: GraphqlConfig;
48
- server: ServerConfig;
47
+ openapi?: OpenapiConfig & {
48
+ endpoint: string;
49
+ };
50
+ graphql?: GraphqlConfig & {
51
+ endpoint: string;
52
+ };
53
+ server: Required<ServerConfig>;
49
54
  }
50
- /** Проверяет настройки и разрешает относительные пути, не читая содержимое файлов.
51
- * @example При directoryPath = '/tmp' путь './db.json' → '/tmp/db.json'.
55
+ /** Нормализует объект конфигурации без чтения содержимого файлов.
56
+ * @example Путь './db.json' с directory = '/tmp' → '/tmp/db.json'.
52
57
  */
53
- export declare const normalizeServerConfig: (config: DeepJsonServerConfig, directoryPath?: string) => NormalizedServerConfig;
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
- const CONFIG_KEYS = new Set(['database', 'files', 'openapi', 'graphql', 'server', 'auth']);
8
- const DATABASE_KEYS = new Set(['data', 'path', 'schema', 'timestamps', 'softDelete']);
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 copyInput({ a: [1] }) → независимая копия { a: [1] }; функция в значении → ошибка.
11
+ /** Проверяет секцию и её допустимые ключи; undefined означает отсутствие секции.
12
+ * @example section({}, 'auth', []) → {}; section(null, 'auth', []) → ошибка.
16
13
  */
17
- const copyInput = (value) => {
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('Input must contain JSON data or binary file content', { cause: 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
- function getString(value, path, required = false) {
35
- if (value == null && !required) {
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
- const normalizeAuth = (value, directory) => {
122
- const auth = getObject(value, 'config.auth');
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
- const database = normalizeDatabase(config.database, directoryPath);
145
- const files = normalizeFiles(config.files, directoryPath);
146
- const openapi = getObject(config.openapi, 'config.openapi') ?? {};
147
- const graphql = getObject(config.graphql, 'config.graphql') ?? {};
148
- const server = getObject(config.server, 'config.server') ?? {};
149
- assertKnownKeys(openapi, OPENAPI_KEYS, 'config.openapi');
150
- assertKnownKeys(graphql, GRAPHQL_KEYS, 'config.graphql');
151
- if (openapi.enabled !== undefined && typeof openapi.enabled !== 'boolean')
152
- throw new Error('config.openapi.enabled must be boolean');
153
- const openapiEndpoint = getString(openapi.endpoint, 'config.openapi.endpoint');
154
- if (openapiEndpoint && !/^\/[A-Za-z][A-Za-z0-9_./-]*$/.test(openapiEndpoint))
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 (graphql.enabled !== undefined && typeof graphql.enabled !== 'boolean')
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 info = getObject(openapi.info, 'config.openapi.info');
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
- const maxFileSize = getPositiveInteger(server.maxFileSize, 'config.server.maxFileSize');
170
- const maxPageSize = getPositiveInteger(server.maxPageSize, 'config.server.maxPageSize');
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
- database,
185
- files,
186
- auth: normalizeAuth(config.auth, directoryPath),
187
- openapi: {
188
- enabled: openapi.enabled,
189
- endpoint: openapiEndpoint,
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
- cors: cors,
196
- host,
197
- logger: logger,
198
- maxFileSize,
199
- maxPageSize,
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 При directoryPath = '/tmp' путь './db.json' → '/tmp/db.json'.
102
+ }
103
+ /** Нормализует объект конфигурации без чтения содержимого файлов.
104
+ * @example Путь './db.json' с directory = '/tmp' → '/tmp/db.json'.
207
105
  */
208
- export const normalizeServerConfig = (config, directoryPath) => normalizeConfig(config, directoryPath);
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: { data: { notes: [] } } }) → объект с fastify(), openapi(), graphql().
10
+ * @example await createServer({ storage: 'memory', database: { source: { notes: [] } } }) → объект с fastify(), openapi(), graphql().
13
11
  */
14
- export declare function createServer(config: DeepJsonServerConfig, features?: ServerFeatures): Promise<ServerFacade>;
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, features?: ServerFeatures): Promise<ServerFacade>;
16
+ export declare function createConfiguredServer(normalized: NormalizedServerConfig): Promise<ServerFacade>;