ice-render 2.1.0 → 2.2.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,68 @@
1
+ /**
2
+ * 引擎错误的**稳定错误码**。
3
+ *
4
+ * 为什么需要:引擎不做 i18n(词条归应用层),但引擎抛出的错误/告警是**用户可见**的
5
+ * (应用层常把它直接弹给用户)。如果只有一句中文 message,应用层要翻译就只能去匹配字符串 ——
6
+ * 那是必然失效的做法(改一个字就崩)。所以引擎给出:
7
+ *
8
+ * - `code`:稳定标识(`ICE_*`,永不变更语义),应用层据此映射到自己的语言包;
9
+ * - `message`:默认中文,仅作为「没有做映射时的兜底」,不是契约的一部分;
10
+ * - `details`:结构化补充(typeId、插件名、版本号等),便于拼装提示。
11
+ *
12
+ * ```ts
13
+ * import { getICEErrorCode, ICE_ERROR_CODES } from 'ice-render';
14
+ *
15
+ * try { ice.registerType('Badge', Badge); }
16
+ * catch (err) {
17
+ * if (getICEErrorCode(err) === ICE_ERROR_CODES.TYPE_ID_INVALID) {
18
+ * toast(t('error.typeIdFormat')); // 应用层自己的词条
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ export declare const ICE_ERROR_CODES: {
24
+ /** `typeId` 不符合 `namespace:Type` 格式。 */
25
+ readonly TYPE_ID_INVALID: "ICE_TYPE_ID_INVALID";
26
+ /** `registerType` 的第二个参数不是构造函数。 */
27
+ readonly TYPE_CTOR_INVALID: "ICE_TYPE_CTOR_INVALID";
28
+ /** 同一个 typeId 已经注册了**另一个**构造函数。 */
29
+ readonly TYPE_ID_CONFLICT: "ICE_TYPE_ID_CONFLICT";
30
+ /** 同一个构造函数已经注册了**另一个** typeId(反查会歧义)。 */
31
+ readonly TYPE_CTOR_CONFLICT: "ICE_TYPE_CTOR_CONFLICT";
32
+ /** `ICE.init()` 没有拿到可用的 canvas / ctx。 */
33
+ readonly INIT_TARGET_REQUIRED: "ICE_INIT_TARGET_REQUIRED";
34
+ /** 同一个 ICE 实例已经绑定到别的 canvas。 */
35
+ readonly INIT_ALREADY_BOUND: "ICE_INIT_ALREADY_BOUND";
36
+ /** `ICE.use(plugin)` 缺少插件名。 */
37
+ readonly PLUGIN_NAME_REQUIRED: "ICE_PLUGIN_NAME_REQUIRED";
38
+ /** 插件声明的组件类型注册失败(details.pluginName / details.cause)。 */
39
+ readonly PLUGIN_COMPONENT_REGISTER_FAILED: "ICE_PLUGIN_COMPONENT_REGISTER_FAILED";
40
+ /** 反序列化数据的 `version` 高于当前引擎支持的版本。 */
41
+ readonly DESERIALIZE_VERSION_UNSUPPORTED: "ICE_DESERIALIZE_VERSION_UNSUPPORTED";
42
+ /** 当前运行时没有可用的 `Image` 构造器。 */
43
+ readonly IMAGE_CONSTRUCTOR_MISSING: "ICE_IMAGE_CONSTRUCTOR_MISSING";
44
+ /** 当前运行时拿不到 2d 离屏上下文。 */
45
+ readonly OFFSCREEN_CONTEXT_UNSUPPORTED: "ICE_OFFSCREEN_CONTEXT_UNSUPPORTED";
46
+ /** 当前运行时没有可用的离屏 canvas。 */
47
+ readonly OFFSCREEN_CANVAS_UNSUPPORTED: "ICE_OFFSCREEN_CANVAS_UNSUPPORTED";
48
+ };
49
+ export type ICEErrorCode = (typeof ICE_ERROR_CODES)[keyof typeof ICE_ERROR_CODES];
50
+ export interface ICEErrorDetails {
51
+ [key: string]: unknown;
52
+ }
53
+ export type ICEError = Error & {
54
+ code: ICEErrorCode;
55
+ details?: ICEErrorDetails;
56
+ };
57
+ /**
58
+ * 构造带稳定错误码的 `Error`。
59
+ *
60
+ * @param code 稳定错误码(见 {@link ICE_ERROR_CODES})
61
+ * @param message 默认中文文案(兜底,不是契约)
62
+ * @param details 结构化补充信息
63
+ */
64
+ export declare function iceError(code: ICEErrorCode, message: string, details?: ICEErrorDetails): ICEError;
65
+ /** 取错误的 `ICE_*` 错误码;不是引擎错误时返回 `undefined`。 */
66
+ export declare function getICEErrorCode(err: unknown): ICEErrorCode | undefined;
67
+ /** 判断是否是指定错误码的引擎错误(不传 `code` 时只判断「是不是引擎错误」)。 */
68
+ export declare function isICEError(err: unknown, code?: ICEErrorCode): boolean;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 引擎错误的**稳定错误码**。
3
+ *
4
+ * 为什么需要:引擎不做 i18n(词条归应用层),但引擎抛出的错误/告警是**用户可见**的
5
+ * (应用层常把它直接弹给用户)。如果只有一句中文 message,应用层要翻译就只能去匹配字符串 ——
6
+ * 那是必然失效的做法(改一个字就崩)。所以引擎给出:
7
+ *
8
+ * - `code`:稳定标识(`ICE_*`,永不变更语义),应用层据此映射到自己的语言包;
9
+ * - `message`:默认中文,仅作为「没有做映射时的兜底」,不是契约的一部分;
10
+ * - `details`:结构化补充(typeId、插件名、版本号等),便于拼装提示。
11
+ *
12
+ * ```ts
13
+ * import { getICEErrorCode, ICE_ERROR_CODES } from 'ice-render';
14
+ *
15
+ * try { ice.registerType('Badge', Badge); }
16
+ * catch (err) {
17
+ * if (getICEErrorCode(err) === ICE_ERROR_CODES.TYPE_ID_INVALID) {
18
+ * toast(t('error.typeIdFormat')); // 应用层自己的词条
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ export declare const ICE_ERROR_CODES: {
24
+ /** `typeId` 不符合 `namespace:Type` 格式。 */
25
+ readonly TYPE_ID_INVALID: "ICE_TYPE_ID_INVALID";
26
+ /** `registerType` 的第二个参数不是构造函数。 */
27
+ readonly TYPE_CTOR_INVALID: "ICE_TYPE_CTOR_INVALID";
28
+ /** 同一个 typeId 已经注册了**另一个**构造函数。 */
29
+ readonly TYPE_ID_CONFLICT: "ICE_TYPE_ID_CONFLICT";
30
+ /** 同一个构造函数已经注册了**另一个** typeId(反查会歧义)。 */
31
+ readonly TYPE_CTOR_CONFLICT: "ICE_TYPE_CTOR_CONFLICT";
32
+ /** `ICE.init()` 没有拿到可用的 canvas / ctx。 */
33
+ readonly INIT_TARGET_REQUIRED: "ICE_INIT_TARGET_REQUIRED";
34
+ /** 同一个 ICE 实例已经绑定到别的 canvas。 */
35
+ readonly INIT_ALREADY_BOUND: "ICE_INIT_ALREADY_BOUND";
36
+ /** `ICE.use(plugin)` 缺少插件名。 */
37
+ readonly PLUGIN_NAME_REQUIRED: "ICE_PLUGIN_NAME_REQUIRED";
38
+ /** 插件声明的组件类型注册失败(details.pluginName / details.cause)。 */
39
+ readonly PLUGIN_COMPONENT_REGISTER_FAILED: "ICE_PLUGIN_COMPONENT_REGISTER_FAILED";
40
+ /** 反序列化数据的 `version` 高于当前引擎支持的版本。 */
41
+ readonly DESERIALIZE_VERSION_UNSUPPORTED: "ICE_DESERIALIZE_VERSION_UNSUPPORTED";
42
+ /** 当前运行时没有可用的 `Image` 构造器。 */
43
+ readonly IMAGE_CONSTRUCTOR_MISSING: "ICE_IMAGE_CONSTRUCTOR_MISSING";
44
+ /** 当前运行时拿不到 2d 离屏上下文。 */
45
+ readonly OFFSCREEN_CONTEXT_UNSUPPORTED: "ICE_OFFSCREEN_CONTEXT_UNSUPPORTED";
46
+ /** 当前运行时没有可用的离屏 canvas。 */
47
+ readonly OFFSCREEN_CANVAS_UNSUPPORTED: "ICE_OFFSCREEN_CANVAS_UNSUPPORTED";
48
+ };
49
+ export type ICEErrorCode = (typeof ICE_ERROR_CODES)[keyof typeof ICE_ERROR_CODES];
50
+ export interface ICEErrorDetails {
51
+ [key: string]: unknown;
52
+ }
53
+ export type ICEError = Error & {
54
+ code: ICEErrorCode;
55
+ details?: ICEErrorDetails;
56
+ };
57
+ /**
58
+ * 构造带稳定错误码的 `Error`。
59
+ *
60
+ * @param code 稳定错误码(见 {@link ICE_ERROR_CODES})
61
+ * @param message 默认中文文案(兜底,不是契约)
62
+ * @param details 结构化补充信息
63
+ */
64
+ export declare function iceError(code: ICEErrorCode, message: string, details?: ICEErrorDetails): ICEError;
65
+ /** 取错误的 `ICE_*` 错误码;不是引擎错误时返回 `undefined`。 */
66
+ export declare function getICEErrorCode(err: unknown): ICEErrorCode | undefined;
67
+ /** 判断是否是指定错误码的引擎错误(不传 `code` 时只判断「是不是引擎错误」)。 */
68
+ export declare function isICEError(err: unknown, code?: ICEErrorCode): boolean;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "author": "大漠穷秋",
3
3
  "name": "ice-render",
4
- "version": "2.1.0",
4
+ "version": "2.2.0",
5
5
  "description": "A canvas engine for interactive graphics.",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://gitee.com/ice-render/ice-render.git"
8
+ "url": "git+https://github.com/ice-render/ice-render.git"
9
9
  },
10
10
  "type": "commonjs",
11
11
  "module": "dist/index.mjs",