zentao-api 0.3.1 → 0.3.3

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.
@@ -21,6 +21,8 @@ export declare const ERRORS: {
21
21
  readonly E_INVALID_ACTION: "Unknown action: {module}-{action}";
22
22
  readonly E_INVALID_MODULE_DEFINITION: "Invalid module definition.";
23
23
  readonly E_INVALID_ACTION_DEFINITION: "Invalid module action definition.";
24
+ readonly E_INDETERMINATE_ACTION_METHOD: "Cannot infer HTTP method for action \"{action}\" from type \"{type}\"; specify \"method\" explicitly.";
25
+ readonly E_INDETERMINATE_ACTION_RESULT_TYPE: "Cannot infer result type for action \"{action}\" from type \"{type}\"; specify \"resultType\" explicitly.";
24
26
  readonly E_MISSING_PARAM: "Missing required parameter: {param}";
25
27
  readonly E_INVALID_PARAM: "Invalid value for parameter {param}: {value}";
26
28
  readonly E_INVALID_REQUEST_NAME: "Request name must use the form \"moduleName\", \"moduleName/methodName\", or \"moduleName/<objectID>\".";
@@ -21,6 +21,8 @@ export const ERRORS = {
21
21
  E_INVALID_ACTION: 'Unknown action: {module}-{action}',
22
22
  E_INVALID_MODULE_DEFINITION: 'Invalid module definition.',
23
23
  E_INVALID_ACTION_DEFINITION: 'Invalid module action definition.',
24
+ E_INDETERMINATE_ACTION_METHOD: 'Cannot infer HTTP method for action "{action}" from type "{type}"; specify "method" explicitly.',
25
+ E_INDETERMINATE_ACTION_RESULT_TYPE: 'Cannot infer result type for action "{action}" from type "{type}"; specify "resultType" explicitly.',
24
26
  E_MISSING_PARAM: 'Missing required parameter: {param}',
25
27
  E_INVALID_PARAM: 'Invalid value for parameter {param}: {value}',
26
28
  E_INVALID_REQUEST_NAME: 'Request name must use the form "moduleName", "moduleName/methodName", or "moduleName/<objectID>".',
@@ -0,0 +1,67 @@
1
+ import type { ModuleAction, ModuleDefinition } from '../types/index.js';
2
+ /** {@link defineModules} 的选项。 */
3
+ export interface DefineModulesOptions {
4
+ /**
5
+ * 同名模块的写入策略。
6
+ *
7
+ * - `false`(默认):合并模块的元数据,并按动作名对动作做"同名替换、未知追加"。
8
+ * - `true`:整体替换已存在的模块定义,原有动作会被丢弃。
9
+ */
10
+ replace?: boolean;
11
+ }
12
+ /**
13
+ * 注册或扩展模块定义。
14
+ *
15
+ * 行为细节:
16
+ * - 模块名匹配大小写不敏感。
17
+ * - 未知模块直接追加到注册表末尾。
18
+ * - 已存在的模块默认按 `mergeModule` 合并:模块元数据浅合并、动作按名同名替换/未知追加;
19
+ * `options.replace` 为 `true` 时整体替换。
20
+ * - 所有写入都会做深克隆 + 深冻结:调用方后续修改自己的对象不会污染注册表,注册表也不可被外部改写。
21
+ *
22
+ * @param input - 单个或一组模块定义。
23
+ * @param options - 写入策略,参见 {@link DefineModulesOptions}。
24
+ * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段。
25
+ */
26
+ export declare function defineModules(input: ModuleDefinition | ModuleDefinition[], options?: DefineModulesOptions): void;
27
+ /**
28
+ * 为已存在的模块追加或覆盖动作。
29
+ *
30
+ * 不做深度合并:同名动作整体替换,未知动作追加。这避免在 schema、参数数组等字段上出现隐式合并规则。
31
+ *
32
+ * `method` / `resultType` 可省略:写入时按动作 `type` 自动推导(见 {@link ModuleAction})。
33
+ *
34
+ * @param moduleName - 目标模块名(大小写不敏感)。
35
+ * @param input - 单个或一组动作定义。
36
+ * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION_DEFINITION`
37
+ * (动作缺少 `name` / `path`,或 `method` / `resultType` 类型非法),或
38
+ * `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
39
+ */
40
+ export declare function defineModuleActions(moduleName: string, input: ModuleAction | ModuleAction[]): void;
41
+ /**
42
+ * 扩展已存在的模块动作。
43
+ *
44
+ * 与 {@link defineModuleActions} 的「整体替换」不同,这里对单个动作做**深度合并**:
45
+ * 只需给出待修改的字段,其余字段沿用原动作定义。普通对象递归合并,
46
+ * 数组及其他值由补丁整体替换,值为 `undefined` 的键会被忽略。
47
+ *
48
+ * 当 `action` 为函数时**不做合并**:会以当前动作的深克隆为入参调用它,
49
+ * 其返回值作为完整的动作定义直接取代原动作定义。
50
+ *
51
+ * @param moduleName - 目标模块名(大小写不敏感)。
52
+ * @param actionName - 目标动作名(大小写不敏感)。
53
+ * @param action - 深度合并的补丁对象,或接收当前动作深克隆并返回完整动作定义的函数。
54
+ * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION`(动作不存在)、
55
+ * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`,或 `method` / `resultType` 类型非法),
56
+ * 或 `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
57
+ */
58
+ export declare function extendModuleAction(moduleName: string, actionName: string, action: Partial<ModuleAction> | ((action: ModuleAction) => ModuleAction)): void;
59
+ /**
60
+ * 将注册表重置为内置基线。
61
+ *
62
+ * 重置会触发 store 的「重置后钩子」,由 barrel(`./registry.ts`)在其中重新应用内置覆盖
63
+ * (见 `./override.ts`),因此重置后内置扩展依旧生效。
64
+ *
65
+ * @internal
66
+ */
67
+ export declare function resetModuleDefinitions(): void;
@@ -0,0 +1,123 @@
1
+ import { ZentaoError } from '../misc/errors.js';
2
+ import { asArray } from '../utils/index.js';
3
+ import { deepClone, deepMerge, findActionIndex, freezeAction, freezeModule, getModuleMapState, getModulesState, mergeModule, rebuildModuleMap, resetState, validateAction, validateModule, } from './registry-store.js';
4
+ /**
5
+ * 注册或扩展模块定义。
6
+ *
7
+ * 行为细节:
8
+ * - 模块名匹配大小写不敏感。
9
+ * - 未知模块直接追加到注册表末尾。
10
+ * - 已存在的模块默认按 `mergeModule` 合并:模块元数据浅合并、动作按名同名替换/未知追加;
11
+ * `options.replace` 为 `true` 时整体替换。
12
+ * - 所有写入都会做深克隆 + 深冻结:调用方后续修改自己的对象不会污染注册表,注册表也不可被外部改写。
13
+ *
14
+ * @param input - 单个或一组模块定义。
15
+ * @param options - 写入策略,参见 {@link DefineModulesOptions}。
16
+ * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段。
17
+ */
18
+ export function defineModules(input, options = {}) {
19
+ const modules = getModulesState();
20
+ for (const module of asArray(input)) {
21
+ validateModule(module);
22
+ const key = module.name.toLowerCase();
23
+ const index = modules.findIndex((item) => item.name.toLowerCase() === key);
24
+ if (index >= 0) {
25
+ modules[index] = options.replace
26
+ ? freezeModule(deepClone(module))
27
+ : mergeModule(modules[index], module);
28
+ }
29
+ else {
30
+ modules.push(freezeModule(deepClone(module)));
31
+ }
32
+ }
33
+ rebuildModuleMap();
34
+ }
35
+ /**
36
+ * 为已存在的模块追加或覆盖动作。
37
+ *
38
+ * 不做深度合并:同名动作整体替换,未知动作追加。这避免在 schema、参数数组等字段上出现隐式合并规则。
39
+ *
40
+ * `method` / `resultType` 可省略:写入时按动作 `type` 自动推导(见 {@link ModuleAction})。
41
+ *
42
+ * @param moduleName - 目标模块名(大小写不敏感)。
43
+ * @param input - 单个或一组动作定义。
44
+ * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION_DEFINITION`
45
+ * (动作缺少 `name` / `path`,或 `method` / `resultType` 类型非法),或
46
+ * `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
47
+ */
48
+ export function defineModuleActions(moduleName, input) {
49
+ const key = moduleName.toLowerCase();
50
+ const module = getModuleMapState().get(key);
51
+ if (!module) {
52
+ throw new ZentaoError('E_INVALID_MODULE', { module: moduleName });
53
+ }
54
+ const actions = module.actions.slice();
55
+ for (const action of asArray(input)) {
56
+ validateAction(action);
57
+ const index = findActionIndex(actions, String(action.name));
58
+ const frozen = freezeAction(deepClone(action));
59
+ // 同名动作替换,未知动作追加;不做深度合并,避免 schema/数组字段出现隐式规则。
60
+ if (index >= 0) {
61
+ actions[index] = frozen;
62
+ }
63
+ else {
64
+ actions.push(frozen);
65
+ }
66
+ }
67
+ const nextModule = freezeModule({ ...module, actions });
68
+ const modules = getModulesState();
69
+ const index = modules.findIndex((item) => item.name.toLowerCase() === key);
70
+ modules[index] = nextModule;
71
+ rebuildModuleMap();
72
+ }
73
+ /**
74
+ * 扩展已存在的模块动作。
75
+ *
76
+ * 与 {@link defineModuleActions} 的「整体替换」不同,这里对单个动作做**深度合并**:
77
+ * 只需给出待修改的字段,其余字段沿用原动作定义。普通对象递归合并,
78
+ * 数组及其他值由补丁整体替换,值为 `undefined` 的键会被忽略。
79
+ *
80
+ * 当 `action` 为函数时**不做合并**:会以当前动作的深克隆为入参调用它,
81
+ * 其返回值作为完整的动作定义直接取代原动作定义。
82
+ *
83
+ * @param moduleName - 目标模块名(大小写不敏感)。
84
+ * @param actionName - 目标动作名(大小写不敏感)。
85
+ * @param action - 深度合并的补丁对象,或接收当前动作深克隆并返回完整动作定义的函数。
86
+ * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION`(动作不存在)、
87
+ * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`,或 `method` / `resultType` 类型非法),
88
+ * 或 `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
89
+ */
90
+ export function extendModuleAction(moduleName, actionName, action) {
91
+ const key = moduleName.toLowerCase();
92
+ const module = getModuleMapState().get(key);
93
+ if (!module) {
94
+ throw new ZentaoError('E_INVALID_MODULE', { module: moduleName });
95
+ }
96
+ const actions = module.actions.slice();
97
+ const actionIndex = findActionIndex(actions, actionName);
98
+ if (actionIndex < 0) {
99
+ throw new ZentaoError('E_INVALID_ACTION', { module: moduleName, action: actionName });
100
+ }
101
+ const current = actions[actionIndex];
102
+ // 函数:以当前动作的深克隆为入参,返回值作为完整动作定义直接取代原定义,不做合并。
103
+ // 对象:作为补丁与原动作深度合并。
104
+ const next = typeof action === 'function' ? action(deepClone(current)) : deepMerge(current, action);
105
+ validateAction(next);
106
+ actions[actionIndex] = freezeAction(next);
107
+ const nextModule = freezeModule({ ...module, actions });
108
+ const modules = getModulesState();
109
+ const index = modules.findIndex((item) => item.name.toLowerCase() === key);
110
+ modules[index] = nextModule;
111
+ rebuildModuleMap();
112
+ }
113
+ /**
114
+ * 将注册表重置为内置基线。
115
+ *
116
+ * 重置会触发 store 的「重置后钩子」,由 barrel(`./registry.ts`)在其中重新应用内置覆盖
117
+ * (见 `./override.ts`),因此重置后内置扩展依旧生效。
118
+ *
119
+ * @internal
120
+ */
121
+ export function resetModuleDefinitions() {
122
+ resetState();
123
+ }
@@ -176,7 +176,6 @@ export declare const BUILTIN_MODULES: readonly [{
176
176
  readonly pathParams: {
177
177
  readonly userID: "用户ID";
178
178
  };
179
- readonly render: "action";
180
179
  }];
181
180
  }, {
182
181
  readonly name: "program";
@@ -357,7 +356,6 @@ export declare const BUILTIN_MODULES: readonly [{
357
356
  readonly pathParams: {
358
357
  readonly programID: "项目集ID";
359
358
  };
360
- readonly render: "action";
361
359
  }];
362
360
  }, {
363
361
  readonly name: "product";
@@ -582,7 +580,6 @@ export declare const BUILTIN_MODULES: readonly [{
582
580
  readonly pathParams: {
583
581
  readonly productID: "产品ID";
584
582
  };
585
- readonly render: "action";
586
583
  }];
587
584
  }, {
588
585
  readonly name: "project";
@@ -778,7 +775,6 @@ export declare const BUILTIN_MODULES: readonly [{
778
775
  readonly pathParams: {
779
776
  readonly projectID: "项目ID";
780
777
  };
781
- readonly render: "action";
782
778
  }];
783
779
  }, {
784
780
  readonly name: "execution";
@@ -1031,7 +1027,6 @@ export declare const BUILTIN_MODULES: readonly [{
1031
1027
  readonly pathParams: {
1032
1028
  readonly executionID: "执行ID";
1033
1029
  };
1034
- readonly render: "action";
1035
1030
  }];
1036
1031
  }, {
1037
1032
  readonly name: "productplan";
@@ -1234,7 +1229,6 @@ export declare const BUILTIN_MODULES: readonly [{
1234
1229
  readonly pathParams: {
1235
1230
  readonly productplanID: "产品计划ID";
1236
1231
  };
1237
- readonly render: "action";
1238
1232
  }];
1239
1233
  }, {
1240
1234
  readonly name: "story";
@@ -1482,7 +1476,6 @@ export declare const BUILTIN_MODULES: readonly [{
1482
1476
  readonly pathParams: {
1483
1477
  readonly storyID: "需求ID";
1484
1478
  };
1485
- readonly render: "action";
1486
1479
  }, {
1487
1480
  readonly name: "activate";
1488
1481
  readonly display: "激活需求";
@@ -1510,7 +1503,6 @@ export declare const BUILTIN_MODULES: readonly [{
1510
1503
  };
1511
1504
  };
1512
1505
  };
1513
- readonly render: "action";
1514
1506
  }, {
1515
1507
  readonly name: "change";
1516
1508
  readonly display: "变更需求";
@@ -1550,7 +1542,6 @@ export declare const BUILTIN_MODULES: readonly [{
1550
1542
  readonly required: readonly ["reviewer"];
1551
1543
  };
1552
1544
  };
1553
- readonly render: "action";
1554
1545
  }, {
1555
1546
  readonly name: "close";
1556
1547
  readonly display: "关闭需求";
@@ -1579,7 +1570,6 @@ export declare const BUILTIN_MODULES: readonly [{
1579
1570
  readonly required: readonly ["closedReason"];
1580
1571
  };
1581
1572
  };
1582
- readonly render: "action";
1583
1573
  }];
1584
1574
  }, {
1585
1575
  readonly name: "epic";
@@ -1812,7 +1802,6 @@ export declare const BUILTIN_MODULES: readonly [{
1812
1802
  readonly pathParams: {
1813
1803
  readonly epicID: "业务需求ID";
1814
1804
  };
1815
- readonly render: "action";
1816
1805
  }, {
1817
1806
  readonly name: "activate";
1818
1807
  readonly display: "激活业务需求";
@@ -1840,7 +1829,6 @@ export declare const BUILTIN_MODULES: readonly [{
1840
1829
  };
1841
1830
  };
1842
1831
  };
1843
- readonly render: "action";
1844
1832
  }, {
1845
1833
  readonly name: "change";
1846
1834
  readonly display: "变更业务需求";
@@ -1880,7 +1868,6 @@ export declare const BUILTIN_MODULES: readonly [{
1880
1868
  readonly required: readonly ["reviewer"];
1881
1869
  };
1882
1870
  };
1883
- readonly render: "action";
1884
1871
  }, {
1885
1872
  readonly name: "close";
1886
1873
  readonly display: "关闭业务需求";
@@ -1909,7 +1896,6 @@ export declare const BUILTIN_MODULES: readonly [{
1909
1896
  readonly required: readonly ["closedReason"];
1910
1897
  };
1911
1898
  };
1912
- readonly render: "action";
1913
1899
  }];
