@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.
Files changed (140) hide show
  1. package/README.md +71 -9
  2. package/dist/authorization.d.ts +34 -0
  3. package/dist/authorization.js +89 -0
  4. package/dist/authorization.js.map +1 -0
  5. package/dist/brands.d.ts +10 -0
  6. package/dist/brands.js +11 -1
  7. package/dist/brands.js.map +1 -1
  8. package/dist/db/connect.d.ts +14 -0
  9. package/dist/db/connect.js +18 -2
  10. package/dist/db/connect.js.map +1 -1
  11. package/dist/db/ddl.d.ts +40 -1
  12. package/dist/db/ddl.js +111 -7
  13. package/dist/db/ddl.js.map +1 -1
  14. package/dist/db/event-version-schema.d.ts +9 -0
  15. package/dist/db/event-version-schema.js +10 -0
  16. package/dist/db/event-version-schema.js.map +1 -0
  17. package/dist/db/index.d.ts +4 -0
  18. package/dist/db/index.js +4 -0
  19. package/dist/db/index.js.map +1 -1
  20. package/dist/db/migrate.d.ts +10 -0
  21. package/dist/db/migrate.js +9 -1
  22. package/dist/db/migrate.js.map +1 -1
  23. package/dist/db/rows.d.ts +2 -0
  24. package/dist/db/rows.js +6 -0
  25. package/dist/db/rows.js.map +1 -1
  26. package/dist/db/runtime-schema.d.ts +9 -0
  27. package/dist/db/runtime-schema.js +41 -0
  28. package/dist/db/runtime-schema.js.map +1 -0
  29. package/dist/db/session.d.ts +6 -0
  30. package/dist/db/session.js +6 -0
  31. package/dist/db/session.js.map +1 -1
  32. package/dist/errors.d.ts +12 -0
  33. package/dist/errors.js +14 -0
  34. package/dist/errors.js.map +1 -1
  35. package/dist/files/links.d.ts +10 -0
  36. package/dist/files/links.js +50 -0
  37. package/dist/files/links.js.map +1 -0
  38. package/dist/files/schema.d.ts +9 -0
  39. package/dist/files/schema.js +51 -0
  40. package/dist/files/schema.js.map +1 -0
  41. package/dist/index.d.ts +12 -2
  42. package/dist/index.js +12 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/kernel.d.ts +88 -0
  45. package/dist/kernel.js +82 -41
  46. package/dist/kernel.js.map +1 -1
  47. package/dist/mask.d.ts +7 -1
  48. package/dist/mask.js +11 -0
  49. package/dist/mask.js.map +1 -1
  50. package/dist/org.d.ts +7 -0
  51. package/dist/org.js +5 -0
  52. package/dist/org.js.map +1 -1
  53. package/dist/pipeline/draft.d.ts +16 -0
  54. package/dist/pipeline/draft.js +39 -0
  55. package/dist/pipeline/draft.js.map +1 -0
  56. package/dist/pipeline/idempotency.d.ts +6 -0
  57. package/dist/pipeline/idempotency.js +6 -0
  58. package/dist/pipeline/idempotency.js.map +1 -1
  59. package/dist/pipeline/invoker.d.ts +9 -0
  60. package/dist/pipeline/invoker.js +22 -0
  61. package/dist/pipeline/invoker.js.map +1 -0
  62. package/dist/pipeline/load.d.ts +13 -0
  63. package/dist/pipeline/load.js +22 -6
  64. package/dist/pipeline/load.js.map +1 -1
  65. package/dist/primitives/aggregate.d.ts +95 -2
  66. package/dist/primitives/aggregate.js +15 -1
  67. package/dist/primitives/aggregate.js.map +1 -1
  68. package/dist/primitives/business-process.d.ts +128 -0
  69. package/dist/primitives/business-process.js +62 -0
  70. package/dist/primitives/business-process.js.map +1 -0
  71. package/dist/primitives/collection.d.ts +65 -0
  72. package/dist/primitives/collection.js +79 -0
  73. package/dist/primitives/collection.js.map +1 -0
  74. package/dist/primitives/command.d.ts +110 -11
  75. package/dist/primitives/command.js +16 -0
  76. package/dist/primitives/command.js.map +1 -1
  77. package/dist/primitives/constraints.d.ts +30 -1
  78. package/dist/primitives/constraints.js +14 -0
  79. package/dist/primitives/constraints.js.map +1 -1
  80. package/dist/primitives/event.d.ts +36 -0
  81. package/dist/primitives/event.js +12 -1
  82. package/dist/primitives/event.js.map +1 -1
  83. package/dist/primitives/fields.d.ts +176 -36
  84. package/dist/primitives/fields.js +134 -14
  85. package/dist/primitives/fields.js.map +1 -1
  86. package/dist/primitives/flow.d.ts +173 -8
  87. package/dist/primitives/flow.js +29 -2
  88. package/dist/primitives/flow.js.map +1 -1
  89. package/dist/primitives/states.d.ts +34 -2
  90. package/dist/primitives/states.js +15 -0
  91. package/dist/primitives/states.js.map +1 -1
  92. package/dist/read.d.ts +39 -3
  93. package/dist/read.js +193 -48
  94. package/dist/read.js.map +1 -1
  95. package/dist/registry.d.ts +51 -1
  96. package/dist/registry.js +105 -5
  97. package/dist/registry.js.map +1 -1
  98. package/dist/relations.d.ts +21 -0
  99. package/dist/relations.js +65 -0
  100. package/dist/relations.js.map +1 -0
  101. package/dist/runtime.d.ts +35 -0
  102. package/dist/runtime.js +9 -0
  103. package/dist/runtime.js.map +1 -0
  104. package/dist/scope/index.d.ts +5 -0
  105. package/dist/scope/index.js +5 -0
  106. package/dist/scope/index.js.map +1 -1
  107. package/dist/telemetry.d.ts +8 -0
  108. package/dist/telemetry.js +28 -3
  109. package/dist/telemetry.js.map +1 -1
  110. package/dist/transfer/csv.d.ts +19 -0
  111. package/dist/transfer/csv.js +125 -0
  112. package/dist/transfer/csv.js.map +1 -0
  113. package/dist/transfer/index.d.ts +67 -0
  114. package/dist/transfer/index.js +271 -0
  115. package/dist/transfer/index.js.map +1 -0
  116. package/dist/transfer/schema.d.ts +9 -0
  117. package/dist/transfer/schema.js +36 -0
  118. package/dist/transfer/schema.js.map +1 -0
  119. package/dist/types.d.ts +38 -2
  120. package/dist/types.js +8 -0
  121. package/dist/types.js.map +1 -1
  122. package/dist/util/names.d.ts +6 -0
  123. package/dist/util/names.js +6 -0
  124. package/dist/util/names.js.map +1 -1
  125. package/dist/worker/consumers.d.ts +7 -0
  126. package/dist/worker/consumers.js +21 -9
  127. package/dist/worker/consumers.js.map +1 -1
  128. package/dist/worker/health.d.ts +38 -0
  129. package/dist/worker/health.js +20 -0
  130. package/dist/worker/health.js.map +1 -0
  131. package/dist/worker/index.d.ts +34 -1
  132. package/dist/worker/index.js +176 -37
  133. package/dist/worker/index.js.map +1 -1
  134. package/dist/worker/outbox.d.ts +25 -2
  135. package/dist/worker/outbox.js +40 -2
  136. package/dist/worker/outbox.js.map +1 -1
  137. package/dist/worker/scheduler.d.ts +10 -1
  138. package/dist/worker/scheduler.js +34 -4
  139. package/dist/worker/scheduler.js.map +1 -1
  140. package/package.json +1 -1
