@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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RecordOptions {
|
|
2
|
+
timestamps?: boolean;
|
|
3
|
+
softDelete?: boolean;
|
|
4
|
+
auth?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface Actor {
|
|
7
|
+
id: string;
|
|
8
|
+
isAdmin?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type ActorSource = Actor | (() => Actor);
|
|
11
|
+
export type Authenticate = (authorization: unknown) => Actor;
|
|
12
|
+
export declare const DELETION_META = "djsDeletion";
|
|
13
|
+
export declare const AUDIT_FIELDS: readonly ['createdAt', 'updatedAt', 'deletedAt', 'createdById', 'updatedById', 'deletedById'];
|
|
14
|
+
/** Проверяет логические флаги и заменяет отсутствующие значения на false.
|
|
15
|
+
* @example recordOptions({ softDelete: true }) → { timestamps: false, softDelete: true, auth: false }.
|
|
16
|
+
*/
|
|
17
|
+
export declare function recordOptions(options?: RecordOptions): Required<RecordOptions>;
|
|
18
|
+
/** Ищет условие deletedAt на текущем уровне и в логических ветках, не заходя в поля связанных объектов.
|
|
19
|
+
* @example mentionsDeletedAt({ or: [{ deletedAt: { ne: null } }] }) → true; { user: { deletedAt: {} } } → false.
|
|
20
|
+
*/
|
|
21
|
+
export declare function mentionsDeletedAt(where: unknown): boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getBoolean } from '../config-values.js';
|
|
2
|
+
import { isObject } from '../utils.js';
|
|
3
|
+
export const DELETION_META = 'djsDeletion';
|
|
4
|
+
export const AUDIT_FIELDS = ['createdAt', 'updatedAt', 'deletedAt', 'createdById', 'updatedById', 'deletedById'];
|
|
5
|
+
/** Проверяет логические флаги и заменяет отсутствующие значения на false.
|
|
6
|
+
* @example recordOptions({ softDelete: true }) → { timestamps: false, softDelete: true, auth: false }.
|
|
7
|
+
*/
|
|
8
|
+
export function recordOptions(options = {}) {
|
|
9
|
+
return { timestamps: getBoolean(options.timestamps, 'timestamps') ?? false, softDelete: getBoolean(options.softDelete, 'softDelete') ?? false, auth: getBoolean(options.auth, 'auth') ?? false };
|
|
10
|
+
}
|
|
11
|
+
/** Ищет условие deletedAt на текущем уровне и в логических ветках, не заходя в поля связанных объектов.
|
|
12
|
+
* @example mentionsDeletedAt({ or: [{ deletedAt: { ne: null } }] }) → true; { user: { deletedAt: {} } } → false.
|
|
13
|
+
*/
|
|
14
|
+
export function mentionsDeletedAt(where) {
|
|
15
|
+
if (!isObject(where))
|
|
16
|
+
return false;
|
|
17
|
+
return Object.hasOwn(where, 'deletedAt') || ['and', 'or'].some((key) => Array.isArray(where[key]) && where[key].some(mentionsDeletedAt)) || mentionsDeletedAt(where.not);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/core/lifecycle/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAavC,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAU,CAAC;AAC1H;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,GAAkB,EAAE;IACvD,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AACnM,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3K,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { type RecordOptions } from './lifecycle/options.js';
|
|
2
|
+
import type { WriteMode } from './operations.js';
|
|
3
|
+
import type { DatabaseData, JsonValue } from './types.js';
|
|
4
|
+
export interface Field {
|
|
5
|
+
type: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
example?: JsonValue;
|
|
8
|
+
required?: boolean;
|
|
9
|
+
nullable?: boolean;
|
|
10
|
+
default?: JsonValue;
|
|
11
|
+
enum?: JsonValue[];
|
|
12
|
+
primary?: boolean;
|
|
13
|
+
generated?: 'uuid' | 'increment';
|
|
14
|
+
readOnly?: boolean;
|
|
15
|
+
writeOnly?: boolean;
|
|
16
|
+
minLength?: number;
|
|
17
|
+
maxLength?: number;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
format?: 'date' | 'date-time' | 'email' | 'uri' | 'uuid';
|
|
20
|
+
minimum?: number;
|
|
21
|
+
maximum?: number;
|
|
22
|
+
source?: string;
|
|
23
|
+
target?: string;
|
|
24
|
+
onDelete?: 'restrict' | 'cascade';
|
|
25
|
+
}
|
|
26
|
+
export interface EntityDefinition {
|
|
27
|
+
timestamps?: boolean;
|
|
28
|
+
softDelete?: boolean;
|
|
29
|
+
collection: string;
|
|
30
|
+
api?: ('openapi' | 'graphql')[];
|
|
31
|
+
fields: Record<string, Field>;
|
|
32
|
+
}
|
|
33
|
+
export type ApiFormat = 'openapi' | 'graphql';
|
|
34
|
+
export interface ModelSchema {
|
|
35
|
+
models: Record<string, EntityDefinition>;
|
|
36
|
+
api?: ApiFormat[];
|
|
37
|
+
timestamps?: boolean;
|
|
38
|
+
softDelete?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface ModelOptions {
|
|
41
|
+
auth?: boolean;
|
|
42
|
+
api?: ApiFormat[];
|
|
43
|
+
}
|
|
44
|
+
/** Проверяет список форматов и возвращает его независимую копию.
|
|
45
|
+
* @example apiFormats(['graphql']) → ['graphql']; ['unknown'] → ошибка.
|
|
46
|
+
*/
|
|
47
|
+
export declare function apiFormats(value: unknown, fallback: ApiFormat[], label: string): ApiFormat[];
|
|
48
|
+
export interface Node extends Field {
|
|
49
|
+
system?: boolean;
|
|
50
|
+
internal?: boolean;
|
|
51
|
+
softDelete?: boolean;
|
|
52
|
+
path: string;
|
|
53
|
+
base: string;
|
|
54
|
+
many: boolean;
|
|
55
|
+
children: Record<string, Node>;
|
|
56
|
+
relation?: Entity;
|
|
57
|
+
implicit?: boolean;
|
|
58
|
+
mixed?: boolean;
|
|
59
|
+
relationKey?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface Entity {
|
|
62
|
+
timestamps: boolean;
|
|
63
|
+
softDelete: boolean;
|
|
64
|
+
name: string;
|
|
65
|
+
collection: string;
|
|
66
|
+
api: ('openapi' | 'graphql')[];
|
|
67
|
+
primary: string;
|
|
68
|
+
fields: Record<string, Node>;
|
|
69
|
+
root: Node;
|
|
70
|
+
}
|
|
71
|
+
export interface Model {
|
|
72
|
+
options: Required<RecordOptions>;
|
|
73
|
+
entities: Entity[];
|
|
74
|
+
byName: Map<string, Entity>;
|
|
75
|
+
byCollection: Map<string, Entity>;
|
|
76
|
+
explicit: boolean;
|
|
77
|
+
}
|
|
78
|
+
export type ValidationSchema = Record<string, unknown>;
|
|
79
|
+
/** Разбивает путь по точкам и проверяет допустимость каждого имени.
|
|
80
|
+
* @example pathParts('profile.name') → ['profile', 'name']; pathParts('a..b') → ошибка.
|
|
81
|
+
*/
|
|
82
|
+
export declare const pathParts: (path: string) => string[];
|
|
83
|
+
/** Находит самый длинный префикс пути среди ключей объекта, учитывая границы сегментов.
|
|
84
|
+
* @example bindingFor({ a: {}, 'a.b': {} }, 'a.b.id') → 'a.b'; bindingFor({ a: {} }, 'abc.id') → undefined.
|
|
85
|
+
*/
|
|
86
|
+
export declare function bindingFor(bindings: Record<string, unknown>, path: string): string | undefined;
|
|
87
|
+
/** Проверяет, что все сегменты пути объявлены и доступны для записи, включая родительские объекты.
|
|
88
|
+
* @example Для поля name без ограничений canWriteKey(entity, 'name') → true; для первичного ключа → false.
|
|
89
|
+
*/
|
|
90
|
+
export declare function canWriteKey(entity: Entity, path: string): boolean;
|
|
91
|
+
/** Распознаёт обратную связь: источник совпадает с первичным ключом, а целевой путь отличается от первичного ключа цели.
|
|
92
|
+
* @example При source = 'id', target = 'authorId' и первичных ключах id → true.
|
|
93
|
+
*/
|
|
94
|
+
export declare function isReverseRelation(entity: Entity, node: Node): boolean;
|
|
95
|
+
/** Собирает значения по вложенному пути, проходя через массивы; отсутствующие значения и null пропускает.
|
|
96
|
+
* @example readPath({ rows: [{ id: 1 }, { id: 2 }] }, 'rows.id') → [1, 2].
|
|
97
|
+
*/
|
|
98
|
+
export declare const readPath: (value: unknown, path: string | string[]) => unknown[];
|
|
99
|
+
/** Возвращает последний сегмент пути поля.
|
|
100
|
+
* @example childName({ path: 'profile.name', … }) → 'name'.
|
|
101
|
+
*/
|
|
102
|
+
export declare const childName: (node: Node) => string;
|
|
103
|
+
/** Для связи возвращает целевую сущность и её корень; обычный узел сохраняет без изменений.
|
|
104
|
+
* @example canonicalNode(author, { relation: book }) → [book, book.root].
|
|
105
|
+
* @example canonicalNode(author, author.root) → [author, author.root].
|
|
106
|
+
*/
|
|
107
|
+
export declare const canonicalNode: (entity: Entity, node: Node) => [Entity, Node];
|
|
108
|
+
/** Соединяет имя сущности и путь поля, заменяя точки подчёркиваниями.
|
|
109
|
+
* @example nodeName({ name: 'User', … }, { path: 'profile.name', … }) → 'User_profile_name'.
|
|
110
|
+
*/
|
|
111
|
+
export declare const nodeName: (entity: Entity, node: Node) => string;
|
|
112
|
+
/** Переводит первую букву имени сущности в нижний регистр.
|
|
113
|
+
* @example operationName({ name: 'UserProfile', … }) → 'userProfile'.
|
|
114
|
+
*/
|
|
115
|
+
export declare const operationName: (entity: Entity) => string;
|
|
116
|
+
/** Загружает описание из объекта или JSON-файла, проверяет поля и сопоставляет связи.
|
|
117
|
+
* @example loadModel(undefined) → Promise<undefined>; корректное описание → Promise<Model>.
|
|
118
|
+
*/
|
|
119
|
+
export declare function loadModel(source: unknown, settings?: ModelOptions): Promise<Model | undefined>;
|
|
120
|
+
/** Определяет доступность поля для выбранного режима записи, учитывая защищённые дочерние поля.
|
|
121
|
+
* @example writable({ readOnly: true, … }, 'update') → false.
|
|
122
|
+
*/
|
|
123
|
+
export declare function writable(node: Node, mode: InputMode, relations?: boolean): boolean;
|
|
124
|
+
/** Проверяет наличие явной модели и доступность выбранного формата для её связей.
|
|
125
|
+
* @example assertApi(undefined, 'graphql') → ошибка; согласованная модель → undefined.
|
|
126
|
+
*/
|
|
127
|
+
export declare function assertApi(model: Model | undefined, api: 'graphql' | 'openapi'): asserts model is Model;
|
|
128
|
+
/** Строит схему проверки значения с ограничениями, массивом и допустимостью null.
|
|
129
|
+
* @example Для строкового узла без ограничений valueSchema(node) → { type: 'string' }.
|
|
130
|
+
*/
|
|
131
|
+
export declare function valueSchema(node: Node): ValidationSchema;
|
|
132
|
+
export type InputMode = 'stored' | WriteMode;
|
|
133
|
+
/** Строит схему объекта для выбранного режима; при частичном обновлении корневые поля необязательны.
|
|
134
|
+
* @example Для пустого узла → { type: 'object', properties: {}, additionalProperties: false }.
|
|
135
|
+
*/
|
|
136
|
+
export declare function objectSchema(node: Node, mode: InputMode, root?: boolean, relationSchema?: (node: Node) => ValidationSchema): ValidationSchema;
|
|
137
|
+
export declare function relationInputSchema(node: Node, object?: ValidationSchema): ValidationSchema;
|
|
138
|
+
/** Проверяет запись по схеме выбранного режима и выбрасывает исключение при несоответствии.
|
|
139
|
+
* @example Обязательное строковое name: { name: 'Анна' } → undefined; { name: 2 } → ошибка.
|
|
140
|
+
*/
|
|
141
|
+
export declare function validateRecord(entity: Entity, value: unknown, mode: InputMode, relations?: boolean): void;
|
|
142
|
+
/** Выводит поля и связи из значений коллекций, не меняя переданные записи.
|
|
143
|
+
* @example inferModel({ users: [{ id: '1', name: 'Анна' }] }) → модель со строковыми id и name.
|
|
144
|
+
*/
|
|
145
|
+
export declare function inferModel(database: DatabaseData, settings?: RecordOptions): Model;
|