1914
1900
  }, {
1915
1901
  readonly name: "requirement";
@@ -2141,7 +2127,6 @@ export declare const BUILTIN_MODULES: readonly [{
2141
2127
  readonly pathParams: {
2142
2128
  readonly requirementID: "用户需求ID";
2143
2129
  };
2144
- readonly render: "action";
2145
2130
  }, {
2146
2131
  readonly name: "activate";
2147
2132
  readonly display: "激活用户需求";
@@ -2169,7 +2154,6 @@ export declare const BUILTIN_MODULES: readonly [{
2169
2154
  };
2170
2155
  };
2171
2156
  };
2172
- readonly render: "action";
2173
2157
  }, {
2174
2158
  readonly name: "change";
2175
2159
  readonly display: "变更用户需求";
@@ -2201,7 +2185,6 @@ export declare const BUILTIN_MODULES: readonly [{
2201
2185
  };
2202
2186
  };
2203
2187
  };
2204
- readonly render: "action";
2205
2188
  }, {
2206
2189
  readonly name: "close";
2207
2190
  readonly display: "关闭用户需求";
@@ -2230,7 +2213,6 @@ export declare const BUILTIN_MODULES: readonly [{
2230
2213
  readonly required: readonly ["closedReason"];
2231
2214
  };
2232
2215
  };
2233
- readonly render: "action";
2234
2216
  }];
