ttmg-pack 0.4.0 → 0.4.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/__TEST__/tests/fixtures/check-project/non-unity/src/game.js +1 -0
  3. package/__TEST__/tests/fixtures/check-project/non-unity/src/game.json +3 -0
  4. package/__TEST__/tests/fixtures/check-project/subpackages-camel-case/src/game.js +1 -0
  5. package/__TEST__/tests/fixtures/check-project/subpackages-camel-case/src/game.json +4 -0
  6. package/__TEST__/tests/fixtures/check-project/unity-large-config-disabled/src/game.js +1 -0
  7. package/__TEST__/tests/fixtures/check-project/unity-large-config-disabled/src/game.json +4 -0
  8. package/__TEST__/tests/fixtures/check-project/unity-large-config-disabled/src/webgl-wasm-split.json +3 -0
  9. package/__TEST__/tests/fixtures/check-project/unity-large-config-enabled/src/game.js +1 -0
  10. package/__TEST__/tests/fixtures/check-project/unity-large-config-enabled/src/game.json +4 -0
  11. package/__TEST__/tests/fixtures/check-project/unity-large-config-enabled/src/webgl-wasm-split.json +3 -0
  12. package/__TEST__/tests/fixtures/check-project/unity-large-no-config/src/game.js +1 -0
  13. package/__TEST__/tests/fixtures/check-project/unity-large-no-config/src/game.json +4 -0
  14. package/__TEST__/tests/fixtures/check-project/unity-small/src/game.js +1 -0
  15. package/__TEST__/tests/fixtures/check-project/unity-small/src/game.json +4 -0
  16. package/__TEST__/tests/fixtures/game-cocos/game.json +3 -0
  17. package/__TEST__/tests/fixtures/game-invalid-json/game.json +1 -0
  18. package/__TEST__/tests/fixtures/game-no-config/game.js +1 -0
  19. package/__TEST__/tests/fixtures/game-no-engine/game.json +3 -0
  20. package/__TEST__/tests/fixtures/game-unity/game.json +15 -0
  21. package/__TEST__/tests/libs/checkProject.test.js +68 -0
  22. package/__TEST__/tests/runner-simple.js +120 -0
  23. package/__TEST__/tests/runner.js +102 -0
  24. package/__TEST__/tests/utils/Deferred.test.js +69 -0
  25. package/__TEST__/tests/utils/asyncPool.test.js +48 -0
  26. package/__TEST__/tests/utils/getCheckConfig.test.js +24 -0
  27. package/__TEST__/tests/utils/getGameEngine.test.js +32 -0
  28. package/__TEST__/tests/utils/getIndependentPackagesConfig.test.js +27 -0
  29. package/__TEST__/tests/utils/getMd5.test.js +31 -0
  30. package/__TEST__/tests/utils/getSubpackagesConfig.test.js +26 -0
  31. package/__TEST__/tests/utils/unity.test.js +30 -0
  32. package/dist/index.js +362 -100
  33. package/dist/index.js.map +1 -1
  34. package/dist/libs/buildPkgs/index.d.ts +2 -2
  35. package/dist/libs/checkPkgs/checkAPI.d.ts +2 -1
  36. package/dist/libs/checkPkgs/checkIndependentPackages.d.ts +4 -2
  37. package/dist/libs/checkPkgs/checkMainpackage.d.ts +4 -3
  38. package/dist/libs/checkPkgs/checkProject.d.ts +4 -3
  39. package/dist/libs/checkPkgs/checkSubpackages.d.ts +2 -1
  40. package/dist/libs/checkPkgs/index.d.ts +2 -2
  41. package/dist/libs/debugPkgs/index.d.ts +2 -2
  42. package/dist/typings/index.d.ts +7 -0
  43. package/dist/utils/i18n.d.ts +158 -0
  44. package/dist/utils/index.d.ts +2 -0
  45. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import { BuildConfig } from '../../typings';
2
- export declare function buildPkgs(config: BuildConfig): Promise<void>;
1
+ import { BuildConfig, PackContext } from '../../typings';
2
+ export declare function buildPkgs(config: BuildConfig, context?: PackContext): Promise<void>;
@@ -1,4 +1,5 @@
1
1
  import { CheckAPIResult, BuildConfig } from '../../typings';
2
+ import type { Translate } from '../../utils';
2
3
  type CheckResult = Array<CheckAPIResult>;
3
- export declare function checkAPI(config: BuildConfig): CheckResult;
4
+ export declare function checkAPI(config: BuildConfig, t: Translate): CheckResult;
4
5
  export {};
