@aiot-toolkit/aiotpack 2.0.3-beta.7 → 2.0.3-beta.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/lib/afterCompile/ux/UxAfterCompile.js +303 -266
- package/lib/afterCompile/xts/entryTemplate.js +111 -113
- package/lib/afterCompile/xts/generateRpk.js +25 -54
- package/lib/afterCompile/xts/ts2wasm.js +62 -63
- package/lib/afterWorks/ux/UxAfterWorks.js +12 -19
- package/lib/beforeCompile/ux/UxBeforeCompile.js +26 -25
- package/lib/beforeCompile/xts/preInstall.js +50 -55
- package/lib/beforeWorks/ux/UxBeforeWorks.js +12 -19
- package/lib/compiler/enum/CompileMode.js +16 -23
- package/lib/compiler/interface/ICompileParam.js +1 -2
- package/lib/compiler/interface/ICompiler.js +1 -2
- package/lib/compiler/interface/ISignConfig.js +1 -2
- package/lib/compiler/javascript/JavascriptCompiler.js +147 -154
- package/lib/compiler/javascript/JavascriptDefaultCompileOption.js +20 -16
- package/lib/compiler/javascript/android/AndroidWebpackConfigurator.js +13 -11
- package/lib/compiler/javascript/android/plugin/WrapPlugin.js +52 -48
- package/lib/compiler/javascript/interface/IJavascriptCompileOption.js +1 -2
- package/lib/compiler/javascript/interface/IWebpackConfigurator.js +4 -1
- package/lib/compiler/javascript/vela/VelaWebpackConfigurator.js +78 -75
- package/lib/compiler/javascript/vela/enum/BuildNameFormatType.js +30 -41
- package/lib/compiler/javascript/vela/enum/EntryType.js +15 -29
- package/lib/compiler/javascript/vela/interface/IChunk.js +4 -1
- package/lib/compiler/javascript/vela/interface/IManifest.js +1 -2
- package/lib/compiler/javascript/vela/interface/IQuickAppConfig.js +1 -2
- package/lib/compiler/javascript/vela/model/Package.js +80 -51
- package/lib/compiler/javascript/vela/plugin/WrapPlugin.js +30 -26
- package/lib/compiler/javascript/vela/utils/Jsc.js +30 -33
- package/lib/compiler/javascript/vela/utils/UxCompileUtil.js +152 -130
- package/lib/compiler/javascript/vela/utils/ZipUtil.js +282 -276
- package/lib/compiler/javascript/vela/utils/signature/Base64.js +65 -67
- package/lib/compiler/javascript/vela/utils/signature/CRC32.js +37 -35
- package/lib/compiler/javascript/vela/utils/signature/SignUtil.js +755 -731
- package/lib/compiler/javascript/vela/utils/signature/Signer.js +24 -22
- package/lib/compiler/javascript/vela/utils/webpackLoader/addColSourceMap.js +47 -52
- package/lib/compiler/javascript/vela/utils/webpackLoader/extractMapData.js +21 -17
- package/lib/config/UxConfig.js +145 -173
- package/lib/config/XtsConfig.js +30 -40
- package/lib/index.js +88 -41
- package/lib/interface/ICompileOptions.js +5 -2
- package/lib/interface/IDeviceList.js +1 -2
- package/lib/loader/ux/JsLoader.js +32 -30
- package/lib/loader/ux/PngLoader.js +47 -53
- package/lib/loader/ux/android/UxLoader.js +30 -31
- package/lib/loader/ux/vela/AppUxLoader.js +23 -24
- package/lib/loader/ux/vela/HmlLoader.js +59 -55
- package/lib/loader/ux/vela/UxLoader.js +29 -35
- package/lib/loader/xts/XtsLoader.js +55 -41
- package/lib/utils/BeforeCompileUtils.js +100 -92
- package/lib/utils/PngUtils.js +42 -36
- package/lib/utils/ux/ManifestSchema.js +198 -194
- package/lib/utils/ux/UxFileUtils.js +130 -116
- package/lib/utils/ux/UxLoaderUtils.js +292 -307
- package/lib/utils/ux/android/AndroidUx.js +88 -90
- package/lib/utils/xts/XtsFileLaneUtils.js +58 -65
- package/lib/utils/xts/XtsFollowWorks.js +122 -129
- package/package.json +6 -6
|
@@ -1,39 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const path_1 = __importDefault(require("path"));
|
|
16
|
-
const UxLoaderUtils_1 = __importDefault(require("../../../utils/ux/UxLoaderUtils"));
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _path = _interopRequireDefault(require("path"));
|
|
8
|
+
var _UxLoaderUtils = _interopRequireDefault(require("../../../utils/ux/UxLoaderUtils"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
10
|
class UxLoader {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
});
|
|
11
|
+
async parser(files) {
|
|
12
|
+
const resultFiles = [];
|
|
13
|
+
const {
|
|
14
|
+
projectPath
|
|
15
|
+
} = this.context;
|
|
16
|
+
for (const file of files) {
|
|
17
|
+
// 转换每个文件
|
|
18
|
+
const {
|
|
19
|
+
files: compiledFiles,
|
|
20
|
+
logs
|
|
21
|
+
} = await _UxLoaderUtils.default.compileUxToJavascript(file, this.context, false, this.compilerOption);
|
|
22
|
+
this.logs = logs.map(item => {
|
|
23
|
+
return {
|
|
24
|
+
...item,
|
|
25
|
+
filePath: item.position?.source ? item.position.source : item.filePath ? _path.default.relative(projectPath, item.filePath) : ''
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
resultFiles.push(...compiledFiles);
|
|
37
29
|
}
|
|
30
|
+
return resultFiles;
|
|
31
|
+
}
|
|
38
32
|
}
|
|
39
|
-
exports.default = UxLoader;
|
|
33
|
+
var _default = exports.default = UxLoader;
|
|
@@ -1,48 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _generator = require("@aiot-toolkit/generator");
|
|
8
|
+
var _parser = require("@aiot-toolkit/parser");
|
|
9
|
+
var _sharedUtils = require("@aiot-toolkit/shared-utils");
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _tsMorph = require("ts-morph");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
13
|
/**
|
|
12
14
|
* XtsLoader
|
|
13
15
|
*/
|
|
14
16
|
class XtsLoader {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
17
|
+
parser(files) {
|
|
18
|
+
const project = new _tsMorph.Project();
|
|
19
|
+
const resultFiles = [];
|
|
20
|
+
for (const file in files) {
|
|
21
|
+
const {
|
|
22
|
+
path,
|
|
23
|
+
content
|
|
24
|
+
} = files[file];
|
|
25
|
+
const {
|
|
26
|
+
name,
|
|
27
|
+
ext
|
|
28
|
+
} = _path.default.parse(path);
|
|
29
|
+
const fullName = `${name}${ext}`;
|
|
30
|
+
const newFileName = `${name}.ts`;
|
|
31
|
+
//判断文本,空文本则结束该文件处理
|
|
32
|
+
if (!content) {
|
|
33
|
+
_sharedUtils.ColorConsole.warn(`The file '${fullName}' under the path '${path}' has no content `);
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
const parserResult = new _parser.XtsParser(project, _sharedUtils.ColorConsole.logger).parser(content.toString(), fullName);
|
|
37
|
+
const {
|
|
38
|
+
ast,
|
|
39
|
+
mapList
|
|
40
|
+
} = new _parser.XtsToTypescript(project, _sharedUtils.ColorConsole.logger, this.context, path).translate(parserResult.ast, parserResult.offsetList);
|
|
41
|
+
const {
|
|
42
|
+
code,
|
|
43
|
+
sourcemap
|
|
44
|
+
} = new _generator.TypescriptGenerator().generate({
|
|
45
|
+
sourceFilePath: fullName,
|
|
46
|
+
targetFilePath: newFileName,
|
|
47
|
+
ast,
|
|
48
|
+
mapList
|
|
49
|
+
});
|
|
50
|
+
resultFiles.push({
|
|
51
|
+
path: _sharedUtils.FileUtil.updateFileName(path, newFileName),
|
|
52
|
+
content: code
|
|
53
|
+
}, {
|
|
54
|
+
path: _sharedUtils.FileUtil.updateFileName(path, `${name}.map.ts`),
|
|
55
|
+
content: sourcemap
|
|
56
|
+
});
|
|
46
57
|
}
|
|
58
|
+
// 返回内容
|
|
59
|
+
return resultFiles;
|
|
60
|
+
}
|
|
47
61
|
}
|
|
48
|
-
exports.default = XtsLoader;
|
|
62
|
+
var _default = exports.default = XtsLoader;
|
|
@@ -1,115 +1,123 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
var _a;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
const parser_1 = require("@aiot-toolkit/parser");
|
|
17
|
-
const shared_utils_1 = require("@aiot-toolkit/shared-utils");
|
|
18
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
19
|
-
const path_1 = __importDefault(require("path"));
|
|
20
|
-
const TranslateCache_1 = __importDefault(require("@aiot-toolkit/parser/lib/ux/translate/vela/TranslateCache"));
|
|
21
|
-
const UxFileUtils_1 = __importDefault(require("./ux/UxFileUtils"));
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _parser = require("@aiot-toolkit/parser");
|
|
8
|
+
var _sharedUtils = require("@aiot-toolkit/shared-utils");
|
|
9
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _TranslateCache = _interopRequireDefault(require("@aiot-toolkit/parser/lib/ux/translate/vela/TranslateCache"));
|
|
12
|
+
var _UxFileUtils = _interopRequireDefault(require("./ux/UxFileUtils"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
14
|
const BinaryPlugin = require('@aiot-toolkit/parser/lib/ux/translate/vela/protobuf/BinaryPlugin');
|
|
15
|
+
|
|
23
16
|
/**
|
|
24
17
|
* BeforeCompileUtils
|
|
25
18
|
*/
|
|
26
19
|
class BeforeCompileUtils {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
20
|
+
/**
|
|
21
|
+
* 获取ux项目的路由入口
|
|
22
|
+
* @param context
|
|
23
|
+
* @param fileList
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
static getEntries = params => {
|
|
27
|
+
const {
|
|
28
|
+
context,
|
|
29
|
+
compilerOption
|
|
30
|
+
} = params;
|
|
31
|
+
const {
|
|
32
|
+
projectPath
|
|
33
|
+
} = context;
|
|
34
|
+
const srcPath = _path.default.join(projectPath, compilerOption.sourceRoot);
|
|
39
35
|
// 判断路径是否真实存在
|
|
40
|
-
const manifestContent =
|
|
36
|
+
const manifestContent = _UxFileUtils.default.getMainfestInfo(projectPath);
|
|
41
37
|
// 存储entries
|
|
42
38
|
let entryList = [];
|
|
43
|
-
const {
|
|
39
|
+
const {
|
|
40
|
+
router
|
|
41
|
+
} = manifestContent;
|
|
44
42
|
if (router) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
shared_utils_1.ColorConsole.throw(`### manifest ### No router configuration`);
|
|
43
|
+
const {
|
|
44
|
+
pages
|
|
45
|
+
} = router;
|
|
46
|
+
if (pages) {
|
|
47
|
+
Object.keys(pages).map(page => {
|
|
48
|
+
const pageContent = pages[page];
|
|
49
|
+
const entryDir = _path.default.join(srcPath, page);
|
|
50
|
+
const entryPages = _parser.ExtensionConfig.TEMPLATES.map(item => `${pageContent.component}${item}`);
|
|
51
|
+
const entry = entryPages.find(item => _fsExtra.default.existsSync(_path.default.join(entryDir, item)));
|
|
52
|
+
if (entry) {
|
|
53
|
+
entryList.push(_path.default.join(entryDir, entry));
|
|
54
|
+
} else {
|
|
55
|
+
// 路径不存在
|
|
56
|
+
_sharedUtils.ColorConsole.throw(`### manifest ### path '${_path.default.join(entryDir, entryPages.join(' | '))}' does not exist`);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
// 没有pages配置
|
|
61
|
+
_sharedUtils.ColorConsole.throw(`### manifest ### No pages configuration`);
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
// 没有router配置
|
|
65
|
+
_sharedUtils.ColorConsole.throw(`### manifest ### No router configuration`);
|
|
69
66
|
}
|
|
70
67
|
context['entries'] = entryList;
|
|
71
68
|
return Promise.resolve();
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const {
|
|
69
|
+
};
|
|
70
|
+
static clean = async params => {
|
|
71
|
+
const {
|
|
72
|
+
context,
|
|
73
|
+
compilerOption,
|
|
74
|
+
compalition
|
|
75
|
+
} = params;
|
|
75
76
|
if (compilerOption) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
// 存储build中的文件列表
|
|
78
|
+
const buildPath = _path.default.join(context.projectPath, compilerOption.outputPath);
|
|
79
|
+
const buildFileList = _fsExtra.default.existsSync(buildPath) ? _sharedUtils.FileUtil.readAlldirSync(buildPath).map(filePath => {
|
|
80
|
+
const relativePath = _path.default.relative(buildPath, filePath);
|
|
81
|
+
const fileContent = _fsExtra.default.readFileSync(filePath);
|
|
82
|
+
return {
|
|
83
|
+
path: relativePath,
|
|
84
|
+
content: fileContent
|
|
85
|
+
};
|
|
86
|
+
}) : [];
|
|
87
|
+
if (compalition) {
|
|
88
|
+
compalition.buildFileList = buildFileList;
|
|
89
|
+
}
|
|
88
90
|
}
|
|
89
|
-
context.translateCache = new
|
|
91
|
+
context.translateCache = new _TranslateCache.default();
|
|
90
92
|
BinaryPlugin.reset();
|
|
91
93
|
BinaryPlugin.config = {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
projectPath: context.projectPath,
|
|
95
|
+
outputProjectPath: _path.default.join(context.projectPath, context.output),
|
|
96
|
+
source: compilerOption?.sourceRoot,
|
|
97
|
+
output: compilerOption?.outputPath
|
|
96
98
|
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const {
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* 获取项目的全局样式变量配置
|
|
102
|
+
* @param context
|
|
103
|
+
*/
|
|
104
|
+
static getGlobalVar = params => {
|
|
105
|
+
const {
|
|
106
|
+
context,
|
|
107
|
+
compilerOption
|
|
108
|
+
} = params;
|
|
109
|
+
const {
|
|
110
|
+
projectPath
|
|
111
|
+
} = context;
|
|
112
|
+
const filePath = _path.default.join(projectPath, compilerOption?.sourceRoot || '', 'globalVar.json');
|
|
106
113
|
let globalVar = {};
|
|
107
114
|
// 判断文件是否存在
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
115
|
+
if (_fsExtra.default.existsSync(filePath)) {
|
|
116
|
+
// 存在则取内容,否则内容为空
|
|
117
|
+
globalVar = _fsExtra.default.readJSONSync(filePath);
|
|
111
118
|
}
|
|
112
119
|
context.globalVar = globalVar;
|
|
113
120
|
return Promise.resolve();
|
|
114
|
-
};
|
|
115
|
-
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
var _default = exports.default = BeforeCompileUtils;
|
package/lib/utils/PngUtils.js
CHANGED
|
@@ -1,43 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
10
|
/**
|
|
9
11
|
* PngUtils
|
|
10
12
|
*/
|
|
11
13
|
class PngUtils {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
14
|
+
/**
|
|
15
|
+
* 检测.9.png是否编码
|
|
16
|
+
* @param filePath
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
static isEncode9Png(filePath) {
|
|
20
|
+
const buff = _fsExtra.default.readFileSync(filePath);
|
|
21
|
+
const start = 37;
|
|
22
|
+
const end = 41;
|
|
23
|
+
const encode = buff.subarray(start, end).toString() === 'npTc' || buff.subarray(start, end).toString() === 'npOl';
|
|
24
|
+
return encode;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 计算文件转换后的目标路径
|
|
28
|
+
* @param filePath
|
|
29
|
+
* @param context
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
static convertOutputPath(filePath, context) {
|
|
33
|
+
const {
|
|
34
|
+
projectPath,
|
|
35
|
+
output
|
|
36
|
+
} = context;
|
|
37
|
+
const fileRelativePath = _path.default.relative(projectPath, filePath);
|
|
38
|
+
const outputPath = _path.default.join(projectPath, output, fileRelativePath);
|
|
39
|
+
const outputDir = _path.default.dirname(outputPath);
|
|
40
|
+
// 判断输出文件夹是否存在,不存在则循环创建
|
|
41
|
+
if (!_fsExtra.default.existsSync(outputDir)) {
|
|
42
|
+
_fsExtra.default.mkdirSync(outputDir, {
|
|
43
|
+
recursive: true
|
|
44
|
+
});
|
|
41
45
|
}
|
|
46
|
+
return outputPath;
|
|
47
|
+
}
|
|
42
48
|
}
|
|
43
|
-
exports.default = PngUtils;
|
|
49
|
+
var _default = exports.default = PngUtils;
|