2235
2217
  }, {
2236
2218
  readonly name: "bug";
@@ -2468,7 +2450,6 @@ export declare const BUILTIN_MODULES: readonly [{
2468
2450
  readonly pathParams: {
2469
2451
  readonly bugID: "Bug ID";
2470
2452
  };
2471
- readonly render: "action";
2472
2453
  }, {
2473
2454
  readonly name: "activate";
2474
2455
  readonly display: "激活Bug";
@@ -2503,7 +2484,6 @@ export declare const BUILTIN_MODULES: readonly [{
2503
2484
  };
2504
2485
  };
2505
2486
  };
2506
- readonly render: "action";
2507
2487
  }, {
2508
2488
  readonly name: "close";
2509
2489
  readonly display: "关闭Bug";
@@ -2527,7 +2507,6 @@ export declare const BUILTIN_MODULES: readonly [{
2527
2507
  };
2528
2508
  };
2529
2509
  };
2530
- readonly render: "action";
2531
2510
  }, {
2532
2511
  readonly name: "resolve";
2533
2512
  readonly display: "解决Bug";
@@ -2568,7 +2547,6 @@ export declare const BUILTIN_MODULES: readonly [{
2568
2547
  readonly required: readonly ["resolution"];
2569
2548
  };
2570
2549
  };
2571
- readonly render: "action";
2572
2550
  }];