@@ -1,9 +1,11 @@
1
+ import type { Translate } from '../../utils';
1
2
  import { BuildConfig, CheckConfigResult, CheckSizeResult } from '../../typings';
2
- export declare function checkIndependentPackages(config: BuildConfig): (CheckConfigResult | CheckSizeResult)[];
3
- export declare function checkPkgSize({ entryDir, limit, pkgName, dimension, level, }: {
3
+ export declare function checkIndependentPackages(config: BuildConfig, t: Translate): (CheckConfigResult | CheckSizeResult)[];
4
+ export declare function checkPkgSize({ entryDir, limit, pkgName, dimension, level, t, }: {
4
5
  entryDir: string;
5
6
  limit: number;
6
7
  pkgName: string;
7
8
  dimension: CheckSizeResult['dimension'];
8
9
  level: CheckSizeResult['level'];
10
+ t: Translate;
9
11
  }): CheckSizeResult;
@@ -1,9 +1,10 @@
1
1
  import { BuildConfig, CheckConfigResult, CheckSizeResult } from '../../typings';
2
+ import type { Translate } from '../../utils';
2
3
  /**
3
4
  * 检查主包大小是否超出限制
4
5
  * @param param0
5
6
  * @returns
6
7
  */
7
- export declare function checkMainPackageSize(config: BuildConfig): CheckSizeResult;
8
- export declare function checkMainPackageEntry(config: BuildConfig): CheckConfigResult;
9
- export declare function checkMainPackage(config: BuildConfig): (CheckConfigResult | CheckSizeResult)[];
8
+ export declare function checkMainPackageSize(config: BuildConfig, t: Translate): CheckSizeResult;
9
+ export declare function checkMainPackageEntry(config: BuildConfig, t: Translate): CheckConfigResult;
10
+ export declare function checkMainPackage(config: BuildConfig, t: Translate): (CheckConfigResult | CheckSizeResult)[];
@@ -1,9 +1,10 @@
1
1
  import { BuildConfig, CheckConfigResult, CheckSizeResult, CheckPerfResult } from '../../typings';
2
- export declare function checkProject(config: BuildConfig): (CheckConfigResult | CheckSizeResult | CheckPerfResult)[];
3
- export declare function checkGameJson(config: BuildConfig): CheckConfigResult;
2
+ import type { Translate } from '../../utils';
3
+ export declare function checkProject(config: BuildConfig, t: Translate): (CheckConfigResult | CheckSizeResult | CheckPerfResult)[];
4
+ export declare function checkGameJson(config: BuildConfig, t: Translate): CheckConfigResult;
4
5
  /**
5
6
  * 检查游戏大小是否超出限制
6
7
  * @param param0
7
8
  * @returns
8
9
  */
9
- export declare function checkProjectSize(config: BuildConfig): CheckSizeResult;
10
+ export declare function checkProjectSize(config: BuildConfig, t: Translate): CheckSizeResult;
@@ -1,2 +1,3 @@
1
+ import type { Translate } from '../../utils';
1
2
  import { CheckConfigResult, CheckSizeResult, BuildConfig } from '../../typings';
2
- export declare function checkSubpackages(config: BuildConfig): (CheckConfigResult | CheckSizeResult)[];
3
+ export declare function checkSubpackages(config: BuildConfig, t: Translate): (CheckConfigResult | CheckSizeResult)[];
@@ -1,2 +1,2 @@
1
- import { BuildConfig, CheckResult } from '../../typings';
2
- export declare function checkPkgs(config: BuildConfig): Promise<CheckResult[]>;
1
+ import { BuildConfig, CheckResult, PackContext } from '../../typings';
2
+ export declare function checkPkgs(config: BuildConfig, context?: PackContext): Promise<CheckResult[]>;
@@ -1,5 +1,5 @@
1
- import { BuildConfig, CheckResult, ProjectConfig } from '../../typings';
2
- export declare function debugPkgs(config: BuildConfig): Promise<{
1
+ import { BuildConfig, CheckResult, ProjectConfig, PackContext } from '../../typings';
2
+ export declare function debugPkgs(config: BuildConfig, context?: PackContext): Promise<{
3
3
  isSuccess: boolean;
4
4
  errorMsg?: string;
5
5
  packages?: ProjectConfig['packages'];
@@ -36,6 +36,10 @@ export interface BuildConfig {
36
36
  enableOdr: boolean;
37
37
  };
38
38
  }
39
+ export type PackLang = 'en-US' | 'zh-CN';
40
+ export interface PackContext {
41
+ lang?: PackLang;
42
+ }
39
43
  export interface CheckSizeResult {
40
44
  passed: boolean;
41
45
  msg: string;
@@ -43,6 +47,7 @@ export interface CheckSizeResult {
43
47
  level?: 'error' | 'warning' | 'info';
44
48
  size: number;
45
49
  name: string;
50
+ required: boolean;
46
51
  dimension: CheckDimension;
47
52
  }
48
53
  export interface CheckConfigResult {
@@ -52,6 +57,7 @@ export interface CheckConfigResult {
52
57
  level?: 'error' | 'warning' | 'info';
53
58
  file: string;
54
59
  name: string;
60
+ required: boolean;
55
61
  dimension: CheckDimension;
56
62
  }
57
63
  export type CheckDimension = 'subpackage' | 'independent_package' | 'main_package' | 'project';
@@ -82,5 +88,6 @@ export interface CheckPerfResult {
82
88
  type: 'performance';
83
89
  level?: 'error' | 'warning' | 'info';
84
90
  name: string;
91
+ required: boolean;
85
92
  dimension: CheckDimension;
86
93
  }
@@ -0,0 +1,158 @@
1
+ import type { PackLang } from '../typings';
2
+ type MessageParams = Record<string, string | number>;
3
+ declare const messages: {
4
+ readonly 'en-US': {
5
+ readonly 'log.check.start': "Start checking project.";
6
+ readonly 'log.check.project.start': "Start checking project dimension.";
7
+ readonly 'log.check.project.success': "Project checks passed.";
8
+ readonly 'log.check.config.start': "Start checking config.";
9
+ readonly 'log.check.projectSize.start': "Start checking project size.";
10
+ readonly 'log.check.subpackages.start': "Start checking subpackages in game.json.";
11
+ readonly 'log.check.subpackages.success': "Subpackages config checks passed.";
12
+ readonly 'log.check.mainPackage.start': "Start checking main package.";
13
+ readonly 'log.check.mainPackageEntry.start': "Start checking main package entry.";
14
+ readonly 'log.check.mainPackageEntry.success': "Main package entry check passed.";
15
+ readonly 'log.check.mainPackageSize.start': "Start checking main package size.";
16
+ readonly 'log.check.mainPackage.success': "Main package checks passed.";
17
+ readonly 'log.check.independent.start': "Start checking independent subpackages in game.json.";
18
+ readonly 'log.check.independent.success': "Independent subpackages config checks passed.";
19
+ readonly 'log.setup.startGeneratePackageConfig': "Start generating packageConfig.json from game.json.";
20
+ readonly 'log.setup.generatePackageConfigSuccess': "Generated packageConfig.json from game.json successfully.";
21
+ readonly 'log.collectMaps.start': "Start collecting JS files from game source packages.";
22
+ readonly 'log.collectMaps.openDataContextDir': "Open data context directory: {dir}";
23
+ readonly 'log.collectMaps.done': "Collected JS files from game source packages successfully.";
24
+ readonly 'log.makePkgs.start': "Pack start, startTime: {startTime}";
25
+ readonly 'log.makePkgs.startPackBySource': "Start packing from game source, package: {pkgName}";
26
+ readonly 'log.makePkgs.finishPackBySource': "Finished packing and partitioning from game source, package: {pkgName}";
27
+ readonly 'log.makePkgs.packBySourceCost': "Pack and partition cost, package: {pkgName}, duration: {duration}ms";
28
+ readonly 'log.makePkgs.startOpenData': "Start packing from open data context source.";
29
+ readonly 'log.makePkgs.finishOpenData': "Finished packing from open data context source.";
30
+ readonly 'log.makePkgs.openDataCost': "Open data context packing cost: {duration}ms";
31
+ readonly 'log.makePkgs.end': "Pack end, duration: {duration}ms";
32
+ readonly 'log.build.version': "TTMG_PACK_VERSION: {version}";
33
+ readonly 'log.build.start': "Pack start, startTime: {startTime}";
34
+ readonly 'log.build.end': "Pack end: {duration}ms";
35
+ readonly 'log.pack.start': "Pack start, startTime: {startTime}";
36
+ readonly 'log.pack.end': "Pack end, package: {pkgName}";
37
+ readonly 'log.safeBuild.initStart': "Attempting to initialize esbuild service...";
38
+ readonly 'log.safeBuild.initSuccess': "esbuild service initialized successfully.";
39
+ readonly 'log.safeBuild.initFailed': "Failed to initialize esbuild service:";
40
+ readonly 'log.cleanup.start': "Start cleaning useless files, total entries: {total}";
41
+ readonly 'log.cleanup.accessDirFailed': "Cannot access directory: {dir}, {error}";
42
+ readonly 'log.cleanup.deletedDir': "Deleted useless directory: {path}";
43
+ readonly 'log.cleanup.deletedFile': "Deleted useless file: {path}";
44
+ readonly 'log.cleanup.processFailed': "Cannot process entry: {path}, {error}";
45
+ readonly 'log.cleanup.progress': "Progress: {processed}/{total} ({percentage}%)";
46
+ readonly 'log.cleanup.done': "Cleanup finished.";
47
+ readonly 'log.cleanup.summary.total': "- Total entries: {total}";
48
+ readonly 'log.cleanup.summary.deletedDirs': "- Deleted directories: {deletedDirs}";
49
+ readonly 'log.cleanup.summary.deletedFiles': "- Deleted files: {deletedFiles}";
50
+ readonly 'log.cleanup.summary.errors': "- Errors: {errors}";
51
+ readonly 'check.project.gameJson.missing': "Cannot find game.json in the project source. Please make sure game.json exists.";
52
+ readonly 'check.project.gameJson.subPackagesInvalid': "'subPackages' is found in game.json. Please use 'subpackages' (all lowercase) instead.";
53
+ readonly 'check.project.gameJson.success': "Check game.json config successfully.";
54
+ readonly 'check.project.size.failed': "Project size check failed: {sizeMB}MB. It must not exceed {limitMB}MB.";
55
+ readonly 'check.project.size.success': "Project size check passed: {sizeMB}MB.";
56
+ readonly 'check.project.perf.noSplitNeeded': "wasmFuncCount < {limit}. No wasm code splitting is needed.";
57
+ readonly 'check.project.perf.needSplit': "The Wasm function count in wasmcode/ exceeds {limit}. Please enable code splitting to optimize performance.";
58
+ readonly 'check.project.perf.splitEnabled': "wasmFuncCount >= {limit}, and wasm split is enabled.";
59
+ readonly 'check.main.size.failed': "Main package size check failed: {sizeMB}MB. It must not exceed {limitMB}MB.";
60
+ readonly 'check.main.size.success': "Main package size check passed: {sizeMB}MB.";
61
+ readonly 'check.main.entry.missing': "Main package entry check failed: game.js must exist in the main package.";
62
+ readonly 'check.main.entry.success': "Main package entry check passed: game.js exists in the main package.";
63
+ readonly 'check.subpackages.config.empty': "Subpackages config check failed: one or more subpackages have an empty root or name. Please ensure every subpackage has non-empty root and name.";
64
+ readonly 'check.subpackages.config.invalidPath': "Subpackages config check failed: subpackage<{name}> has invalid {invalidFields}. Only A-Za-z0-9 _ - . / \\ are allowed.";
65
+ readonly 'check.subpackages.config.success': "Subpackage<{name}> config check passed.";
66
+ readonly 'check.subpackages.config.missingDir': "Subpackages config check failed: cannot find entry directory for subpackage<{name}>. Please verify its root path in game.json.";
67
+ readonly 'check.independent.config.empty': "Independent subpackages config check failed: one or more independent subpackages have an empty root or name. Please ensure every independent subpackage has non-empty root and name.";
68
+ readonly 'check.independent.config.missingDir': "Independent subpackages config check failed: cannot find entry directory for independent subpackage<{name}>. Please verify its root path in game.json.";
69
+ readonly 'check.independent.config.success': "Independent subpackage<{name}> config check passed.";
70
+ readonly 'check.pkgSize.success': "Package<{pkgName}> size check passed: {sizeMB}MB.";
71
+ readonly 'check.pkgSize.exceeds': "Package<{pkgName}> size check failed: {sizeMB}MB exceeds limit {limitMB}MB.";
72
+ readonly 'check.api.integrated': "{name} integrated.";
73
+ readonly 'check.api.notIntegrated': "{name} not integrated.";
74
+ readonly 'check.api.suggestedActionSuffix': "Please resolve this before submission to avoid review rejection.";
75
+ readonly 'debug.validation.failed': "Project validation failed (Errors):\n{errorMsg}";
76
+ };
77
+ readonly 'zh-CN': {
78
+ readonly 'log.check.start': "开始校验项目。";
79
+ readonly 'log.check.project.start': "开始校验项目维度。";
80
+ readonly 'log.check.project.success': "项目校验通过。";
81
+ readonly 'log.check.config.start': "开始校验配置。";
82
+ readonly 'log.check.projectSize.start': "开始校验项目大小。";
83
+ readonly 'log.check.subpackages.start': "开始校验 game.json 中的分包配置。";
84
+ readonly 'log.check.subpackages.success': "分包配置校验通过。";
85
+ readonly 'log.check.mainPackage.start': "开始校验主包。";
86
+ readonly 'log.check.mainPackageEntry.start': "开始校验主包入口。";
87
+ readonly 'log.check.mainPackageEntry.success': "主包入口校验通过。";
88
+ readonly 'log.check.mainPackageSize.start': "开始校验主包大小。";
89
+ readonly 'log.check.mainPackage.success': "主包校验通过。";
90
+ readonly 'log.check.independent.start': "开始校验 game.json 中的独立分包配置。";
91
+ readonly 'log.check.independent.success': "独立分包配置校验通过。";
92
+ readonly 'log.setup.startGeneratePackageConfig': "开始基于源代码中的 game.json 生成 packageConfig.json。";
93
+ readonly 'log.setup.generatePackageConfigSuccess': "基于源代码中的 game.json 生成 packageConfig.json 成功。";
94
+ readonly 'log.collectMaps.start': "开始基于游戏源代码收集分包中的 JS 文件。";
95
+ readonly 'log.collectMaps.openDataContextDir': "开放数据域目录:{dir}";
96
+ readonly 'log.collectMaps.done': "基于游戏源代码收集分包中的 JS 文件完成。";
97
+ readonly 'log.makePkgs.start': "打包开始,开始时间:{startTime}";
98
+ readonly 'log.makePkgs.startPackBySource': "开始基于游戏源代码打包,包名:{pkgName}";
99
+ readonly 'log.makePkgs.finishPackBySource': "基于游戏源代码打包分包完成,包名:{pkgName}";
100
+ readonly 'log.makePkgs.packBySourceCost': "基于游戏源代码打包分包耗时,包名:{pkgName},耗时:{duration}ms";
101
+ readonly 'log.makePkgs.startOpenData': "开始基于开放数据域源代码打包。";
102
+ readonly 'log.makePkgs.finishOpenData': "基于开放数据域源代码打包完成。";
103
+ readonly 'log.makePkgs.openDataCost': "基于开放数据域源代码打包耗时,耗时:{duration}ms";
104
+ readonly 'log.makePkgs.end': "打包结束,总耗时:{duration}ms";
105
+ readonly 'log.build.version': "TTMG_PACK_VERSION: {version}";
106
+ readonly 'log.build.start': "打包开始,开始时间:{startTime}";
107
+ readonly 'log.build.end': "打包结束:{duration}ms";
108
+ readonly 'log.pack.start': "打包开始,开始时间:{startTime}";
109
+ readonly 'log.pack.end': "打包结束,包名:{pkgName}";
110
+ readonly 'log.safeBuild.initStart': "尝试初始化 esbuild 服务...";
111
+ readonly 'log.safeBuild.initSuccess': "esbuild 服务初始化成功。";
112
+ readonly 'log.safeBuild.initFailed': "初始化 esbuild 服务失败:";
113
+ readonly 'log.cleanup.start': "开始清理无用文件,共 {total} 个条目";
114
+ readonly 'log.cleanup.accessDirFailed': "无法访问目录: {dir}, {error}";
115
+ readonly 'log.cleanup.deletedDir': "已删除无用目录: {path}";
116
+ readonly 'log.cleanup.deletedFile': "已删除无用文件: {path}";
117
+ readonly 'log.cleanup.processFailed': "无法处理: {path}, {error}";
118
+ readonly 'log.cleanup.progress': "进度: {processed}/{total} ({percentage}%)";
119
+ readonly 'log.cleanup.done': "清理完成!";
120
+ readonly 'log.cleanup.summary.total': "- 总条目: {total}";
121
+ readonly 'log.cleanup.summary.deletedDirs': "- 已删除目录: {deletedDirs}";
122
+ readonly 'log.cleanup.summary.deletedFiles': "- 已删除文件: {deletedFiles}";
123
+ readonly 'log.cleanup.summary.errors': "- 错误数: {errors}";
124
+ readonly 'check.project.gameJson.missing': "未在项目源码中找到 game.json,请确认 game.json 文件存在。";
125
+ readonly 'check.project.gameJson.subPackagesInvalid': "在 game.json 中发现了 'subPackages' 字段,请改为全小写的 'subpackages'。";
126
+ readonly 'check.project.gameJson.success': "game.json 配置检查通过。";
127
+ readonly 'check.project.size.failed': "项目大小检查失败:当前 {sizeMB}MB,不能超过 {limitMB}MB。";
128
+ readonly 'check.project.size.success': "项目大小检查通过:当前 {sizeMB}MB。";
129
+ readonly 'check.project.perf.noSplitNeeded': "wasmFuncCount < {limit},无需进行 wasm 代码拆分。";
130
+ readonly 'check.project.perf.needSplit': "wasmcode/ 中的 Wasm 函数数量超过 {limit},请开启代码拆分以优化性能。";
131
+ readonly 'check.project.perf.splitEnabled': "wasmFuncCount >= {limit},且已开启 wasm 拆分。";
132
+ readonly 'check.main.size.failed': "主包大小检查失败:当前 {sizeMB}MB,不能超过 {limitMB}MB。";
133
+ readonly 'check.main.size.success': "主包大小检查通过:当前 {sizeMB}MB。";
134
+ readonly 'check.main.entry.missing': "主包入口检查失败:主包中必须存在 game.js。";
135
+ readonly 'check.main.entry.success': "主包入口检查通过:主包中存在 game.js。";
136
+ readonly 'check.subpackages.config.empty': "分包配置检查失败:一个或多个分包的 root 或 name 为空,请确保所有分包都配置了非空的 root 和 name。";
137
+ readonly 'check.subpackages.config.invalidPath': "分包配置检查失败:分包<{name}> 的 {invalidFields} 含有非法字符,仅允许 A-Za-z0-9 _ - . / \\。";
138
+ readonly 'check.subpackages.config.success': "分包<{name}> 配置检查通过。";
139
+ readonly 'check.subpackages.config.missingDir': "分包配置检查失败:找不到分包<{name}> 的入口目录,请检查 game.json 中的 root 路径。";
140
+ readonly 'check.independent.config.empty': "独立分包配置检查失败:一个或多个独立分包的 root 或 name 为空,请确保所有独立分包都配置了非空的 root 和 name。";
141
+ readonly 'check.independent.config.missingDir': "独立分包配置检查失败:找不到独立分包<{name}> 的入口目录,请检查 game.json 中的 root 路径。";
142
+ readonly 'check.independent.config.success': "独立分包<{name}> 配置检查通过。";
143
+ readonly 'check.pkgSize.success': "包<{pkgName}> 大小检查通过:{sizeMB}MB。";
144
+ readonly 'check.pkgSize.exceeds': "包<{pkgName}> 大小检查失败:当前 {sizeMB}MB,超过限制 {limitMB}MB。";
145
+ readonly 'check.api.integrated': "{name} 已接入。";
146
+ readonly 'check.api.notIntegrated': "{name} 未接入。";
147
+ readonly 'check.api.suggestedActionSuffix': "请在提审之前完成问题处理,避免审核阶段被拒审。";
148
+ readonly 'debug.validation.failed': "项目校验失败(错误项):\n{errorMsg}";
149
+ };
150
+ };
151
+ export type PackMessageKey = keyof typeof messages['en-US'];
152
+ export type Translate = (key: PackMessageKey, params?: MessageParams) => string;
153
+ export declare function resolvePackLanguage(lang?: string): PackLang;
154
+ export declare function setPackRuntimeLanguage(lang?: string): void;
155
+ export declare function getPackRuntimeLanguage(): PackLang;
156
+ export declare function createPackTranslator(lang?: string): Translate;
157
+ export declare function getPackTranslator(): Translate;
158
+ export {};
@@ -24,3 +24,5 @@ export { assertSyntax } from './assertSyntax';
24
24
  export { getWasmBrCodePath, getWasmBrCodeMd5, isUnityEngine, hasWasmBrCode, } from './unity';
25
25
  export { getCheckConfig } from './getCheckConfig';
26
26
  export { copyDirectory } from './cpDir';
27
+ export { createPackTranslator, getPackTranslator, setPackRuntimeLanguage, getPackRuntimeLanguage, resolvePackLanguage, } from './i18n';
28
+ export type { PackMessageKey, Translate, } from './i18n';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ttmg-pack",
3
3
  "author": "ttmg",
4
- "version": "0.4.0",
4
+ "version": "0.4.3",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {