@pactor-app/schema 0.1.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.
@@ -0,0 +1,403 @@
1
+ /**
2
+ * DSL Specification Version(设计文档第 37 节)。
3
+ *
4
+ * DSL 文档根节点必须携带 `dsl` 字段声明其遵循的规范版本;
5
+ * Runtime 加载前据此做 capability validation。
6
+ */
7
+ declare const DSL_VERSION: "1.0";
8
+
9
+ /**
10
+ * DslNode 与 Action 的 JSON Schema(对应 @pactor-app/core 的 DslNode / ActionConfig)。
11
+ *
12
+ * 通过 $id 引用实现 children 递归。
13
+ */
14
+ declare const ACTION_CONFIG_SCHEMA_ID = "pactor:action-config";
15
+ declare const DSL_NODE_SCHEMA_ID = "pactor:dsl-node";
16
+ /** ActionConfig:动作名必填,params 任意键值;id 为命名动作结果标识(设计文档第 48 节) */
17
+ declare const actionConfigSchema: {
18
+ readonly $id: "pactor:action-config";
19
+ readonly type: "object";
20
+ readonly required: readonly ["action"];
21
+ readonly properties: {
22
+ readonly id: {
23
+ readonly type: "string";
24
+ readonly minLength: 1;
25
+ };
26
+ readonly action: {
27
+ readonly type: "string";
28
+ readonly minLength: 1;
29
+ };
30
+ readonly params: {
31
+ readonly type: "object";
32
+ };
33
+ readonly condition: {
34
+ readonly anyOf: readonly [{
35
+ readonly type: "string";
36
+ }, {
37
+ readonly type: "object";
38
+ readonly required: readonly ["expression"];
39
+ readonly properties: {
40
+ readonly expression: {
41
+ readonly type: "string";
42
+ };
43
+ };
44
+ readonly additionalProperties: false;
45
+ }];
46
+ };
47
+ readonly permission: {
48
+ readonly anyOf: readonly [{
49
+ readonly type: "string";
50
+ readonly minLength: 1;
51
+ }, {
52
+ readonly type: "array";
53
+ readonly items: {
54
+ readonly type: "string";
55
+ readonly minLength: 1;
56
+ };
57
+ }, {
58
+ readonly type: "object";
59
+ readonly required: readonly ["code"];
60
+ readonly properties: {
61
+ readonly code: {
62
+ readonly anyOf: readonly [{
63
+ readonly type: "string";
64
+ readonly minLength: 1;
65
+ }, {
66
+ readonly type: "array";
67
+ readonly items: {
68
+ readonly type: "string";
69
+ readonly minLength: 1;
70
+ };
71
+ }];
72
+ };
73
+ readonly denied: {
74
+ readonly enum: readonly ["hidden", "disabled", "readonly"];
75
+ };
76
+ };
77
+ readonly additionalProperties: false;
78
+ }];
79
+ };
80
+ };
81
+ readonly additionalProperties: false;
82
+ };
83
+ /** DslNode:type 必填,children 递归 */
84
+ declare const dslNodeSchema: {
85
+ readonly $id: "pactor:dsl-node";
86
+ readonly type: "object";
87
+ readonly required: readonly ["type"];
88
+ readonly properties: {
89
+ readonly id: {
90
+ readonly type: "string";
91
+ };
92
+ readonly type: {
93
+ readonly type: "string";
94
+ readonly minLength: 1;
95
+ };
96
+ readonly props: {
97
+ readonly type: "object";
98
+ };
99
+ readonly children: {
100
+ readonly type: "array";
101
+ readonly items: {
102
+ readonly $ref: "pactor:dsl-node";
103
+ };
104
+ };
105
+ readonly events: {
106
+ readonly type: "object";
107
+ readonly additionalProperties: {
108
+ readonly anyOf: readonly [{
109
+ readonly $ref: "pactor:action-config";
110
+ }, {
111
+ readonly type: "array";
112
+ readonly items: {
113
+ readonly $ref: "pactor:action-config";
114
+ };
115
+ }];
116
+ };
117
+ };
118
+ readonly permission: {
119
+ readonly anyOf: readonly [{
120
+ readonly type: "string";
121
+ readonly minLength: 1;
122
+ }, {
123
+ readonly type: "array";
124
+ readonly items: {
125
+ readonly type: "string";
126
+ readonly minLength: 1;
127
+ };
128
+ }, {
129
+ readonly type: "object";
130
+ readonly required: readonly ["code"];
131
+ readonly properties: {
132
+ readonly code: {
133
+ readonly anyOf: readonly [{
134
+ readonly type: "string";
135
+ readonly minLength: 1;
136
+ }, {
137
+ readonly type: "array";
138
+ readonly items: {
139
+ readonly type: "string";
140
+ readonly minLength: 1;
141
+ };
142
+ }];
143
+ };
144
+ readonly denied: {
145
+ readonly enum: readonly ["hidden", "disabled", "readonly"];
146
+ };
147
+ };
148
+ readonly additionalProperties: false;
149
+ }];
150
+ };
151
+ readonly when: {
152
+ readonly anyOf: readonly [{
153
+ readonly type: "string";
154
+ }, {
155
+ readonly type: "object";
156
+ readonly required: readonly ["expression"];
157
+ readonly properties: {
158
+ readonly expression: {
159
+ readonly type: "string";
160
+ };
161
+ };
162
+ readonly additionalProperties: false;
163
+ }];
164
+ };
165
+ };
166
+ readonly additionalProperties: false;
167
+ };
168
+
169
+ /**
170
+ * Page DSL 根结构 JSON Schema(设计文档第 10、37 节)。
171
+ */
172
+ declare const PAGE_DSL_SCHEMA_ID = "pactor:page-dsl";
173
+ declare const pageDslSchema: {
174
+ readonly $id: "pactor:page-dsl";
175
+ readonly type: "object";
176
+ readonly required: readonly ["dsl", "page"];
177
+ readonly properties: {
178
+ /** DSL Specification Version,如 "1.0" */
179
+ readonly dsl: {
180
+ readonly type: "string";
181
+ readonly minLength: 1;
182
+ };
183
+ readonly requires: {
184
+ readonly type: "object";
185
+ readonly properties: {
186
+ /** Runtime 版本范围(semver range 字符串),如 ">=1.0.0" */
187
+ readonly runtime: {
188
+ readonly type: "string";
189
+ readonly minLength: 1;
190
+ };
191
+ /** 组件 API 版本要求:组件名 → semver range 字符串 */
192
+ readonly components: {
193
+ readonly type: "object";
194
+ readonly additionalProperties: {
195
+ readonly type: "string";
196
+ readonly minLength: 1;
197
+ };
198
+ };
199
+ };
200
+ readonly additionalProperties: false;
201
+ };
202
+ readonly page: {
203
+ readonly type: "object";
204
+ readonly required: readonly ["id"];
205
+ readonly properties: {
206
+ readonly id: {
207
+ readonly type: "string";
208
+ readonly minLength: 1;
209
+ };
210
+ readonly title: {
211
+ readonly type: "string";
212
+ };
213
+ readonly type: {
214
+ readonly type: "string";
215
+ };
216
+ readonly permission: {
217
+ readonly anyOf: readonly [{
218
+ readonly type: "string";
219
+ readonly minLength: 1;
220
+ }, {
221
+ readonly type: "array";
222
+ readonly items: {
223
+ readonly type: "string";
224
+ readonly minLength: 1;
225
+ };
226
+ }, {
227
+ readonly type: "object";
228
+ readonly required: readonly ["code"];
229
+ readonly properties: {
230
+ readonly code: {
231
+ readonly anyOf: readonly [{
232
+ readonly type: "string";
233
+ readonly minLength: 1;
234
+ }, {
235
+ readonly type: "array";
236
+ readonly items: {
237
+ readonly type: "string";
238
+ readonly minLength: 1;
239
+ };
240
+ }];
241
+ };
242
+ readonly denied: {
243
+ readonly enum: readonly ["hidden", "disabled", "readonly"];
244
+ };
245
+ };
246
+ readonly additionalProperties: false;
247
+ }];
248
+ };
249
+ };
250
+ readonly additionalProperties: false;
251
+ };
252
+ readonly state: {
253
+ readonly type: "object";
254
+ };
255
+ readonly dataSources: {
256
+ readonly type: "object";
257
+ readonly additionalProperties: {
258
+ readonly type: "object";
259
+ readonly required: readonly ["type"];
260
+ readonly properties: {
261
+ readonly type: {
262
+ readonly enum: readonly ["http", "service", "static", "computed", "resource"];
263
+ };
264
+ readonly service: {
265
+ readonly type: "string";
266
+ readonly minLength: 1;
267
+ };
268
+ readonly autoLoad: {
269
+ readonly type: "boolean";
270
+ };
271
+ readonly params: {
272
+ readonly type: "object";
273
+ };
274
+ readonly request: {
275
+ readonly type: "object";
276
+ readonly required: readonly ["url"];
277
+ readonly properties: {
278
+ readonly method: {
279
+ readonly type: "string";
280
+ };
281
+ readonly url: {
282
+ readonly type: "string";
283
+ readonly minLength: 1;
284
+ };
285
+ readonly params: {
286
+ readonly type: "object";
287
+ };
288
+ readonly headers: {
289
+ readonly type: "object";
290
+ readonly additionalProperties: {
291
+ readonly type: "string";
292
+ };
293
+ };
294
+ readonly body: true;
295
+ };
296
+ readonly additionalProperties: false;
297
+ };
298
+ readonly pagination: {
299
+ readonly type: "object";
300
+ readonly properties: {
301
+ readonly page: true;
302
+ readonly pageSize: true;
303
+ };
304
+ readonly additionalProperties: false;
305
+ };
306
+ readonly value: true;
307
+ };
308
+ readonly additionalProperties: false;
309
+ };
310
+ };
311
+ readonly lifecycle: {
312
+ readonly type: "object";
313
+ readonly properties: {
314
+ readonly onInit: {
315
+ readonly anyOf: readonly [{
316
+ readonly $ref: "pactor:action-config";
317
+ }, {
318
+ readonly type: "array";
319
+ readonly items: {
320
+ readonly $ref: "pactor:action-config";
321
+ };
322
+ }];
323
+ };
324
+ readonly onLoad: {
325
+ readonly anyOf: readonly [{
326
+ readonly $ref: "pactor:action-config";
327
+ }, {
328
+ readonly type: "array";
329
+ readonly items: {
330
+ readonly $ref: "pactor:action-config";
331
+ };
332
+ }];
333
+ };
334
+ readonly onReady: {
335
+ readonly anyOf: readonly [{
336
+ readonly $ref: "pactor:action-config";
337
+ }, {
338
+ readonly type: "array";
339
+ readonly items: {
340
+ readonly $ref: "pactor:action-config";
341
+ };
342
+ }];
343
+ };
344
+ readonly onShow: {
345
+ readonly anyOf: readonly [{
346
+ readonly $ref: "pactor:action-config";
347
+ }, {
348
+ readonly type: "array";
349
+ readonly items: {
350
+ readonly $ref: "pactor:action-config";
351
+ };
352
+ }];
353
+ };
354
+ readonly onHide: {
355
+ readonly anyOf: readonly [{
356
+ readonly $ref: "pactor:action-config";
357
+ }, {
358
+ readonly type: "array";
359
+ readonly items: {
360
+ readonly $ref: "pactor:action-config";
361
+ };
362
+ }];
363
+ };
364
+ readonly onDestroy: {
365
+ readonly anyOf: readonly [{
366
+ readonly $ref: "pactor:action-config";
367
+ }, {
368
+ readonly type: "array";
369
+ readonly items: {
370
+ readonly $ref: "pactor:action-config";
371
+ };
372
+ }];
373
+ };
374
+ };
375
+ readonly additionalProperties: false;
376
+ };
377
+ readonly body: {
378
+ readonly $ref: "pactor:dsl-node";
379
+ };
380
+ };
381
+ readonly additionalProperties: false;
382
+ };
383
+
384
+ /** 结构化校验错误(不暴露 Ajv 原始错误对象) */
385
+ interface DslValidationError {
386
+ /** 字段路径,如 "/page/id"、"/body/children/0/type";根级为 "/" */
387
+ path: string;
388
+ /** 人类可读描述 */
389
+ message: string;
390
+ /** Ajv 错误关键字,如 "required"、"type"、"enum" */
391
+ keyword: string;
392
+ }
393
+ interface DslValidationResult {
394
+ valid: boolean;
395
+ errors: DslValidationError[];
396
+ }
397
+ /**
398
+ * 校验 Page DSL 文档是否符合根结构 Schema。
399
+ * 校验通过时 errors 为空数组。
400
+ */
401
+ declare function validatePageDsl(document: unknown): DslValidationResult;
402
+
403
+ export { ACTION_CONFIG_SCHEMA_ID, DSL_NODE_SCHEMA_ID, DSL_VERSION, type DslValidationError, type DslValidationResult, PAGE_DSL_SCHEMA_ID, actionConfigSchema, dslNodeSchema, pageDslSchema, validatePageDsl };