2573
2551
  }, {
2574
2552
  readonly name: "testcase";
@@ -2819,7 +2797,6 @@ export declare const BUILTIN_MODULES: readonly [{
2819
2797
  readonly pathParams: {
2820
2798
  readonly testcasID: "测试用例ID";
2821
2799
  };
2822
- readonly render: "action";
2823
2800
  }];
2824
2801
  }, {
2825
2802
  readonly name: "task";
@@ -3053,7 +3030,6 @@ export declare const BUILTIN_MODULES: readonly [{
3053
3030
  readonly pathParams: {
3054
3031
  readonly taskID: "任务ID";
3055
3032
  };
3056
- readonly render: "action";
3057
3033
  }, {
3058
3034
  readonly name: "activate";
3059
3035
  readonly display: "激活任务";
@@ -3086,7 +3062,6 @@ export declare const BUILTIN_MODULES: readonly [{
3086
3062
  };
3087
3063
  };
3088
3064
  };
3089
- readonly render: "action";
3090
3065
  }, {
3091
3066
  readonly name: "close";
3092
3067
  readonly display: "关闭任务";
@@ -3110,7 +3085,6 @@ export declare const BUILTIN_MODULES: readonly [{
3110
3085
  };
3111
3086
  };
3112
3087
  };
3113
- readonly render: "action";
3114
3088
  }, {
3115
3089
  readonly name: "finish";
3116
3090
  readonly display: "完成任务";
@@ -3157,7 +3131,6 @@ export declare const BUILTIN_MODULES: readonly [{
3157
3131
  readonly required: readonly ["currentConsumed", "realStarted", "finishedDate"];
3158
3132
  };
3159
3133
  };
3160
- readonly render: "action";
3161
3134
  }, {
3162
3135
  readonly name: "start";
3163
3136
  readonly display: "启动任务";
@@ -3200,7 +3173,6 @@ export declare const BUILTIN_MODULES: readonly [{
3200
3173
  readonly required: readonly ["realStarted"];
3201
3174
  };
3202
3175
  };
3203
- readonly render: "action";
3204
3176
  }];
