easyutilssdk 0.1.2 → 0.1.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.
- package/dist/__tests__/common.test.d.ts +1 -0
- package/dist/__tests__/json.test.d.ts +1 -0
- package/dist/common.d.ts +4 -0
- package/dist/excel.d.ts +9 -0
- package/dist/index.d.ts +3 -0
- package/dist/middleware.d.ts +61 -0
- package/dist/node/babel.d.ts +22 -0
- package/dist/node/excel.d.ts +19 -0
- package/dist/node/index.d.ts +12 -0
- package/dist/node/index.js +56 -6
- package/dist/png.d.ts +17 -0
- package/dist/web/index.js +14 -4
- package/jest.config.js +14 -0
- package/package.json +23 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/common.d.ts
CHANGED
package/dist/excel.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface jsonToExcelParams {
|
|
2
|
+
mergeRow?: boolean;
|
|
3
|
+
sheetName?: string;
|
|
4
|
+
}
|
|
5
|
+
declare const excelUtils: {
|
|
6
|
+
jsonToExcel: (jsonData: any[], fileName?: string, params?: jsonToExcelParams) => any[];
|
|
7
|
+
excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
8
|
+
};
|
|
9
|
+
export default excelUtils;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type { SortOptions } from './json';
|
|
2
2
|
declare const easyutilssdk: {
|
|
3
|
+
common: {
|
|
4
|
+
delay: (seconds: number) => Promise<void>;
|
|
5
|
+
};
|
|
3
6
|
json: {
|
|
4
7
|
sortObjectKeys: (obj: any, { sortType }?: import("./json").SortOptions) => object | null;
|
|
5
8
|
sortJson: (jsonString: string, { sortType }?: import("./json").SortOptions) => string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 中间件系统核心类
|
|
3
|
+
* 支持添加、移除和执行中间件
|
|
4
|
+
*/
|
|
5
|
+
declare class MiddlewareManager {
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* 添加中间件
|
|
9
|
+
* @param {Function} middleware - 中间件函数
|
|
10
|
+
* @param {Object} options - 配置选项
|
|
11
|
+
* @param {string} options.name - 中间件名称
|
|
12
|
+
* @param {number} options.priority - 优先级,数字越大优先级越高
|
|
13
|
+
*/
|
|
14
|
+
use(middleware: any, options?: {}): this;
|
|
15
|
+
/**
|
|
16
|
+
* 移除中间件
|
|
17
|
+
* @param {string} name - 中间件名称
|
|
18
|
+
*/
|
|
19
|
+
remove(name: any): this;
|
|
20
|
+
/**
|
|
21
|
+
* 执行所有中间件
|
|
22
|
+
* @param {*} context - 上下文对象
|
|
23
|
+
* @param {*} next - 下一个处理器
|
|
24
|
+
*/
|
|
25
|
+
execute(context: any, next: any): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 组合中间件函数
|
|
28
|
+
* @param {Array} middlewares - 中间件数组
|
|
29
|
+
* @returns {Function}
|
|
30
|
+
*/
|
|
31
|
+
_compose(middlewares: any): (context: any, next: any) => Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* 获取所有中间件信息
|
|
34
|
+
* @returns {Array}
|
|
35
|
+
*/
|
|
36
|
+
getMiddlewares(): any;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 创建中间件管理器实例
|
|
40
|
+
* @returns {MiddlewareManager}
|
|
41
|
+
*/
|
|
42
|
+
export declare function createMiddlewareManager(): MiddlewareManager;
|
|
43
|
+
/**
|
|
44
|
+
* 工具函数:创建一个简单的日志中间件
|
|
45
|
+
* @param {string} prefix - 日志前缀
|
|
46
|
+
* @returns {Function}
|
|
47
|
+
*/
|
|
48
|
+
export declare function createLoggerMiddleware(prefix?: string): (context: any, next: any) => any;
|
|
49
|
+
/**
|
|
50
|
+
* 工具函数:创建一个错误处理中间件
|
|
51
|
+
* @param {Function} errorHandler - 错误处理器
|
|
52
|
+
* @returns {Function}
|
|
53
|
+
*/
|
|
54
|
+
export declare function createErrorMiddleware(errorHandler: any): (context: any, next: any) => any;
|
|
55
|
+
/**
|
|
56
|
+
* 工具函数:创建一个超时中间件
|
|
57
|
+
* @param {number} timeout - 超时时间(毫秒)
|
|
58
|
+
* @returns {Function}
|
|
59
|
+
*/
|
|
60
|
+
export declare function createTimeoutMiddleware(timeout: any): (context: any, next: any) => Promise<unknown>;
|
|
61
|
+
export default MiddlewareManager;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface extractCommentsToFileOptions {
|
|
2
|
+
includeKeys?: string[];
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* 主函数:提取指定文件的注释并保存到另一文件,然后从源文件中删除注释
|
|
6
|
+
* @param {string} sourcePath - 源文件路径
|
|
7
|
+
* @param {string} commentsOutputPath - 注释输出文件路径
|
|
8
|
+
* @param {string} metadataPath - 元数据文件路径
|
|
9
|
+
*/
|
|
10
|
+
declare function extractCommentsToFile(sourcePath: string, commentsOutputPath: string, metadataPath: string, options?: extractCommentsToFileOptions): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* 还原代码文件(将注释加回到无注释的代码中)
|
|
13
|
+
* @param {string} codePath - 无注释的代码文件路径
|
|
14
|
+
* @param {string} metadataPath - 元数据文件路径
|
|
15
|
+
* @param {string} outputPath - 还原后的代码输出路径
|
|
16
|
+
*/
|
|
17
|
+
declare function restoreCodeFromFile(codePath: string, metadataPath: string, outputPath: string): Promise<void>;
|
|
18
|
+
declare const babelUtils: {
|
|
19
|
+
extractCommentsToFile: typeof extractCommentsToFile;
|
|
20
|
+
restoreCodeFromFile: typeof restoreCodeFromFile;
|
|
21
|
+
};
|
|
22
|
+
export default babelUtils;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将Excel文件转换为JSON数据
|
|
3
|
+
* @param filePath Excel文件路径
|
|
4
|
+
* @param sheetName 工作表名称(可选,默认为第一个工作表)
|
|
5
|
+
* @returns JSON数据数组
|
|
6
|
+
*/
|
|
7
|
+
export declare const excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
8
|
+
/**
|
|
9
|
+
* 将Excel文件转换为JSON并保存到文件
|
|
10
|
+
* @param excelPath Excel文件路径
|
|
11
|
+
* @param jsonPath 输出JSON文件路径(可选,默认与Excel同名但扩展名为.json)
|
|
12
|
+
* @param sheetName 工作表名称(可选,默认为第一个工作表)
|
|
13
|
+
*/
|
|
14
|
+
export declare const excelToJsonFile: (excelPath: string, jsonPath?: string, sheetName?: string) => void;
|
|
15
|
+
declare const excelUtils: {
|
|
16
|
+
excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
17
|
+
excelToJsonFile: (excelPath: string, jsonPath?: string, sheetName?: string) => void;
|
|
18
|
+
};
|
|
19
|
+
export default excelUtils;
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
export type { LoopFolderCallback } from './fs';
|
|
2
|
+
export type { extractCommentsToFileOptions } from './babel';
|
|
2
3
|
declare const _default: {
|
|
3
4
|
fs: {
|
|
4
5
|
readFileToJSONSync: (filePath: string) => object;
|
|
5
6
|
copyFolderSync: (source: string, target: string) => void;
|
|
6
7
|
loopFolderSync: (folderPath: string, callBack: import("./fs").LoopFolderCallback) => void;
|
|
7
8
|
};
|
|
9
|
+
babel: {
|
|
10
|
+
extractCommentsToFile: (sourcePath: string, commentsOutputPath: string, metadataPath: string, options?: import("./babel").extractCommentsToFileOptions) => Promise<void>;
|
|
11
|
+
restoreCodeFromFile: (codePath: string, metadataPath: string, outputPath: string) => Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
excel: {
|
|
14
|
+
excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
15
|
+
excelToJsonFile: (excelPath: string, jsonPath?: string, sheetName?: string) => void;
|
|
16
|
+
};
|
|
17
|
+
common: {
|
|
18
|
+
delay: (seconds: number) => Promise<void>;
|
|
19
|
+
};
|
|
8
20
|
json: {
|
|
9
21
|
sortObjectKeys: (obj: any, { sortType }?: import("../src/json").SortOptions) => object | null;
|
|
10
22
|
sortJson: (jsonString: string, { sortType }?: import("../src/json").SortOptions) => string;
|
package/dist/node/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 版本信息
|
|
3
3
|
* realBranch(真实分支): dev
|
|
4
|
-
* buildTime(打包时间): 2025/
|
|
5
|
-
* commitId(最后一条提交SHA):
|
|
4
|
+
* buildTime(打包时间): 2025/12/28 18:01:01
|
|
5
|
+
* commitId(最后一条提交SHA): 4b245637b9b60f847931fddc2694ada9b561311f
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/*
|
|
@@ -17,13 +17,33 @@
|
|
|
17
17
|
/******/ "use strict";
|
|
18
18
|
/******/ var __webpack_modules__ = ({
|
|
19
19
|
|
|
20
|
+
/***/ "./node/babel.ts":
|
|
21
|
+
/*!***********************!*\
|
|
22
|
+
!*** ./node/babel.ts ***!
|
|
23
|
+
\***********************/
|
|
24
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
25
|
+
|
|
26
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/parser */ \"@babel/parser\");\n/* harmony import */ var _babel_parser__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_parser__WEBPACK_IMPORTED_MODULE_2__);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n/**\n * 提取代码文件中的注释\n * @param {string} filePath - 源代码文件路径\n * @returns {Object} 包含注释数组和原始文件内容的对象\n */\nfunction extractComments(filePath, options) {\n return __awaiter(this, void 0, void 0, function () {\n var fileContent, ast, comments, _loop_1, i, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(filePath, 'utf-8')];\n case 1:\n fileContent = _a.sent();\n ast = _babel_parser__WEBPACK_IMPORTED_MODULE_2__.parse(fileContent, {\n sourceType: 'module',\n attachComment: true,\n plugins: [\n 'jsx',\n 'typescript'\n ]\n });\n comments = [];\n // 提取文件开头的注释\n if (ast.comments) {\n _loop_1 = function (i) {\n var comment = ast.comments[i];\n var includeKeys = options === null || options === void 0 ? void 0 : options.includeKeys;\n var pushFlag = true;\n if (includeKeys) {\n pushFlag = false;\n if (includeKeys.some(function (key) { return comment.value.includes(key); })) {\n pushFlag = true;\n }\n }\n if (pushFlag) {\n comments.push({\n type: comment.type, // 'CommentLine' for // or 'CommentBlock' for /* */\n value: comment.value,\n start: comment.start,\n end: comment.end,\n loc: comment.loc\n });\n }\n };\n for (i = 0; i < ast.comments.length; i++) {\n _loop_1(i);\n }\n }\n // 按起始位置排序,处理可能为undefined的情况\n comments.sort(function (a, b) { var _a, _b; return ((_a = a.start) !== null && _a !== void 0 ? _a : 0) - ((_b = b.start) !== null && _b !== void 0 ? _b : 0); });\n return [2 /*return*/, {\n comments: comments,\n originalContent: fileContent\n }];\n case 2:\n error_1 = _a.sent();\n console.error(\"\\u89E3\\u6790\\u6587\\u4EF6 \".concat(filePath, \" \\u65F6\\u51FA\\u9519:\"), error_1.message);\n return [2 /*return*/, {\n comments: [],\n originalContent: ''\n }];\n case 3: return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 将注释保存到文件\n * @param {Array} comments - 注释数组\n * @param {string} outputPath - 输出文件路径\n * @param {string} sourceFileName - 源文件名\n */\nfunction saveCommentsToFile(comments, outputPath, sourceFileName) {\n return __awaiter(this, void 0, void 0, function () {\n var header, commentLines, output;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n header = \"\\u6E90\\u6587\\u4EF6: \".concat(sourceFileName, \"\\n\\u63D0\\u53D6\\u65F6\\u95F4: \").concat(new Date().toLocaleString(), \"\\n\\u6CE8\\u91CA\\u603B\\u6570: \").concat(comments.length, \"\\n\\n\");\n commentLines = comments.map(function (comment) {\n var _a, _b;\n var type = comment.type === 'CommentLine' ? '单行注释' : '块注释';\n var CommentLine = (_b = (_a = comment.loc) === null || _a === void 0 ? void 0 : _a.start) === null || _b === void 0 ? void 0 : _b.line;\n return \"[\\u4F4D\\u7F6E: \".concat(comment.start, \"-\").concat(comment.end, \"] [\\u7B2C\").concat(CommentLine, \"\\u884C] [\").concat(type, \"]: \").concat(comment.type === 'CommentLine' ? '//' : '/*').concat(comment.value).concat(comment.type === 'CommentBlock' ? '*/' : '');\n });\n output = header + commentLines.join('\\n\\n');\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(outputPath, output, 'utf-8')];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 保存注释和代码位置信息到元数据文件\n * @param {Array} comments - 注释数组\n * @param {string} metadataPath - 元数据文件路径\n */\nfunction saveCommentsMetadata(comments, metadataPath) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = {\n // extractTime: new Date().toISOString(),\n comments: comments.map(function (comment) { return ({\n type: comment.type,\n value: comment.value,\n start: comment.start,\n end: comment.end,\n loc: comment.loc\n }); })\n };\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8')];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 从元数据文件加载注释信息\n * @param {string} metadataPath - 元数据文件路径\n * @returns {Array|null} 注释数组或null(如果文件不存在)\n */\nfunction loadCommentsMetadata(metadataPath) {\n return __awaiter(this, void 0, void 0, function () {\n var metadataContent, metadata, error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(metadataPath)];\n case 1:\n if (!(_a.sent())) {\n return [2 /*return*/, null];\n }\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(metadataPath, 'utf-8')];\n case 2:\n metadataContent = _a.sent();\n metadata = JSON.parse(metadataContent);\n return [2 /*return*/, metadata.comments];\n case 3:\n error_2 = _a.sent();\n console.error(\"\\u52A0\\u8F7D\\u5143\\u6570\\u636E\\u6587\\u4EF6 \".concat(metadataPath, \" \\u65F6\\u51FA\\u9519:\"), error_2.message);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 从源代码中移除注释\n * @param {string} filePath - 源代码文件路径\n * @returns {Object} 移除注释后的代码和相关信息\n */\nfunction removeCommentsFromFile(filePath, comments) {\n return __awaiter(this, void 0, void 0, function () {\n var fileContent, validComments, codeWithoutComments, _i, validComments_1, comment, error_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(filePath, 'utf-8')];\n case 1:\n fileContent = _a.sent();\n validComments = comments.filter(function (comment) {\n return comment.start !== undefined && comment.end !== undefined;\n });\n validComments.sort(function (a, b) { var _a, _b; return ((_a = b.start) !== null && _a !== void 0 ? _a : 0) - ((_b = a.start) !== null && _b !== void 0 ? _b : 0); });\n codeWithoutComments = fileContent;\n for (_i = 0, validComments_1 = validComments; _i < validComments_1.length; _i++) {\n comment = validComments_1[_i];\n if (comment.start !== undefined && comment.end !== undefined) {\n codeWithoutComments = codeWithoutComments.slice(0, comment.start) + codeWithoutComments.slice(comment.end);\n }\n }\n return [2 /*return*/, {\n code: codeWithoutComments\n }];\n case 2:\n error_3 = _a.sent();\n console.error(\"\\u5904\\u7406\\u6587\\u4EF6 \".concat(filePath, \" \\u65F6\\u51FA\\u9519:\"), error_3.message);\n return [2 /*return*/, null];\n case 3: return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 将注释还原到代码中\n * @param {string} codeWithoutComments - 不包含注释的代码\n * @param {Array} comments - 注释数组\n * @returns {string} 还原后的完整代码\n */\nfunction restoreCommentsToCode(codeWithoutComments, comments) {\n if (!comments || comments.length === 0) {\n return codeWithoutComments;\n }\n // 过滤掉start为undefined的注释,然后按位置升序排列\n var validComments = comments.filter(function (comment) { return comment.start !== undefined; });\n var sortedComments = __spreadArray([], validComments, true).sort(function (a, b) { var _a, _b; return ((_a = a.start) !== null && _a !== void 0 ? _a : 0) - ((_b = b.start) !== null && _b !== void 0 ? _b : 0); });\n var restoredCode = codeWithoutComments;\n for (var i = 0; i < sortedComments.length; i++) {\n var comment = sortedComments[i];\n if (comment.start === undefined)\n continue;\n var commentText = comment.type === 'CommentLine'\n ? '//' + comment.value\n : '/*' + comment.value + '*/';\n // 在指定位置插入注释\n restoredCode = restoredCode.slice(0, comment.start) + commentText + restoredCode.slice(comment.start);\n }\n return restoredCode;\n}\n/**\n * 主函数:提取指定文件的注释并保存到另一文件,然后从源文件中删除注释\n * @param {string} sourcePath - 源文件路径\n * @param {string} commentsOutputPath - 注释输出文件路径\n * @param {string} metadataPath - 元数据文件路径\n */\nfunction extractCommentsToFile(sourcePath, commentsOutputPath, metadataPath, options) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, comments, originalContent, result, restoredCode, error_4;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 8, , 9]);\n return [4 /*yield*/, extractComments(sourcePath, options)];\n case 1:\n _a = _b.sent(), comments = _a.comments, originalContent = _a.originalContent;\n if (!(comments.length > 0)) return [3 /*break*/, 7];\n // 保存注释到文件\n return [4 /*yield*/, saveCommentsToFile(comments, commentsOutputPath, path__WEBPACK_IMPORTED_MODULE_1__.basename(sourcePath))];\n case 2:\n // 保存注释到文件\n _b.sent();\n // 保存注释元数据\n return [4 /*yield*/, saveCommentsMetadata(comments, metadataPath)];\n case 3:\n // 保存注释元数据\n _b.sent();\n return [4 /*yield*/, removeCommentsFromFile(sourcePath, comments)];\n case 4:\n result = _b.sent();\n if (!(result !== null)) return [3 /*break*/, 6];\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(commentsOutputPath, result.code, 'utf-8')];\n case 5:\n _b.sent();\n restoredCode = restoreCommentsToCode(result.code, comments);\n if (restoredCode === originalContent) {\n // console.log('验证成功:代码可以完美还原');\n }\n else {\n // console.log('警告:还原的代码与原始代码不完全一致');\n }\n _b.label = 6;\n case 6: return [3 /*break*/, 7];\n case 7: return [3 /*break*/, 9];\n case 8:\n error_4 = _b.sent();\n console.error('提取注释时出错:', error_4.message);\n return [3 /*break*/, 9];\n case 9: return [2 /*return*/];\n }\n });\n });\n}\n/**\n * 还原代码文件(将注释加回到无注释的代码中)\n * @param {string} codePath - 无注释的代码文件路径\n * @param {string} metadataPath - 元数据文件路径\n * @param {string} outputPath - 还原后的代码输出路径\n */\nfunction restoreCodeFromFile(codePath, metadataPath, outputPath) {\n return __awaiter(this, void 0, void 0, function () {\n var comments, codeWithoutComments, restoredCode, error_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 4, , 5]);\n return [4 /*yield*/, loadCommentsMetadata(metadataPath)];\n case 1:\n comments = _a.sent();\n if (!comments) {\n console.error('无法加载注释元数据');\n return [2 /*return*/];\n }\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(codePath, 'utf-8')];\n case 2:\n codeWithoutComments = _a.sent();\n restoredCode = restoreCommentsToCode(codeWithoutComments, comments);\n // 保存还原后的代码\n return [4 /*yield*/, fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(outputPath, restoredCode, 'utf-8')];\n case 3:\n // 保存还原后的代码\n _a.sent();\n return [3 /*break*/, 5];\n case 4:\n error_5 = _a.sent();\n console.error('还原代码时出错:', error_5.message);\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n}\nvar babelUtils = {\n extractCommentsToFile: extractCommentsToFile,\n restoreCodeFromFile: restoreCodeFromFile\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (babelUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./node/babel.ts?\n}");
|
|
27
|
+
|
|
28
|
+
/***/ }),
|
|
29
|
+
|
|
30
|
+
/***/ "./node/excel.ts":
|
|
31
|
+
/*!***********************!*\
|
|
32
|
+
!*** ./node/excel.ts ***!
|
|
33
|
+
\***********************/
|
|
34
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
35
|
+
|
|
36
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ excelToJson: () => (/* binding */ excelToJson),\n/* harmony export */ excelToJsonFile: () => (/* binding */ excelToJsonFile)\n/* harmony export */ });\n/* harmony import */ var xlsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! xlsx */ \"xlsx\");\n/* harmony import */ var xlsx__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(xlsx__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n/**\n * 将Excel文件转换为JSON数据\n * @param filePath Excel文件路径\n * @param sheetName 工作表名称(可选,默认为第一个工作表)\n * @returns JSON数据数组\n */\nvar excelToJson = function (filePath, sheetName) {\n // 检查文件是否存在\n if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(filePath)) {\n throw new Error(\"File \\\"\".concat(filePath, \"\\\" not found\"));\n }\n // 读取Excel文件\n var workbook = (0,xlsx__WEBPACK_IMPORTED_MODULE_0__.readFile)(filePath);\n // 获取工作表名称\n var firstSheetName = workbook.SheetNames[0];\n var targetSheetName = sheetName || firstSheetName;\n // 检查指定的工作表是否存在\n if (!workbook.SheetNames.includes(targetSheetName)) {\n throw new Error(\"Sheet \\\"\".concat(targetSheetName, \"\\\" not found in the workbook\"));\n }\n // 获取工作表\n var worksheet = workbook.Sheets[targetSheetName];\n // 将工作表转换为JSON\n var jsonData = xlsx__WEBPACK_IMPORTED_MODULE_0__.utils.sheet_to_json(worksheet);\n return jsonData;\n};\n/**\n * 将Excel文件转换为JSON并保存到文件\n * @param excelPath Excel文件路径\n * @param jsonPath 输出JSON文件路径(可选,默认与Excel同名但扩展名为.json)\n * @param sheetName 工作表名称(可选,默认为第一个工作表)\n */\nvar excelToJsonFile = function (excelPath, jsonPath, sheetName) {\n try {\n // 转换Excel为JSON数据\n var jsonData = excelToJson(excelPath, sheetName);\n // 确定输出文件路径\n var outputPath = jsonPath || excelPath.replace(path__WEBPACK_IMPORTED_MODULE_2__.extname(excelPath), '.json');\n // 写入JSON文件\n fs__WEBPACK_IMPORTED_MODULE_1__.writeFileSync(outputPath, JSON.stringify(jsonData, null, 2));\n console.log(\"Successfully converted \\\"\".concat(excelPath, \"\\\" to \\\"\").concat(outputPath, \"\\\"\"));\n }\n catch (error) {\n console.error('Error converting Excel to JSON:', error);\n throw error;\n }\n};\nvar excelUtils = {\n excelToJson: excelToJson,\n excelToJsonFile: excelToJsonFile,\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (excelUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./node/excel.ts?\n}");
|
|
37
|
+
|
|
38
|
+
/***/ }),
|
|
39
|
+
|
|
20
40
|
/***/ "./node/fs.ts":
|
|
21
41
|
/*!********************!*\
|
|
22
42
|
!*** ./node/fs.ts ***!
|
|
23
43
|
\********************/
|
|
24
44
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
25
45
|
|
|
26
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ copyFolderSync: () => (/* binding */ copyFolderSync),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ loopFolderSync: () => (/* binding */ loopFolderSync),\n/* harmony export */ readFileToJSONSync: () => (/* binding */ readFileToJSONSync)\n/* harmony export */ });\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * 读取文件并转换为JSON\n * @param filePath 文件路径\n * @returns 转换之后的JSON对象\n */\nvar readFileToJSONSync = function (filePath) {\n try {\n var fileStr = fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(filePath, 'utf8');\n return JSON.parse(fileStr);\n }\n catch (error) {\n console.error(\"Failed to read or parse setting file \".concat(filePath, \":\"), error);\n return {};\n }\n};\n/**\n * 拷贝文件夹至目标目录\n * @param source 源文件夹\n * @param target 目标文件夹\n */\nvar copyFolderSync = function (source, target) {\n if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(target)) {\n fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync(target);\n }\n var files = fs__WEBPACK_IMPORTED_MODULE_0__.readdirSync(source);\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var file = files_1[_i];\n var sourcePath = path__WEBPACK_IMPORTED_MODULE_1__.join(source, file);\n var targetPath = path__WEBPACK_IMPORTED_MODULE_1__.join(target, file);\n if (fs__WEBPACK_IMPORTED_MODULE_0__.lstatSync(sourcePath).isDirectory()) {\n copyFolderSync(sourcePath, targetPath);\n }\n else {\n fs__WEBPACK_IMPORTED_MODULE_0__.copyFileSync(sourcePath, targetPath);\n }\n }\n};\n/**\n * 递归遍历文件夹执行特定回调\n * @param folderPath 文件夹路径\n * @param callBack 回调方法\n */\nvar loopFolderSync = function (folderPath, callBack) {\n if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(folderPath)) {\n return;\n }\n fs__WEBPACK_IMPORTED_MODULE_0__.readdirSync(folderPath).forEach(function (file, index) {\n var curPath = path__WEBPACK_IMPORTED_MODULE_1__.join(folderPath, file);\n var isDirectory = fs__WEBPACK_IMPORTED_MODULE_0__.lstatSync(curPath).isDirectory();\n if (isDirectory) {\n loopFolderSync(curPath, callBack);\n }\n callBack(curPath, isDirectory, index);\n });\n};\nvar fsUtils = {\n readFileToJSONSync: readFileToJSONSync,\n copyFolderSync: copyFolderSync,\n loopFolderSync: loopFolderSync\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (fsUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./node/fs.ts
|
|
46
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ copyFolderSync: () => (/* binding */ copyFolderSync),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ loopFolderSync: () => (/* binding */ loopFolderSync),\n/* harmony export */ readFileToJSONSync: () => (/* binding */ readFileToJSONSync)\n/* harmony export */ });\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * 读取文件并转换为JSON\n * @param filePath 文件路径\n * @returns 转换之后的JSON对象\n */\nvar readFileToJSONSync = function (filePath) {\n try {\n var fileStr = fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(filePath, 'utf8');\n return JSON.parse(fileStr);\n }\n catch (error) {\n console.error(\"Failed to read or parse setting file \".concat(filePath, \":\"), error);\n return {};\n }\n};\n/**\n * 拷贝文件夹至目标目录\n * @param source 源文件夹\n * @param target 目标文件夹\n */\nvar copyFolderSync = function (source, target) {\n if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(target)) {\n fs__WEBPACK_IMPORTED_MODULE_0__.mkdirSync(target);\n }\n var files = fs__WEBPACK_IMPORTED_MODULE_0__.readdirSync(source);\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var file = files_1[_i];\n var sourcePath = path__WEBPACK_IMPORTED_MODULE_1__.join(source, file);\n var targetPath = path__WEBPACK_IMPORTED_MODULE_1__.join(target, file);\n if (fs__WEBPACK_IMPORTED_MODULE_0__.lstatSync(sourcePath).isDirectory()) {\n copyFolderSync(sourcePath, targetPath);\n }\n else {\n fs__WEBPACK_IMPORTED_MODULE_0__.copyFileSync(sourcePath, targetPath);\n }\n }\n};\n/**\n * 递归遍历文件夹执行特定回调\n * @param folderPath 文件夹路径\n * @param callBack 回调方法\n */\nvar loopFolderSync = function (folderPath, callBack) {\n if (!fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(folderPath)) {\n return;\n }\n fs__WEBPACK_IMPORTED_MODULE_0__.readdirSync(folderPath).forEach(function (file, index) {\n var curPath = path__WEBPACK_IMPORTED_MODULE_1__.join(folderPath, file);\n var isDirectory = fs__WEBPACK_IMPORTED_MODULE_0__.lstatSync(curPath).isDirectory();\n if (isDirectory) {\n loopFolderSync(curPath, callBack);\n }\n callBack(curPath, isDirectory, index);\n });\n};\nvar fsUtils = {\n readFileToJSONSync: readFileToJSONSync,\n copyFolderSync: copyFolderSync,\n loopFolderSync: loopFolderSync\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (fsUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./node/fs.ts?\n}");
|
|
27
47
|
|
|
28
48
|
/***/ }),
|
|
29
49
|
|
|
@@ -33,7 +53,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
33
53
|
\***********************/
|
|
34
54
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
35
55
|
|
|
36
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fs */ \"./node/fs.ts\");\n/* harmony import */ var
|
|
56
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fs */ \"./node/fs.ts\");\n/* harmony import */ var _babel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./babel */ \"./node/babel.ts\");\n/* harmony import */ var _excel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./excel */ \"./node/excel.ts\");\n/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ \"./src/index.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n// 使用命名导出替代默认导出\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__assign(__assign({}, _src_index__WEBPACK_IMPORTED_MODULE_3__[\"default\"]), { fs: _fs__WEBPACK_IMPORTED_MODULE_0__[\"default\"], babel: _babel__WEBPACK_IMPORTED_MODULE_1__[\"default\"], excel: _excel__WEBPACK_IMPORTED_MODULE_2__[\"default\"] }));\n\n\n//# sourceURL=webpack://easyutilssdk/./node/index.ts?\n}");
|
|
57
|
+
|
|
58
|
+
/***/ }),
|
|
59
|
+
|
|
60
|
+
/***/ "./src/common.ts":
|
|
61
|
+
/*!***********************!*\
|
|
62
|
+
!*** ./src/common.ts ***!
|
|
63
|
+
\***********************/
|
|
64
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
65
|
+
|
|
66
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * async await 延迟几秒\n * @param seconds 秒数\n * @returns\n */\nvar delay = function (seconds) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve();\n }, seconds * 1000);\n });\n};\nvar commonUtils = {\n delay: delay\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (commonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/common.ts?\n}");
|
|
37
67
|
|
|
38
68
|
/***/ }),
|
|
39
69
|
|
|
@@ -43,7 +73,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
43
73
|
\**********************/
|
|
44
74
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
45
75
|
|
|
46
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var
|
|
76
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common */ \"./src/common.ts\");\n/* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./json */ \"./src/json.ts\");\n// 使用命名导出替代默认导出\n\n\nvar easyutilssdk = {\n common: _common__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n json: _json__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n // fileFe: fileUtils\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (easyutilssdk);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/index.ts?\n}");
|
|
47
77
|
|
|
48
78
|
/***/ }),
|
|
49
79
|
|
|
@@ -53,7 +83,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
53
83
|
\*********************/
|
|
54
84
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
55
85
|
|
|
56
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortObjectKeys = function (obj, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(function (item) { return sortObjectKeys(item, { sortType: sortType }); });\n }\n return Object.keys(obj)\n .sort(function (a, b) {\n var res = sortType === 'desc'\n ? b.toLowerCase().localeCompare(a.toLowerCase())\n : a.toLowerCase().localeCompare(b.toLowerCase());\n return res;\n })\n .reduce(function (acc, key) {\n acc[key] = sortObjectKeys(obj[key], { sortType: sortType });\n return acc;\n }, {});\n};\n/**\n * 将JSON字符串格式化并按照key进行排序\n * @param jsonString 原始JSON字符串\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 格式化之后的JSON字符串\n */\nvar sortJson = function (jsonString, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n try {\n var parsed = JSON.parse(jsonString);\n var sortedParsed = sortObjectKeys(parsed, { sortType: sortType });\n return JSON.stringify(sortedParsed, null, 2);\n }\n catch (e) {\n console.error('Failed to parse JSON string:', e);\n return jsonString; // Return original string if parsing fails\n }\n};\nvar jsonUtils = {\n sortObjectKeys: sortObjectKeys,\n sortJson: sortJson\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jsonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/json.ts
|
|
86
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortObjectKeys = function (obj, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(function (item) { return sortObjectKeys(item, { sortType: sortType }); });\n }\n return Object.keys(obj)\n .sort(function (a, b) {\n var res = sortType === 'desc'\n ? b.toLowerCase().localeCompare(a.toLowerCase())\n : a.toLowerCase().localeCompare(b.toLowerCase());\n return res;\n })\n .reduce(function (acc, key) {\n acc[key] = sortObjectKeys(obj[key], { sortType: sortType });\n return acc;\n }, {});\n};\n/**\n * 将JSON字符串格式化并按照key进行排序\n * @param jsonString 原始JSON字符串\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 格式化之后的JSON字符串\n */\nvar sortJson = function (jsonString, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n try {\n var parsed = JSON.parse(jsonString);\n var sortedParsed = sortObjectKeys(parsed, { sortType: sortType });\n return JSON.stringify(sortedParsed, null, 2);\n }\n catch (e) {\n // console.error('Failed to parse JSON string:', e);\n return jsonString; // Return original string if parsing fails\n }\n};\nvar jsonUtils = {\n sortObjectKeys: sortObjectKeys,\n sortJson: sortJson\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jsonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/json.ts?\n}");
|
|
87
|
+
|
|
88
|
+
/***/ }),
|
|
89
|
+
|
|
90
|
+
/***/ "@babel/parser":
|
|
91
|
+
/*!********************************!*\
|
|
92
|
+
!*** external "@babel/parser" ***!
|
|
93
|
+
\********************************/
|
|
94
|
+
/***/ ((module) => {
|
|
95
|
+
|
|
96
|
+
module.exports = require("@babel/parser");
|
|
57
97
|
|
|
58
98
|
/***/ }),
|
|
59
99
|
|
|
@@ -75,6 +115,16 @@ module.exports = require("fs");
|
|
|
75
115
|
|
|
76
116
|
module.exports = require("path");
|
|
77
117
|
|
|
118
|
+
/***/ }),
|
|
119
|
+
|
|
120
|
+
/***/ "xlsx":
|
|
121
|
+
/*!***********************!*\
|
|
122
|
+
!*** external "xlsx" ***!
|
|
123
|
+
\***********************/
|
|
124
|
+
/***/ ((module) => {
|
|
125
|
+
|
|
126
|
+
module.exports = require("xlsx");
|
|
127
|
+
|
|
78
128
|
/***/ })
|
|
79
129
|
|
|
80
130
|
/******/ });
|
package/dist/png.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import JSZip from "jszip";
|
|
2
|
+
export interface pngCompareResult {
|
|
3
|
+
diffNum: number;
|
|
4
|
+
oldImageElement: HTMLImageElement;
|
|
5
|
+
newImageElement: HTMLImageElement;
|
|
6
|
+
diffImageData: HTMLImageElement;
|
|
7
|
+
}
|
|
8
|
+
declare const fileUtils: {
|
|
9
|
+
zipUpdateToFiles: (e: any) => Promise<any>;
|
|
10
|
+
htmlToPngUrl: (dom: HTMLElement) => Promise<string>;
|
|
11
|
+
htmlToPngDownLoad: (dom: HTMLElement, fileName: string) => Promise<void>;
|
|
12
|
+
htmlToPngAddToZip: (dom: HTMLElement, fileName: string, zipObj: JSZip) => Promise<void>;
|
|
13
|
+
downLoadZip: (zipObj: JSZip, fileName: string) => Promise<void>;
|
|
14
|
+
comparePng: (leftFile: File, rightFile: File) => Promise<pngCompareResult>;
|
|
15
|
+
comparePngUrl: (leftPngUrl: string, rightPngUrl: string) => Promise<pngCompareResult>;
|
|
16
|
+
};
|
|
17
|
+
export default fileUtils;
|
package/dist/web/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 版本信息
|
|
3
3
|
* realBranch(真实分支): dev
|
|
4
|
-
* buildTime(打包时间): 2025/
|
|
5
|
-
* commitId(最后一条提交SHA):
|
|
4
|
+
* buildTime(打包时间): 2025/12/28 18:00:57
|
|
5
|
+
* commitId(最后一条提交SHA): 4b245637b9b60f847931fddc2694ada9b561311f
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/*
|
|
@@ -15,13 +15,23 @@
|
|
|
15
15
|
*/
|
|
16
16
|
/******/ var __webpack_modules__ = ({
|
|
17
17
|
|
|
18
|
+
/***/ "./src/common.ts":
|
|
19
|
+
/*!***********************!*\
|
|
20
|
+
!*** ./src/common.ts ***!
|
|
21
|
+
\***********************/
|
|
22
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
23
|
+
|
|
24
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * async await 延迟几秒\n * @param seconds 秒数\n * @returns\n */\nvar delay = function (seconds) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve();\n }, seconds * 1000);\n });\n};\nvar commonUtils = {\n delay: delay\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (commonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/common.ts?\n}");
|
|
25
|
+
|
|
26
|
+
/***/ }),
|
|
27
|
+
|
|
18
28
|
/***/ "./src/index.ts":
|
|
19
29
|
/*!**********************!*\
|
|
20
30
|
!*** ./src/index.ts ***!
|
|
21
31
|
\**********************/
|
|
22
32
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
23
33
|
|
|
24
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var
|
|
34
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common */ \"./src/common.ts\");\n/* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./json */ \"./src/json.ts\");\n// 使用命名导出替代默认导出\n\n\nvar easyutilssdk = {\n common: _common__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n json: _json__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n // fileFe: fileUtils\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (easyutilssdk);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/index.ts?\n}");
|
|
25
35
|
|
|
26
36
|
/***/ }),
|
|
27
37
|
|
|
@@ -31,7 +41,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
31
41
|
\*********************/
|
|
32
42
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
33
43
|
|
|
34
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortObjectKeys = function (obj, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(function (item) { return sortObjectKeys(item, { sortType: sortType }); });\n }\n return Object.keys(obj)\n .sort(function (a, b) {\n var res = sortType === 'desc'\n ? b.toLowerCase().localeCompare(a.toLowerCase())\n : a.toLowerCase().localeCompare(b.toLowerCase());\n return res;\n })\n .reduce(function (acc, key) {\n acc[key] = sortObjectKeys(obj[key], { sortType: sortType });\n return acc;\n }, {});\n};\n/**\n * 将JSON字符串格式化并按照key进行排序\n * @param jsonString 原始JSON字符串\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 格式化之后的JSON字符串\n */\nvar sortJson = function (jsonString, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n try {\n var parsed = JSON.parse(jsonString);\n var sortedParsed = sortObjectKeys(parsed, { sortType: sortType });\n return JSON.stringify(sortedParsed, null, 2);\n }\n catch (e) {\n console.error('Failed to parse JSON string:', e);\n return jsonString; // Return original string if parsing fails\n }\n};\nvar jsonUtils = {\n sortObjectKeys: sortObjectKeys,\n sortJson: sortJson\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jsonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/json.ts
|
|
44
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortObjectKeys = function (obj, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(function (item) { return sortObjectKeys(item, { sortType: sortType }); });\n }\n return Object.keys(obj)\n .sort(function (a, b) {\n var res = sortType === 'desc'\n ? b.toLowerCase().localeCompare(a.toLowerCase())\n : a.toLowerCase().localeCompare(b.toLowerCase());\n return res;\n })\n .reduce(function (acc, key) {\n acc[key] = sortObjectKeys(obj[key], { sortType: sortType });\n return acc;\n }, {});\n};\n/**\n * 将JSON字符串格式化并按照key进行排序\n * @param jsonString 原始JSON字符串\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 格式化之后的JSON字符串\n */\nvar sortJson = function (jsonString, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.sortType, sortType = _c === void 0 ? 'asc' : _c;\n try {\n var parsed = JSON.parse(jsonString);\n var sortedParsed = sortObjectKeys(parsed, { sortType: sortType });\n return JSON.stringify(sortedParsed, null, 2);\n }\n catch (e) {\n // console.error('Failed to parse JSON string:', e);\n return jsonString; // Return original string if parsing fails\n }\n};\nvar jsonUtils = {\n sortObjectKeys: sortObjectKeys,\n sortJson: sortJson\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jsonUtils);\n\n\n//# sourceURL=webpack://easyutilssdk/./src/json.ts?\n}");
|
|
35
45
|
|
|
36
46
|
/***/ })
|
|
37
47
|
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
preset: 'ts-jest',
|
|
3
|
+
testEnvironment: 'node',
|
|
4
|
+
roots: ['<rootDir>/src', '<rootDir>/node'],
|
|
5
|
+
testMatch: ['**/__tests__/**/*.+(ts|tsx|js)', '**/?(*.)+(spec|test).+(ts|tsx|js)'],
|
|
6
|
+
transform: {
|
|
7
|
+
'^.+\\.(ts|tsx)$': 'ts-jest',
|
|
8
|
+
},
|
|
9
|
+
collectCoverageFrom: [
|
|
10
|
+
'src/**/*.{ts,tsx}',
|
|
11
|
+
'!src/index.ts',
|
|
12
|
+
'!src/**/*.d.ts'
|
|
13
|
+
]
|
|
14
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "easyutilssdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"main": "dist/node/index.js",
|
|
5
5
|
"browser": "dist/web/index.js",
|
|
6
6
|
"author": "liuyk",
|
|
@@ -11,13 +11,18 @@
|
|
|
11
11
|
"build:node": "webpack --config webpack.node.config.js",
|
|
12
12
|
"build": "npm run build:web && npm run build:node",
|
|
13
13
|
"watch": "webpack --watch",
|
|
14
|
-
"serve": "webpack serve"
|
|
14
|
+
"serve": "webpack serve",
|
|
15
|
+
"test": "jest",
|
|
16
|
+
"test:watch": "jest --watch",
|
|
17
|
+
"test:coverage": "jest --coverage"
|
|
15
18
|
},
|
|
16
19
|
"devDependencies": {
|
|
20
|
+
"@types/jest": "^30.0.0",
|
|
17
21
|
"@webpack-cli/generators": "^3.0.7",
|
|
18
22
|
"autoprefixer": "^10.4.21",
|
|
19
23
|
"css-loader": "^7.1.2",
|
|
20
24
|
"html-webpack-plugin": "^5.6.3",
|
|
25
|
+
"jest": "^30.1.3",
|
|
21
26
|
"less": "^4.3.0",
|
|
22
27
|
"less-loader": "^12.2.0",
|
|
23
28
|
"mini-css-extract-plugin": "^2.9.2",
|
|
@@ -25,6 +30,7 @@
|
|
|
25
30
|
"postcss-loader": "^8.1.1",
|
|
26
31
|
"prettier": "^3.5.3",
|
|
27
32
|
"style-loader": "^4.0.0",
|
|
33
|
+
"ts-jest": "^29.4.1",
|
|
28
34
|
"ts-loader": "^9.5.2",
|
|
29
35
|
"typescript": "^5.8.3",
|
|
30
36
|
"webpack": "^5.99.7",
|
|
@@ -32,5 +38,19 @@
|
|
|
32
38
|
"webpack-dev-server": "^5.2.1",
|
|
33
39
|
"webpack-node-externals": "^3.0.0"
|
|
34
40
|
},
|
|
35
|
-
"description": "easyutilssdk"
|
|
41
|
+
"description": "easyutilssdk",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@babel/generator": "^7.28.3",
|
|
44
|
+
"@babel/parser": "^7.28.4",
|
|
45
|
+
"@babel/preset-env": "^7.28.3",
|
|
46
|
+
"@babel/preset-react": "^7.27.1",
|
|
47
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
48
|
+
"@babel/traverse": "^7.28.4",
|
|
49
|
+
"@babel/types": "^7.28.4",
|
|
50
|
+
"file-saver": "^2.0.5",
|
|
51
|
+
"html2canvas": "^1.4.1",
|
|
52
|
+
"jszip": "^3.10.1",
|
|
53
|
+
"pixelmatch": "^7.1.0",
|
|
54
|
+
"xlsx": "^0.18.5"
|
|
55
|
+
}
|
|
36
56
|
}
|