@yss123/cage-kernel 0.1.0 → 0.3.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 +71 -9
- package/dist/authorization.d.ts +34 -0
- package/dist/authorization.js +89 -0
- package/dist/authorization.js.map +1 -0
- package/dist/brands.d.ts +10 -0
- package/dist/brands.js +11 -1
- package/dist/brands.js.map +1 -1
- package/dist/db/connect.d.ts +14 -0
- package/dist/db/connect.js +18 -2
- package/dist/db/connect.js.map +1 -1
- package/dist/db/ddl.d.ts +40 -1
- package/dist/db/ddl.js +111 -7
- package/dist/db/ddl.js.map +1 -1
- package/dist/db/event-version-schema.d.ts +9 -0
- package/dist/db/event-version-schema.js +10 -0
- package/dist/db/event-version-schema.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrate.d.ts +10 -0
- package/dist/db/migrate.js +9 -1
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/rows.d.ts +2 -0
- package/dist/db/rows.js +6 -0
- package/dist/db/rows.js.map +1 -1
- package/dist/db/runtime-schema.d.ts +9 -0
- package/dist/db/runtime-schema.js +41 -0
- package/dist/db/runtime-schema.js.map +1 -0
- package/dist/db/session.d.ts +6 -0
- package/dist/db/session.js +6 -0
- package/dist/db/session.js.map +1 -1
- package/dist/errors.d.ts +12 -0
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -1
- package/dist/files/links.d.ts +10 -0
- package/dist/files/links.js +50 -0
- package/dist/files/links.js.map +1 -0
- package/dist/files/schema.d.ts +9 -0
- package/dist/files/schema.js +51 -0
- package/dist/files/schema.js.map +1 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +88 -0
- package/dist/kernel.js +82 -41
- package/dist/kernel.js.map +1 -1
- package/dist/mask.d.ts +7 -1
- package/dist/mask.js +11 -0
- package/dist/mask.js.map +1 -1
- package/dist/org.d.ts +7 -0
- package/dist/org.js +5 -0
- package/dist/org.js.map +1 -1
- package/dist/pipeline/draft.d.ts +16 -0
- package/dist/pipeline/draft.js +39 -0
- package/dist/pipeline/draft.js.map +1 -0
- package/dist/pipeline/idempotency.d.ts +6 -0
- package/dist/pipeline/idempotency.js +6 -0
- package/dist/pipeline/idempotency.js.map +1 -1
- package/dist/pipeline/invoker.d.ts +9 -0
- package/dist/pipeline/invoker.js +22 -0
- package/dist/pipeline/invoker.js.map +1 -0
- package/dist/pipeline/load.d.ts +13 -0
- package/dist/pipeline/load.js +22 -6
- package/dist/pipeline/load.js.map +1 -1
- package/dist/primitives/aggregate.d.ts +95 -2
- package/dist/primitives/aggregate.js +15 -1
- package/dist/primitives/aggregate.js.map +1 -1
- package/dist/primitives/business-process.d.ts +128 -0
- package/dist/primitives/business-process.js +62 -0
- package/dist/primitives/business-process.js.map +1 -0
- package/dist/primitives/collection.d.ts +65 -0
- package/dist/primitives/collection.js +79 -0
- package/dist/primitives/collection.js.map +1 -0
- package/dist/primitives/command.d.ts +110 -11
- package/dist/primitives/command.js +16 -0
- package/dist/primitives/command.js.map +1 -1
- package/dist/primitives/constraints.d.ts +30 -1
- package/dist/primitives/constraints.js +14 -0
- package/dist/primitives/constraints.js.map +1 -1
- package/dist/primitives/event.d.ts +36 -0
- package/dist/primitives/event.js +12 -1
- package/dist/primitives/event.js.map +1 -1
- package/dist/primitives/fields.d.ts +176 -36
- package/dist/primitives/fields.js +134 -14
- package/dist/primitives/fields.js.map +1 -1
- package/dist/primitives/flow.d.ts +173 -8
- package/dist/primitives/flow.js +29 -2
- package/dist/primitives/flow.js.map +1 -1
- package/dist/primitives/states.d.ts +34 -2
- package/dist/primitives/states.js +15 -0
- package/dist/primitives/states.js.map +1 -1
- package/dist/read.d.ts +39 -3
- package/dist/read.js +193 -48
- package/dist/read.js.map +1 -1
- package/dist/registry.d.ts +51 -1
- package/dist/registry.js +105 -5
- package/dist/registry.js.map +1 -1
- package/dist/relations.d.ts +21 -0
- package/dist/relations.js +65 -0
- package/dist/relations.js.map +1 -0
- package/dist/runtime.d.ts +35 -0
- package/dist/runtime.js +9 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scope/index.d.ts +5 -0
- package/dist/scope/index.js +5 -0
- package/dist/scope/index.js.map +1 -1
- package/dist/telemetry.d.ts +8 -0
- package/dist/telemetry.js +28 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/transfer/csv.d.ts +19 -0
- package/dist/transfer/csv.js +125 -0
- package/dist/transfer/csv.js.map +1 -0
- package/dist/transfer/index.d.ts +67 -0
- package/dist/transfer/index.js +271 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/transfer/schema.d.ts +9 -0
- package/dist/transfer/schema.js +36 -0
- package/dist/transfer/schema.js.map +1 -0
- package/dist/types.d.ts +38 -2
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/util/names.d.ts +6 -0
- package/dist/util/names.js +6 -0
- package/dist/util/names.js.map +1 -1
- package/dist/worker/consumers.d.ts +7 -0
- package/dist/worker/consumers.js +21 -9
- package/dist/worker/consumers.js.map +1 -1
- package/dist/worker/health.d.ts +38 -0
- package/dist/worker/health.js +20 -0
- package/dist/worker/health.js.map +1 -0
- package/dist/worker/index.d.ts +34 -1
- package/dist/worker/index.js +176 -37
- package/dist/worker/index.js.map +1 -1
- package/dist/worker/outbox.d.ts +25 -2
- package/dist/worker/outbox.js +40 -2
- package/dist/worker/outbox.js.map +1 -1
- package/dist/worker/scheduler.d.ts +10 -1
- package/dist/worker/scheduler.js +34 -4
- package/dist/worker/scheduler.js.map +1 -1
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
// 注册表:遍历 domain 包的导出,靠品牌标记识别原语,用导出名给命令和反应命名。
|
|
2
|
-
import { CONSUMERS, CONNECTOR, INBOUND, OUTBOUND, ROUTE, SYSTEM_DDL, brandOf } from './brands.js';
|
|
2
|
+
import { CONSUMERS, CONNECTOR, INBOUND, OUTBOUND, ROUTE, SYSTEM_DDL, RUNTIME, MIGRATIONS, brandOf } from './brands.js';
|
|
3
3
|
import { declError } from './errors.js';
|
|
4
4
|
import { sensitiveFields } from './primitives/aggregate.js';
|
|
5
|
+
import { relationTable } from './relations.js';
|
|
6
|
+
import { isRelation } from './primitives/fields.js';
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
import { stableStringify } from './util/names.js';
|
|
9
|
+
import { z } from 'zod';
|
|
5
10
|
/** 遍历一个或多个 domain 模块的导出,建立注册表。 */
|
|
11
|
+
/**
|
|
12
|
+
* 分三阶段建立注册表:收集品牌声明和扩展迁移,校验跨声明引用/命名/步骤顺序,建立查询索引。
|
|
13
|
+
* 同一对象重复导出保留首次名称,不同对象撞聚合名或能力名则立即失败;引用到未导出的实现也拒绝。
|
|
14
|
+
* 完成基础一致性后执行可选扩展 validate,防止服务在启动或消费事件时才发现缺失配置。
|
|
15
|
+
* 此过程不连数据库,但扩展的元数据回调必须保持声明期无业务副作用。
|
|
16
|
+
*/
|
|
6
17
|
export function buildRegistry(domains, opts = {}) {
|
|
7
18
|
const mods = Array.isArray(domains) ? domains : [domains];
|
|
8
19
|
const names = new Map();
|
|
@@ -13,15 +24,17 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
13
24
|
const queries = [];
|
|
14
25
|
const approvals = [];
|
|
15
26
|
const jobs = [];
|
|
27
|
+
const businessProcesses = [];
|
|
16
28
|
const extensions = [];
|
|
17
29
|
const systemDdl = [];
|
|
30
|
+
const systemMigrations = [];
|
|
18
31
|
for (const mod of mods) {
|
|
19
32
|
for (const [exportName, v] of Object.entries(mod)) {
|
|
20
33
|
if (!v || (typeof v !== 'object' && typeof v !== 'function'))
|
|
21
34
|
continue;
|
|
22
35
|
if (names.has(v))
|
|
23
36
|
continue; // 同一个对象被重复导出:保留第一个名字
|
|
24
|
-
const brand = brandOf(v);
|
|
37
|
+
const brand = v[RUNTIME] ? 'RUNTIME' : brandOf(v);
|
|
25
38
|
if (!brand)
|
|
26
39
|
continue;
|
|
27
40
|
names.set(v, exportName);
|
|
@@ -53,16 +66,28 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
53
66
|
case 'JOB':
|
|
54
67
|
jobs.push(v);
|
|
55
68
|
break;
|
|
69
|
+
case 'BUSINESS_PROCESS':
|
|
70
|
+
businessProcesses.push(v);
|
|
71
|
+
break;
|
|
56
72
|
case 'CONNECTOR':
|
|
57
73
|
case 'OUTBOUND':
|
|
58
74
|
case 'INBOUND':
|
|
59
75
|
case 'ROUTE':
|
|
76
|
+
case 'RUNTIME':
|
|
60
77
|
extensions.push({ kind: brand, name: exportName, value: v });
|
|
61
78
|
break;
|
|
62
79
|
default:
|
|
63
80
|
break;
|
|
64
81
|
}
|
|
65
82
|
const ddl = v[SYSTEM_DDL];
|
|
83
|
+
const migrations = v[MIGRATIONS]?.() ?? [];
|
|
84
|
+
for (const migration of migrations) {
|
|
85
|
+
const previous = systemMigrations.find(m => m.name === migration.name);
|
|
86
|
+
if (previous && previous.sql !== migration.sql)
|
|
87
|
+
throw declError('CAGE-REG-002', `框架迁移 ${migration.name} 定义冲突`);
|
|
88
|
+
if (!previous)
|
|
89
|
+
systemMigrations.push(migration);
|
|
90
|
+
}
|
|
66
91
|
if (typeof ddl === 'function') {
|
|
67
92
|
const text = String(ddl());
|
|
68
93
|
if (!systemDdl.includes(text))
|
|
@@ -72,10 +97,34 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
72
97
|
}
|
|
73
98
|
// ---- 一致性校验:引用的东西都必须被导出,否则抽取器和内核看不到 ----
|
|
74
99
|
const aggSet = new Set(aggregates);
|
|
100
|
+
// 注册后解析字符串引用,支持循环引用,并在连接数据库前发现声明错误。
|
|
101
|
+
const tables = new Set(aggregates.map((a) => `${a.table.schema}.${a.table.name}`));
|
|
102
|
+
for (const a of aggregates)
|
|
103
|
+
for (const [key, field] of Object.entries(a.fields)) {
|
|
104
|
+
if (!field.ref)
|
|
105
|
+
continue;
|
|
106
|
+
const target = aggregates.find((item) => item.name === field.ref);
|
|
107
|
+
if (!target)
|
|
108
|
+
throw declError('CAGE-REL-001', `${a.name}.${key} 引用的 ${field.ref} 未从 domain 导出`);
|
|
109
|
+
if (field.kind === 'hasMany') {
|
|
110
|
+
const inverse = target.fields[field.mappedBy];
|
|
111
|
+
if (!inverse || inverse.kind !== 'ref' || inverse.ref !== a.name || inverse.isHidden || inverse.sensitiveKind)
|
|
112
|
+
throw declError('CAGE-REL-001', `${a.name}.${key} 的 mappedBy 必须指向 ${target.name} 上引用 ${a.name} 的 ref 字段`);
|
|
113
|
+
}
|
|
114
|
+
if (field.kind === 'manyToMany') {
|
|
115
|
+
const table = relationTable(a, key);
|
|
116
|
+
const name = `${table.schema}.${table.name}`;
|
|
117
|
+
if (tables.has(name) || table.name.length > 63)
|
|
118
|
+
throw declError('CAGE-REL-001', `${a.name}.${key} 的关系表名冲突或超过 PostgreSQL 63 字符限制,请缩短或调整名称`);
|
|
119
|
+
tables.add(name);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
75
122
|
const caps = new Set();
|
|
76
123
|
for (const c of commands) {
|
|
77
124
|
if (!aggSet.has(c.cmd.agg))
|
|
78
125
|
throw declError('CAGE-REG-001', `命令 ${c.capability} 所属的聚合 ${c.cmd.agg.name} 没有从 domain 导出`);
|
|
126
|
+
if (c.name === 'related' && c.cmd.invokedBy.includes('user') && Object.values(c.cmd.agg.fields).some(isRelation))
|
|
127
|
+
throw declError('CAGE-REL-001', `${c.cmd.agg.name}.related 是生成客户端的关联读取入口;请为业务命令使用其他 name`);
|
|
79
128
|
if (caps.has(c.capability))
|
|
80
129
|
throw declError('CAGE-REG-003', `能力点重复:${c.capability},可用 command({ name }) 区分`);
|
|
81
130
|
caps.add(c.capability);
|
|
@@ -89,8 +138,19 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
89
138
|
if (!cmdSet.has(r.command))
|
|
90
139
|
throw declError('CAGE-REG-001', `反应 ${name} 调用的命令没有从 domain 导出`);
|
|
91
140
|
}
|
|
141
|
+
// 锁顺序属于执行规格,不能由 ESM 导出名碰巧决定。
|
|
142
|
+
const steps = new Map();
|
|
143
|
+
for (const entry of reactions) {
|
|
144
|
+
const key = `${entry.r.event.name}:${entry.r.tx}`;
|
|
145
|
+
steps.set(key, [...(steps.get(key) ?? []), entry]);
|
|
146
|
+
}
|
|
147
|
+
for (const [key, group] of steps)
|
|
148
|
+
if (group.some(({ r }) => r.order !== undefined)) {
|
|
149
|
+
if (group.some(({ r }) => r.order === undefined) || new Set(group.map(({ r }) => r.order)).size !== group.length)
|
|
150
|
+
throw declError('CAGE-REACT-003', `${key} 的步骤必须全部声明互不重复的 order`);
|
|
151
|
+
}
|
|
92
152
|
for (const { a, name } of approvals) {
|
|
93
|
-
if (!cmdSet.has(a.onApproved) || !cmdSet.has(a.onRejected)) {
|
|
153
|
+
if (!cmdSet.has(a.onApproved) || !cmdSet.has(a.onRejected) || (a.onReturned && !cmdSet.has(a.onReturned))) {
|
|
94
154
|
throw declError('CAGE-REG-001', `审批绑定 ${name} 的结论命令没有从 domain 导出`);
|
|
95
155
|
}
|
|
96
156
|
}
|
|
@@ -108,8 +168,23 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
108
168
|
const byCap = new Map(commands.map((c) => [c.capability, c]));
|
|
109
169
|
const byCmd = new Map(commands.map((c) => [c.cmd, c]));
|
|
110
170
|
const byAgg = new Map(aggregates.map((a) => [a.name, a]));
|
|
171
|
+
const processes = new Set();
|
|
172
|
+
const areas = new Map();
|
|
173
|
+
for (const p of businessProcesses) {
|
|
174
|
+
if (processes.has(p.name))
|
|
175
|
+
throw declError('CAGE-BIZ-001', `业务流程标识重复:${p.name}`);
|
|
176
|
+
processes.add(p.name);
|
|
177
|
+
const area = JSON.stringify(p.area);
|
|
178
|
+
if (areas.has(p.area.id) && areas.get(p.area.id) !== area)
|
|
179
|
+
throw declError('CAGE-BIZ-001', `业务板块 ${p.area.id} 的名称或说明不一致`);
|
|
180
|
+
areas.set(p.area.id, area);
|
|
181
|
+
const refs = [p.subject, ...Object.values(p.stages).flatMap(s => [s.action, ...(s.details ?? []), ...(s.related ?? []).flatMap(r => [r.object, r.via])])];
|
|
182
|
+
for (const ref of refs)
|
|
183
|
+
if (!names.has(ref))
|
|
184
|
+
throw declError('CAGE-BIZ-001', `业务流程 ${p.name} 引用的声明未从 domain 导出`);
|
|
185
|
+
}
|
|
111
186
|
const registry = {
|
|
112
|
-
aggregates, commands, events, reactions, queries, approvals, jobs, extensions, systemDdl,
|
|
187
|
+
aggregates, commands, events, reactions, queries, approvals, jobs, businessProcesses, extensions, systemDdl, systemMigrations,
|
|
113
188
|
aggregate: (name) => byAgg.get(name),
|
|
114
189
|
command: (ref) => (typeof ref === 'string' ? byCap.get(ref) : byCmd.get(ref)),
|
|
115
190
|
capabilityOf: (cmd) => {
|
|
@@ -119,7 +194,7 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
119
194
|
return c.capability;
|
|
120
195
|
},
|
|
121
196
|
nameOf: (v) => names.get(v),
|
|
122
|
-
reactionsFor: (eventName) => reactions.filter((x) => x.r.event.name === eventName),
|
|
197
|
+
reactionsFor: (eventName) => reactions.filter((x) => x.r.event.name === eventName).sort((a, b) => (a.r.order ?? 0) - (b.r.order ?? 0)),
|
|
123
198
|
approvalFor: (aggName) => approvals.find((x) => x.a.agg.name === aggName),
|
|
124
199
|
approvalByProcess: (process) => approvals.find((x) => x.a.process === process),
|
|
125
200
|
capabilityCatalog: () => {
|
|
@@ -141,11 +216,36 @@ export function buildRegistry(domains, opts = {}) {
|
|
|
141
216
|
out.push({ capability: 'Sys.audit.read', kind: 'system', description: '查询审计记录' }, { capability: 'Sys.ops.read', kind: 'system', description: '查看异步任务、死信、第三方同步记录' }, { capability: 'Sys.ops.manage', kind: 'system', description: '重放或丢弃死信、启停定时任务' });
|
|
142
217
|
for (const e of opts.extraCapabilities ?? [])
|
|
143
218
|
out.push(e);
|
|
219
|
+
for (const e of extensions.filter(e => e.kind === 'RUNTIME'))
|
|
220
|
+
out.push(...e.value.capabilities);
|
|
144
221
|
return out.sort((x, y) => x.capability.localeCompare(y.capability));
|
|
145
222
|
},
|
|
146
223
|
consumerProviders: () => extensions.map((e) => e.value).filter((v) => typeof v?.[CONSUMERS] === 'function'),
|
|
147
224
|
};
|
|
225
|
+
for (const extension of extensions)
|
|
226
|
+
extension.value.validate?.(registry);
|
|
148
227
|
return Object.freeze(registry);
|
|
149
228
|
}
|
|
150
229
|
export { CONNECTOR, INBOUND, OUTBOUND, ROUTE };
|
|
230
|
+
/** 同一编译产物的声明指纹,用于发现 API/worker 加载版本错配;不是任意 JS 等价性证明。 */
|
|
231
|
+
/**
|
|
232
|
+
* 按稳定键序列化结构、schema 和执行回调源码再做 SHA-256;源码文本变化可能影响结果。
|
|
233
|
+
* 指纹只比较进程实际装载规格,不能证明任意两段 JavaScript 语义等价,也不代表数据库已迁移。
|
|
234
|
+
*/
|
|
235
|
+
export function registryFingerprint(registry) {
|
|
236
|
+
const fn = (value) => typeof value === 'function' ? String(value) : value;
|
|
237
|
+
const schema = (value) => z.toJSONSchema(value, { io: 'input', unrepresentable: 'any' });
|
|
238
|
+
const spec = {
|
|
239
|
+
aggregates: registry.aggregates.map((a) => ({ name: a.name, fields: Object.fromEntries(Object.entries(a.fields).map(([name, field]) => [name, field.meta()])), states: a.states, scope: a.scope,
|
|
240
|
+
invariants: Object.fromEntries(Object.entries(a.invariants).map(([name, value]) => [name, fn(value)])) })),
|
|
241
|
+
commands: registry.commands.map(({ capability, cmd }) => ({ capability, from: cmd.from, to: cmd.to, invokedBy: cmd.invokedBy, input: schema(cmd.input), handler: fn(cmd.handler),
|
|
242
|
+
constraints: cmd.constraints.map((constraint) => ({ name: constraint.name, check: fn(constraint.check) })), emits: cmd.emits.map((event) => ({ event: event.event.name, map: fn(event.map) })) })),
|
|
243
|
+
reactions: registry.reactions.map(({ r, name }) => ({ name, event: r.event.name, command: registry.capabilityOf(r.command), tx: r.tx, order: r.order, collection: r.collection, map: fn(r.map) })),
|
|
244
|
+
queries: registry.queries.map((query) => ({ name: query.name, reads: query.reads.map((a) => a.name), input: schema(query.input), sql: query.sql, build: fn(query.build), audit: query.audit })),
|
|
245
|
+
approvals: registry.approvals.map(({ a, name }) => ({ name, process: a.process, start: a.start.name, routable: a.routable, cancelOn: a.cancelOn.map(e => e.name), approved: registry.capabilityOf(a.onApproved), rejected: registry.capabilityOf(a.onRejected), returned: a.onReturned && registry.capabilityOf(a.onReturned), automatedBy: a.automatedBy })),
|
|
246
|
+
jobs: registry.jobs.map((job) => ({ name: job.name, cron: job.cron, run: fn(job.run) })),
|
|
247
|
+
extensions: registry.extensions.map((extension) => ({ kind: extension.kind, name: extension.name, spec: extension.kind === 'ROUTE' ? extension.value.nodes : extension.kind === 'RUNTIME' ? extension.value.spec : undefined })),
|
|
248
|
+
};
|
|
249
|
+
return createHash('sha256').update(stableStringify(spec)).digest('hex');
|
|
250
|
+
}
|
|
151
251
|
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAqB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAK/E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAe,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyFxB,kCAAkC;AAClC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B,EAAE,OAAwB,EAAE;IAClF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAuC,EAAE,CAAC;IACzD,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAoC,EAAE,CAAC;IACtD,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,MAAM,iBAAiB,GAAsB,EAAE,CAAC;IAChD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAoC,EAAE,CAAC;IAE7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;gBAAE,SAAS;YACvE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,qBAAqB;YACjD,MAAM,KAAK,GAAI,CAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACzB,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,WAAW;oBACd,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAM,CAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChE,MAAM,SAAS,CAAC,cAAc,EAAE,SAAU,CAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvE,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC,CAAiB,CAAC,CAAC;oBACnC,MAAM;gBACR,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,GAAG,GAAG,CAAe,CAAC;oBAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;oBAChF,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO;oBACV,MAAM,CAAC,IAAI,CAAC,CAAa,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,UAAU;oBACb,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAgB,EAAE,IAAI,EAAG,CAAiB,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC,CAAC;oBACrF,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,CAAC,IAAI,CAAC,CAAa,CAAC,CAAC;oBAC5B,MAAM;gBACR,KAAK,UAAU;oBACb,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;oBACvD,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,CAAC,IAAI,CAAC,CAAQ,CAAC,CAAC;oBACpB,MAAM;gBACR,KAAK,kBAAkB;oBACrB,iBAAiB,CAAC,IAAI,CAAC,CAAoB,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,WAAW,CAAC;gBACjB,KAAK,UAAU,CAAC;gBAChB,KAAK,SAAS,CAAC;gBACf,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS;oBACZ,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7D,MAAM;gBACR;oBACE,MAAM;YACV,CAAC;YACD,MAAM,GAAG,GAAI,CAAS,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,UAAU,GAAI,CAAS,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YACpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;gBACvE,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;oBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,QAAQ,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC;gBAC/G,IAAI,CAAC,QAAQ;oBAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,oCAAoC;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnF,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAgB,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,GAAG;gBAAE,SAAS;YACzB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,QAAQ,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC;YAC/F,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAS,CAAC,CAAC;gBAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,aAAa;oBAC3G,MAAM,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,oBAAoB,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC;YAC9G,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;oBAC5C,MAAM,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,yCAAyC,CAAC,CAAC;gBAC7F,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,UAAU,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACxH,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACxH,MAAM,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,wCAAwC,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,UAAU,0BAA0B,CAAC,CAAC;QAC7G,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,UAAU,YAAY,KAAK,YAAY,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,IAAI,qBAAqB,CAAC,CAAC;IAC/F,CAAC;IACD,6BAA6B;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK;QAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YACnF,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;gBAC9G,MAAM,SAAS,CAAC,gBAAgB,EAAE,GAAG,GAAG,uBAAuB,CAAC,CAAC;QACrE,CAAC;IACD,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAC1G,MAAM,SAAS,CAAC,cAAc,EAAE,QAAQ,IAAI,qBAAqB,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QAC1H,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1J,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,QAAQ,GAAa;QACzB,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB;QAC7H,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YACpB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC;gBAAE,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,wBAAwB,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC,UAAU,CAAC;QACtB,CAAC;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACtI,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;QACzE,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;QAC9E,iBAAiB,EAAE,GAAG,EAAE;YACtB,MAAM,GAAG,GAAmB,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzH,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7H,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;gBACpI,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC;oBACP,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;oBACpE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS;iBAC3D,CAAC,CAAC;YACL,CAAC;YACD,sCAAsC;YACtC,GAAG,CAAC,IAAI,CACN,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EACvE,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAChF,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAChF,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAChG,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE,CACtB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC;KACrF,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU;QAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE/C,wDAAwD;AACxD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,EAAE,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;YACvM,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5G,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;YAC9K,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACpM,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClM,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/L,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7V,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;KACjO,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Kysely, Transaction } from 'kysely';
|
|
2
|
+
import type { AnyAggregate } from './primitives/aggregate.js';
|
|
3
|
+
import type { Registry } from './registry.js';
|
|
4
|
+
import type { Ctx } from './types.js';
|
|
5
|
+
/** 按来源聚合和字段形成单向关系表名;两侧分别声明集合时不会自动合并成一张镜像表。 */
|
|
6
|
+
export declare const relationTable: (owner: AnyAggregate, field: string) => {
|
|
7
|
+
schema: "core" | "sys";
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
/** 命令/已声明读依赖的内部快照包含完整关联 ID,才能保留未被本次命令修改的关系。
|
|
11
|
+
* 对外读侧不使用此函数,而通过安全视图分页读取目标对象。 */
|
|
12
|
+
/** 批量补全 manyToMany ID 并原位更新传入快照;必须先由调用方确认来源记录在当前范围内。 */
|
|
13
|
+
export declare function loadRelationIds(tx: Kysely<any> | Transaction<any>, owner: AnyAggregate, rows: Record<string, any>[], ctx: Ctx): Promise<Record<string, any>[]>;
|
|
14
|
+
/** 只校验新增的目标:无关字段更新不应因旧目标当前不可见而失败或丢失旧关系。
|
|
15
|
+
* 新增目标必须可选择且属于同一租户;数据库的复合外键再保证持久化一致性。 */
|
|
16
|
+
/**
|
|
17
|
+
* 由主对象命令事务调用;新增目标校验 read 能力、范围和未删除状态,并用 key-share 锁稳定外键。
|
|
18
|
+
* 更新后删除旧链接再写完整新集合,任一步失败随主对象一起回滚;它从不修改目标对象的业务字段。
|
|
19
|
+
* previous/next 中的集合由内核预先规范化,保留既有不可见目标防止无关字段更新悄悄丢关联。
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeRelations(tx: Transaction<any>, reg: Registry, owner: AnyAggregate, previous: Record<string, any>, next: Record<string, any>, ctx: Ctx): Promise<void>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { cageError } from './errors.js';
|
|
2
|
+
import { compileScope } from './scope/index.js';
|
|
3
|
+
import { snake } from './util/names.js';
|
|
4
|
+
/** 按来源聚合和字段形成单向关系表名;两侧分别声明集合时不会自动合并成一张镜像表。 */
|
|
5
|
+
export const relationTable = (owner, field) => ({
|
|
6
|
+
schema: owner.table.schema,
|
|
7
|
+
name: `${owner.table.name}__${snake(field)}`,
|
|
8
|
+
});
|
|
9
|
+
/** 命令/已声明读依赖的内部快照包含完整关联 ID,才能保留未被本次命令修改的关系。
|
|
10
|
+
* 对外读侧不使用此函数,而通过安全视图分页读取目标对象。 */
|
|
11
|
+
/** 批量补全 manyToMany ID 并原位更新传入快照;必须先由调用方确认来源记录在当前范围内。 */
|
|
12
|
+
export async function loadRelationIds(tx, owner, rows, ctx) {
|
|
13
|
+
if (!rows.length)
|
|
14
|
+
return rows;
|
|
15
|
+
for (const [key, field] of Object.entries(owner.fields)) {
|
|
16
|
+
if (field.kind !== 'manyToMany')
|
|
17
|
+
continue;
|
|
18
|
+
const table = relationTable(owner, key);
|
|
19
|
+
const links = await tx.selectFrom(`${table.schema}.${table.name}`)
|
|
20
|
+
.select(['source_id', 'target_id']).where('tenant_id', '=', ctx.tenantId)
|
|
21
|
+
.where('source_id', 'in', rows.map((row) => row.id)).orderBy('target_id').execute();
|
|
22
|
+
const byId = new Map(rows.map((row) => [row.id, row]));
|
|
23
|
+
for (const row of rows)
|
|
24
|
+
row[key] = [];
|
|
25
|
+
for (const link of links)
|
|
26
|
+
byId.get(link.source_id)[key].push(link.target_id);
|
|
27
|
+
}
|
|
28
|
+
return rows;
|
|
29
|
+
}
|
|
30
|
+
/** 只校验新增的目标:无关字段更新不应因旧目标当前不可见而失败或丢失旧关系。
|
|
31
|
+
* 新增目标必须可选择且属于同一租户;数据库的复合外键再保证持久化一致性。 */
|
|
32
|
+
/**
|
|
33
|
+
* 由主对象命令事务调用;新增目标校验 read 能力、范围和未删除状态,并用 key-share 锁稳定外键。
|
|
34
|
+
* 更新后删除旧链接再写完整新集合,任一步失败随主对象一起回滚;它从不修改目标对象的业务字段。
|
|
35
|
+
* previous/next 中的集合由内核预先规范化,保留既有不可见目标防止无关字段更新悄悄丢关联。
|
|
36
|
+
*/
|
|
37
|
+
export async function writeRelations(tx, reg, owner, previous, next, ctx) {
|
|
38
|
+
for (const [key, field] of Object.entries(owner.fields)) {
|
|
39
|
+
if (field.kind !== 'manyToMany')
|
|
40
|
+
continue;
|
|
41
|
+
const before = previous[key] ?? [];
|
|
42
|
+
const after = next[key];
|
|
43
|
+
if (JSON.stringify(before) === JSON.stringify(after))
|
|
44
|
+
continue;
|
|
45
|
+
const added = after.filter((id) => !before.includes(id));
|
|
46
|
+
if (added.length) {
|
|
47
|
+
const target = reg.aggregate(field.ref);
|
|
48
|
+
if (ctx.actor?.kind === 'user' && !ctx.capabilities.has(`${target.name}.read`))
|
|
49
|
+
throw cageError('FORBIDDEN', { capability: `${target.name}.read` });
|
|
50
|
+
const visible = await tx.selectFrom(`${target.table.schema}.${target.table.name} as target`)
|
|
51
|
+
.select('target.id').where('target.id', 'in', added)
|
|
52
|
+
.where('target.status', '<>', 'deleted')
|
|
53
|
+
.where(compileScope(target.scope, target.name, ctx, 'target')).forKeyShare().execute();
|
|
54
|
+
if (visible.length !== added.length)
|
|
55
|
+
throw cageError('NOT_FOUND');
|
|
56
|
+
}
|
|
57
|
+
const table = relationTable(owner, key);
|
|
58
|
+
await tx.deleteFrom(`${table.schema}.${table.name}`)
|
|
59
|
+
.where('tenant_id', '=', ctx.tenantId).where('source_id', '=', next.id).execute();
|
|
60
|
+
if (after.length)
|
|
61
|
+
await tx.insertInto(`${table.schema}.${table.name}`)
|
|
62
|
+
.values(after.map((id) => ({ tenant_id: ctx.tenantId, source_id: next.id, target_id: id }))).execute();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=relations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.js","sourceRoot":"","sources":["../src/relations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 可选框架服务的生命周期协议。注册表保存定义,HTTP 与 worker 按各自职责取得服务;
|
|
3
|
+
* 此模块只连接扩展点,不承载具体模型、审批或网络实现,避免内核依赖可选包。
|
|
4
|
+
*/
|
|
5
|
+
import type { Kernel } from './kernel.js';
|
|
6
|
+
import type { CatalogEntry } from './registry.js';
|
|
7
|
+
import { MIGRATIONS, RUNTIME } from './brands.js';
|
|
8
|
+
/** 可选框架服务的装配边界;内核不依赖服务的 HTTP 框架或模型实现。 */
|
|
9
|
+
export interface RuntimeService {
|
|
10
|
+
/** 推进一轮后台工作并返回本轮处理量;signal 用于服务停机时取消可中止任务。 */
|
|
11
|
+
tick(signal?: AbortSignal): Promise<number>;
|
|
12
|
+
/** 确认服务可用;失败向上传播,由启动方决定是否拒绝启动。 */
|
|
13
|
+
ready(): Promise<void>;
|
|
14
|
+
/** 释放服务持有的资源;不负责关闭传入的整个 kernel。 */
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
openapi?(): Record<string, Record<string, unknown>>;
|
|
17
|
+
http?(app: any): void | Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/** 冻结在 domain 中的服务描述;迁移使用稳定名字,service 负责按 kernel 管理实例。 */
|
|
20
|
+
export interface RuntimeDefinition {
|
|
21
|
+
readonly [RUNTIME]: true;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly spec: unknown;
|
|
24
|
+
readonly capabilities: readonly CatalogEntry[];
|
|
25
|
+
readonly [MIGRATIONS]: () => readonly {
|
|
26
|
+
name: string;
|
|
27
|
+
sql: string;
|
|
28
|
+
}[];
|
|
29
|
+
service(kernel: Kernel): RuntimeService;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 只装配当前注册表明确启用的服务,不扫描包或隐式启用功能。
|
|
33
|
+
* 每次调用都会访问 service(kernel),实例复用和幂等初始化由具体扩展负责。
|
|
34
|
+
*/
|
|
35
|
+
export declare function runtimeServices(kernel: Kernel): RuntimeService[];
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MIGRATIONS, RUNTIME } from './brands.js';
|
|
2
|
+
/**
|
|
3
|
+
* 只装配当前注册表明确启用的服务,不扫描包或隐式启用功能。
|
|
4
|
+
* 每次调用都会访问 service(kernel),实例复用和幂等初始化由具体扩展负责。
|
|
5
|
+
*/
|
|
6
|
+
export function runtimeServices(kernel) {
|
|
7
|
+
return kernel.registry.extensions.filter(e => e.kind === 'RUNTIME').map(e => e.value.service(kernel));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAwBlD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,KAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/H,CAAC"}
|
package/dist/scope/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export declare const scope: {
|
|
|
29
29
|
};
|
|
30
30
|
/** 没有任何授权时按「仅本人」处理(默认拒绝的一部分) */
|
|
31
31
|
export declare const DEFAULT_GRANTS: ScopeGrant[];
|
|
32
|
+
/** 显式聚合授权优先于通配授权;缺省或空集合回退到本人范围,不能解释为全部可见。 */
|
|
32
33
|
export declare function grantsFor(ctx: Ctx, aggName: string): ScopeGrant[];
|
|
33
34
|
/** 把一个组合子翻译成参数化 SQL 条件。字段名用 sql.ref 引用,值全部参数化,没有字符串拼接。 */
|
|
34
35
|
export declare function compileGrant(s: ScopeSpec, g: ScopeGrant, ctx: Ctx, alias?: string): RawBuilder<boolean>;
|
|
@@ -37,6 +38,10 @@ export declare function compileScope(s: ScopeSpec, aggName: string, ctx: Ctx, al
|
|
|
37
38
|
/**
|
|
38
39
|
* 内存判定:与 SQL 翻译语义一致。deptSubtree 需要知道记录所在部门的祖先路径,由调用方提供。
|
|
39
40
|
*/
|
|
41
|
+
/**
|
|
42
|
+
* row 的字段名按业务快照格式读取;提供 tenantId 时先隔离租户。
|
|
43
|
+
* 未提供部门祖先解析器时 deptSubtree 无法证实可见而返回 false,不以字符串部门 ID 猜测树关系。
|
|
44
|
+
*/
|
|
40
45
|
export declare function scopeMatches(s: ScopeSpec, aggName: string, ctx: Ctx, row: Record<string, unknown> & {
|
|
41
46
|
tenantId?: string;
|
|
42
47
|
}, deptAncestorsOf?: (deptId: string) => string | undefined): boolean;
|
package/dist/scope/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export const scope = {
|
|
|
23
23
|
};
|
|
24
24
|
/** 没有任何授权时按「仅本人」处理(默认拒绝的一部分) */
|
|
25
25
|
export const DEFAULT_GRANTS = [{ combinator: 'self' }];
|
|
26
|
+
/** 显式聚合授权优先于通配授权;缺省或空集合回退到本人范围,不能解释为全部可见。 */
|
|
26
27
|
export function grantsFor(ctx, aggName) {
|
|
27
28
|
const g = ctx.scopes[aggName] ?? ctx.scopes['*'];
|
|
28
29
|
return g && g.length > 0 ? g : DEFAULT_GRANTS;
|
|
@@ -61,6 +62,10 @@ export function compileScope(s, aggName, ctx, alias) {
|
|
|
61
62
|
/**
|
|
62
63
|
* 内存判定:与 SQL 翻译语义一致。deptSubtree 需要知道记录所在部门的祖先路径,由调用方提供。
|
|
63
64
|
*/
|
|
65
|
+
/**
|
|
66
|
+
* row 的字段名按业务快照格式读取;提供 tenantId 时先隔离租户。
|
|
67
|
+
* 未提供部门祖先解析器时 deptSubtree 无法证实可见而返回 false,不以字符串部门 ID 猜测树关系。
|
|
68
|
+
*/
|
|
64
69
|
export function scopeMatches(s, aggName, ctx, row, deptAncestorsOf) {
|
|
65
70
|
if (row.tenantId !== undefined && row.tenantId !== ctx.tenantId)
|
|
66
71
|
return false;
|
package/dist/scope/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,0DAA0D;AAC1D,OAAO,EAAE,GAAG,EAAmB,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAWzC,SAAS,IAAI,CAAC,IAA4B,EAAE,SAAkB,EAAE,UAAmB;IACjF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,UAAU,GAAG,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;IACvE,IAAI,EAAE,CAAC,SAAiB,EAAE,UAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;IACrF,WAAW,EAAE,CAAC,SAAiB,EAAE,UAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC;IACnG,OAAO,EAAE,CAAC,SAAiB,EAAE,UAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;IAC3F,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,EAAE,EAAE,CAAC,CAAoC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAC9E,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAiB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAErE,MAAM,UAAU,SAAS,CAAC,GAAQ,EAAE,OAAe;IACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,CAAY,EAAE,CAAa,EAAE,GAAQ,EAAE,KAAc;IAChF,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,GAAG,CAAS,MAAM,CAAC;QAC5B,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;YACjD,OAAO,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAS,OAAO,CAAC;QACjG,CAAC;QACD,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAS,OAAO,CAAC;QAC7G,KAAK,aAAa;YAChB,OAAO,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ;gBAChC,CAAC,CAAC,GAAG,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,wDAAwD,GAAG,CAAC,QAAQ,yBAAyB,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG;gBACnJ,CAAC,CAAC,GAAG,CAAS,OAAO,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACrD,CAAC,CAAC,GAAG,CAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,WAAW;gBAC/D,CAAC,CAAC,GAAG,CAAS,OAAO,CAAC;QAC1B;YACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,CAAY,EAAE,OAAe,EAAE,GAAQ,EAAE,KAAc;IAClF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACtE,OAAO,GAAG,CAAS,IAAI,SAAS,MAAM,GAAG,CAAC,QAAQ,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAA,MAAM,CAAC,IAAI,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,CAAY,EACZ,OAAe,EACf,GAAQ,EACR,GAAoD,EACpD,eAAwD;IAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9E,OAAO,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC;YACd,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;gBACjD,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;YAC9D,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC;YAC1E,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAChD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxD,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1E;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 在当前追踪上下文下执行一段流水线;成功透传返回值,失败记录异常后原样抛出。
|
|
3
|
+
* span 在 finally 中结束,因而回滚/异常路径也不会留下未结束的追踪片段。
|
|
4
|
+
*/
|
|
1
5
|
export declare function step<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
6
|
+
/** 将当前追踪上下文编码为可序列化请求头,供 outbox 持久化;不保存业务快照。 */
|
|
2
7
|
export declare function traceCarrier(): Record<string, string>;
|
|
8
|
+
/** 从事件恢复父追踪后执行消费者;无 carrier 的历史事件仍沿当前上下文执行。 */
|
|
3
9
|
export declare function withCarrier<T>(carrier: Record<string, string> | null | undefined, fn: () => Promise<T>): Promise<T>;
|
|
10
|
+
/** 内核接受的最小日志协议;具体实现负责脱敏,不要求依赖 HTTP 日志库。 */
|
|
4
11
|
export interface Logger {
|
|
5
12
|
info(obj: object | string, msg?: string): void;
|
|
6
13
|
warn(obj: object | string, msg?: string): void;
|
|
@@ -8,4 +15,5 @@ export interface Logger {
|
|
|
8
15
|
debug?(obj: object | string, msg?: string): void;
|
|
9
16
|
}
|
|
10
17
|
export declare const consoleLogger: Logger;
|
|
18
|
+
/** 测试或宿主自行收集诊断时使用的无输出实现;不会改变业务错误传播。 */
|
|
11
19
|
export declare const silentLogger: Logger;
|
package/dist/telemetry.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
// 链路追踪:流水线每一关一个 span;写 outbox 时把链路上下文带上,worker 处理时接上。
|
|
2
2
|
import { context, propagation, trace } from '@opentelemetry/api';
|
|
3
3
|
const tracer = trace.getTracer('cage');
|
|
4
|
+
/**
|
|
5
|
+
* 在当前追踪上下文下执行一段流水线;成功透传返回值,失败记录异常后原样抛出。
|
|
6
|
+
* span 在 finally 中结束,因而回滚/异常路径也不会留下未结束的追踪片段。
|
|
7
|
+
*/
|
|
4
8
|
export async function step(name, fn) {
|
|
5
9
|
return tracer.startActiveSpan(`cage.${name}`, async (span) => {
|
|
6
10
|
try {
|
|
@@ -15,21 +19,42 @@ export async function step(name, fn) {
|
|
|
15
19
|
}
|
|
16
20
|
});
|
|
17
21
|
}
|
|
22
|
+
/** 将当前追踪上下文编码为可序列化请求头,供 outbox 持久化;不保存业务快照。 */
|
|
18
23
|
export function traceCarrier() {
|
|
19
24
|
const carrier = {};
|
|
20
25
|
propagation.inject(context.active(), carrier);
|
|
21
26
|
return carrier;
|
|
22
27
|
}
|
|
28
|
+
/** 从事件恢复父追踪后执行消费者;无 carrier 的历史事件仍沿当前上下文执行。 */
|
|
23
29
|
export function withCarrier(carrier, fn) {
|
|
24
30
|
if (!carrier)
|
|
25
31
|
return fn();
|
|
26
32
|
const ctx = propagation.extract(context.active(), carrier);
|
|
27
33
|
return context.with(ctx, fn);
|
|
28
34
|
}
|
|
35
|
+
// 内核也可脱离 HTTP 单独运行;默认不能把任意业务快照、SQL 错误或外部响应写入控制台。
|
|
36
|
+
const metadata = new Set(['requestId', 'capability', 'command', 'aggregate', 'aggregateId', 'outboxId', 'event', 'attempts', 'job', 'tenant', 'process', 'code', 'statusCode', 'durationMs', 'rows', 'task', 'workerId', 'scheduledAt', 'reason']);
|
|
37
|
+
/** 只放行固定运维元数据;异常不输出 message/stack,避免连接串和业务明文随异常泄露。 */
|
|
38
|
+
function consoleRecord(value) {
|
|
39
|
+
if (typeof value === 'string')
|
|
40
|
+
return {};
|
|
41
|
+
const record = {};
|
|
42
|
+
for (const [key, item] of Object.entries(value)) {
|
|
43
|
+
if (key === 'err') {
|
|
44
|
+
const error = item && typeof item === 'object' ? item : {};
|
|
45
|
+
record.err = { type: item instanceof TypeError ? 'TypeError' : 'Error',
|
|
46
|
+
...(typeof error.code === 'string' && /^[A-Z0-9_-]{1,64}$/.test(error.code) ? { code: error.code } : {}) };
|
|
47
|
+
}
|
|
48
|
+
else if (metadata.has(key) && ['string', 'number', 'boolean'].includes(typeof item))
|
|
49
|
+
record[key] = item;
|
|
50
|
+
}
|
|
51
|
+
return record;
|
|
52
|
+
}
|
|
29
53
|
export const consoleLogger = {
|
|
30
|
-
info: (o, m) => console.log(m ??
|
|
31
|
-
warn: (o, m) => console.warn(m ??
|
|
32
|
-
error: (o, m) => console.error(m ??
|
|
54
|
+
info: (o, m) => console.log(m ?? (typeof o === 'string' ? o : ''), JSON.stringify(consoleRecord(o))),
|
|
55
|
+
warn: (o, m) => console.warn(m ?? (typeof o === 'string' ? o : ''), JSON.stringify(consoleRecord(o))),
|
|
56
|
+
error: (o, m) => console.error(m ?? (typeof o === 'string' ? o : ''), JSON.stringify(consoleRecord(o))),
|
|
33
57
|
};
|
|
58
|
+
/** 测试或宿主自行收集诊断时使用的无输出实现;不会改变业务错误传播。 */
|
|
34
59
|
export const silentLogger = { info() { }, warn() { }, error() { } };
|
|
35
60
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,EAAoB;IAC9D,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,eAAe,CAAC,CAAU,CAAC,CAAC;YACjC,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,OAAkD,EAAE,EAAoB;IACrG,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** UTF-8 编码后的字节上限为 1 MiB;不能用字符串长度代替中文等多字节内容的实际大小。 */
|
|
3
|
+
export declare const MAX_IMPORT_BYTES = 1048576;
|
|
4
|
+
/** 仅计数据行,不含表头;限制单任务事务、错误报告及内存使用量。 */
|
|
5
|
+
export declare const MAX_IMPORT_ROWS = 1000;
|
|
6
|
+
/**
|
|
7
|
+
* 把值编码为供表格软件阅读的安全单元格,对象使用 JSON,公式前缀加单引号。
|
|
8
|
+
* 因为会应用展示安全转义,导出文件不是可无损回导的命令输入模板。
|
|
9
|
+
*/
|
|
10
|
+
export declare function csvCell(value: unknown): string;
|
|
11
|
+
/** 接受 UTF-8 BOM、CRLF、引号内换行和双引号转义;拒绝歧义输入,不静默修正错列。 */
|
|
12
|
+
export declare function parseCsv(text: string): string[][];
|
|
13
|
+
/** 导入要求对象输入,并额外允许传输层 expectedVersion;不会为 process-only 命令创建调用权限。 */
|
|
14
|
+
export declare function importShape(schema: z.ZodType): Record<string, z.ZodType>;
|
|
15
|
+
/**
|
|
16
|
+
* 表头必须是命令输入字段,空可选单元格表示未提供;数组/对象使用单元格内 JSON 编码。
|
|
17
|
+
* 仅做格式和基础类型转换,不在这里执行字段或业务规则。坏 JSON 保留原值,使该行由命令报告失败。
|
|
18
|
+
*/
|
|
19
|
+
export declare function csvInputs(text: string, schema: z.ZodType): Record<string, unknown>[];
|