3205
3177
  }, {
3206
3178
  readonly name: "feedback";
@@ -3406,7 +3378,6 @@ export declare const BUILTIN_MODULES: readonly [{
3406
3378
  readonly pathParams: {
3407
3379
  readonly feedbackID: "反馈ID";
3408
3380
  };
3409
- readonly render: "action";
3410
3381
  }, {
3411
3382
  readonly name: "activate";
3412
3383
  readonly display: "激活反馈";
@@ -3434,7 +3405,6 @@ export declare const BUILTIN_MODULES: readonly [{
3434
3405
  };
3435
3406
  };
3436
3407
  };
3437
- readonly render: "action";
3438
3408
  }, {
3439
3409
  readonly name: "close";
3440
3410
  readonly display: "关闭反馈";
@@ -3463,7 +3433,6 @@ export declare const BUILTIN_MODULES: readonly [{
3463
3433
  readonly required: readonly ["closedReason"];
3464
3434
  };
3465
3435
  };
3466
- readonly render: "action";
3467
3436
  }];
3468
3437
  }, {
3469
3438
  readonly name: "ticket";
@@ -3685,7 +3654,6 @@ export declare const BUILTIN_MODULES: readonly [{
3685
3654
  readonly pathParams: {
3686
3655
  readonly ticketID: "工单ID";
3687
3656
  };
3688
- readonly render: "action";
3689
3657
  }, {
3690
3658
  readonly name: "activate";
3691
3659
  readonly display: "激活工单";
@@ -3713,7 +3681,6 @@ export declare const BUILTIN_MODULES: readonly [{
3713
3681
  };
3714
3682
  };
3715
3683
  };
3716
- readonly render: "action";
3717
3684
  }, {
3718
3685
  readonly name: "close";
3719
3686
  readonly display: "关闭工单";
@@ -3742,7 +3709,6 @@ export declare const BUILTIN_MODULES: readonly [{
3742
3709
  readonly required: readonly ["closedReason", "comment"];
3743
3710
  };
3744
3711
  };
3745
- readonly render: "action";
3746
3712
  }];
