hola-server 1.0.11 → 3.0.0
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 +382 -1
- package/dist/config/index.d.ts +46 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +55 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/array.d.ts +27 -0
- package/dist/core/array.d.ts.map +1 -0
- package/dist/core/array.js +66 -0
- package/dist/core/array.js.map +1 -0
- package/dist/core/bash.d.ts +51 -0
- package/dist/core/bash.d.ts.map +1 -0
- package/dist/core/bash.js +161 -0
- package/dist/core/bash.js.map +1 -0
- package/dist/core/chart.d.ts +11 -0
- package/dist/core/chart.d.ts.map +1 -0
- package/dist/core/chart.js +35 -0
- package/dist/core/chart.js.map +1 -0
- package/dist/core/date.d.ts +11 -0
- package/dist/core/date.d.ts.map +1 -0
- package/dist/core/date.js +18 -0
- package/dist/core/date.js.map +1 -0
- package/dist/core/encrypt.d.ts +18 -0
- package/dist/core/encrypt.d.ts.map +1 -0
- package/dist/core/encrypt.js +50 -0
- package/dist/core/encrypt.js.map +1 -0
- package/dist/core/file.d.ts +22 -0
- package/dist/core/file.d.ts.map +1 -0
- package/dist/core/file.js +21 -0
- package/dist/core/file.js.map +1 -0
- package/dist/core/lhs.d.ts +17 -0
- package/dist/core/lhs.d.ts.map +1 -0
- package/dist/core/lhs.js +30 -0
- package/dist/core/lhs.js.map +1 -0
- package/dist/core/meta.d.ts +200 -0
- package/dist/core/meta.d.ts.map +1 -0
- package/dist/core/meta.js +336 -0
- package/dist/core/meta.js.map +1 -0
- package/dist/core/number.d.ts +37 -0
- package/dist/core/number.d.ts.map +1 -0
- package/dist/core/number.js +99 -0
- package/dist/core/number.js.map +1 -0
- package/dist/core/obj.d.ts +9 -0
- package/dist/core/obj.d.ts.map +1 -0
- package/dist/core/obj.js +15 -0
- package/dist/core/obj.js.map +1 -0
- package/dist/core/random.d.ts +7 -0
- package/dist/core/random.d.ts.map +1 -0
- package/dist/core/random.js +7 -0
- package/dist/core/random.js.map +1 -0
- package/dist/core/role.d.ts +42 -0
- package/dist/core/role.d.ts.map +1 -0
- package/dist/core/role.js +81 -0
- package/dist/core/role.js.map +1 -0
- package/dist/core/thread.d.ts +7 -0
- package/dist/core/thread.d.ts.map +1 -0
- package/dist/core/thread.js +7 -0
- package/dist/core/thread.js.map +1 -0
- package/dist/core/type.d.ts +46 -0
- package/dist/core/type.d.ts.map +1 -0
- package/dist/core/type.js +281 -0
- package/dist/core/type.js.map +1 -0
- package/dist/core/url.d.ts +20 -0
- package/dist/core/url.d.ts.map +1 -0
- package/dist/core/url.js +24 -0
- package/dist/core/url.js.map +1 -0
- package/dist/core/validate.d.ts +11 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +19 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/db/db.d.ts +72 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +225 -0
- package/dist/db/db.js.map +1 -0
- package/dist/db/entity.d.ts +77 -0
- package/dist/db/entity.d.ts.map +1 -0
- package/dist/db/entity.js +671 -0
- package/dist/db/entity.js.map +1 -0
- package/dist/db/gridfs.d.ts +29 -0
- package/dist/db/gridfs.d.ts.map +1 -0
- package/dist/db/gridfs.js +125 -0
- package/dist/db/gridfs.js.map +1 -0
- package/dist/db/index.d.ts +8 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +8 -0
- package/dist/db/index.js.map +1 -0
- package/dist/errors/auth.d.ts +15 -0
- package/dist/errors/auth.d.ts.map +1 -0
- package/dist/errors/auth.js +21 -0
- package/dist/errors/auth.js.map +1 -0
- package/dist/errors/http.d.ts +15 -0
- package/dist/errors/http.d.ts.map +1 -0
- package/dist/errors/http.js +21 -0
- package/dist/errors/http.js.map +1 -0
- package/dist/errors/index.d.ts +18 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/validation.d.ts +11 -0
- package/dist/errors/validation.d.ts.map +1 -0
- package/dist/errors/validation.js +15 -0
- package/dist/errors/validation.js.map +1 -0
- package/dist/http/code.d.ts +21 -0
- package/dist/http/code.d.ts.map +1 -0
- package/dist/http/code.js +27 -0
- package/dist/http/code.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/meta/index.d.ts +9 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +11 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/meta/router.d.ts +26 -0
- package/dist/meta/router.d.ts.map +1 -0
- package/dist/meta/router.js +258 -0
- package/dist/meta/router.js.map +1 -0
- package/dist/meta/schema.d.ts +41 -0
- package/dist/meta/schema.d.ts.map +1 -0
- package/dist/meta/schema.js +69 -0
- package/dist/meta/schema.js.map +1 -0
- package/dist/plugins/auth.d.ts +248 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +121 -0
- package/dist/plugins/auth.js.map +1 -0
- package/dist/plugins/body.d.ts +47 -0
- package/dist/plugins/body.d.ts.map +1 -0
- package/dist/plugins/body.js +36 -0
- package/dist/plugins/body.js.map +1 -0
- package/dist/plugins/cors.d.ts +62 -0
- package/dist/plugins/cors.d.ts.map +1 -0
- package/dist/plugins/cors.js +17 -0
- package/dist/plugins/cors.js.map +1 -0
- package/dist/plugins/error.d.ts +51 -0
- package/dist/plugins/error.d.ts.map +1 -0
- package/dist/plugins/error.js +51 -0
- package/dist/plugins/error.js.map +1 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +9 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/setting.d.ts +66 -0
- package/dist/setting.d.ts.map +1 -0
- package/dist/setting.js +27 -0
- package/dist/setting.js.map +1 -0
- package/dist/tool/gen_i18n.d.ts +10 -0
- package/dist/tool/gen_i18n.d.ts.map +1 -0
- package/dist/tool/gen_i18n.js +51 -0
- package/dist/tool/gen_i18n.js.map +1 -0
- package/dist/tool/vector_store.d.ts +72 -0
- package/dist/tool/vector_store.d.ts.map +1 -0
- package/dist/tool/vector_store.js +203 -0
- package/dist/tool/vector_store.js.map +1 -0
- package/package.json +38 -23
- package/core/array.js +0 -187
- package/core/bash.js +0 -345
- package/core/chart.js +0 -36
- package/core/cron.js +0 -10
- package/core/date.js +0 -55
- package/core/encrypt.js +0 -16
- package/core/file.js +0 -38
- package/core/lhs.js +0 -27
- package/core/meta.js +0 -359
- package/core/msg.js +0 -11
- package/core/number.js +0 -179
- package/core/obj.js +0 -22
- package/core/random.js +0 -9
- package/core/role.js +0 -116
- package/core/thread.js +0 -3
- package/core/type.js +0 -329
- package/core/url.js +0 -22
- package/core/validate.js +0 -32
- package/db/db.js +0 -376
- package/db/entity.js +0 -1252
- package/db/gridfs.js +0 -221
- package/http/code.js +0 -18
- package/http/context.js +0 -17
- package/http/cors.js +0 -15
- package/http/error.js +0 -21
- package/http/express.js +0 -75
- package/http/params.js +0 -57
- package/http/router.js +0 -72
- package/http/session.js +0 -50
- package/index.js +0 -36
- package/router/clone.js +0 -73
- package/router/create.js +0 -59
- package/router/delete.js +0 -53
- package/router/read.js +0 -177
- package/router/update.js +0 -107
- package/setting.js +0 -51
- package/test/core/date.js +0 -37
- package/test/core/encrypt.js +0 -14
- package/test/core/meta.js +0 -594
- package/test/core/number.js +0 -17
- package/test/crud/router.js +0 -99
- package/test/db/db.js +0 -72
- package/test/entity/create.js +0 -442
- package/test/entity/delete.js +0 -480
- package/test/entity/read.js +0 -285
- package/test/entity/update.js +0 -252
- package/test/router/role.js +0 -15
- package/test/router/user.js +0 -17
- package/tool/gen_i18n.js +0 -30
- package/tool/test.json +0 -25
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meta programming core - Entity definition and validation.
|
|
3
|
+
* @module core/meta
|
|
4
|
+
*/
|
|
5
|
+
import { ObjectId } from "mongodb";
|
|
6
|
+
import type { Elysia } from "elysia";
|
|
7
|
+
import type { JwtPayload } from "../plugins/auth.js";
|
|
8
|
+
/** Field value types for entity data. */
|
|
9
|
+
export type FieldValue = string | number | boolean | null | undefined | Date | FieldValue[] | {
|
|
10
|
+
[key: string]: FieldValue;
|
|
11
|
+
};
|
|
12
|
+
/** Query/filter value types (includes ObjectId for MongoDB queries). */
|
|
13
|
+
export type QueryValue = string | number | boolean | null | undefined | Date | RegExp | ObjectId | QueryValue[] | {
|
|
14
|
+
[key: string]: QueryValue;
|
|
15
|
+
};
|
|
16
|
+
/** Auth context type for route handlers (user from derive plugin) */
|
|
17
|
+
export interface AuthContext {
|
|
18
|
+
user: JwtPayload | null;
|
|
19
|
+
params: Record<string, string>;
|
|
20
|
+
query: Record<string, string>;
|
|
21
|
+
body: unknown;
|
|
22
|
+
}
|
|
23
|
+
/** Router type alias - use AuthContext for handler typing */
|
|
24
|
+
export type AuthRouter = Elysia<any>;
|
|
25
|
+
export interface FieldDefinition {
|
|
26
|
+
name: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
required?: boolean;
|
|
29
|
+
default?: FieldValue;
|
|
30
|
+
ref?: string;
|
|
31
|
+
link?: string;
|
|
32
|
+
delete?: "keep" | "cascade";
|
|
33
|
+
create?: boolean;
|
|
34
|
+
list?: boolean;
|
|
35
|
+
search?: boolean;
|
|
36
|
+
update?: boolean;
|
|
37
|
+
clone?: boolean;
|
|
38
|
+
sys?: boolean;
|
|
39
|
+
secure?: boolean;
|
|
40
|
+
view?: string;
|
|
41
|
+
role?: string | string[];
|
|
42
|
+
}
|
|
43
|
+
export interface MetaDefinition {
|
|
44
|
+
collection: string;
|
|
45
|
+
roles?: string[];
|
|
46
|
+
primary_keys: string[];
|
|
47
|
+
fields: FieldDefinition[];
|
|
48
|
+
creatable?: boolean;
|
|
49
|
+
readable?: boolean;
|
|
50
|
+
updatable?: boolean;
|
|
51
|
+
deleteable?: boolean;
|
|
52
|
+
cloneable?: boolean;
|
|
53
|
+
importable?: boolean;
|
|
54
|
+
exportable?: boolean;
|
|
55
|
+
ref_label?: string;
|
|
56
|
+
ref_filter?: Record<string, QueryValue>;
|
|
57
|
+
user_field?: string;
|
|
58
|
+
after_read?: AfterReadCallback;
|
|
59
|
+
list_query?: ListQueryCallback;
|
|
60
|
+
before_create?: BeforeCreateCallback;
|
|
61
|
+
before_clone?: BeforeCloneCallback;
|
|
62
|
+
before_update?: BeforeUpdateCallback;
|
|
63
|
+
before_delete?: BeforeDeleteCallback;
|
|
64
|
+
after_create?: AfterCreateCallback;
|
|
65
|
+
after_clone?: AfterCloneCallback;
|
|
66
|
+
after_update?: AfterUpdateCallback;
|
|
67
|
+
after_delete?: AfterDeleteCallback;
|
|
68
|
+
create?: CreateCallback;
|
|
69
|
+
clone?: CloneCallback;
|
|
70
|
+
update?: UpdateCallback;
|
|
71
|
+
batch_update?: BatchUpdateCallback;
|
|
72
|
+
after_batch_update?: AfterBatchUpdateCallback;
|
|
73
|
+
delete?: DeleteCallback;
|
|
74
|
+
route?: (router: AuthRouter, meta: EntityMeta) => void;
|
|
75
|
+
}
|
|
76
|
+
type EntityRef = any;
|
|
77
|
+
/** Hook result type */
|
|
78
|
+
export interface HookResult {
|
|
79
|
+
code: number;
|
|
80
|
+
err?: string | string[];
|
|
81
|
+
}
|
|
82
|
+
/** Context for create/after_create hooks */
|
|
83
|
+
export interface CreateHookContext {
|
|
84
|
+
entity: EntityRef;
|
|
85
|
+
data: Record<string, FieldValue>;
|
|
86
|
+
}
|
|
87
|
+
/** Context for clone/before_clone/after_clone hooks */
|
|
88
|
+
export interface CloneHookContext {
|
|
89
|
+
id: string;
|
|
90
|
+
entity: EntityRef;
|
|
91
|
+
data: Record<string, FieldValue>;
|
|
92
|
+
}
|
|
93
|
+
/** Context for update/before_update/after_update hooks */
|
|
94
|
+
export interface UpdateHookContext {
|
|
95
|
+
id: string | null;
|
|
96
|
+
entity: EntityRef;
|
|
97
|
+
data: Record<string, FieldValue>;
|
|
98
|
+
}
|
|
99
|
+
/** Context for batch_update/after_batch_update hooks */
|
|
100
|
+
export interface BatchUpdateHookContext {
|
|
101
|
+
ids: string[];
|
|
102
|
+
entity: EntityRef;
|
|
103
|
+
data: Record<string, FieldValue>;
|
|
104
|
+
}
|
|
105
|
+
/** Context for delete/before_delete/after_delete hooks */
|
|
106
|
+
export interface DeleteHookContext {
|
|
107
|
+
entity: EntityRef;
|
|
108
|
+
ids: string[];
|
|
109
|
+
}
|
|
110
|
+
/** Context for after_read hook */
|
|
111
|
+
export interface AfterReadHookContext {
|
|
112
|
+
id: string;
|
|
113
|
+
entity: EntityRef;
|
|
114
|
+
attrNames: string;
|
|
115
|
+
result: Record<string, FieldValue>;
|
|
116
|
+
}
|
|
117
|
+
/** Context for list_query hook */
|
|
118
|
+
export interface ListQueryHookContext {
|
|
119
|
+
entity: EntityRef;
|
|
120
|
+
query: Record<string, QueryValue>;
|
|
121
|
+
}
|
|
122
|
+
export type BeforeCreateCallback = (ctx: CreateHookContext) => Promise<HookResult> | HookResult;
|
|
123
|
+
export type AfterCreateCallback = (ctx: CreateHookContext) => Promise<HookResult> | HookResult;
|
|
124
|
+
export type CreateCallback = (ctx: CreateHookContext) => Promise<HookResult> | HookResult;
|
|
125
|
+
export type BeforeCloneCallback = (ctx: CloneHookContext) => Promise<HookResult> | HookResult;
|
|
126
|
+
export type AfterCloneCallback = (ctx: CloneHookContext) => Promise<HookResult> | HookResult;
|
|
127
|
+
export type CloneCallback = (ctx: CloneHookContext) => Promise<HookResult> | HookResult;
|
|
128
|
+
export type BeforeUpdateCallback = (ctx: UpdateHookContext) => Promise<HookResult> | HookResult;
|
|
129
|
+
export type AfterUpdateCallback = (ctx: UpdateHookContext) => Promise<HookResult> | HookResult;
|
|
130
|
+
export type UpdateCallback = (ctx: UpdateHookContext) => Promise<HookResult> | HookResult;
|
|
131
|
+
export type BatchUpdateCallback = (ctx: BatchUpdateHookContext) => Promise<HookResult> | HookResult;
|
|
132
|
+
export type AfterBatchUpdateCallback = (ctx: BatchUpdateHookContext) => Promise<HookResult> | HookResult;
|
|
133
|
+
export type BeforeDeleteCallback = (ctx: DeleteHookContext) => Promise<HookResult> | HookResult;
|
|
134
|
+
export type AfterDeleteCallback = (ctx: DeleteHookContext) => Promise<HookResult> | HookResult;
|
|
135
|
+
export type DeleteCallback = (ctx: DeleteHookContext) => Promise<HookResult> | HookResult;
|
|
136
|
+
export type AfterReadCallback = (ctx: AfterReadHookContext) => Promise<HookResult> | HookResult;
|
|
137
|
+
export type ListQueryCallback = (ctx: ListQueryHookContext) => Promise<HookResult> | HookResult;
|
|
138
|
+
/** Union of all callback types for dynamic callback handling. */
|
|
139
|
+
export type AnyCallback = BeforeCreateCallback | AfterCreateCallback | CreateCallback | BeforeCloneCallback | AfterCloneCallback | CloneCallback | BeforeUpdateCallback | AfterUpdateCallback | UpdateCallback | BatchUpdateCallback | AfterBatchUpdateCallback | BeforeDeleteCallback | AfterDeleteCallback | DeleteCallback | AfterReadCallback | ListQueryCallback;
|
|
140
|
+
export declare const DELETE_MODE: Readonly<{
|
|
141
|
+
all: readonly ["keep", "cascade"];
|
|
142
|
+
keep: "keep";
|
|
143
|
+
cascade: "cascade";
|
|
144
|
+
}>;
|
|
145
|
+
/** Filter fields by user role permission. */
|
|
146
|
+
export declare const filter_fields_by_role: (fields: FieldDefinition[], user_role: string | null) => FieldDefinition[];
|
|
147
|
+
/** Validate all registered metas after loading. */
|
|
148
|
+
export declare const validate_all_metas: () => void;
|
|
149
|
+
/** Get entity meta by collection name. */
|
|
150
|
+
export declare const get_entity_meta: (collection: string) => EntityMeta | undefined;
|
|
151
|
+
/** Get all registered meta collection names. */
|
|
152
|
+
export declare const get_all_metas: () => string[];
|
|
153
|
+
/** Entity Meta wrapper class. Validates meta structure and sets default values. */
|
|
154
|
+
export declare class EntityMeta {
|
|
155
|
+
meta: MetaDefinition;
|
|
156
|
+
collection: string;
|
|
157
|
+
roles?: string[];
|
|
158
|
+
primary_keys: string[];
|
|
159
|
+
user_field?: string;
|
|
160
|
+
ref_label?: string;
|
|
161
|
+
ref_filter?: Record<string, QueryValue>;
|
|
162
|
+
creatable: boolean;
|
|
163
|
+
readable: boolean;
|
|
164
|
+
updatable: boolean;
|
|
165
|
+
deleteable: boolean;
|
|
166
|
+
cloneable: boolean;
|
|
167
|
+
importable: boolean;
|
|
168
|
+
exportable: boolean;
|
|
169
|
+
editable: boolean;
|
|
170
|
+
mode: string;
|
|
171
|
+
fields: FieldDefinition[];
|
|
172
|
+
fields_map: Record<string, FieldDefinition>;
|
|
173
|
+
field_names: string[];
|
|
174
|
+
client_fields: FieldDefinition[];
|
|
175
|
+
property_fields: FieldDefinition[];
|
|
176
|
+
create_fields: FieldDefinition[];
|
|
177
|
+
update_fields: FieldDefinition[];
|
|
178
|
+
search_fields: FieldDefinition[];
|
|
179
|
+
clone_fields: FieldDefinition[];
|
|
180
|
+
list_fields: FieldDefinition[];
|
|
181
|
+
primary_key_fields: FieldDefinition[];
|
|
182
|
+
required_field_names: string[];
|
|
183
|
+
file_fields: FieldDefinition[];
|
|
184
|
+
upload_fields: {
|
|
185
|
+
name: string;
|
|
186
|
+
}[];
|
|
187
|
+
ref_fields: FieldDefinition[];
|
|
188
|
+
link_fields: FieldDefinition[];
|
|
189
|
+
ref_by_metas: EntityMeta[];
|
|
190
|
+
constructor(meta: MetaDefinition);
|
|
191
|
+
private _init_field_subsets;
|
|
192
|
+
validate_meta_info(): boolean;
|
|
193
|
+
private _validate_primary_keys;
|
|
194
|
+
/** Get mode for a specific user role. Returns entity mode if no roles defined, or role-specific mode. */
|
|
195
|
+
get_role_mode(user_role: string | null | undefined): string;
|
|
196
|
+
private _validate_field_exists;
|
|
197
|
+
private _validate_roles;
|
|
198
|
+
}
|
|
199
|
+
export {};
|
|
200
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/core/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meta programming core - Entity definition and validation.
|
|
3
|
+
* @module core/meta
|
|
4
|
+
*/
|
|
5
|
+
import { get_type } from "./type.js";
|
|
6
|
+
import { validate_meta_role } from "./role.js";
|
|
7
|
+
const meta_manager = {};
|
|
8
|
+
const FIELD_ATTRS = ["name", "type", "required", "default", "ref", "link", "delete", "create", "list", "search", "update", "clone", "sys", "secure", "view", "role"];
|
|
9
|
+
const LINK_FIELD_ATTRS = ["name", "link", "list"];
|
|
10
|
+
const CALLBACK_NAMES = ["after_read", "list_query", "before_create", "before_clone", "before_update", "before_delete", "after_create", "after_clone", "after_update", "after_delete", "create", "clone", "update", "batch_update", "after_batch_update", "delete"];
|
|
11
|
+
const OPERATION_FLAGS = ["creatable", "readable", "updatable", "deleteable", "cloneable", "importable", "exportable"];
|
|
12
|
+
const MODE_MAP = { creatable: "c", readable: "rs", updatable: "u", deleteable: "db", cloneable: "o", importable: "i", exportable: "e" };
|
|
13
|
+
const META_ATTRS = ["collection", "roles", "primary_keys", "fields", ...OPERATION_FLAGS, ...CALLBACK_NAMES, "ref_label", "ref_filter", "user_field", "route"];
|
|
14
|
+
export const DELETE_MODE = Object.freeze({ all: ["keep", "cascade"], keep: "keep", cascade: "cascade" });
|
|
15
|
+
/** Filter fields by user role permission. */
|
|
16
|
+
export const filter_fields_by_role = (fields, user_role) => {
|
|
17
|
+
if (!user_role || user_role === "*")
|
|
18
|
+
return fields;
|
|
19
|
+
return fields.filter((field) => {
|
|
20
|
+
const fr = field.role;
|
|
21
|
+
if (Array.isArray(fr))
|
|
22
|
+
return fr.includes("*") || fr.some((r) => user_role.includes(r));
|
|
23
|
+
if (typeof fr === "string")
|
|
24
|
+
return fr === "*" || user_role.includes(fr);
|
|
25
|
+
return true; // No role restriction = visible to all
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
/** Convert fields array to name-keyed map. */
|
|
29
|
+
const to_fields_map = (fields) => {
|
|
30
|
+
return fields.reduce((m, f) => {
|
|
31
|
+
m[f.name] = f;
|
|
32
|
+
return m;
|
|
33
|
+
}, {});
|
|
34
|
+
};
|
|
35
|
+
/** Format error message with meta context. */
|
|
36
|
+
const meta_error = (collection, msg, field = null) => {
|
|
37
|
+
const prefix = field ? `meta:${collection},field:${field.name}` : `meta:${collection}`;
|
|
38
|
+
return new Error(`${prefix} ${msg}`);
|
|
39
|
+
};
|
|
40
|
+
/** Validate and normalize field definition. */
|
|
41
|
+
const validate_field = (meta, field) => {
|
|
42
|
+
if (!field.name)
|
|
43
|
+
throw meta_error(meta.collection, `name attr required for field:${JSON.stringify(field)}`);
|
|
44
|
+
if (field.type)
|
|
45
|
+
get_type(field.type);
|
|
46
|
+
else if (!field.link)
|
|
47
|
+
field.type = "string";
|
|
48
|
+
if (meta.primary_keys.includes(field.name))
|
|
49
|
+
field.required = true;
|
|
50
|
+
// user_field is system-managed - users cannot create, update, or clone it
|
|
51
|
+
if (meta.user_field === field.name) {
|
|
52
|
+
if (field.create === true)
|
|
53
|
+
throw meta_error(meta.collection, `user_field cannot have create:true`, field);
|
|
54
|
+
if (field.update === true)
|
|
55
|
+
throw meta_error(meta.collection, `user_field cannot have update:true`, field);
|
|
56
|
+
if (field.clone === true)
|
|
57
|
+
throw meta_error(meta.collection, `user_field cannot have clone:true`, field);
|
|
58
|
+
// default to false if not specified
|
|
59
|
+
if (field.create === undefined)
|
|
60
|
+
field.create = false;
|
|
61
|
+
if (field.update === undefined)
|
|
62
|
+
field.update = false;
|
|
63
|
+
if (field.clone === undefined)
|
|
64
|
+
field.clone = false;
|
|
65
|
+
// search and list default to false, but can be explicitly enabled
|
|
66
|
+
if (field.search === undefined)
|
|
67
|
+
field.search = false;
|
|
68
|
+
if (field.list === undefined)
|
|
69
|
+
field.list = false;
|
|
70
|
+
}
|
|
71
|
+
// sys fields are system-managed - users cannot create, update, or clone them
|
|
72
|
+
if (field.sys === true) {
|
|
73
|
+
if (field.create === true)
|
|
74
|
+
throw meta_error(meta.collection, `sys field cannot have create:true`, field);
|
|
75
|
+
if (field.update === true)
|
|
76
|
+
throw meta_error(meta.collection, `sys field cannot have update:true`, field);
|
|
77
|
+
if (field.clone === true)
|
|
78
|
+
throw meta_error(meta.collection, `sys field cannot have clone:true`, field);
|
|
79
|
+
// default to false if not specified
|
|
80
|
+
if (field.create === undefined)
|
|
81
|
+
field.create = false;
|
|
82
|
+
if (field.update === undefined)
|
|
83
|
+
field.update = false;
|
|
84
|
+
if (field.clone === undefined)
|
|
85
|
+
field.clone = false;
|
|
86
|
+
// search and list default to false, but can be explicitly enabled
|
|
87
|
+
if (field.search === undefined)
|
|
88
|
+
field.search = false;
|
|
89
|
+
if (field.list === undefined)
|
|
90
|
+
field.list = false;
|
|
91
|
+
}
|
|
92
|
+
// secure fields (e.g., passwords) cannot be listed or searched
|
|
93
|
+
if (field.secure === true) {
|
|
94
|
+
if (field.list === true)
|
|
95
|
+
throw meta_error(meta.collection, `secure field cannot have list:true`, field);
|
|
96
|
+
if (field.search === true)
|
|
97
|
+
throw meta_error(meta.collection, `secure field cannot have search:true`, field);
|
|
98
|
+
// default to false if not specified
|
|
99
|
+
if (field.list === undefined)
|
|
100
|
+
field.list = false;
|
|
101
|
+
if (field.search === undefined)
|
|
102
|
+
field.search = false;
|
|
103
|
+
}
|
|
104
|
+
if (field.default !== undefined && field.type) {
|
|
105
|
+
const type = get_type(field.type);
|
|
106
|
+
const result = type.convert(field.default);
|
|
107
|
+
if (result.err)
|
|
108
|
+
throw meta_error(meta.collection, `invalid default value [${field.default}] for type [${field.type}]`, field);
|
|
109
|
+
}
|
|
110
|
+
if (field.ref && !field.link) {
|
|
111
|
+
const ref_meta = meta_manager[field.ref];
|
|
112
|
+
if (!ref_meta)
|
|
113
|
+
throw meta_error(meta.collection, `refers invalid meta:${field.ref}`, field);
|
|
114
|
+
if (!ref_meta.ref_label)
|
|
115
|
+
throw meta_error(meta.collection, `refers meta:${field.ref} without ref_label`, field);
|
|
116
|
+
const ref_by_collections = ref_meta.ref_by_metas.map((m) => m.collection);
|
|
117
|
+
if (!ref_by_collections.includes(meta.collection))
|
|
118
|
+
ref_meta.ref_by_metas.push(meta_manager[meta.collection]);
|
|
119
|
+
}
|
|
120
|
+
if (field.delete) {
|
|
121
|
+
if (!field.ref)
|
|
122
|
+
throw meta_error(meta.collection, `delete not allowed on non-ref field`, field);
|
|
123
|
+
if (!DELETE_MODE.all.includes(field.delete))
|
|
124
|
+
throw meta_error(meta.collection, `invalid delete:${field.delete}, valid:${JSON.stringify(DELETE_MODE.all)}`, field);
|
|
125
|
+
}
|
|
126
|
+
if (field.link) {
|
|
127
|
+
const invalid_keys = Object.keys(field).filter((k) => !LINK_FIELD_ATTRS.includes(k));
|
|
128
|
+
if (invalid_keys.length)
|
|
129
|
+
throw meta_error(meta.collection, `Link field only supports ${LINK_FIELD_ATTRS.join(",")}. Unsupported:${invalid_keys.join(",")}`);
|
|
130
|
+
}
|
|
131
|
+
const invalid_attrs = Object.keys(field).filter((k) => !FIELD_ATTRS.includes(k));
|
|
132
|
+
if (invalid_attrs.length)
|
|
133
|
+
throw meta_error(meta.collection, `Unsupported attribute [${invalid_attrs.join(",")}] for field:${JSON.stringify(field)}`);
|
|
134
|
+
};
|
|
135
|
+
/** Validate all fields in meta definition. */
|
|
136
|
+
const validate_fields = (meta, fields) => {
|
|
137
|
+
const fields_map = to_fields_map(fields);
|
|
138
|
+
const seen_names = new Set();
|
|
139
|
+
for (const field of fields) {
|
|
140
|
+
validate_field(meta, field);
|
|
141
|
+
if (seen_names.has(field.name))
|
|
142
|
+
throw meta_error(meta.collection, `Duplicate field [${JSON.stringify(field)}]`);
|
|
143
|
+
seen_names.add(field.name);
|
|
144
|
+
if (field.link) {
|
|
145
|
+
const link_field = fields_map[field.link];
|
|
146
|
+
if (!link_field)
|
|
147
|
+
throw meta_error(meta.collection, `link field [${JSON.stringify(field)}] should link to field`);
|
|
148
|
+
if (!link_field.ref)
|
|
149
|
+
throw meta_error(meta.collection, `link field [${JSON.stringify(field)}] target [${JSON.stringify(link_field)}] must ref entity`);
|
|
150
|
+
const entity = get_entity_meta(link_field.ref);
|
|
151
|
+
if (!entity)
|
|
152
|
+
throw meta_error(meta.collection, `link target entity not found: ${link_field.ref}`);
|
|
153
|
+
const link_entity_field = entity.fields_map[field.name];
|
|
154
|
+
if (!link_entity_field)
|
|
155
|
+
throw meta_error(entity.collection, `link field [${JSON.stringify(field)}] should link to field`);
|
|
156
|
+
Object.assign(field, { type: link_entity_field.type, required: false, create: false, search: false, update: false, clone: false, delete: "cascade" });
|
|
157
|
+
if (link_entity_field.ref)
|
|
158
|
+
field.ref = link_entity_field.ref;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
};
|
|
163
|
+
/** Validate all registered metas after loading. */
|
|
164
|
+
export const validate_all_metas = () => {
|
|
165
|
+
Object.values(meta_manager).forEach((m) => m.validate_meta_info());
|
|
166
|
+
};
|
|
167
|
+
/** Set callback function on entity meta. */
|
|
168
|
+
const set_callback = (entity_meta, cb_name, cb) => {
|
|
169
|
+
if (!cb)
|
|
170
|
+
return;
|
|
171
|
+
if (!(cb instanceof Function))
|
|
172
|
+
throw new Error(`callback [${cb_name}] for meta:${entity_meta.collection} isn't function`);
|
|
173
|
+
entity_meta[cb_name] = cb;
|
|
174
|
+
};
|
|
175
|
+
/** Get entity meta by collection name. */
|
|
176
|
+
export const get_entity_meta = (collection) => meta_manager[collection];
|
|
177
|
+
/** Get all registered meta collection names. */
|
|
178
|
+
export const get_all_metas = () => Object.keys(meta_manager);
|
|
179
|
+
/** Entity Meta wrapper class. Validates meta structure and sets default values. */
|
|
180
|
+
export class EntityMeta {
|
|
181
|
+
meta;
|
|
182
|
+
collection;
|
|
183
|
+
roles;
|
|
184
|
+
primary_keys;
|
|
185
|
+
user_field;
|
|
186
|
+
ref_label;
|
|
187
|
+
ref_filter;
|
|
188
|
+
creatable;
|
|
189
|
+
readable;
|
|
190
|
+
updatable;
|
|
191
|
+
deleteable;
|
|
192
|
+
cloneable;
|
|
193
|
+
importable;
|
|
194
|
+
exportable;
|
|
195
|
+
editable;
|
|
196
|
+
mode;
|
|
197
|
+
fields;
|
|
198
|
+
fields_map;
|
|
199
|
+
field_names;
|
|
200
|
+
client_fields;
|
|
201
|
+
property_fields;
|
|
202
|
+
create_fields;
|
|
203
|
+
update_fields;
|
|
204
|
+
search_fields;
|
|
205
|
+
clone_fields;
|
|
206
|
+
list_fields;
|
|
207
|
+
primary_key_fields;
|
|
208
|
+
required_field_names;
|
|
209
|
+
file_fields;
|
|
210
|
+
upload_fields;
|
|
211
|
+
ref_fields;
|
|
212
|
+
link_fields;
|
|
213
|
+
ref_by_metas;
|
|
214
|
+
constructor(meta) {
|
|
215
|
+
this.meta = meta;
|
|
216
|
+
this.collection = meta.collection;
|
|
217
|
+
this.roles = meta.roles;
|
|
218
|
+
this.primary_keys = meta.primary_keys;
|
|
219
|
+
this.user_field = meta.user_field;
|
|
220
|
+
this.ref_label = meta.ref_label;
|
|
221
|
+
this.ref_filter = meta.ref_filter;
|
|
222
|
+
this.creatable = meta.creatable ?? false;
|
|
223
|
+
this.readable = meta.readable ?? false;
|
|
224
|
+
this.updatable = meta.updatable ?? false;
|
|
225
|
+
this.deleteable = meta.deleteable ?? false;
|
|
226
|
+
this.cloneable = meta.cloneable ?? false;
|
|
227
|
+
this.importable = meta.importable ?? false;
|
|
228
|
+
this.exportable = meta.exportable ?? false;
|
|
229
|
+
this.editable = this.creatable || this.updatable;
|
|
230
|
+
this.mode = OPERATION_FLAGS.filter((f) => this[f])
|
|
231
|
+
.map((f) => MODE_MAP[f])
|
|
232
|
+
.join("");
|
|
233
|
+
this.fields = meta.fields;
|
|
234
|
+
this.fields_map = to_fields_map(meta.fields);
|
|
235
|
+
this.field_names = this.fields.map((f) => f.name);
|
|
236
|
+
this._init_field_subsets(meta);
|
|
237
|
+
this.ref_fields = this.fields.filter((f) => f.ref);
|
|
238
|
+
this.link_fields = this.fields.filter((f) => f.link);
|
|
239
|
+
this.ref_by_metas = [];
|
|
240
|
+
CALLBACK_NAMES.forEach((cb) => set_callback(this, cb, meta[cb]));
|
|
241
|
+
if (meta_manager[meta.collection])
|
|
242
|
+
throw new Error(`Duplicate meta info:${this.collection}`);
|
|
243
|
+
meta_manager[meta.collection] = this;
|
|
244
|
+
}
|
|
245
|
+
_init_field_subsets(meta) {
|
|
246
|
+
// Sys fields are visible to client only if they explicitly opt-in with list: true or search: true
|
|
247
|
+
const client_visible = (f) => f.sys !== true || f.list === true || f.search === true;
|
|
248
|
+
const not_secure = (f) => f.secure !== true;
|
|
249
|
+
this.client_fields = this.fields.filter(client_visible);
|
|
250
|
+
// Property fields filter by list !== false to prevent client from reading hidden fields
|
|
251
|
+
this.property_fields = this.fields.filter((f) => f.list !== false && not_secure(f));
|
|
252
|
+
// Note: create_fields, update_fields, clone_fields do NOT filter by sys
|
|
253
|
+
// Sys fields have create/update/clone: false which prevents client input,
|
|
254
|
+
// but server-side hooks can still set these values
|
|
255
|
+
this.create_fields = this.fields.filter((f) => f.create !== false);
|
|
256
|
+
this.update_fields = this.fields.filter((f) => f.create !== false && f.update !== false);
|
|
257
|
+
this.search_fields = this.fields.filter((f) => f.search !== false);
|
|
258
|
+
this.clone_fields = this.fields.filter((f) => f.clone !== false);
|
|
259
|
+
this.list_fields = this.fields.filter((f) => f.list !== false && not_secure(f));
|
|
260
|
+
this.primary_key_fields = this.fields.filter((f) => meta.primary_keys.includes(f.name));
|
|
261
|
+
this.required_field_names = this.fields.filter((f) => f.required === true || this.primary_keys.includes(f.name)).map((f) => f.name);
|
|
262
|
+
this.file_fields = this.fields.filter((f) => f.type === "file");
|
|
263
|
+
this.upload_fields = this.file_fields.map((f) => ({ name: f.name }));
|
|
264
|
+
}
|
|
265
|
+
validate_meta_info() {
|
|
266
|
+
if (!this.collection)
|
|
267
|
+
throw new Error(`no collection defined for meta:${JSON.stringify(this.meta)}`);
|
|
268
|
+
const invalid_attrs = Object.keys(this.meta).filter((k) => !META_ATTRS.includes(k));
|
|
269
|
+
if (invalid_attrs.length)
|
|
270
|
+
throw meta_error(this.collection, `Unsupported attribute [${invalid_attrs.join(",")}]`);
|
|
271
|
+
this._validate_primary_keys();
|
|
272
|
+
this._validate_roles();
|
|
273
|
+
this._validate_field_exists("ref_label", this.ref_label);
|
|
274
|
+
this._validate_field_exists("user_field", this.user_field);
|
|
275
|
+
if (this.ref_filter && this.ref_filter.constructor !== Object) {
|
|
276
|
+
throw meta_error(this.collection, `ref_filter should be object`);
|
|
277
|
+
}
|
|
278
|
+
const result = validate_fields(this.meta, this.fields);
|
|
279
|
+
// Re-init field subsets after validation sets defaults for sys/secure fields
|
|
280
|
+
this._init_field_subsets(this.meta);
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
_validate_primary_keys() {
|
|
284
|
+
if (!this.primary_keys)
|
|
285
|
+
throw meta_error(this.collection, `no primary_keys defined`);
|
|
286
|
+
if (!Array.isArray(this.primary_keys))
|
|
287
|
+
throw meta_error(this.collection, `primary_keys should be array`);
|
|
288
|
+
for (const key of this.primary_keys) {
|
|
289
|
+
if (!this.field_names.includes(key))
|
|
290
|
+
throw meta_error(this.collection, `wrong primary_key ${key}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** Get mode for a specific user role. Returns entity mode if no roles defined, or role-specific mode. */
|
|
294
|
+
get_role_mode(user_role) {
|
|
295
|
+
// No role control defined - return full entity mode
|
|
296
|
+
if (!this.roles)
|
|
297
|
+
return this.mode;
|
|
298
|
+
// User not authenticated - return empty mode
|
|
299
|
+
if (!user_role)
|
|
300
|
+
return "";
|
|
301
|
+
for (const role of this.roles) {
|
|
302
|
+
const [role_name, role_mode] = role.split(":");
|
|
303
|
+
if (role_name === user_role) {
|
|
304
|
+
return role_mode === "*" ? this.mode : role_mode;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return "";
|
|
308
|
+
}
|
|
309
|
+
_validate_field_exists(attr_name, value) {
|
|
310
|
+
if (value && !this.field_names.includes(value)) {
|
|
311
|
+
throw meta_error(this.collection, `${attr_name} [${value}] not found in fields`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
_validate_roles() {
|
|
315
|
+
if (!this.roles)
|
|
316
|
+
return;
|
|
317
|
+
if (!Array.isArray(this.roles))
|
|
318
|
+
throw meta_error(this.collection, `roles should be array`);
|
|
319
|
+
for (const role of this.roles) {
|
|
320
|
+
const parts = role.split(":");
|
|
321
|
+
if (parts.length < 2 || parts.length > 3) {
|
|
322
|
+
throw meta_error(this.collection, `wrong role config [${role}]. Use : to separate role name with mode.`);
|
|
323
|
+
}
|
|
324
|
+
const [role_name, role_mode] = parts;
|
|
325
|
+
if (!validate_meta_role(role_name))
|
|
326
|
+
throw meta_error(this.collection, `role [${role_name}] not defined in settings`);
|
|
327
|
+
if (role_mode !== "*") {
|
|
328
|
+
for (const mode of role_mode) {
|
|
329
|
+
if (!this.mode.includes(mode))
|
|
330
|
+
throw meta_error(this.collection, `role [${role_name}] mode [${mode}] doesn't match entity mode [${this.mode}]`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/core/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Number manipulation and mathematical utility functions.
|
|
3
|
+
* @module core/number
|
|
4
|
+
*/
|
|
5
|
+
export interface Space {
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
}
|
|
9
|
+
/** Parse string value to number, returns 0 if invalid. */
|
|
10
|
+
export declare const parse_num: (str: string | number) => number;
|
|
11
|
+
/** Parse string value to number with 2 decimal places. */
|
|
12
|
+
export declare const to_fixed2: (str: string | number) => number;
|
|
13
|
+
/** Round number to 2 decimal places. */
|
|
14
|
+
export declare const round_to_fixed2: (num: number) => number;
|
|
15
|
+
/** Generate range array. Example: range(3) = [0,1,2], range(1,5) = [1,2,3,4,5] */
|
|
16
|
+
export declare const range: (start: number, end?: number, step?: number) => number[];
|
|
17
|
+
/** Generate scale array with exponential growth. Example: scale(2,10) = [2,4,8] */
|
|
18
|
+
export declare const scale: (start: number, end: number, ratio?: number) => number[];
|
|
19
|
+
/** Create a space object representing a min-max range. */
|
|
20
|
+
export declare const space: (min: number, max: number) => Space;
|
|
21
|
+
/** Check if value is a space object (has min and max properties). */
|
|
22
|
+
export declare const is_space: (value: unknown) => value is Space;
|
|
23
|
+
/** Check if value is an integer. */
|
|
24
|
+
export declare const is_integer: (value: unknown) => boolean;
|
|
25
|
+
/** Sample configuration value types. */
|
|
26
|
+
export type SampleValue = string | number | boolean | Space | SampleValue[];
|
|
27
|
+
/** Check if object contains any space objects as property values. */
|
|
28
|
+
export declare const contains_space: (obj: Record<string, SampleValue>) => boolean;
|
|
29
|
+
/** Generate random number between min and max. */
|
|
30
|
+
export declare const random_number: (min: number, max: number) => number;
|
|
31
|
+
/** Generate Latin Hypercube Sampling ranges for a given range. */
|
|
32
|
+
export declare const lhs_samples: (min: number, max: number, n: number) => Space[];
|
|
33
|
+
/** Create random sample object from configuration with arrays or space objects. */
|
|
34
|
+
export declare const random_sample: (obj: Record<string, SampleValue>) => Record<string, string | number | boolean>;
|
|
35
|
+
/** Extract numeric value from string containing numbers. */
|
|
36
|
+
export declare const extract_number: (value: string) => number;
|
|
37
|
+
//# sourceMappingURL=number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/core/number.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,KAAK;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,MAAM,KAAG,MAGhD,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,MAAM,KAAG,MAGhD,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAqC,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,MAAM,MAAM,EAAE,OAAM,MAAU,KAAG,MAAM,EAG3E,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,QAAO,MAAU,KAAG,MAAM,EAG3E,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,KAGhD,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,KAIlD,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OAA2C,CAAC;AAExF,wCAAwC;AACxC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC;AAE5E,qEAAqE;AACrE,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAG,OAKjE,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAGxD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,KAAG,KAAK,EAiBtE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAaxG,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAK9C,CAAC"}
|