@anddone/coretestautomation 1.0.3 → 1.0.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.
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export declare class FileCommonUtils {
|
|
2
2
|
private static resolvePath;
|
|
3
|
+
static readExcel<T = Record<string, any>>(fileName: string, sheetName?: string): Promise<T[]>;
|
|
4
|
+
static writeExcel(fileName: string, data: Record<string, any>[], sheetName?: string): Promise<void>;
|
|
5
|
+
static getExcelSheetNames(fileName: string): Promise<string[]>;
|
|
3
6
|
static readCSV<T = Record<string, string>>(fileName: string, delimiter?: string): T[];
|
|
4
7
|
static writeCSV(fileName: string, data: Record<string, any>[], delimiter?: string): void;
|
|
5
8
|
static readJson<T>(fileName: string): T | null;
|
|
6
9
|
static readXml<T>(fileName: string): Promise<T | null>;
|
|
7
10
|
static getRowCount<T>(data: T[]): number;
|
|
11
|
+
static getColumnCount<T extends Record<string, any>>(data: T[]): number;
|
|
8
12
|
static getColumnHeaders<T extends Record<string, any>>(data: T[]): string[];
|
|
9
13
|
static getCellData<T extends Record<string, any>>(data: T[], row: number, column: keyof T): any;
|
|
10
14
|
static select<T extends Record<string, any>>(data: T[], column: keyof T, value: any): T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileCommonUtils.d.ts","sourceRoot":"","sources":["../../src/utils/fileCommonUtils.ts"],"names":[],"mappings":"AAWA,qBAAa,eAAe;IAE1B,OAAO,CAAC,MAAM,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"fileCommonUtils.d.ts","sourceRoot":"","sources":["../../src/utils/fileCommonUtils.ts"],"names":[],"mappings":"AAWA,qBAAa,eAAe;IAE1B,OAAO,CAAC,MAAM,CAAC,WAAW;WAKf,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAC,SAAS,CAAC,EAAE,MAAM,GAAI,OAAO,CAAC,CAAC,EAAE,CAAC;WAqCtF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WAoC9F,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYlE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAM,GACd,CAAC,EAAE;IAoBN,MAAM,CAAC,QAAQ,CACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC3B,SAAS,SAAM,GACd,IAAI;IAeP,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;WAUjC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAW5D,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM;IAIxC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM;IAIvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE;IAI3E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9C,IAAI,EAAE,CAAC,EAAE,EACT,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,GACd,GAAG;IAIN,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,EAAE,MAAM,CAAC,EACf,KAAK,EAAE,GAAG,GACT,CAAC,EAAE;WAKO,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAS/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAW7C,YAAY,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,OAAO,SAAK,GACX,OAAO,CAAC,IAAI,CAAC;WAWH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAYjD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WAatD,kBAAkB,CAC7B,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,GACR,OAAO,CAAC,IAAI,CAAC;WAQH,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;CAWnB"}
|
|
@@ -32,9 +32,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.FileCommonUtils = void 0;
|
|
37
|
-
|
|
40
|
+
const exceljs_1 = __importDefault(require("exceljs"));
|
|
38
41
|
const fs = __importStar(require("fs"));
|
|
39
42
|
const path = __importStar(require("path"));
|
|
40
43
|
const xml2js_1 = require("xml2js");
|
|
@@ -48,48 +51,83 @@ class FileCommonUtils {
|
|
|
48
51
|
return path.resolve(process.cwd(), "test-data", fileName);
|
|
49
52
|
}
|
|
50
53
|
// ================== EXCEL ==================
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
54
|
+
static async readExcel(fileName, sheetName) {
|
|
55
|
+
try {
|
|
56
|
+
const filePath = this.resolvePath(fileName);
|
|
57
|
+
const workbook = new exceljs_1.default.Workbook();
|
|
58
|
+
await workbook.xlsx.readFile(filePath);
|
|
59
|
+
const worksheet = sheetName ? workbook.getWorksheet(sheetName) : workbook.worksheets[0];
|
|
60
|
+
if (!worksheet)
|
|
61
|
+
return [];
|
|
62
|
+
const headers = [];
|
|
63
|
+
const data = [];
|
|
64
|
+
worksheet.getRow(1).eachCell((cell, col) => {
|
|
65
|
+
var _a;
|
|
66
|
+
headers[col - 1] = String((_a = cell.value) !== null && _a !== void 0 ? _a : '');
|
|
67
|
+
});
|
|
68
|
+
worksheet.eachRow((row, rowNumber) => {
|
|
69
|
+
if (rowNumber === 1)
|
|
70
|
+
return;
|
|
71
|
+
const rowData = {};
|
|
72
|
+
row.eachCell((cell, col) => {
|
|
73
|
+
var _a;
|
|
74
|
+
const header = headers[col - 1];
|
|
75
|
+
if (header) {
|
|
76
|
+
rowData[header] = (_a = cell.value) !== null && _a !== void 0 ? _a : '';
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
data.push(rowData);
|
|
80
|
+
});
|
|
81
|
+
return data;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(`Failed to read Excel: ${fileName}`, error);
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
static async writeExcel(fileName, data, sheetName = 'Sheet1') {
|
|
89
|
+
var _a;
|
|
90
|
+
try {
|
|
91
|
+
const filePath = this.resolvePath(fileName);
|
|
92
|
+
const workbook = new exceljs_1.default.Workbook();
|
|
93
|
+
// Load existing Excel if it exists
|
|
94
|
+
if (fs.existsSync(filePath)) {
|
|
95
|
+
await workbook.xlsx.readFile(filePath);
|
|
96
|
+
}
|
|
97
|
+
// Get existing sheet or create new one
|
|
98
|
+
let worksheet = workbook.getWorksheet(sheetName);
|
|
99
|
+
if (!worksheet) {
|
|
100
|
+
worksheet = workbook.addWorksheet(sheetName);
|
|
101
|
+
// Add headers ONLY for new sheet
|
|
102
|
+
if (data.length) {
|
|
103
|
+
worksheet.columns = Object.keys((_a = data[0]) !== null && _a !== void 0 ? _a : {}).map(key => ({
|
|
104
|
+
header: key,
|
|
105
|
+
key,
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Append rows (never override)
|
|
110
|
+
if (data.length) {
|
|
111
|
+
worksheet.addRows(data);
|
|
112
|
+
}
|
|
113
|
+
// Save workbook (preserves all sheets)
|
|
114
|
+
await workbook.xlsx.writeFile(filePath);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error(`Failed to write Excel: ${fileName}`, error);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
static async getExcelSheetNames(fileName) {
|
|
121
|
+
try {
|
|
122
|
+
const workbook = new exceljs_1.default.Workbook();
|
|
123
|
+
await workbook.xlsx.readFile(this.resolvePath(fileName));
|
|
124
|
+
return workbook.worksheets.map(ws => ws.name);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error(`Failed to read sheet names: ${fileName}`, error);
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
93
131
|
// ================== CSV ==================
|
|
94
132
|
static readCSV(fileName, delimiter = ",") {
|
|
95
133
|
try {
|
|
@@ -114,11 +152,12 @@ class FileCommonUtils {
|
|
|
114
152
|
}
|
|
115
153
|
}
|
|
116
154
|
static writeCSV(fileName, data, delimiter = ",") {
|
|
155
|
+
var _a;
|
|
117
156
|
try {
|
|
118
157
|
if (!data.length)
|
|
119
158
|
return;
|
|
120
159
|
const filePath = this.resolvePath(fileName);
|
|
121
|
-
const headers = Object.keys(data[0]).join(delimiter);
|
|
160
|
+
const headers = Object.keys((_a = data[0]) !== null && _a !== void 0 ? _a : {}).join(delimiter);
|
|
122
161
|
const rows = data
|
|
123
162
|
.map((row) => Object.values(row).join(delimiter))
|
|
124
163
|
.join("\n");
|
|
@@ -153,6 +192,10 @@ class FileCommonUtils {
|
|
|
153
192
|
static getRowCount(data) {
|
|
154
193
|
return data.length;
|
|
155
194
|
}
|
|
195
|
+
static getColumnCount(data) {
|
|
196
|
+
var _a;
|
|
197
|
+
return Object.keys((_a = data[0]) !== null && _a !== void 0 ? _a : {}).length;
|
|
198
|
+
}
|
|
156
199
|
static getColumnHeaders(data) {
|
|
157
200
|
var _a;
|
|
158
201
|
return Object.keys((_a = data[0]) !== null && _a !== void 0 ? _a : {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileCommonUtils.js","sourceRoot":"","sources":["../../src/utils/fileCommonUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fileCommonUtils.js","sourceRoot":"","sources":["../../src/utils/fileCommonUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anddone/coretestautomation",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"scripts": {
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@playwright/test": "^1.58.0",
|
|
13
|
-
"@types/node": "^25.1
|
|
13
|
+
"@types/node": "^25.2.1",
|
|
14
14
|
"@types/xml2js": "^0.4.14"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"date-fns": "^4.1.0",
|
|
18
18
|
"date-fns-tz": "^3.2.0",
|
|
19
|
+
"exceljs": "^4.4.0",
|
|
19
20
|
"pdf-parse": "^1.1.1",
|
|
20
21
|
"xml2js": "^0.6.2"
|
|
21
22
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import ExcelJS from 'exceljs';
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
import { parseStringPromise } from "xml2js";
|
|
5
|
-
import pdfParseModule = require("pdf-parse");
|
|
6
5
|
import { exec } from "child_process";
|
|
7
6
|
import { promisify } from "util";
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
const pdfParse = require("pdf-parse");
|
|
9
9
|
|
|
10
10
|
const execAsync = promisify(exec);
|
|
11
11
|
|
|
@@ -16,50 +16,89 @@ export class FileCommonUtils {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
// ================== EXCEL ==================
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
19
|
+
static async readExcel<T = Record<string, any>>(fileName: string,sheetName?: string,): Promise<T[]>
|
|
20
|
+
{
|
|
21
|
+
try {
|
|
22
|
+
const filePath = this.resolvePath(fileName);
|
|
23
|
+
const workbook = new ExcelJS.Workbook();
|
|
24
|
+
await workbook.xlsx.readFile(filePath);
|
|
25
|
+
|
|
26
|
+
const worksheet =sheetName ? workbook.getWorksheet(sheetName): workbook.worksheets[0];
|
|
27
|
+
if (!worksheet) return [];
|
|
28
|
+
const headers: string[] = [];
|
|
29
|
+
const data: T[] = [];
|
|
30
|
+
|
|
31
|
+
worksheet.getRow(1).eachCell((cell, col) => {
|
|
32
|
+
headers[col - 1] = String(cell.value ?? '');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
worksheet.eachRow((row, rowNumber) => {
|
|
36
|
+
if (rowNumber === 1) return;
|
|
37
|
+
|
|
38
|
+
const rowData: Record<string, any> = {};
|
|
39
|
+
row.eachCell((cell, col) => {
|
|
40
|
+
const header = headers[col - 1];
|
|
41
|
+
if (header) {
|
|
42
|
+
rowData[header] = cell.value ?? '';
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
data.push(rowData as T);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return data;
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error(`Failed to read Excel: ${fileName}`, error);
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
static async writeExcel(fileName: string, data: Record<string, any>[], sheetName = 'Sheet1'): Promise<void>
|
|
57
|
+
{
|
|
58
|
+
try {
|
|
59
|
+
const filePath = this.resolvePath(fileName);
|
|
60
|
+
const workbook = new ExcelJS.Workbook();
|
|
61
|
+
|
|
62
|
+
// Load existing Excel if it exists
|
|
63
|
+
if (fs.existsSync(filePath)) {
|
|
64
|
+
await workbook.xlsx.readFile(filePath);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Get existing sheet or create new one
|
|
68
|
+
let worksheet = workbook.getWorksheet(sheetName);
|
|
69
|
+
if (!worksheet) {
|
|
70
|
+
worksheet = workbook.addWorksheet(sheetName);
|
|
71
|
+
|
|
72
|
+
// Add headers ONLY for new sheet
|
|
73
|
+
if (data.length) {
|
|
74
|
+
worksheet.columns = Object.keys(data[0] ?? {}).map(key => ({
|
|
75
|
+
header: key,
|
|
76
|
+
key,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Append rows (never override)
|
|
81
|
+
if (data.length) {
|
|
82
|
+
worksheet.addRows(data);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Save workbook (preserves all sheets)
|
|
86
|
+
await workbook.xlsx.writeFile(filePath);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.error(`Failed to write Excel: ${fileName}`, error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static async getExcelSheetNames(fileName: string): Promise<string[]> {
|
|
93
|
+
try {
|
|
94
|
+
const workbook = new ExcelJS.Workbook();
|
|
95
|
+
await workbook.xlsx.readFile(this.resolvePath(fileName));
|
|
96
|
+
return workbook.worksheets.map(ws => ws.name);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
console.error(`Failed to read sheet names: ${fileName}`, error);
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
63
102
|
|
|
64
103
|
// ================== CSV ==================
|
|
65
104
|
static readCSV<T = Record<string, string>>(
|
|
@@ -93,7 +132,7 @@ export class FileCommonUtils {
|
|
|
93
132
|
try {
|
|
94
133
|
if (!data.length) return;
|
|
95
134
|
const filePath = this.resolvePath(fileName);
|
|
96
|
-
const headers = Object.keys(data[0]).join(delimiter);
|
|
135
|
+
const headers = Object.keys(data[0] ?? {}).join(delimiter);
|
|
97
136
|
const rows = data
|
|
98
137
|
.map((row) => Object.values(row).join(delimiter))
|
|
99
138
|
.join("\n");
|
|
@@ -128,6 +167,10 @@ export class FileCommonUtils {
|
|
|
128
167
|
static getRowCount<T>(data: T[]): number {
|
|
129
168
|
return data.length;
|
|
130
169
|
}
|
|
170
|
+
|
|
171
|
+
static getColumnCount<T extends Record<string, any>>(data: T[]): number {
|
|
172
|
+
return Object.keys(data[0] ?? {}).length;
|
|
173
|
+
}
|
|
131
174
|
|
|
132
175
|
static getColumnHeaders<T extends Record<string, any>>(data: T[]): string[] {
|
|
133
176
|
return Object.keys(data[0] ?? {});
|
|
@@ -170,7 +213,7 @@ export class FileCommonUtils {
|
|
|
170
213
|
}
|
|
171
214
|
}
|
|
172
215
|
|
|
173
|
-
|
|
216
|
+
static async editTextFile(
|
|
174
217
|
filePath: string,
|
|
175
218
|
search: string | RegExp,
|
|
176
219
|
replace = "",
|