3747
3713
  }, {
3748
3714
  readonly name: "system";
@@ -3995,7 +3961,6 @@ export declare const BUILTIN_MODULES: readonly [{
3995
3961
  readonly pathParams: {
3996
3962
  readonly buildID: "版本ID";
3997
3963
  };
3998
- readonly render: "action";
3999
3964
  }];
4000
3965
  }, {
4001
3966
  readonly name: "testtask";
@@ -4160,7 +4125,6 @@ export declare const BUILTIN_MODULES: readonly [{
4160
4125
  readonly pathParams: {
4161
4126
  readonly testtaskID: "测试单ID";
4162
4127
  };
4163
- readonly render: "action";
4164
4128
  }];
4165
4129
  }, {
4166
4130
  readonly name: "release";
@@ -4293,7 +4257,6 @@ export declare const BUILTIN_MODULES: readonly [{
4293
4257
  readonly pathParams: {
4294
4258
  readonly releasID: "发布ID";
4295
4259
  };
4296
- readonly render: "action";
4297
4260
  }];
4298
4261
  }, {
4299
4262
  readonly name: "file";
@@ -4330,6 +4293,5 @@ export declare const BUILTIN_MODULES: readonly [{
4330
4293
  readonly pathParams: {
4331
4294
  readonly fileID: "附件ID";
4332
4295
  };
4333
- readonly render: "action";
4334
4296
  }];
4335
4297
  }];