@@ -1,15 +1,60 @@
1
+ /**
2
+ * 提供字段原语、不可变修饰器及值类型推导,使验证、存储、关系、敏感呈现和生成契约共享元数据。
3
+ * 字段构造只创建描述,不创建表或上传文件;集合关系和文件生命周期有专门边界,不能当作普通 JSON 明细或任意 SQL 类型绕过。
4
+ */
1
5
  import { z } from 'zod';
2
6
  /** 敏感种类是封闭集合,每种在内核里有一个掩码函数(见 db/ddl.ts 的 sys.mask)。 */
3
7
  export type SensitiveKind = 'phone' | 'idCard' | 'bankCard' | 'email' | 'name' | 'address';
8
+ /**
9
+ * 允许使用的敏感种类白名单,与内核安全视图及呈现掩码实现保持一致;新增种类需同时维护实际掩码语义。
10
+ */
4
11
  export declare const SENSITIVE_KINDS: readonly SensitiveKind[];
5
- export type FieldKind = 'id' | 'ref' | 'text' | 'int' | 'number' | 'money' | 'date' | 'datetime' | 'bool' | 'enum' | 'list';
12
+ /**
13
+ * 框架识别的字段类别,决定存储、关系和生成行为。
14
+ * json 工厂复用 list 类别并以 jsonb 存储,不新增独立 json 标签;集合关系使用空 SQL 类型并由专门关系层处理。
15
+ */
16
+ export type FieldKind = 'id' | 'ref' | 'text' | 'int' | 'number' | 'money' | 'date' | 'datetime' | 'bool' | 'enum' | 'list' | 'hasMany' | 'manyToMany' | 'file' | 'files';
17
+ /** 文件内容由存储服务管理;领域字段只保存不可变文件 ID。 */
18
+ /** 上传服务和事务绑定共同使用的政策;accept 是明确 MIME 列表,maxBytes 按单个文件计。 */
19
+ export interface FilePolicy {
20
+ /**
21
+ * 单个文件允许的最大字节数,必须为正安全整数;不是整个多附件字段的总大小。
22
+ */
23
+ readonly maxBytes: number;
24
+ /**
25
+ * 明确允许的 MIME 类型列表,不接受通配形式;实际内容和请求类型仍由文件服务复核。
26
+ */
27
+ readonly accept: readonly string[];
28
+ /**
29
+ * 多附件最多数量,files 必填且范围 1 至 100;单附件工厂不使用此项。
30
+ */
31
+ readonly maxCount?: number;
32
+ }
33
+ /** 元数据必须与 base 校验一起传播;DDL、图谱、掩码、契约生成都从同一份声明读取。 */
6
34
  export interface FieldMeta {
35
+ /**
36
+ * 字段类别,供生成器、关系和写入流程分派,不是数据库类型字符串。
37
+ */
7
38
  readonly kind: FieldKind;
39
+ /**
40
+ * 物理列 SQL 类型;集合关系为空字符串表示没有主表列,普通业务不自行拼接此值。
41
+ */
8
42
  readonly sql: string;
43
+ /**
44
+ * 是否显式 optional:schema 同时允许缺省与 null,数据库列允许空值;集合关系以空数组表达无关联。
45
+ */
9
46
  readonly isOptional: boolean;
47
+ /**
48
+ * 可选敏感掩码类别;是否能见明文取决于调用主体的解掩码权限。
49
+ */
10
50
  readonly sensitiveKind?: SensitiveKind;
11
51
  /** 引用的聚合名,抽取器据此画引用边,生成外键 */
12
52
  readonly ref?: string;
53
+ /** hasMany 的反向外键。关系字段不占主表列,sql 为空字符串。 */
54
+ readonly mappedBy?: string;
55
+ /**
56
+ * 是否要求租户内唯一,缺省不添加字段唯一约束;与引用目标必填或全局唯一不同。
57
+ */
13
58
  readonly isUnique?: boolean;
14
59
  /** 隐藏字段:不进入安全视图、审计、事件、前端契约(例如密码哈希) */
15
60
  readonly isHidden?: boolean;
@@ -21,74 +66,168 @@ export interface FieldMeta {
21
66
  readonly shape?: Readonly<Record<string, AnyField>>;
22
67
  /** 文本最大长度 */
23
68
  readonly max?: number;
69
+ /**
70
+ * file/files 的上传与绑定限制,其他类别省略;完成上传仍需命令事务绑定。
71
+ */
72
+ readonly filePolicy?: FilePolicy;
24
73
  }
25
74
  /**
26
75
  * 字段定义。方法都返回新对象(不可变),可以链式调用:
27
76
  * text(50).sensitive('phone').optional()
28
77
  */
29
- export declare class Field<T extends z.ZodType = z.ZodType, Opt extends boolean = boolean> implements FieldMeta {
30
- readonly kind: FieldKind;
78
+ export declare class Field<T extends z.ZodType = z.ZodType, Opt extends boolean = boolean, K extends FieldKind = FieldKind> implements FieldMeta {
79
+ /**
80
+ * 具体字段类别,构造后冻结;类型参数 K 保留关系/文件等特殊语义。
81
+ */
82
+ readonly kind: K;
83
+ /**
84
+ * 供 DDL 使用的列类型,集合关系无主表列时为空字符串。
85
+ */
31
86
  readonly sql: string;
87
+ /**
88
+ * 显式可空/可缺省标志,缺省 false,修饰器返回新实例。
89
+ */
32
90
  readonly isOptional: boolean;
91
+ /**
92
+ * 敏感呈现类别,省略表示未声明掩码。
93
+ */
33
94
  readonly sensitiveKind?: SensitiveKind;
95
+ /**
96
+ * 引用或集合目标聚合名;这里只保存标识,注册阶段继续校验目标存在与关系一致性。
97
+ */
34
98
  readonly ref?: string;
99
+ /**
100
+ * hasMany 目标聚合上实际外键字段名,其他类别省略。
101
+ */
102
+ readonly mappedBy?: string;
103
+ /**
104
+ * 租户内唯一要求,普通字段通过 unique() 声明;文件和集合拒绝此修饰。
105
+ */
35
106
  readonly isUnique?: boolean;
107
+ /**
108
+ * 是否从公开安全读、审计差异、事件呈现和契约中排除;不代表业务内部永不读取。
109
+ */
36
110
  readonly isHidden?: boolean;
111
+ /**
112
+ * 字段口径说明,供本体/影响分析使用,不执行额外验证。
113
+ */
37
114
  readonly description?: string;
115
+ /**
116
+ * enum 的允许字符串值集合;其他字段通常省略。
117
+ */
38
118
  readonly values?: readonly string[];
119
+ /**
120
+ * list 对象元素字段结构,标量数组保存为 { item },供契约和图谱理解 JSON 内容。
121
+ */
39
122
  readonly shape?: Readonly<Record<string, AnyField>>;
123
+ /**
124
+ * 文本最长字符数元数据,对应其 Zod 长度约束。
125
+ */
40
126
  readonly max?: number;
127
+ /**
128
+ * 附件的单文件大小、MIME 和数量政策,实际上传及绑定阶段复核。
129
+ */
130
+ readonly filePolicy?: FilePolicy;
41
131
  /** 基础校验(不含可空) */
42
132
  readonly base: T;
43
133
  /** 仅用于类型推导 */
44
134
  readonly __opt?: Opt;
45
- constructor(base: T, meta: Omit<FieldMeta, 'isOptional'> & {
135
+ /**
136
+ * 复制基础 schema 与元数据并冻结当前字段实例;isOptional 缺省为 false。
137
+ * 专门工厂负责各类别声明校验,构造本身不执行数据库 DDL、不深度冻结任意传入对象,也不解析用户值。
138
+ */
139
+ constructor(base: T, meta: Omit<FieldMeta, 'kind' | 'isOptional'> & {
140
+ kind: K; /** 构造元数据可省略,实际字段默认 false;显式 optional 修饰返回新实例。 */
46
141
  isOptional?: boolean;
47
142
  });
48
- meta(): FieldMeta;
143
+ /** 导出不含 Zod 实例的元数据快照,供不可变链式修饰复制;不修改当前字段。 */
144
+ meta(): FieldMeta & {
145
+ kind: K;
146
+ };
147
+ /** 复用基础校验但复制元数据,避免一个字段模板被多个聚合引用时互相污染。 */
49
148
  private with;
50
149
  /** 校验规则(前后端共用);可选字段允许 null 与缺省 */
51
150
  get zod(): z.ZodType;
52
- /** 可选字段:列可空,输入可以不填 */
53
- optional(): Field<T, true>;
151
+ /** 返回可空且可缺省的新字段,原字段不变;集合关系用空数组表达无关联,因此拒绝 optional。 */
152
+ optional(): Field<T, true, K>;
54
153
  /** 敏感字段:读侧按种类掩码,持有 聚合.unmask.种类 能力才能看明文 */
55
- sensitive(kind: SensitiveKind): Field<T, Opt>;
56
- /** 唯一约束(租户内) */
57
- unique(): Field<T, Opt>;
154
+ sensitive(kind: SensitiveKind): Field<T, Opt, K>;
155
+ /** 返回要求租户内唯一的新字段;实际约束由 DDL/迁移落实,不是仅一次应用查询。文件和集合已有专用归属/配对语义,拒绝该修饰。 */
156
+ unique(): Field<T, Opt, K>;
58
157
  /** 隐藏字段:不出现在读侧、审计、事件和前端契约 */
59
- hidden(): Field<T, Opt>;
60
- /** 口径说明 */
61
- describe(text: string): Field<T, Opt>;
158
+ hidden(): Field<T, Opt, K>;
159
+ /** 返回附业务口径说明的新字段,供图谱、契约和影响分析使用;文字不自动成为 Zod 或数据库校验。 */
160
+ describe(text: string): Field<T, Opt, K>;
62
161
  }
162
+ /**
163
+ * 擦除具体 Zod 输出与可选标志的字段容器类型,供异构字段集合使用;具体工厂返回值保留精确类型推导。
164
+ */
63
165
  export type AnyField = Field<z.ZodType, boolean>;
166
+ /**
167
+ * 业务字段名到 Field 描述的映射;键名和系统保留字段由聚合构造器进一步检查。
168
+ */
64
169
  export type Fields = Record<string, AnyField>;
65
170
  /** 字段的 TypeScript 值类型 */
66
- export type ValueOf<F> = F extends Field<infer T, infer O> ? ([O] extends [true] ? z.output<T> | null : z.output<T>) : never;
171
+ export type ValueOf<F> = F extends Field<infer T, infer O, any> ? ([O] extends [true] ? z.output<T> | null : z.output<T>) : never;
172
+ /**
173
+ * 把字段定义映射为业务值类型并移除 readonly;hasMany 是反向查询,排除在可写草稿外。
174
+ * manyToMany 保留为目标 UUID 数组,optional 字段值允许 null,最终输入缺省规则由对应 Zod schema 决定。
175
+ */
67
176
  export type FieldValues<F extends Fields> = {
68
- -readonly [K in keyof F]: ValueOf<F[K]>;
177
+ -readonly [K in keyof F as F[K]['kind'] extends 'hasMany' ? never : K]: ValueOf<F[K]>;
69
178
  };
70
- /** 文本,默认最长 500 字 */
71
- export declare const text: (max?: number) => Field<z.ZodString, false>;
72
- /** 整数 */
73
- export declare const int: () => Field<z.ZodNumber, false>;
74
- /** 数值(双精度)。金额请用 money() */
75
- export declare const number: () => Field<z.ZodNumber, false>;
76
- /** 金额:用字符串传输,避免浮点误差 */
77
- export declare const money: () => Field<z.ZodString, false>;
78
- /** 主键或外键 */
79
- export declare const id: () => Field<z.ZodString, false>;
80
- /** 日期 YYYY-MM-DD */
81
- export declare const date: () => Field<z.ZodString, false>;
82
- /** 时间戳(ISO 8601) */
83
- export declare const datetime: () => Field<z.ZodString, false>;
84
- /** 布尔 */
85
- export declare const bool: () => Field<z.ZodBoolean, false>;
86
- /** 枚举:enumOf('A', 'B') */
87
- export declare function enumOf<const V extends readonly [string, ...string[]]>(...values: V): Field<z.ZodEnum<{ [k_1 in V[number]]: k_1; } extends infer T ? { [k in keyof T]: T[k]; } : never>, false>;
179
+ /** 创建必填字符串字段,默认最多 500 字符并存为 text;不自动 trim 或要求非空,业务输入需另用 Zod 表达。 */
180
+ export declare const text: (max?: number) => Field<z.ZodString, false, "text">;
181
+ /** 创建必填整数值字段,Zod 检查整数,数据库使用 integer;数量单位、正负和业务上限由命令输入及不变量明确。 */
182
+ export declare const int: () => Field<z.ZodNumber, false, "int">;
183
+ /** 创建必填普通数值字段,以 double precision 存储;不保证十进制精确计算,金额应使用 money 及明确业务计算规则。 */
184
+ export declare const number: () => Field<z.ZodNumber, false, "number">;
185
+ /** 创建十进制字符串金额字段,允许负号及最多两位小数,存储为 numeric(18,2);币种/正负业务限制另声明,schema 正则不替代数据库精度上限。 */
186
+ export declare const money: () => Field<z.ZodString, false, "money">;
187
+ /** 创建 UUID 值字段并存为 uuid;不自动声明引用目标或外键,业务关联应使用 ref,聚合自己的主键仍由内核维护。 */
188
+ export declare const id: () => Field<z.ZodString, false, "id">;
189
+ /** 创建 YYYY-MM-DD 字符串日期字段并存为 date;此处正则检查格式,不独立证明闰年或日历日期真实有效。 */
190
+ export declare const date: () => Field<z.ZodString, false, "date">;
191
+ /** 创建带时区偏移的 ISO 时间字符串字段,使用 Zod datetime 校验并存为 timestamptz;业务显示时区由应用明确。 */
192
+ export declare const datetime: () => Field<z.ZodString, false, "datetime">;
193
+ /** 创建必填 boolean 字段并存为 boolean;不把字符串 true/false 或空值隐式转换为布尔值。 */
194
+ export declare const bool: () => Field<z.ZodBoolean, false, "bool">;
195
+ /** 用至少一个明确字符串声明枚举值,Zod 校验后以 text 存储;这是普通属性取值,具有生命周期迁移语义时应使用 states。 */
196
+ export declare function enumOf<const V extends readonly [string, ...string[]]>(...values: V): Field<z.ZodEnum<{ [k_1 in V[number]]: k_1; } extends infer T ? { [k in keyof T]: T[k]; } : never>, false, "enum">;
88
197
  /** 引用另一个聚合:本质是 uuid,额外记下引用目标。可传聚合对象或聚合名(解决循环导入)。 */
89
198
  export declare function ref(to: {
90
199
  name: string;
91
- } | string): Field<z.ZodString, false>;
200
+ } | string): Field<z.ZodString, false, "ref">;
201
+ /** 一对多反查:实际外键在目标聚合上,不创建另一份关系或可写数组。 */
202
+ export declare function hasMany(to: {
203
+ name: string;
204
+ } | string, options: {
205
+ mappedBy: string; /** 可选反向关系业务口径说明,供本体和契约展示。 */
206
+ description?: string;
207
+ }): Field<z.ZodArray<z.ZodString>, false, "hasMany">;
208
+ /** 多对多:字段与普通属性一处声明,中间表由框架生成;业务命令返回目标 ID 数组。 */
209
+ export declare function manyToMany(to: {
210
+ name: string;
211
+ } | string, options?: {
212
+ description?: string;
213
+ }): Field<z.ZodArray<z.ZodString>, false, "manyToMany">;
214
+ /**
215
+ * 识别 hasMany/manyToMany 集合关系;ref 仍是主表 UUID 列,不在此分类中。
216
+ */
217
+ export declare const isRelation: (field: FieldMeta) => boolean;
218
+ /**
219
+ * 识别单附件 file 与多附件 files,用于交给上传政策、绑定与生命周期校验,不检查某个文件当前是否可访问。
220
+ */
221
+ export declare const isFile: (field: FieldMeta) => boolean;
222
+ /** 单附件字段在主表保存 UUID;上传完成并不等于绑定成功,命令提交时才确定归属。 */
223
+ export declare function file(options: Omit<FilePolicy, 'maxCount'>): Field<z.ZodString, false, "file">;
224
+ /** 多附件以 ID 数组保存,独占归属仍由文件关联表保障;空数组表示当前没有附件。 */
225
+ export declare function files(options: FilePolicy & {
226
+ maxCount: number;
227
+ }): Field<z.ZodArray<z.ZodString>, false, "files">;
228
+ /**
229
+ * 把 JSON 对象明细的字段映射到 Zod shape;显式 optional 字段包装 nullable/optional,保持嵌套输入校验与值推导一致。
230
+ */
92
231
  type ShapeZod<S extends Fields> = {
93
232
  [K in keyof S]: S[K] extends Field<infer T, infer O> ? ([O] extends [true] ? z.ZodOptional<z.ZodNullable<T>> : T) : never;
94
233
  };
@@ -99,9 +238,10 @@ type ShapeZod<S extends Fields> = {
99
238
  */
100
239
  export declare function list<T extends z.ZodType>(item: Field<T, false>): Field<z.ZodArray<T>, false>;
101
240
  export declare function list<S extends Fields>(shape: S): Field<z.ZodArray<z.ZodObject<ShapeZod<S>>>, false>;
241
+ /** 同时支持当前类实例和跨包副本的字段结构;不能据此证明用户自造对象的所有元数据合法。 */
102
242
  export declare function isField(v: unknown): v is AnyField;
103
- /** 把一组字段拼成对象 schema */
243
+ /** 把字段的实际 zod 规则合成为对象 schema,排除只读 hasMany 反向集合;manyToMany 仍作为可写 ID 数组参与验证,不额外添加系统列。 */
104
244
  export declare function objectSchema(fields: Fields): z.ZodObject<any>;
105
245
  /** 结构不固定的 JSON 对象(例如能力点参数),存为 jsonb。业务字段请优先用 list 或具体类型。 */
106
- export declare const json: () => Field<z.ZodRecord<z.ZodString, z.ZodUnknown>, false>;
246
+ export declare const json: () => Field<z.ZodRecord<z.ZodString, z.ZodUnknown>, false, "list">;
107
247
  export {};
@@ -1,25 +1,77 @@
1
+ /**
2
+ * 提供字段原语、不可变修饰器及值类型推导,使验证、存储、关系、敏感呈现和生成契约共享元数据。
3
+ * 字段构造只创建描述,不创建表或上传文件;集合关系和文件生命周期有专门边界,不能当作普通 JSON 明细或任意 SQL 类型绕过。
4
+ */
1
5
  // 字段原语:每个字段同时携带校验(Zod)、存储(SQL 列类型)和元数据(敏感种类、引用目标)。
2
6
  import { z } from 'zod';
3
7
  import { declError } from '../errors.js';
8
+ /**
9
+ * 允许使用的敏感种类白名单,与内核安全视图及呈现掩码实现保持一致;新增种类需同时维护实际掩码语义。
10
+ */
4
11
  export const SENSITIVE_KINDS = ['phone', 'idCard', 'bankCard', 'email', 'name', 'address'];
5
12
  /**
6
13
  * 字段定义。方法都返回新对象(不可变),可以链式调用:
7
14
  * text(50).sensitive('phone').optional()
8
15
  */
9
16
  export class Field {
17
+ /**
18
+ * 具体字段类别,构造后冻结;类型参数 K 保留关系/文件等特殊语义。
19
+ */
10
20
  kind;
21
+ /**
22
+ * 供 DDL 使用的列类型,集合关系无主表列时为空字符串。
23
+ */
11
24
  sql;
25
+ /**
26
+ * 显式可空/可缺省标志,缺省 false,修饰器返回新实例。
27
+ */
12
28
  isOptional;
29
+ /**
30
+ * 敏感呈现类别,省略表示未声明掩码。
31
+ */
13
32
  sensitiveKind;
33
+ /**
34
+ * 引用或集合目标聚合名;这里只保存标识,注册阶段继续校验目标存在与关系一致性。
35
+ */
14
36
  ref;
37
+ /**
38
+ * hasMany 目标聚合上实际外键字段名,其他类别省略。
39
+ */
40
+ mappedBy;
41
+ /**
42
+ * 租户内唯一要求,普通字段通过 unique() 声明;文件和集合拒绝此修饰。
43
+ */
15
44
  isUnique;
45
+ /**
46
+ * 是否从公开安全读、审计差异、事件呈现和契约中排除;不代表业务内部永不读取。
47
+ */
16
48
  isHidden;
49
+ /**
50
+ * 字段口径说明,供本体/影响分析使用,不执行额外验证。
51
+ */
17
52
  description;
53
+ /**
54
+ * enum 的允许字符串值集合;其他字段通常省略。
55
+ */
18
56
  values;
57
+ /**
58
+ * list 对象元素字段结构,标量数组保存为 { item },供契约和图谱理解 JSON 内容。
59
+ */
19
60
  shape;
61
+ /**
62
+ * 文本最长字符数元数据,对应其 Zod 长度约束。
63
+ */
20
64
  max;
65
+ /**
66
+ * 附件的单文件大小、MIME 和数量政策,实际上传及绑定阶段复核。
67
+ */
68
+ filePolicy;
21
69
  /** 基础校验(不含可空) */
22
70
  base;
71
+ /**
72
+ * 复制基础 schema 与元数据并冻结当前字段实例;isOptional 缺省为 false。
73
+ * 专门工厂负责各类别声明校验,构造本身不执行数据库 DDL、不深度冻结任意传入对象,也不解析用户值。
74
+ */
23
75
  constructor(base, meta) {
24
76
  this.base = base;
25
77
  this.kind = meta.kind;
@@ -27,21 +79,27 @@ export class Field {
27
79
  this.isOptional = meta.isOptional ?? false;
28
80
  this.sensitiveKind = meta.sensitiveKind;
29
81
  this.ref = meta.ref;
82
+ this.mappedBy = meta.mappedBy;
30
83
  this.isUnique = meta.isUnique;
31
84
  this.isHidden = meta.isHidden;
32
85
  this.description = meta.description;
33
86
  this.values = meta.values;
34
87
  this.shape = meta.shape;
35
88
  this.max = meta.max;
89
+ this.filePolicy = meta.filePolicy;
36
90
  Object.freeze(this);
37
91
  }
92
+ /** 导出不含 Zod 实例的元数据快照,供不可变链式修饰复制;不修改当前字段。 */
38
93
  meta() {
39
94
  return {
40
95
  kind: this.kind, sql: this.sql, isOptional: this.isOptional, sensitiveKind: this.sensitiveKind, ref: this.ref,
41
96
  isUnique: this.isUnique, isHidden: this.isHidden, description: this.description, values: this.values,
42
97
  shape: this.shape, max: this.max,
98
+ mappedBy: this.mappedBy,
99
+ filePolicy: this.filePolicy,
43
100
  };
44
101
  }
102
+ /** 复用基础校验但复制元数据,避免一个字段模板被多个聚合引用时互相污染。 */
45
103
  with(patch) {
46
104
  return new Field(this.base, { ...this.meta(), ...patch });
47
105
  }
@@ -49,50 +107,65 @@ export class Field {
49
107
  get zod() {
50
108
  return this.isOptional ? this.base.nullable().optional() : this.base;
51
109
  }
52
- /** 可选字段:列可空,输入可以不填 */
110
+ /** 返回可空且可缺省的新字段,原字段不变;集合关系用空数组表达无关联,因此拒绝 optional。 */
53
111
  optional() {
112
+ if (isRelation(this))
113
+ throw declError('CAGE-REL-001', '集合关系使用空集合表示没有关联,不支持 optional');
54
114
  return this.with({ isOptional: true });
55
115
  }
56
116
  /** 敏感字段:读侧按种类掩码,持有 聚合.unmask.种类 能力才能看明文 */
57
117
  sensitive(kind) {
118
+ if (isFile(this))
119
+ throw declError('CAGE-FILE-001', '文件字段通过所属对象授权,不支持字符串掩码');
120
+ if (isRelation(this))
121
+ throw declError('CAGE-REL-001', '关系字段不支持 sensitive;目标字段按目标聚合权限掩码');
58
122
  if (!SENSITIVE_KINDS.includes(kind))
59
123
  throw declError('CAGE-FIELD-001', `未知的敏感种类 ${kind}`);
60
124
  return this.with({ sensitiveKind: kind });
61
125
  }
62
- /** 唯一约束(租户内) */
126
+ /** 返回要求租户内唯一的新字段;实际约束由 DDL/迁移落实,不是仅一次应用查询。文件和集合已有专用归属/配对语义,拒绝该修饰。 */
63
127
  unique() {
128
+ if (isFile(this))
129
+ throw declError('CAGE-FILE-001', '文件已按所属对象独占绑定,不支持 unique');
130
+ if (isRelation(this))
131
+ throw declError('CAGE-REL-001', '集合关系自动保证关联对唯一,不支持单字段 unique');
64
132
  return this.with({ isUnique: true });
65
133
  }
66
134
  /** 隐藏字段:不出现在读侧、审计、事件和前端契约 */
67
135
  hidden() {
136
+ if (isFile(this))
137
+ throw declError('CAGE-FILE-001', '文件字段必须公开声明,不能 hidden');
138
+ if (isRelation(this))
139
+ throw declError('CAGE-REL-001', '关系使用所属对象和目标对象权限,不支持 hidden 修饰');
68
140
  return this.with({ isHidden: true });
69
141
  }
70
- /** 口径说明 */
142
+ /** 返回附业务口径说明的新字段,供图谱、契约和影响分析使用;文字不自动成为 Zod 或数据库校验。 */
71
143
  describe(text) {
72
144
  return this.with({ description: text });
73
145
  }
74
146
  }
75
147
  // ---------- 字段构造函数 ----------
148
+ /** 字段工厂统一创建必填实例,只有显式 optional() 才放宽缺省/null。 */
76
149
  function mk(base, meta) {
77
150
  return new Field(base, meta);
78
151
  }
79
- /** 文本,默认最长 500 字 */
152
+ /** 创建必填字符串字段,默认最多 500 字符并存为 text;不自动 trim 或要求非空,业务输入需另用 Zod 表达。 */
80
153
  export const text = (max = 500) => mk(z.string().max(max), { kind: 'text', sql: 'text', max });
81
- /** 整数 */
154
+ /** 创建必填整数值字段,Zod 检查整数,数据库使用 integer;数量单位、正负和业务上限由命令输入及不变量明确。 */
82
155
  export const int = () => mk(z.number().int(), { kind: 'int', sql: 'integer' });
83
- /** 数值(双精度)。金额请用 money() */
156
+ /** 创建必填普通数值字段,以 double precision 存储;不保证十进制精确计算,金额应使用 money 及明确业务计算规则。 */
84
157
  export const number = () => mk(z.number(), { kind: 'number', sql: 'double precision' });
85
- /** 金额:用字符串传输,避免浮点误差 */
158
+ /** 创建十进制字符串金额字段,允许负号及最多两位小数,存储为 numeric(18,2);币种/正负业务限制另声明,schema 正则不替代数据库精度上限。 */
86
159
  export const money = () => mk(z.string().regex(/^-?\d+(\.\d{1,2})?$/, '金额格式应为最多两位小数的数字字符串'), { kind: 'money', sql: 'numeric(18,2)' });
87
- /** 主键或外键 */
160
+ /** 创建 UUID 值字段并存为 uuid;不自动声明引用目标或外键,业务关联应使用 ref,聚合自己的主键仍由内核维护。 */
88
161
  export const id = () => mk(z.string().uuid(), { kind: 'id', sql: 'uuid' });
89
- /** 日期 YYYY-MM-DD */
162
+ /** 创建 YYYY-MM-DD 字符串日期字段并存为 date;此处正则检查格式,不独立证明闰年或日历日期真实有效。 */
90
163
  export const date = () => mk(z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '日期格式应为 YYYY-MM-DD'), { kind: 'date', sql: 'date' });
91
- /** 时间戳(ISO 8601) */
164
+ /** 创建带时区偏移的 ISO 时间字符串字段,使用 Zod datetime 校验并存为 timestamptz;业务显示时区由应用明确。 */
92
165
  export const datetime = () => mk(z.string().datetime({ offset: true }), { kind: 'datetime', sql: 'timestamptz' });
93
- /** 布尔 */
166
+ /** 创建必填 boolean 字段并存为 boolean;不把字符串 true/false 或空值隐式转换为布尔值。 */
94
167
  export const bool = () => mk(z.boolean(), { kind: 'bool', sql: 'boolean' });
95
- /** 枚举:enumOf('A', 'B') */
168
+ /** 用至少一个明确字符串声明枚举值,Zod 校验后以 text 存储;这是普通属性取值,具有生命周期迁移语义时应使用 states。 */
96
169
  export function enumOf(...values) {
97
170
  return mk(z.enum(values), { kind: 'enum', sql: 'text', values });
98
171
  }
@@ -103,19 +176,66 @@ export function ref(to) {
103
176
  throw declError('CAGE-FIELD-002', 'ref() 的目标为空,可能是循环导入;可改为 ref("聚合名")');
104
177
  return mk(z.string().uuid(), { kind: 'ref', sql: 'uuid', ref: target });
105
178
  }
179
+ /** 一对多反查:实际外键在目标聚合上,不创建另一份关系或可写数组。 */
180
+ export function hasMany(to, options) {
181
+ const target = typeof to === 'string' ? to : to?.name;
182
+ if (!target)
183
+ throw declError('CAGE-REL-001', 'hasMany() 需要目标聚合;循环引用请使用聚合名字符串');
184
+ return mk(z.array(z.string().uuid()), { kind: 'hasMany', sql: '', ref: target, ...options });
185
+ }
186
+ /** 多对多:字段与普通属性一处声明,中间表由框架生成;业务命令返回目标 ID 数组。 */
187
+ export function manyToMany(to, options = {}) {
188
+ const target = typeof to === 'string' ? to : to?.name;
189
+ if (!target)
190
+ throw declError('CAGE-REL-001', 'manyToMany() 需要目标聚合;循环引用请使用聚合名字符串');
191
+ return mk(z.array(z.string().uuid()), { kind: 'manyToMany', sql: '', ref: target, ...options });
192
+ }
193
+ /**
194
+ * 识别 hasMany/manyToMany 集合关系;ref 仍是主表 UUID 列,不在此分类中。
195
+ */
196
+ export const isRelation = (field) => field.kind === 'hasMany' || field.kind === 'manyToMany';
197
+ /**
198
+ * 识别单附件 file 与多附件 files,用于交给上传政策、绑定与生命周期校验,不检查某个文件当前是否可访问。
199
+ */
200
+ export const isFile = (field) => field.kind === 'file' || field.kind === 'files';
201
+ /**
202
+ * 在声明期拒绝无界上传政策,并去重冻结 MIME 列表;多附件数量限制为 1–100。
203
+ * 这里只校验政策形式,实际字节数、内容类型及所属对象权限由文件服务和事务绑定复核。
204
+ */
205
+ function filePolicy(options, multiple) {
206
+ if (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 1 || !options.accept?.length ||
207
+ options.accept.some(type => !/^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+$/.test(type)) ||
208
+ (multiple && (!Number.isSafeInteger(options.maxCount) || options.maxCount < 1 || options.maxCount > 100)))
209
+ throw declError('CAGE-FILE-001', '文件必须声明正整数 maxBytes、明确 MIME accept;多文件还需声明 1–100 的 maxCount');
210
+ return Object.freeze({ maxBytes: options.maxBytes, accept: Object.freeze([...new Set(options.accept)]), ...(multiple ? { maxCount: options.maxCount } : {}) });
211
+ }
212
+ /** 单附件字段在主表保存 UUID;上传完成并不等于绑定成功,命令提交时才确定归属。 */
213
+ export function file(options) {
214
+ return mk(z.string().uuid(), { kind: 'file', sql: 'uuid', filePolicy: filePolicy(options, false) });
215
+ }
216
+ /** 多附件以 ID 数组保存,独占归属仍由文件关联表保障;空数组表示当前没有附件。 */
217
+ export function files(options) {
218
+ return mk(z.array(z.string().uuid()).max(options.maxCount), { kind: 'files', sql: 'jsonb', filePolicy: filePolicy(options, true) });
219
+ }
106
220
  export function list(arg) {
221
+ const members = isField(arg) ? [arg] : Object.values(arg);
222
+ if (members.some(isRelation))
223
+ throw declError('CAGE-REL-001', '关系字段只能直接声明在聚合 fields 中,不能嵌入 JSON 明细');
224
+ if (members.some(isFile))
225
+ throw declError('CAGE-FILE-001', '文件字段只能直接声明在聚合 fields 中,不能嵌入 JSON 明细');
107
226
  if (isField(arg)) {
108
227
  return mk(z.array(arg.zod), { kind: 'list', sql: 'jsonb', shape: { item: arg } });
109
228
  }
110
229
  const item = z.object(Object.fromEntries(Object.entries(arg).map(([k, f]) => [k, f.zod])));
111
230
  return mk(z.array(item), { kind: 'list', sql: 'jsonb', shape: arg });
112
231
  }
232
+ /** 同时支持当前类实例和跨包副本的字段结构;不能据此证明用户自造对象的所有元数据合法。 */
113
233
  export function isField(v) {
114
234
  return v instanceof Field || (!!v && typeof v === 'object' && 'kind' in v && 'base' in v && 'sql' in v);
115
235
  }
116
- /** 把一组字段拼成对象 schema */
236
+ /** 把字段的实际 zod 规则合成为对象 schema,排除只读 hasMany 反向集合;manyToMany 仍作为可写 ID 数组参与验证,不额外添加系统列。 */
117
237
  export function objectSchema(fields) {
118
- return z.object(Object.fromEntries(Object.entries(fields).map(([k, f]) => [k, f.zod])));
238
+ return z.object(Object.fromEntries(Object.entries(fields).filter(([, f]) => f.kind !== 'hasMany').map(([k, f]) => [k, f.zod])));
119
239
  }
120
240
  /** 结构不固定的 JSON 对象(例如能力点参数),存为 jsonb。业务字段请优先用 list 或具体类型。 */
121
241
  export const json = () => mk(z.record(z.string(), z.unknown()), { kind: 'list', sql: 'jsonb' });
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/primitives/fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/primitives/fields.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,mDAAmD;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAqErH;;;GAGG;AACH,MAAM,OAAO,KAAK;IAChB;;OAEG;IACM,IAAI,CAAI;IACjB;;OAEG;IACM,GAAG,CAAS;IACrB;;OAEG;IACM,UAAU,CAAU;IAC7B;;OAEG;IACM,aAAa,CAAiB;IACvC;;OAEG;IACM,GAAG,CAAU;IACtB;;OAEG;IACM,QAAQ,CAAU;IAC3B;;OAEG;IACM,QAAQ,CAAW;IAC5B;;OAEG;IACM,QAAQ,CAAW;IAC5B;;OAEG;IACM,WAAW,CAAU;IAC9B;;OAEG;IACM,MAAM,CAAqB;IACpC;;OAEG;IACM,KAAK,CAAsC;IACpD;;OAEG;IACM,GAAG,CAAU;IACtB;;OAEG;IACM,UAAU,CAAc;IACjC,iBAAiB;IACR,IAAI,CAAI;IAIjB;;;OAGG;IACH,YAAY,IAAO,EAAE,IAAyK;QAC5L,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG;YAC7G,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;YACpG,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;IAED,yCAAyC;IACjC,IAAI,CAA0B,KAAuC;QAC3E,OAAO,IAAI,KAAK,CAAU,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,kCAAkC;IAClC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,sDAAsD;IACtD,QAAQ;QACN,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,IAAI,CAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,2CAA2C;IAC3C,SAAS,CAAC,IAAmB;QAC3B,IAAI,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACzF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,gBAAgB,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,qEAAqE;IACrE,MAAM;QACJ,IAAI,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAC9E,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,6BAA6B;IAC7B,MAAM;QACJ,IAAI,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,EAAE,+BAA+B,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,sDAAsD;IACtD,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAqBD,+BAA+B;AAE/B,+CAA+C;AAC/C,SAAS,EAAE,CAAiD,IAAO,EAAE,IAA4F;IAC/J,OAAO,IAAI,KAAK,CAAc,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/F,gEAAgE;AAChE,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAC/E,yEAAyE;AACzE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACxF,mFAAmF;AACnF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CACxB,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;AAC7G,kEAAkE;AAClE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1H,0EAA0E;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;AAClH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAE5E,uEAAuE;AACvE,MAAM,UAAU,MAAM,CAAiD,GAAG,MAAS;IACjF,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAgD,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7G,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,GAAG,CAAC,EAAgE;IAClF,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAAC;IACrF,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,OAAO,CAAC,EAAmE,EAAE,OAAiI;IAC5N,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;IAC/E,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,UAAU,CAAC,EAAiE,EAAE,UAAmE,EAAE;IACjK,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;IAClF,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAClG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACjH;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAgB,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAErG;;;GAGG;AACH,SAAS,UAAU,CAAC,OAAmB,EAAE,QAAiB;IACxD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1F,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAS,GAAG,CAAC,IAAI,OAAO,CAAC,QAAS,GAAG,GAAG,CAAC,CAAC;QAC7G,MAAM,SAAS,CAAC,eAAe,EAAE,4DAA4D,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjK,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,IAAI,CAAC,OAAqC;IACxD,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,KAAK,CAAC,OAAoF;IACxG,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACtI,CAAC;AAgBD,MAAM,UAAU,IAAI,CAAC,GAAsB;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,MAAM,SAAS,CAAC,cAAc,EAAE,qCAAqC,CAAC,CAAC;IACrG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,SAAS,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC;IAClG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAQ,CAAC;IAC3F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAQ,CAAC;AAC9E,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAK,CAAS,IAAI,MAAM,IAAK,CAAS,IAAI,KAAK,IAAK,CAAS,CAAC,CAAC;AACrI,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClI,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC"}