easyutilssdk 0.1.2 → 0.1.4
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/README.md +33 -9
- 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 +29 -0
- package/dist/node/excel.d.ts +22 -0
- package/dist/node/fs.d.ts +27 -17
- package/dist/node/index.d.ts +4 -13
- package/dist/node/index.js +56 -6
- package/dist/png.d.ts +17 -0
- package/dist/web/index.js +20 -6
- package/jest.config.js +14 -0
- package/package.json +25 -3
- package/typedoc.json +12 -0
package/README.md
CHANGED
|
@@ -1,15 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## typedoc使用说明
|
|
2
|
+
依赖`tsconfig.json`的配置信息,用于生成文档
|
|
3
|
+
### package.json
|
|
5
4
|
```
|
|
6
|
-
|
|
5
|
+
scripts:{
|
|
6
|
+
"typedoc": "typedoc"
|
|
7
|
+
},
|
|
8
|
+
"devDependencies": {
|
|
9
|
+
"typedoc": "^0.28.15"
|
|
10
|
+
}
|
|
7
11
|
```
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
### typedoc.json
|
|
11
14
|
```
|
|
12
|
-
|
|
15
|
+
{
|
|
16
|
+
"entryPoints": ["./node/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"],
|
|
17
|
+
"exclude": ["*/__tests__/*.ts", "node/codeCommentTest/*.ts", "./node/index.ts", "./src/index.ts"],
|
|
18
|
+
"out": "docs",
|
|
19
|
+
"name": "EasyUtilsSDK",
|
|
20
|
+
"readme": "README.md",
|
|
21
|
+
"theme": "default",
|
|
22
|
+
"excludePrivate": true,
|
|
23
|
+
"excludeProtected": true,
|
|
24
|
+
"includeVersion": true,
|
|
25
|
+
"disableSources": false,
|
|
26
|
+
}
|
|
13
27
|
```
|
|
14
28
|
|
|
15
|
-
|
|
29
|
+
### 其他说明
|
|
30
|
+
实践过程中为了更好的生成文档,做了如下调试:
|
|
31
|
+
* 调整`"entryPoints": ["./node/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"]`,将所有的ts文件都产出文档。
|
|
32
|
+
* 以`easyutilssdk/node/fs.ts`为例,同时导出了`nodeFsUtils`以及具体方法,正常使用应该使用`nodeFsUtils`,具体方法导出是为了产出doc文档
|
|
33
|
+
* 以`easyutilssdk/node/fs.ts`为例,在头部声明`@module`用于生成doc文档
|
|
34
|
+
```
|
|
35
|
+
/**
|
|
36
|
+
* @module fs
|
|
37
|
+
* @description 文件系统工具模块,提供文件和文件夹操作的实用方法
|
|
38
|
+
*/
|
|
39
|
+
```
|
|
@@ -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,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module nodeBabel
|
|
3
|
+
* @description Babel AST 工具模块,提供代码注释提取、处理和还原功能
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 提取代码文件中的注释选项
|
|
7
|
+
*/
|
|
8
|
+
export interface extractCommentsToFileOptions {
|
|
9
|
+
includeKeys?: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 主函数:提取指定文件的注释并保存到另一文件,然后从源文件中删除注释
|
|
13
|
+
* @param sourcePath - 源文件路径
|
|
14
|
+
* @param commentsOutputPath - 注释输出文件路径
|
|
15
|
+
* @param metadataPath - 元数据文件路径
|
|
16
|
+
* @param options - 提取选项
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractCommentsToFile(sourcePath: string, commentsOutputPath: string, metadataPath: string, options?: extractCommentsToFileOptions): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 还原代码文件(将注释加回到无注释的代码中)
|
|
21
|
+
* @param codePath - 无注释的代码文件路径
|
|
22
|
+
* @param metadataPath - 元数据文件路径
|
|
23
|
+
* @param outputPath - 还原后的代码输出路径
|
|
24
|
+
*/
|
|
25
|
+
export declare function restoreCodeFromFile(codePath: string, metadataPath: string, outputPath: string): Promise<void>;
|
|
26
|
+
export declare const nodeBabelUtils: {
|
|
27
|
+
extractCommentsToFile: typeof extractCommentsToFile;
|
|
28
|
+
restoreCodeFromFile: typeof restoreCodeFromFile;
|
|
29
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module nodeExcel
|
|
3
|
+
* @description Excel 文件处理工具模块,提供 Excel 与 JSON 格式相互转换的功能
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 将Excel文件转换为JSON数据
|
|
7
|
+
* @param filePath - Excel文件路径
|
|
8
|
+
* @param sheetName - 工作表名称(可选,默认为第一个工作表)
|
|
9
|
+
* @returns JSON数据数组
|
|
10
|
+
*/
|
|
11
|
+
export declare const excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
12
|
+
/**
|
|
13
|
+
* 将Excel文件转换为JSON并保存到文件
|
|
14
|
+
* @param excelPath - Excel文件路径
|
|
15
|
+
* @param jsonPath - 输出JSON文件路径(可选,默认与Excel同名但扩展名为.json)
|
|
16
|
+
* @param sheetName - 工作表名称(可选,默认为第一个工作表)
|
|
17
|
+
*/
|
|
18
|
+
export declare const excelToJsonFile: (excelPath: string, jsonPath?: string, sheetName?: string) => void;
|
|
19
|
+
export declare const nodeExcelUtils: {
|
|
20
|
+
excelToJson: (filePath: string, sheetName?: string) => any[];
|
|
21
|
+
excelToJsonFile: (excelPath: string, jsonPath?: string, sheetName?: string) => void;
|
|
22
|
+
};
|
package/dist/node/fs.d.ts
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
|
-
export interface LoopFolderCallback {
|
|
2
|
-
(filePath: string, isDirectory: boolean, index: number): void;
|
|
3
|
-
}
|
|
4
1
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
* @module nodeFs
|
|
3
|
+
* @description 文件系统工具模块,提供文件和文件夹操作的实用方法
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 读取文件并转换为JSON,仅执行JSON.parse
|
|
7
|
+
* @param filePath - 文件路径
|
|
8
|
+
* @returns 转换之后的JSON对象
|
|
9
|
+
*/
|
|
9
10
|
export declare const readFileToJSONSync: (filePath: string) => object;
|
|
10
11
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
* 拷贝文件夹下所有文件至目标目录
|
|
13
|
+
* todo 增加控制是否覆盖
|
|
14
|
+
* @param source - 源文件夹
|
|
15
|
+
* @param target - 目标文件夹
|
|
16
|
+
*/
|
|
15
17
|
export declare const copyFolderSync: (source: string, target: string) => void;
|
|
16
18
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
* 文件夹遍历回调方法
|
|
20
|
+
* @param filePath - 文件路径
|
|
21
|
+
* @param isDirectory - 是否为文件夹
|
|
22
|
+
* @param index - 文件索引
|
|
23
|
+
*/
|
|
24
|
+
export interface LoopFolderCallback {
|
|
25
|
+
(filePath: string, isDirectory: boolean, index: number): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 递归遍历文件夹执行特定回调
|
|
29
|
+
* @param folderPath - 文件夹路径
|
|
30
|
+
* @param callBack - 回调方法
|
|
31
|
+
*/
|
|
21
32
|
export declare const loopFolderSync: (folderPath: string, callBack: LoopFolderCallback) => void;
|
|
22
|
-
declare const
|
|
33
|
+
export declare const nodeFsUtils: {
|
|
23
34
|
readFileToJSONSync: (filePath: string) => object;
|
|
24
35
|
copyFolderSync: (source: string, target: string) => void;
|
|
25
36
|
loopFolderSync: (folderPath: string, callBack: LoopFolderCallback) => void;
|
|
26
37
|
};
|
|
27
|
-
export default fsUtils;
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
copyFolderSync: (source: string, target: string) => void;
|
|
6
|
-
loopFolderSync: (folderPath: string, callBack: import("./fs").LoopFolderCallback) => void;
|
|
7
|
-
};
|
|
8
|
-
json: {
|
|
9
|
-
sortObjectKeys: (obj: any, { sortType }?: import("../src/json").SortOptions) => object | null;
|
|
10
|
-
sortJson: (jsonString: string, { sortType }?: import("../src/json").SortOptions) => string;
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
export default _default;
|
|
1
|
+
export * from './fs';
|
|
2
|
+
export * from './babel';
|
|
3
|
+
export * from './excel';
|
|
4
|
+
export * from '../src/index';
|
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/30 17:02:35
|
|
5
|
+
* commitId(最后一条提交SHA): c774ff55af1a47a8b14369f4a6f3a781e1bd4245
|
|
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 */ extractCommentsToFile: () => (/* binding */ extractCommentsToFile),\n/* harmony export */ nodeBabelUtils: () => (/* binding */ nodeBabelUtils),\n/* harmony export */ restoreCodeFromFile: () => (/* binding */ restoreCodeFromFile)\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__);\n/**\n * @module nodeBabel\n * @description Babel AST 工具模块,提供代码注释提取、处理和还原功能\n */\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 filePath - 源代码文件路径\n * @param options - 提取选项\n * @returns 包含注释数组和原始文件内容的对象\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 comments - 注释数组\n * @param outputPath - 输出文件路径\n * @param 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 comments - 注释数组\n * @param 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 metadataPath - 元数据文件路径\n * @returns 注释数组或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 filePath - 源代码文件路径\n * @param comments - 注释数组\n * @returns 移除注释后的代码和相关信息\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 codeWithoutComments - 不包含注释的代码\n * @param comments - 注释数组\n * @returns 还原后的完整代码\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 sourcePath - 源文件路径\n * @param commentsOutputPath - 注释输出文件路径\n * @param metadataPath - 元数据文件路径\n * @param options - 提取选项\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 codePath - 无注释的代码文件路径\n * @param metadataPath - 元数据文件路径\n * @param 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}\n// 按模块导出方便外部调用\nvar nodeBabelUtils = {\n extractCommentsToFile: extractCommentsToFile,\n restoreCodeFromFile: restoreCodeFromFile\n};\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 */ excelToJson: () => (/* binding */ excelToJson),\n/* harmony export */ excelToJsonFile: () => (/* binding */ excelToJsonFile),\n/* harmony export */ nodeExcelUtils: () => (/* binding */ nodeExcelUtils)\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 * @module nodeExcel\n * @description Excel 文件处理工具模块,提供 Excel 与 JSON 格式相互转换的功能\n */\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};\n// 按模块导出方便外部调用\nvar nodeExcelUtils = {\n excelToJson: excelToJson,\n excelToJsonFile: excelToJsonFile,\n};\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 */
|
|
46
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ copyFolderSync: () => (/* binding */ copyFolderSync),\n/* harmony export */ loopFolderSync: () => (/* binding */ loopFolderSync),\n/* harmony export */ nodeFsUtils: () => (/* binding */ nodeFsUtils),\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 * @module nodeFs\n * @description 文件系统工具模块,提供文件和文件夹操作的实用方法\n */\n\n\n/**\n * 读取文件并转换为JSON,仅执行JSON.parse\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 * todo 增加控制是否覆盖\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};\n// 按模块导出方便外部调用\nvar nodeFsUtils = {\n readFileToJSONSync: readFileToJSONSync,\n copyFolderSync: copyFolderSync,\n loopFolderSync: loopFolderSync\n};\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 */
|
|
56
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ commonUtils: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.commonUtils),\n/* harmony export */ copyFolderSync: () => (/* reexport safe */ _fs__WEBPACK_IMPORTED_MODULE_0__.copyFolderSync),\n/* harmony export */ delay: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.delay),\n/* harmony export */ excelToJson: () => (/* reexport safe */ _excel__WEBPACK_IMPORTED_MODULE_2__.excelToJson),\n/* harmony export */ excelToJsonFile: () => (/* reexport safe */ _excel__WEBPACK_IMPORTED_MODULE_2__.excelToJsonFile),\n/* harmony export */ extractCommentsToFile: () => (/* reexport safe */ _babel__WEBPACK_IMPORTED_MODULE_1__.extractCommentsToFile),\n/* harmony export */ jsonUtils: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.jsonUtils),\n/* harmony export */ loopFolderSync: () => (/* reexport safe */ _fs__WEBPACK_IMPORTED_MODULE_0__.loopFolderSync),\n/* harmony export */ nodeBabelUtils: () => (/* reexport safe */ _babel__WEBPACK_IMPORTED_MODULE_1__.nodeBabelUtils),\n/* harmony export */ nodeExcelUtils: () => (/* reexport safe */ _excel__WEBPACK_IMPORTED_MODULE_2__.nodeExcelUtils),\n/* harmony export */ nodeFsUtils: () => (/* reexport safe */ _fs__WEBPACK_IMPORTED_MODULE_0__.nodeFsUtils),\n/* harmony export */ readFileToJSONSync: () => (/* reexport safe */ _fs__WEBPACK_IMPORTED_MODULE_0__.readFileToJSONSync),\n/* harmony export */ restoreCodeFromFile: () => (/* reexport safe */ _babel__WEBPACK_IMPORTED_MODULE_1__.restoreCodeFromFile),\n/* harmony export */ sortJsonByKeys: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sortJsonByKeys),\n/* harmony export */ sortJsonStringByKeys: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sortJsonStringByKeys)\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\");\n// // 使用命名导出替代默认导出\n// import fsUtils from './fs';\n// import babelUtils from './babel';\n// import excelUtils from './excel';\n// // 如果需要导出类型,可以单独导出\n// export type { LoopFolderCallback } from './fs';\n// export type { extractCommentsToFileOptions } from './babel';\n// import webUtils from '../src/index';\n// // 将默认导出改为命名导出,这样TypeDoc能更好地识别和生成文档\n// export const common = webUtils.common;\n// export const json = webUtils.json;\n// export const fs = fsUtils;\n// export const babel = babelUtils;\n// export const excel = excelUtils;\n// // 保留默认导出以保持向后兼容性\n// const easyUtilsSdk = {\n// ...webUtils,\n// fs: fsUtils,\n// babel: babelUtils,\n// excel: excelUtils,\n// };\n// export default easyUtilsSdk;\n\n\n\n\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 */ commonUtils: () => (/* binding */ commonUtils),\n/* harmony export */ delay: () => (/* binding */ delay)\n/* harmony export */ });\n/**\n * @module common\n * @description 通用工具类\n */\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\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 */
|
|
76
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ commonUtils: () => (/* reexport safe */ _common__WEBPACK_IMPORTED_MODULE_0__.commonUtils),\n/* harmony export */ delay: () => (/* reexport safe */ _common__WEBPACK_IMPORTED_MODULE_0__.delay),\n/* harmony export */ jsonUtils: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.jsonUtils),\n/* harmony export */ sortJsonByKeys: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.sortJsonByKeys),\n/* harmony export */ sortJsonStringByKeys: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.sortJsonStringByKeys)\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// import commonUtils from './common';\n// import jsonUtils from './json';\n// // import fileUtils from './file';\n// // 如果需要导出类型,可以单独导出\n// export type { SortOptions } from './json';\n// const easyutilssdk = {\n// common: commonUtils,\n// json: jsonUtils,\n// // fileFe: fileUtils\n// };\n// export default easyutilssdk\n\n\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 */
|
|
86
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ jsonUtils: () => (/* binding */ jsonUtils),\n/* harmony export */ sortJsonByKeys: () => (/* binding */ sortJsonByKeys),\n/* harmony export */ sortJsonStringByKeys: () => (/* binding */ sortJsonStringByKeys)\n/* harmony export */ });\n/**\n * @module json\n * @description json对象相关工具类\n */\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortJsonByKeys = 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 sortJsonByKeys(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] = sortJsonByKeys(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 sortJsonStringByKeys = 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 = sortJsonByKeys(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 sortJsonByKeys: sortJsonByKeys,\n sortJsonStringByKeys: sortJsonStringByKeys\n};\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/30 17:02:31
|
|
5
|
+
* commitId(最后一条提交SHA): c774ff55af1a47a8b14369f4a6f3a781e1bd4245
|
|
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 */ commonUtils: () => (/* binding */ commonUtils),\n/* harmony export */ delay: () => (/* binding */ delay)\n/* harmony export */ });\n/**\n * @module common\n * @description 通用工具类\n */\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\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 */
|
|
34
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ commonUtils: () => (/* reexport safe */ _common__WEBPACK_IMPORTED_MODULE_0__.commonUtils),\n/* harmony export */ delay: () => (/* reexport safe */ _common__WEBPACK_IMPORTED_MODULE_0__.delay),\n/* harmony export */ jsonUtils: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.jsonUtils),\n/* harmony export */ sortJsonByKeys: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.sortJsonByKeys),\n/* harmony export */ sortJsonStringByKeys: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_1__.sortJsonStringByKeys)\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// import commonUtils from './common';\n// import jsonUtils from './json';\n// // import fileUtils from './file';\n// // 如果需要导出类型,可以单独导出\n// export type { SortOptions } from './json';\n// const easyutilssdk = {\n// common: commonUtils,\n// json: jsonUtils,\n// // fileFe: fileUtils\n// };\n// export default easyutilssdk\n\n\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 */
|
|
44
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ jsonUtils: () => (/* binding */ jsonUtils),\n/* harmony export */ sortJsonByKeys: () => (/* binding */ sortJsonByKeys),\n/* harmony export */ sortJsonStringByKeys: () => (/* binding */ sortJsonStringByKeys)\n/* harmony export */ });\n/**\n * @module json\n * @description json对象相关工具类\n */\n/**\n * 对JSON对象按照key进行升序或者降序排序\n * @param obj JSON对象\n * @param SortOptions 排序参数:sortType为排序方式,asc升序,desc降序,默认asc\n * @returns 排序之后的JSON对象\n */\nvar sortJsonByKeys = 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 sortJsonByKeys(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] = sortJsonByKeys(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 sortJsonStringByKeys = 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 = sortJsonByKeys(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 sortJsonByKeys: sortJsonByKeys,\n sortJsonStringByKeys: sortJsonStringByKeys\n};\n\n\n//# sourceURL=webpack://easyutilssdk/./src/json.ts?\n}");
|
|
35
45
|
|
|
36
46
|
/***/ })
|
|
37
47
|
|
|
@@ -96,6 +106,10 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
96
106
|
/******/ // Load entry module and return exports
|
|
97
107
|
/******/ // This entry module can't be inlined because the eval devtool is used.
|
|
98
108
|
/******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
|
|
99
|
-
/******/ const
|
|
100
|
-
/******/
|
|
109
|
+
/******/ const __webpack_exports__commonUtils = __webpack_exports__.commonUtils;
|
|
110
|
+
/******/ const __webpack_exports__delay = __webpack_exports__.delay;
|
|
111
|
+
/******/ const __webpack_exports__jsonUtils = __webpack_exports__.jsonUtils;
|
|
112
|
+
/******/ const __webpack_exports__sortJsonByKeys = __webpack_exports__.sortJsonByKeys;
|
|
113
|
+
/******/ const __webpack_exports__sortJsonStringByKeys = __webpack_exports__.sortJsonStringByKeys;
|
|
114
|
+
/******/ export { __webpack_exports__commonUtils as commonUtils, __webpack_exports__delay as delay, __webpack_exports__jsonUtils as jsonUtils, __webpack_exports__sortJsonByKeys as sortJsonByKeys, __webpack_exports__sortJsonStringByKeys as sortJsonStringByKeys };
|
|
101
115
|
/******/
|
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.4",
|
|
4
4
|
"main": "dist/node/index.js",
|
|
5
5
|
"browser": "dist/web/index.js",
|
|
6
6
|
"author": "liuyk",
|
|
@@ -11,13 +11,19 @@
|
|
|
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",
|
|
18
|
+
"typedoc": "typedoc"
|
|
15
19
|
},
|
|
16
20
|
"devDependencies": {
|
|
21
|
+
"@types/jest": "^30.0.0",
|
|
17
22
|
"@webpack-cli/generators": "^3.0.7",
|
|
18
23
|
"autoprefixer": "^10.4.21",
|
|
19
24
|
"css-loader": "^7.1.2",
|
|
20
25
|
"html-webpack-plugin": "^5.6.3",
|
|
26
|
+
"jest": "^30.1.3",
|
|
21
27
|
"less": "^4.3.0",
|
|
22
28
|
"less-loader": "^12.2.0",
|
|
23
29
|
"mini-css-extract-plugin": "^2.9.2",
|
|
@@ -25,12 +31,28 @@
|
|
|
25
31
|
"postcss-loader": "^8.1.1",
|
|
26
32
|
"prettier": "^3.5.3",
|
|
27
33
|
"style-loader": "^4.0.0",
|
|
34
|
+
"ts-jest": "^29.4.1",
|
|
28
35
|
"ts-loader": "^9.5.2",
|
|
36
|
+
"typedoc": "^0.28.15",
|
|
29
37
|
"typescript": "^5.8.3",
|
|
30
38
|
"webpack": "^5.99.7",
|
|
31
39
|
"webpack-cli": "^5.1.4",
|
|
32
40
|
"webpack-dev-server": "^5.2.1",
|
|
33
41
|
"webpack-node-externals": "^3.0.0"
|
|
34
42
|
},
|
|
35
|
-
"description": "easyutilssdk"
|
|
43
|
+
"description": "easyutilssdk",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@babel/generator": "^7.28.3",
|
|
46
|
+
"@babel/parser": "^7.28.4",
|
|
47
|
+
"@babel/preset-env": "^7.28.3",
|
|
48
|
+
"@babel/preset-react": "^7.27.1",
|
|
49
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
50
|
+
"@babel/traverse": "^7.28.4",
|
|
51
|
+
"@babel/types": "^7.28.4",
|
|
52
|
+
"file-saver": "^2.0.5",
|
|
53
|
+
"html2canvas": "^1.4.1",
|
|
54
|
+
"jszip": "^3.10.1",
|
|
55
|
+
"pixelmatch": "^7.1.0",
|
|
56
|
+
"xlsx": "^0.18.5"
|
|
57
|
+
}
|
|
36
58
|
}
|
package/typedoc.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entryPoints": ["./node/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"],
|
|
3
|
+
"exclude": ["*/__tests__/*.ts", "node/codeCommentTest/*.ts", "./node/index.ts", "./src/index.ts"],
|
|
4
|
+
"out": "docs",
|
|
5
|
+
"name": "EasyUtilsSDK",
|
|
6
|
+
"readme": "README.md",
|
|
7
|
+
"theme": "default",
|
|
8
|
+
"excludePrivate": true,
|
|
9
|
+
"excludeProtected": true,
|
|
10
|
+
"includeVersion": true,
|
|
11
|
+
"disableSources": false,
|
|
12
|
+
}
|