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.
- package/README.md +38 -2
- package/dist/browser/zentao-api.global.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/misc/errors.d.ts +2 -0
- package/dist/misc/errors.js +2 -0
- package/dist/modules/define.d.ts +67 -0
- package/dist/modules/define.js +123 -0
- package/dist/modules/generated.d.ts +0 -38
- package/dist/modules/generated.js +0 -38
- package/dist/modules/override.d.ts +60 -0
- package/dist/modules/override.js +113 -0
- package/dist/modules/query.d.ts +44 -0
- package/dist/modules/query.js +68 -0
- package/dist/modules/registry-store.d.ts +39 -0
- package/dist/modules/registry-store.js +181 -0
- package/dist/modules/registry.d.ts +4 -120
- package/dist/modules/registry.js +16 -221
- package/dist/modules/resolve.d.ts +2 -2
- package/dist/modules/resolve.js +8 -8
- package/dist/request/index.d.ts +3 -0
- package/dist/request/index.js +58 -4
- package/dist/types/client.d.ts +38 -0
- package/dist/types/client.js +1 -0
- package/dist/types/data.d.ts +42 -0
- package/dist/types/data.js +1 -0
- package/dist/types/index.d.ts +17 -359
- package/dist/types/index.js +17 -1
- package/dist/types/module.d.ts +143 -0
- package/dist/types/module.js +1 -0
- package/dist/types/options.d.ts +51 -0
- package/dist/types/options.js +1 -0
- package/dist/types/profile.d.ts +54 -0
- package/dist/types/profile.js +1 -0
- package/dist/types/response.d.ts +70 -0
- package/dist/types/response.js +1 -0
- package/dist/version.js +2 -2
- package/package.json +1 -1
package/dist/misc/errors.d.ts
CHANGED
|
@@ -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>\".";
|
package/dist/misc/errors.js
CHANGED
|
@@ -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
|
}];
|