zentao-api 0.6.5 → 0.6.7

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 (44) hide show
  1. package/README.md +29 -2
  2. package/dist/browser/zentao-api.global.js +26 -18
  3. package/dist/client/index.d.ts +30 -3
  4. package/dist/client/index.js +303 -27
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +1 -1
  7. package/dist/misc/environment.d.ts +0 -2
  8. package/dist/misc/environment.js +43 -19
  9. package/dist/misc/errors.d.ts +6 -0
  10. package/dist/misc/errors.js +9 -0
  11. package/dist/misc/zentao-version.d.ts +11 -0
  12. package/dist/misc/zentao-version.js +35 -0
  13. package/dist/modules/define.d.ts +4 -3
  14. package/dist/modules/define.js +4 -3
  15. package/dist/modules/generated.d.ts +2240 -59
  16. package/dist/modules/generated.js +1230 -50
  17. package/dist/modules/override.d.ts +2 -0
  18. package/dist/modules/override.js +39 -66
  19. package/dist/modules/query.d.ts +13 -10
  20. package/dist/modules/query.js +30 -26
  21. package/dist/modules/registry-store.js +3 -0
  22. package/dist/modules/registry.d.ts +0 -9702
  23. package/dist/modules/registry.js +0 -4
  24. package/dist/modules/resolve.js +1 -1
  25. package/dist/profiles/index.d.ts +3 -1
  26. package/dist/profiles/index.js +13 -4
  27. package/dist/request/index.d.ts +15 -4
  28. package/dist/request/index.js +39 -7
  29. package/dist/types/client.d.ts +8 -3
  30. package/dist/types/module.d.ts +13 -2
  31. package/dist/types/options.d.ts +9 -0
  32. package/dist/types/profile.d.ts +2 -0
  33. package/dist/types/response.d.ts +9 -0
  34. package/dist/utils/doc-helper/index.d.ts +1 -2
  35. package/dist/utils/doc-helper/index.js +0 -1
  36. package/dist/utils/doc-helper/inline.d.ts +0 -1
  37. package/dist/utils/doc-helper/inline.js +3 -81
  38. package/dist/utils/doc-helper/shared.d.ts +0 -5
  39. package/dist/utils/doc-helper/shared.js +0 -34
  40. package/dist/utils/doc-helper/types.d.ts +1 -13
  41. package/dist/version.js +2 -2
  42. package/package.json +9 -8
  43. package/dist/utils/doc-helper/html.d.ts +0 -3
  44. package/dist/utils/doc-helper/html.js +0 -442
