ttmg-pack 0.2.8-unity.1 → 0.2.9

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/CHANGELOG.md CHANGED
@@ -284,6 +284,7 @@ remove useless log
284
284
  调整 esbuild 构建目标为 es2015,避免部分语法不符合预期
285
285
 
286
286
  ## 0.1.8-beta.1
287
+
287
288
  导出 unity 相关函数
288
289
 
289
290
  ## 0.1.9
@@ -307,6 +308,7 @@ fix: 修复 esbuild 构建编码问题
307
308
  补充对 分包名称名称为中文类型字符的校验支持,避免打包失败
308
309
 
309
310
  ## 0.2.3
311
+
310
312
  esbuild 构建目标调整为 es2020,避免部分语法不符合预期,和安卓 vmsdk 支持最低版本保持一致
311
313
 
312
314
  ## 0.2.4
@@ -326,3 +328,9 @@ esbuild 构建目标调整为 es2020,避免部分语法不符合预期,和
326
328
  修复 open data context 代码丢失问题,彻底修复
327
329
  调整 esbuild 构建目标为 esnext,避免部分语法不符合预期
328
330
 
331
+ ## 0.2.8
332
+
333
+ 支持 unity 游戏引擎,支持包体个性化校验 60MB
334
+
335
+ ## 0.2.9
336
+ 本地调试代码预检查校验适配 unity 包大小限制
@@ -34,3 +34,20 @@ export declare const PACKAGE_TYPE: {
34
34
  export declare const GAME_ENGINES: {
35
35
  UNITY: string;
36
36
  };
37
+ export declare const TTMG_TEMP_DIR = "__TTMG_TEMP__";
38
+ export declare const USELESS_DIRS: string[];
39
+ export declare const USELESS_FILES: string[];
40
+ export declare const GAME_PKG_SIZE_LIMIT: {
41
+ common: {
42
+ project: number;
43
+ main: number;
44
+ sub: any;
45
+ independent: number;
46
+ };
47
+ unity: {
48
+ project: number;
49
+ main: any;
50
+ sub: any;
51
+ independent: any;
52
+ };
53
+ };
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { buildPkgs, debugPkgs, buildOdrPkgs, writeOdrConfig, checkPkgs, getPkgs, } from './libs';
2
+ export { TTMG_TEMP_DIR } from './constants';
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * ==========================================
3
3
  * @Description: ttmg pack
4
- * @Version: 0.2.8-unity.1
4
+ * @Version: 0.2.9
5
5
  * @Author: zhanghongyang.mocha
6
- * @Date: 2025-12-10 13:44:38
6
+ * @Date: 2026-01-19 15:29:08
7
7
  * ==========================================
8
8
  */
9
9
  'use strict';
@@ -146,31 +146,92 @@ const PACKAGE_TYPE = {
146
146
  IndependentPackage: 'independent_package',
147
147
  MainPackage: 'main_package',
148
148
  };
149
+ const TTMG_TEMP_DIR = '__TTMG_TEMP__';
150
+ const USELESS_DIRS = ['node_modules', '__MACOSX', TTMG_TEMP_DIR];
151
+ const USELESS_FILES = ['.DS_Store', 'Thumbs.db'];
152
+ const GAME_PKG_SIZE_LIMIT = {
153
+ unity: {
154
+ project: 60 * 1024 * 1024,
155
+ main: null,
156
+ independent: null,
157
+ },
158
+ };
149
159
 
150
- // 递归统计目录下所有文件的大小,支持我过滤某些文件夹
151
- function getDirSizeSync({ rootDir, entryDir, filterDirs, }) {
160
+ /**
161
+ * 递归统计目录下所有文件的大小,支持过滤文件夹和文件
162
+ */
163
+ function getDirSizeSync(options) {
164
+ const { rootDir, entryDir, filterDirs = USELESS_DIRS, filterFiles = USELESS_FILES, filterPatterns = [], filterRegex = [], } = options;
152
165
  let totalSize = 0;
153
- if (!fs.existsSync(entryDir))
166
+ // 检查目录是否存在
167
+ if (!fs.existsSync(entryDir)) {
154
168
  return 0;
155
- const entries = fs.readdirSync(entryDir, { withFileTypes: true });
156
- for (const entry of entries) {
157
- const fullPath = path.join(entryDir, entry.name);
158
- if (entry.isDirectory()) {
159
- /**
160
- * 基于 rootDir 算出 fullPath 的相对路径
161
- */
162
- const relativePath = path.relative(rootDir, fullPath).replace(/\\/g, '/');
163
- if (!filterDirs.includes(relativePath)) {
164
- totalSize += getDirSizeSync({
165
- entryDir: fullPath,
166
- filterDirs,
167
- rootDir,
168
- });
169
+ }
170
+ // 将通配符模式转换为正则表达式
171
+ const patternRegexes = filterPatterns.map(pattern => {
172
+ const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
173
+ const regexStr = escaped.replace(/\\\*/g, '.*').replace(/\\\?/g, '.');
174
+ return new RegExp(`^${regexStr}$`);
175
+ });
176
+ // 合并所有正则表达式
177
+ const allRegexes = [...patternRegexes, ...filterRegex];
178
+ // 检查是否应该忽略当前条目
179
+ const shouldIgnore = (name, isDirectory) => {
180
+ // 1. 检查精确匹配
181
+ if (isDirectory && filterDirs.includes(name)) {
182
+ return true;
183
+ }
184
+ if (!isDirectory && filterFiles.includes(name)) {
185
+ return true;
186
+ }
187
+ // 2. 检查相对路径匹配(针对目录)
188
+ if (isDirectory) {
189
+ const relativePath = path
190
+ .relative(rootDir, path.join(entryDir, name))
191
+ .replace(/\\/g, '/');
192
+ if (filterDirs.includes(relativePath)) {
193
+ return true;
169
194
  }
170
195
  }
171
- else if (entry.isFile()) {
172
- totalSize += fs.statSync(fullPath).size;
196
+ // 3. 检查正则表达式匹配
197
+ if (allRegexes.some(regex => regex.test(name))) {
198
+ return true;
173
199
  }
200
+ return false;
201
+ };
202
+ try {
203
+ const entries = fs.readdirSync(entryDir, { withFileTypes: true });
204
+ for (const entry of entries) {
205
+ const fullPath = path.join(entryDir, entry.name);
206
+ try {
207
+ if (entry.isDirectory()) {
208
+ // 检查是否应该忽略此目录
209
+ if (!shouldIgnore(entry.name, true)) {
210
+ totalSize += getDirSizeSync({
211
+ rootDir,
212
+ entryDir: fullPath,
213
+ filterDirs,
214
+ filterFiles,
215
+ filterPatterns,
216
+ filterRegex,
217
+ });
218
+ }
219
+ }
220
+ else if (entry.isFile()) {
221
+ // 检查是否应该忽略此文件
222
+ if (!shouldIgnore(entry.name, false)) {
223
+ totalSize += fs.statSync(fullPath).size;
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ // 跳过无法访问的文件/目录
229
+ console.warn(`无法访问: ${fullPath}`, err.message);
230
+ }
231
+ }
232
+ }
233
+ catch (err) {
234
+ console.warn(`无法读取目录: ${entryDir}`, err.message);
174
235
  }
175
236
  return totalSize;
176
237
  }
@@ -216,52 +277,69 @@ function deleteNoJsFilesSync(dir) {
216
277
  }
217
278
  }
218
279
 
219
- const uselessDirs = ['node_modules', '__MACOSX'];
220
280
  const uselessFiles = ['.DS_Store', 'Thumbs.db'];
221
- function removeSystemUseless(gameEntry) {
222
- /**
223
- * 递归删除目录下的无用文件夹和无用文件
224
- */
225
- function removeUselessDirs(dir) {
226
- let files;
281
+ function removeSystemUseless(gameEntry, uselessDirs) {
282
+ const progress = {
283
+ total: 0,
284
+ processed: 0,
285
+ deletedDirs: 0,
286
+ deletedFiles: 0,
287
+ errors: 0,
288
+ };
289
+ // 1. 读取目录
290
+ let files;
291
+ try {
292
+ files = fs.readdirSync(gameEntry);
293
+ progress.total = files.length;
294
+ logger.info(`开始清理无用文件,共 ${progress.total} 个条目`);
295
+ }
296
+ catch (err) {
297
+ logger.warn(`无法访问目录: ${gameEntry}, ${err.message}`);
298
+ progress.errors++;
299
+ return progress;
300
+ }
301
+ // 2. 处理每个条目
302
+ files.forEach((file, index) => {
303
+ const filePath = path.join(gameEntry, file);
227
304
  try {
228
- files = fs.readdirSync(dir);
305
+ const stat = fs.statSync(filePath);
306
+ if (stat.isDirectory() && uselessDirs.includes(file)) {
307
+ // 删除无用目录
308
+ logger.debug(`正在删除目录: ${filePath}`);
309
+ fs.rmSync(filePath, { recursive: true, force: true });
310
+ progress.deletedDirs++;
311
+ logger.info(`✅ 已删除无用目录: ${filePath}`);
312
+ }
313
+ else if (stat.isFile() && uselessFiles.includes(file)) {
314
+ // 删除无用文件
315
+ logger.debug(`正在删除文件: ${filePath}`);
316
+ fs.rmSync(filePath, { force: true });
317
+ progress.deletedFiles++;
318
+ logger.info(`✅ 已删除无用文件: ${filePath}`);
319
+ }
320
+ else {
321
+ logger.debug(`跳过: ${filePath} (非目标文件/目录)`);
322
+ }
229
323
  }
230
324
  catch (err) {
231
- // 目录不可访问,跳过
232
- logger.warn(`无法访问目录: ${dir}, ${err.message}`);
233
- return;
325
+ logger.warn(`❌ 无法处理: ${filePath}, ${err.message}`);
326
+ progress.errors++;
234
327
  }
235
- files.forEach(file => {
236
- const filePath = path.join(dir, file);
237
- try {
238
- const stat = fs.statSync(filePath);
239
- if (stat.isDirectory()) {
240
- if (uselessDirs.includes(file)) {
241
- // 删除无用目录
242
- fs.rmSync(filePath, { recursive: true, force: true });
243
- logger.info(`已删除无用目录: ${filePath}`);
244
- }
245
- else {
246
- // 递归处理子目录
247
- removeUselessDirs(filePath);
248
- }
249
- }
250
- else if (stat.isFile()) {
251
- if (uselessFiles.includes(file)) {
252
- // 删除无用文件
253
- fs.rmSync(filePath, { force: true });
254
- logger.info(`已删除无用文件: ${filePath}`);
255
- }
256
- }
257
- }
258
- catch (err) {
259
- // 某个文件/目录不可访问,跳过
260
- logger.warn(`无法处理: ${filePath}, ${err.message}`);
261
- }
262
- });
263
- }
264
- removeUselessDirs(gameEntry);
328
+ // 更新进度
329
+ progress.processed = index + 1;
330
+ // 可选:每处理10个条目输出一次进度
331
+ if ((index + 1) % 10 === 0 || index + 1 === progress.total) {
332
+ const percentage = Math.round(((index + 1) / progress.total) * 100);
333
+ logger.info(`进度: ${index + 1}/${progress.total} (${percentage}%)`);
334
+ }
335
+ });
336
+ // 3. 输出总结
337
+ logger.info(`清理完成!`);
338
+ logger.info(`- 总条目: ${progress.total}`);
339
+ logger.info(`- 已删除目录: ${progress.deletedDirs}`);
340
+ logger.info(`- 已删除文件: ${progress.deletedFiles}`);
341
+ logger.info(`- 错误数: ${progress.errors}`);
342
+ return progress;
265
343
  }
266
344
 
267
345
  async function asyncPool$1(poolLimit, array, iteratorFn) {
@@ -315,7 +393,7 @@ function getMainPkgSize({ entryDir }) {
315
393
  return getDirSizeSync({
316
394
  rootDir: entryDir,
317
395
  entryDir,
318
- filterDirs: getSubpackagesRoots(entryDir),
396
+ filterDirs: [...getSubpackagesRoots(entryDir), ...USELESS_DIRS],
319
397
  });
320
398
  }
321
399
  function getSubpackagesRoots(entryDir) {
@@ -339,7 +417,6 @@ function getProjectSize({ entryDir }) {
339
417
  return getDirSizeSync({
340
418
  rootDir: entryDir,
341
419
  entryDir,
342
- filterDirs: [],
343
420
  });
344
421
  }
345
422
 
@@ -362,58 +439,6 @@ function getGameEngine(gameEntry) {
362
439
  }
363
440
  }
364
441
 
365
- function isUnityEngine(gameEntry) {
366
- return getGameEngine(gameEntry) === 'unity';
367
- }
368
-
369
- function getWasmBrCodePath({ entryDir, }) {
370
- if (!isUnityEngine(entryDir)) {
371
- return '';
372
- }
373
- else {
374
- /**
375
- * 检查项目下存在一个名为 wasmcode 的文件夹,且文件夹下存在一个文件后缀为 .webgl.wasm.code.unityweb.wasm.br 的文件。,如果满足条件,就展示 true,否则 返回 false
376
- */
377
- const wasmCodeDir = path.join(entryDir, 'wasmcode');
378
- if (!fs.existsSync(wasmCodeDir)) {
379
- return '';
380
- }
381
- const wasmBrFiles = fs.readdirSync(wasmCodeDir).filter(file => file.endsWith('.webgl.wasm.code.unityweb.wasm.br'));
382
- if (wasmBrFiles.length === 0) {
383
- return '';
384
- }
385
- else {
386
- return path.relative(entryDir, path.join(wasmCodeDir, wasmBrFiles[0]));
387
- }
388
- }
389
- }
390
-
391
- function getWasmBrCodeMd5({ entryDir }) {
392
- // originalWasmMd5
393
- try {
394
- const gameConfig = JSON.parse(fs.readFileSync(path.join(entryDir, 'game.json'), 'utf-8'));
395
- return gameConfig.originalWasmMd5 || '';
396
- }
397
- catch (_a) {
398
- return '';
399
- }
400
- }
401
-
402
- // 面向高鹏编程 😢
403
- /**
404
- * 覆盖配置,根据游戏引擎类型,设置主包和独立子包的大小限制
405
- * @param entryDir 游戏项目入口目录
406
- * @param config 原始构建配置
407
- * @returns 覆盖后的构建配置
408
- */
409
- function overrideConfig(entryDir, config) {
410
- var _a, _b;
411
- const isUnity = isUnityEngine(entryDir);
412
- return Object.assign(Object.assign({}, config), { build: Object.assign(Object.assign({}, config.build), { mainPkgSizeLimit: !isUnity ? (_a = config.build) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit : null, independentSubPkgSizeLimit: !isUnity
413
- ? (_b = config.build) === null || _b === void 0 ? void 0 : _b.independentSubPkgSizeLimit
414
- : null }) });
415
- }
416
-
417
442
  let initializePromise = null;
418
443
  /**
419
444
  * 确保一个异步函数在整个应用生命周期内只被执行一次。
@@ -534,6 +559,64 @@ async function genOpenDataContext(entryPath) {
534
559
  return jsCode;
535
560
  }
536
561
 
562
+ function isUnityEngine(gameEntry) {
563
+ return getGameEngine(gameEntry) === 'unity';
564
+ }
565
+
566
+ function getWasmBrCodePath({ entryDir, }) {
567
+ if (!isUnityEngine(entryDir)) {
568
+ return '';
569
+ }
570
+ else {
571
+ /**
572
+ * 检查项目下存在一个名为 wasmcode 的文件夹,且文件夹下存在一个文件后缀为 .webgl.wasm.code.unityweb.wasm.br 的文件。,如果满足条件,就展示 true,否则 返回 false
573
+ */
574
+ const wasmCodeDir = path.join(entryDir, 'wasmcode');
575
+ if (!fs.existsSync(wasmCodeDir)) {
576
+ return '';
577
+ }
578
+ const wasmBrFiles = fs.readdirSync(wasmCodeDir).filter(file => file.endsWith('.webgl.wasm.code.unityweb.wasm.br'));
579
+ if (wasmBrFiles.length === 0) {
580
+ return '';
581
+ }
582
+ else {
583
+ return path.relative(entryDir, path.join(wasmCodeDir, wasmBrFiles[0]));
584
+ }
585
+ }
586
+ }
587
+
588
+ function getWasmBrCodeMd5({ entryDir }) {
589
+ // originalWasmMd5
590
+ try {
591
+ const gameConfig = JSON.parse(fs.readFileSync(path.join(entryDir, 'game.json'), 'utf-8'));
592
+ return gameConfig.originalWasmMd5 || '';
593
+ }
594
+ catch (_a) {
595
+ return '';
596
+ }
597
+ }
598
+
599
+ function getUnityBuildConfig() {
600
+ return {
601
+ pkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.project,
602
+ mainPkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.main,
603
+ independentSubPkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.independent,
604
+ };
605
+ }
606
+
607
+ function getCheckConfig(config) {
608
+ if (isUnityEngine(config.entry)) {
609
+ return getUnityBuildConfig();
610
+ }
611
+ else {
612
+ return {
613
+ pkgSizeLimit: 30 * 1024 * 1024,
614
+ mainPkgSizeLimit: 4 * 1024 * 1024,
615
+ independentSubPkgSizeLimit: 4 * 1024 * 1024,
616
+ };
617
+ }
618
+ }
619
+
537
620
  /**
538
621
  * 将 packageConfig packages 中 分拆的包 配置迁移到 odr_packages 中
539
622
  */
@@ -830,7 +913,8 @@ function checkGameJson(entryDir, config) {
830
913
  */
831
914
  function checkProjectSize(entryDir, config) {
832
915
  logger.info('start check project size');
833
- const { build: { pkgSizeLimit }, dev, } = config;
916
+ const { dev } = config;
917
+ const { pkgSizeLimit } = getCheckConfig(config);
834
918
  const enableDev = dev === null || dev === void 0 ? void 0 : dev.enable;
835
919
  const gameSize = getProjectSize({ entryDir });
836
920
  const gameSizeMB = (gameSize / (1024 * 1024)).toFixed(2);
@@ -867,11 +951,12 @@ const defaultCheckConfig$2 = {
867
951
  */
868
952
  function checkMainPackageSize({ entryDir, config, }) {
869
953
  logger.info('start check main package size');
870
- const { build, dev } = config;
954
+ const { dev } = config;
955
+ const { mainPkgSizeLimit } = getCheckConfig(config);
871
956
  const mainPkgSize = getMainPkgSize({ entryDir });
872
957
  const mainPkgSizeMB = (mainPkgSize / (1024 * 1024)).toFixed(2);
873
- const limitMB = (build.mainPkgSizeLimit / (1024 * 1024)).toFixed(2);
874
- if (mainPkgSize > build.mainPkgSizeLimit) {
958
+ const limitMB = (mainPkgSizeLimit / (1024 * 1024)).toFixed(2);
959
+ if (mainPkgSize > mainPkgSizeLimit) {
875
960
  const errMsg = `Check main package size failed, main package size ${mainPkgSizeMB}MB, must not exceed ${limitMB}MB`;
876
961
  logger.error(errMsg);
877
962
  if (dev === null || dev === void 0 ? void 0 : dev.enable) {
@@ -912,10 +997,7 @@ function checkMainPackage(entryDir, config) {
912
997
  entryDir,
913
998
  config,
914
999
  }));
915
- /**
916
- * 检查主包大小是否超出限制, 仅对非unity工程生效
917
- */
918
- if (!isUnityEngine(entryDir) && ((_a = config.build) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit)) {
1000
+ if ((_a = getCheckConfig(config)) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit) {
919
1001
  checkResults.push(checkMainPackageSize({
920
1002
  entryDir,
921
1003
  config,
@@ -1014,7 +1096,6 @@ function checkIndependentPackages(entryDir, config) {
1014
1096
  logger.info('start check independent subpackages in game.json');
1015
1097
  const independentSubpackages = getIndependentPackagesConfig(entryDir);
1016
1098
  independentSubpackages.forEach(sub => {
1017
- var _a;
1018
1099
  /**
1019
1100
  * 校验 independent subpackage 配置是否为空
1020
1101
  */
@@ -1061,8 +1142,8 @@ function checkIndependentPackages(entryDir, config) {
1061
1142
  /**
1062
1143
  * 校验 independent subpackage 包大小,不做校验
1063
1144
  */
1064
- const independentSubPkgSizeLimit = (_a = config === null || config === void 0 ? void 0 : config.build) === null || _a === void 0 ? void 0 : _a.independentSubPkgSizeLimit;
1065
- if (!isUnityEngine(entryDir) && independentSubPkgSizeLimit) {
1145
+ const { independentSubPkgSizeLimit } = getCheckConfig(config);
1146
+ if (independentSubPkgSizeLimit) {
1066
1147
  const checkSizeResult = checkPkgSize({
1067
1148
  entryDir: subpackageEntryDir,
1068
1149
  pkgName: sub.name,
@@ -1090,7 +1171,6 @@ function checkPkgSize({ entryDir, limit, pkgName, dimension, }) {
1090
1171
  const size = getDirSizeSync({
1091
1172
  rootDir: entryDir,
1092
1173
  entryDir,
1093
- filterDirs: [],
1094
1174
  });
1095
1175
  const passed = size <= limit;
1096
1176
  const sizeMB = size / 1024 / 1024;
@@ -1714,15 +1794,10 @@ function getSkipDirs({ packages, entryDir, }) {
1714
1794
  if (packages) {
1715
1795
  skipDirs.push(...Object.values(packages).map(item => item.root));
1716
1796
  }
1717
- // const { entry: openDataContextEntry } = getOpenDataContextEntry({ entryDir });
1718
- // if (openDataContextEntry) {
1719
- // skipDirs.push(openDataContextEntry);
1720
- // }
1721
1797
  return skipDirs;
1722
1798
  }
1723
1799
  async function makePkgs({ gameEntry, gameOutput, config, }) {
1724
1800
  let startTime = Date.now();
1725
- removeSystemUseless(gameEntry);
1726
1801
  logger.info(`pack start,startTime:${startTime}`);
1727
1802
  const { packages } = await setup(gameEntry, gameOutput);
1728
1803
  const allDeps = collectDeps(gameEntry, packages);
@@ -1846,10 +1921,18 @@ async function mergePkgs(outputDir) {
1846
1921
  logger.info('mergePkgs 完成');
1847
1922
  }
1848
1923
 
1924
+ async function clearPkgs(entryDir, uselessDirs = ['node_modules', '__MACOSX']) {
1925
+ removeSystemUseless(entryDir, uselessDirs);
1926
+ }
1927
+
1849
1928
  async function debugPkgs(config) {
1850
1929
  const { entry: entryDir, output: outputDir, dev: { enableLog }, } = config;
1851
1930
  logger.init(outputDir, enableLog);
1852
1931
  try {
1932
+ /**
1933
+ * 清理
1934
+ */
1935
+ clearPkgs(entryDir);
1853
1936
  /**
1854
1937
  * 校验
1855
1938
  */
@@ -1888,13 +1971,16 @@ async function debugPkgs(config) {
1888
1971
  }
1889
1972
  }
1890
1973
 
1891
- async function buildPkgs(originConfig) {
1892
- const { entry: entryDir, output: outputDir, build } = originConfig;
1974
+ async function buildPkgs(config) {
1975
+ const { entry: entryDir, output: outputDir, build } = config;
1893
1976
  let startTime = Date.now();
1894
1977
  logger.init(outputDir, true);
1895
- logger.info(`TTMG_PACK_VERSION: ${"0.2.8-unity.1"}`);
1978
+ logger.info(`TTMG_PACK_VERSION: ${"0.2.9"}`);
1896
1979
  logger.info(`pack start, startTime:${startTime}`);
1897
- const config = overrideConfig(entryDir, originConfig);
1980
+ /**
1981
+ * 清理
1982
+ */
1983
+ clearPkgs(entryDir, ['node_modules', '__MACOSX', TTMG_TEMP_DIR]);
1898
1984
  /**
1899
1985
  * 校验
1900
1986
  */
@@ -1939,7 +2025,6 @@ async function getPkgs({ entryDir, }) {
1939
2025
  size: getDirSizeSync({
1940
2026
  rootDir: entryDir,
1941
2027
  entryDir: path.join(entryDir, sub.root),
1942
- filterDirs: [],
1943
2028
  }),
1944
2029
  name: sub.name,
1945
2030
  root: sub.root,
@@ -1964,6 +2049,7 @@ async function getPkgs({ entryDir, }) {
1964
2049
  };
1965
2050
  }
1966
2051
 
2052
+ exports.TTMG_TEMP_DIR = TTMG_TEMP_DIR;
1967
2053
  exports.buildOdrPkgs = buildOdrPkgs;
1968
2054
  exports.buildPkgs = buildPkgs;
1969
2055
  exports.checkPkgs = checkPkgs;