@@ -10,8 +10,12 @@ export declare const ERRORS: {
10
10
  readonly E_HTTP_ERROR: "HTTP request failed: {status} {statusText}";
11
11
  readonly E_NETWORK_ERROR: "Network request failed: {message}";
12
12
  readonly E_TIMEOUT: "Request timed out.";
13
+ readonly E_ABORTED: "Request was aborted.";
13
14
  readonly E_INSECURE_BROWSER: "The insecure option is only supported in Node.js runtimes.";
14
15
  readonly E_LOGIN_FAILED: "ZenTao login failed.";
16
+ readonly E_INVALID_ZENTAO_CONFIG: "ZenTao configuration must be an object with a non-empty version.";
17
+ readonly E_INVALID_ZENTAO_VERSION: "Invalid ZenTao version: {version}";
18
+ readonly E_UNSUPPORTED_ZENTAO_VERSION: "Action {action} does not support ZenTao {version}; minimum versions: {minVersion}";
15
19
  readonly E_INVALID_PROFILE: "Invalid ZenTao profile.";
16
20
  readonly E_NO_PROFILE: "No ZenTao profile is configured.";
17
21
  readonly E_PROFILE_NOT_FOUND: "ZenTao profile not found: {profileKey}";
@@ -35,6 +39,8 @@ export declare const ERRORS: {
35
39
  };
36
40
  /** SDK 已知错误码,对应 {@link ERRORS} 的 key。 */
37
41
  export type ErrorCode = keyof typeof ERRORS;
42
+ /** 仅配置获取失败可选择跳过;取消、版本错误和持久化错误仍须抛出。 @internal */
43
+ export declare function isZentaoConfigFetchError(error: unknown): boolean;
38
44
  /**
39
45
  * SDK 统一错误类型。
40
46
  *
@@ -10,8 +10,12 @@ export const ERRORS = {
10
10
  E_HTTP_ERROR: 'HTTP request failed: {status} {statusText}',
11
11
  E_NETWORK_ERROR: 'Network request failed: {message}',
12
12
  E_TIMEOUT: 'Request timed out.',
13
+ E_ABORTED: 'Request was aborted.',
13
14
  E_INSECURE_BROWSER: 'The insecure option is only supported in Node.js runtimes.',
14
15
  E_LOGIN_FAILED: 'ZenTao login failed.',
16
+ E_INVALID_ZENTAO_CONFIG: 'ZenTao configuration must be an object with a non-empty version.',
17
+ E_INVALID_ZENTAO_VERSION: 'Invalid ZenTao version: {version}',
18
+ E_UNSUPPORTED_ZENTAO_VERSION: 'Action {action} does not support ZenTao {version}; minimum versions: {minVersion}',
15
19
  E_INVALID_PROFILE: 'Invalid ZenTao profile.',
16
20
  E_NO_PROFILE: 'No ZenTao profile is configured.',
17
21
  E_PROFILE_NOT_FOUND: 'ZenTao profile not found: {profileKey}',
@@ -33,6 +37,11 @@ export const ERRORS = {
33
37
  E_UPLOAD_FILE_TOO_LARGE: 'Upload file is {size} bytes and exceeds the {limit} byte limit.',
34
38
  E_INVALID_UPLOAD_SOURCE: 'Invalid upload source for field: {field}',
35
39
  };
40
+ /** 仅配置获取失败可选择跳过;取消、版本错误和持久化错误仍须抛出。 @internal */
41
+ export function isZentaoConfigFetchError(error) {
42
+ return error instanceof ZentaoError && (error.code === 'E_HTTP_ERROR' || error.code === 'E_NETWORK_ERROR'
43
+ || error.code === 'E_TIMEOUT' || error.code === 'E_INVALID_ZENTAO_CONFIG');
44
+ }
36
45
  /**
37
46
  * SDK 统一错误类型。
38
47
  *
@@ -0,0 +1,11 @@
1
+ interface ZentaoVersion {
2
+ edition: string;
3
+ parts: number[];
4
+ }
5
+ /** 只接受开源版、biz、max、ipd 系列的点分数字正式版本。 */
6
+ export declare function parseZentaoVersion(version: string): ZentaoVersion;
7
+ /** 注册和生成时共用,缺少版本、格式非法或同系列重复均拒绝。 */
8
+ export declare function validateMinVersion(value: unknown): asserts value is readonly string[];
9
+ /** 同系列逐段比较,缺少的数字段视为零;未列出的系列不支持。 */
10
+ export declare function supportsZentaoVersion(version: ZentaoVersion, minimums: readonly string[]): boolean;
11
+ export {};
@@ -0,0 +1,35 @@
1
+ import { ZentaoError } from './errors.js';
2
+ /** 只接受开源版、biz、max、ipd 系列的点分数字正式版本。 */
3
+ export function parseZentaoVersion(version) {
4
+ const match = typeof version === 'string' ? version.trim().match(/^(biz|max|ipd)?(\d+(?:\.\d+)*)$/i) : null;
5
+ const parts = match?.[2].split('.').map(Number);
6
+ if (!match || !parts?.every(Number.isSafeInteger)) {
7
+ throw new ZentaoError('E_INVALID_ZENTAO_VERSION', { version: String(version) });
8
+ }
9
+ return { edition: (match[1] ?? '').toLowerCase(), parts };
10
+ }
11
+ /** 注册和生成时共用,缺少版本、格式非法或同系列重复均拒绝。 */
12
+ export function validateMinVersion(value) {
13
+ try {
14
+ if (!Array.isArray(value) || value.length === 0)
15
+ throw new Error('minVersion must be a non-empty array.');
16
+ const editions = Array.from(value, version => parseZentaoVersion(version).edition);
17
+ if (new Set(editions).size !== editions.length)
18
+ throw new Error('Duplicate editions in minVersion.');
19
+ }
20
+ catch (error) {
21
+ throw new ZentaoError('E_INVALID_ACTION_DEFINITION', undefined, error);
22
+ }
23
+ }
24
+ /** 同系列逐段比较,缺少的数字段视为零;未列出的系列不支持。 */
25
+ export function supportsZentaoVersion(version, minimums) {
26
+ const minimum = minimums.map(parseZentaoVersion).find(item => item.edition === version.edition);
27
+ if (!minimum)
28
+ return false;
29
+ for (let index = 0; index < Math.max(version.parts.length, minimum.parts.length); index++) {
30
+ const difference = (version.parts[index] ?? 0) - (minimum.parts[index] ?? 0);
31
+ if (difference !== 0)
32
+ return difference > 0;
33
+ }
34
+ return true;
35
+ }
@@ -21,7 +21,8 @@ export interface DefineModulesOptions {
21
21
  *
22
22
  * @param input - 单个或一组模块定义。
23
23
  * @param options - 写入策略,参见 {@link DefineModulesOptions}。
24
- * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段。
24
+ * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段;
25
+ * `E_INVALID_ACTION_DEFINITION` —— 动作字段非法或 `minVersion` 缺失、为空、格式错误、系列重复。
25
26
  */
26
27
  export declare function defineModules(input: ModuleDefinition | ModuleDefinition[], options?: DefineModulesOptions): void;
27
28
  /**
@@ -34,7 +35,7 @@ export declare function defineModules(input: ModuleDefinition | ModuleDefinition
34
35
  * @param moduleName - 目标模块名(大小写不敏感)。
35
36
  * @param input - 单个或一组动作定义。
36
37
  * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION_DEFINITION`
37
- * (动作缺少 `name` / `path`,或 `method` / `resultType` 类型非法),或
38
+ * (动作缺少 `name` / `path`、`minVersion` 无效,或 `method` / `resultType` 类型非法),或
38
39
  * `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
39
40
  */
40
41
  export declare function defineModuleActions(moduleName: string, input: ModuleAction | ModuleAction[]): void;
@@ -52,7 +53,7 @@ export declare function defineModuleActions(moduleName: string, input: ModuleAct
52
53
  * @param actionName - 目标动作名(大小写不敏感)。
53
54
  * @param action - 深度合并的补丁对象,或接收当前动作深克隆并返回完整动作定义的函数。
54
55
  * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION`(动作不存在)、
55
- * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`,或 `method` / `resultType` 类型非法),
56
+ * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`、`minVersion` 无效,或 `method` / `resultType` 类型非法),
56
57
  * 或 `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
57
58
  */
58
59
  export declare function extendModuleAction(moduleName: string, actionName: string, action: Partial<ModuleAction> | ((action: ModuleAction) => ModuleAction)): void;
@@ -13,7 +13,8 @@ import { deepClone, deepMerge, findActionIndex, freezeAction, freezeModule, getM
13
13
  *
14
14
  * @param input - 单个或一组模块定义。
15
15
  * @param options - 写入策略,参见 {@link DefineModulesOptions}。
16
- * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段。
16
+ * @throws {ZentaoError} `E_INVALID_MODULE_DEFINITION` —— 缺少 `name` 或 `actions` 字段;
17
+ * `E_INVALID_ACTION_DEFINITION` —— 动作字段非法或 `minVersion` 缺失、为空、格式错误、系列重复。
17
18
  */
18
19
  export function defineModules(input, options = {}) {
19
20
  const modules = getModulesState();
@@ -42,7 +43,7 @@ export function defineModules(input, options = {}) {
42
43
  * @param moduleName - 目标模块名(大小写不敏感)。
43
44
  * @param input - 单个或一组动作定义。
44
45
  * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION_DEFINITION`
45
- * (动作缺少 `name` / `path`,或 `method` / `resultType` 类型非法),或
46
+ * (动作缺少 `name` / `path`、`minVersion` 无效,或 `method` / `resultType` 类型非法),或
46
47
  * `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
47
48
  */
48
49
  export function defineModuleActions(moduleName, input) {
@@ -84,7 +85,7 @@ export function defineModuleActions(moduleName, input) {
84
85
  * @param actionName - 目标动作名(大小写不敏感)。
85
86
  * @param action - 深度合并的补丁对象,或接收当前动作深克隆并返回完整动作定义的函数。
86
87
  * @throws {ZentaoError} `E_INVALID_MODULE`(模块未注册)、`E_INVALID_ACTION`(动作不存在)、
87
- * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`,或 `method` / `resultType` 类型非法),
88
+ * `E_INVALID_ACTION_DEFINITION`(合并结果缺少 `name` / `path`、`minVersion` 无效,或 `method` / `resultType` 类型非法),
88
89
  * 或 `E_INDETERMINATE_ACTION_METHOD` / `E_INDETERMINATE_ACTION_RESULT_TYPE`(省略字段且无法按 `type` 推导)。
89
90
  */
90
91
  export function extendModuleAction(moduleName, actionName, action) {