@atmaticai/agent-tools-core 1.0.0
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 +742 -0
- package/dist/archive/index.d.mts +1 -0
- package/dist/archive/index.d.ts +1 -0
- package/dist/archive/index.js +90 -0
- package/dist/archive/index.js.map +1 -0
- package/dist/archive/index.mjs +80 -0
- package/dist/archive/index.mjs.map +1 -0
- package/dist/color/index.d.mts +1 -0
- package/dist/color/index.d.ts +1 -0
- package/dist/color/index.js +347 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/index.mjs +336 -0
- package/dist/color/index.mjs.map +1 -0
- package/dist/crypto/index.d.mts +1 -0
- package/dist/crypto/index.d.ts +1 -0
- package/dist/crypto/index.js +116 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/index.mjs +108 -0
- package/dist/crypto/index.mjs.map +1 -0
- package/dist/csv/index.d.mts +1 -0
- package/dist/csv/index.d.ts +1 -0
- package/dist/csv/index.js +371 -0
- package/dist/csv/index.js.map +1 -0
- package/dist/csv/index.mjs +348 -0
- package/dist/csv/index.mjs.map +1 -0
- package/dist/datetime/index.d.mts +1 -0
- package/dist/datetime/index.d.ts +1 -0
- package/dist/datetime/index.js +234 -0
- package/dist/datetime/index.js.map +1 -0
- package/dist/datetime/index.mjs +224 -0
- package/dist/datetime/index.mjs.map +1 -0
- package/dist/diff/index.d.mts +2 -0
- package/dist/diff/index.d.ts +2 -0
- package/dist/diff/index.js +84 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/index.mjs +78 -0
- package/dist/diff/index.mjs.map +1 -0
- package/dist/excel/index.d.mts +1 -0
- package/dist/excel/index.d.ts +1 -0
- package/dist/excel/index.js +163 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/index.mjs +153 -0
- package/dist/excel/index.mjs.map +1 -0
- package/dist/image/index.d.mts +1 -0
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +123 -0
- package/dist/image/index.js.map +1 -0
- package/dist/image/index.mjs +107 -0
- package/dist/image/index.mjs.map +1 -0
- package/dist/index--vbnYfdE.d.mts +142 -0
- package/dist/index--vbnYfdE.d.ts +142 -0
- package/dist/index-7FZQloN-.d.mts +62 -0
- package/dist/index-7FZQloN-.d.ts +62 -0
- package/dist/index-7XgaTVH5.d.mts +93 -0
- package/dist/index-7XgaTVH5.d.ts +93 -0
- package/dist/index-7bvFmh45.d.mts +87 -0
- package/dist/index-7bvFmh45.d.ts +87 -0
- package/dist/index-BDZcIVCU.d.mts +53 -0
- package/dist/index-BDZcIVCU.d.ts +53 -0
- package/dist/index-BN00EnUU.d.mts +55 -0
- package/dist/index-BN00EnUU.d.ts +55 -0
- package/dist/index-CQ1EukC4.d.mts +59 -0
- package/dist/index-CQ1EukC4.d.ts +59 -0
- package/dist/index-CgRVnFOt.d.mts +91 -0
- package/dist/index-CgRVnFOt.d.ts +91 -0
- package/dist/index-DjBDZzuj.d.mts +54 -0
- package/dist/index-DjBDZzuj.d.ts +54 -0
- package/dist/index-FFrvmr-n.d.mts +50 -0
- package/dist/index-FFrvmr-n.d.ts +50 -0
- package/dist/index-QWC8yIgW.d.mts +106 -0
- package/dist/index-QWC8yIgW.d.ts +106 -0
- package/dist/index-RVqNunxE.d.mts +193 -0
- package/dist/index-RVqNunxE.d.ts +193 -0
- package/dist/index-fJD8SORm.d.mts +61 -0
- package/dist/index-fJD8SORm.d.ts +61 -0
- package/dist/index-pPy_XDQU.d.mts +56 -0
- package/dist/index-pPy_XDQU.d.ts +56 -0
- package/dist/index-rwh9hdD9.d.mts +68 -0
- package/dist/index-rwh9hdD9.d.ts +68 -0
- package/dist/index-uXdkAfea.d.mts +93 -0
- package/dist/index-uXdkAfea.d.ts +93 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +3744 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3694 -0
- package/dist/index.mjs.map +1 -0
- package/dist/json/index.d.mts +1 -0
- package/dist/json/index.d.ts +1 -0
- package/dist/json/index.js +599 -0
- package/dist/json/index.js.map +1 -0
- package/dist/json/index.mjs +552 -0
- package/dist/json/index.mjs.map +1 -0
- package/dist/markdown/index.d.mts +1 -0
- package/dist/markdown/index.d.ts +1 -0
- package/dist/markdown/index.js +151 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/index.mjs +139 -0
- package/dist/markdown/index.mjs.map +1 -0
- package/dist/math/index.d.mts +1 -0
- package/dist/math/index.d.ts +1 -0
- package/dist/math/index.js +247 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/index.mjs +240 -0
- package/dist/math/index.mjs.map +1 -0
- package/dist/pdf/index.d.mts +1 -0
- package/dist/pdf/index.d.ts +1 -0
- package/dist/pdf/index.js +546 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/index.mjs +518 -0
- package/dist/pdf/index.mjs.map +1 -0
- package/dist/regex/index.d.mts +1 -0
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +93 -0
- package/dist/regex/index.js.map +1 -0
- package/dist/regex/index.mjs +88 -0
- package/dist/regex/index.mjs.map +1 -0
- package/dist/settings/index.d.mts +41 -0
- package/dist/settings/index.d.ts +41 -0
- package/dist/settings/index.js +146 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/index.mjs +139 -0
- package/dist/settings/index.mjs.map +1 -0
- package/dist/sql/index.d.mts +1 -0
- package/dist/sql/index.d.ts +1 -0
- package/dist/sql/index.js +146 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/index.mjs +139 -0
- package/dist/sql/index.mjs.map +1 -0
- package/dist/text/index.d.mts +1 -0
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.js +250 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/index.mjs +242 -0
- package/dist/text/index.mjs.map +1 -0
- package/dist/xml/index.d.mts +1 -0
- package/dist/xml/index.d.ts +1 -0
- package/dist/xml/index.js +188 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/index.mjs +180 -0
- package/dist/xml/index.mjs.map +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ExcelJS = require('exceljs');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var ExcelJS__default = /*#__PURE__*/_interopDefault(ExcelJS);
|
|
8
|
+
|
|
9
|
+
// src/excel/parse.ts
|
|
10
|
+
async function parse(file, options = {}) {
|
|
11
|
+
const workbook = new ExcelJS__default.default.Workbook();
|
|
12
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
13
|
+
const sheets = [];
|
|
14
|
+
workbook.eachSheet((ws, id) => {
|
|
15
|
+
sheets.push({
|
|
16
|
+
name: ws.name,
|
|
17
|
+
index: id,
|
|
18
|
+
rowCount: ws.rowCount,
|
|
19
|
+
columnCount: ws.columnCount
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
const targetSheet = typeof options.sheet === "number" ? workbook.worksheets[options.sheet] : typeof options.sheet === "string" ? workbook.getWorksheet(options.sheet) : workbook.worksheets[0];
|
|
23
|
+
if (!targetSheet) {
|
|
24
|
+
throw new Error("Sheet not found");
|
|
25
|
+
}
|
|
26
|
+
const useHeaders = options.header ?? true;
|
|
27
|
+
const rows = [];
|
|
28
|
+
let headers = [];
|
|
29
|
+
targetSheet.eachRow((row, rowNumber) => {
|
|
30
|
+
const values = row.values;
|
|
31
|
+
const cells = values.slice(1);
|
|
32
|
+
if (rowNumber === 1 && useHeaders) {
|
|
33
|
+
headers = cells.map((c, i) => String(c ?? `Column${i + 1}`));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const record = {};
|
|
37
|
+
const keys = useHeaders && headers.length > 0 ? headers : cells.map((_, i) => `Column${i + 1}`);
|
|
38
|
+
if (!useHeaders && rowNumber === 1) {
|
|
39
|
+
headers = keys;
|
|
40
|
+
}
|
|
41
|
+
keys.forEach((key, i) => {
|
|
42
|
+
const val = cells[i];
|
|
43
|
+
record[key] = val instanceof Date ? val.toISOString() : val ?? null;
|
|
44
|
+
});
|
|
45
|
+
rows.push(record);
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
sheets,
|
|
49
|
+
data: rows,
|
|
50
|
+
headers,
|
|
51
|
+
rowCount: rows.length
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function getSheets(file) {
|
|
55
|
+
const workbook = new ExcelJS__default.default.Workbook();
|
|
56
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
57
|
+
const sheets = [];
|
|
58
|
+
workbook.eachSheet((ws, id) => {
|
|
59
|
+
sheets.push({
|
|
60
|
+
name: ws.name,
|
|
61
|
+
index: id,
|
|
62
|
+
rowCount: ws.rowCount,
|
|
63
|
+
columnCount: ws.columnCount
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
return sheets;
|
|
67
|
+
}
|
|
68
|
+
async function convert(file, format, options = {}) {
|
|
69
|
+
const workbook = new ExcelJS__default.default.Workbook();
|
|
70
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
71
|
+
const targetSheet = typeof options.sheet === "number" ? workbook.worksheets[options.sheet] : typeof options.sheet === "string" ? workbook.getWorksheet(options.sheet) : workbook.worksheets[0];
|
|
72
|
+
if (!targetSheet) {
|
|
73
|
+
throw new Error("Sheet not found");
|
|
74
|
+
}
|
|
75
|
+
const useHeaders = options.header ?? true;
|
|
76
|
+
const allRows = [];
|
|
77
|
+
targetSheet.eachRow((row) => {
|
|
78
|
+
const values = row.values;
|
|
79
|
+
allRows.push(values.slice(1).map((v) => v instanceof Date ? v.toISOString() : v));
|
|
80
|
+
});
|
|
81
|
+
if (allRows.length === 0) return "";
|
|
82
|
+
const headers = useHeaders ? allRows[0].map((c, i) => String(c ?? `Column${i + 1}`)) : allRows[0].map((_, i) => `Column${i + 1}`);
|
|
83
|
+
const dataRows = useHeaders ? allRows.slice(1) : allRows;
|
|
84
|
+
switch (format) {
|
|
85
|
+
case "json": {
|
|
86
|
+
const records = dataRows.map((row) => {
|
|
87
|
+
const record = {};
|
|
88
|
+
headers.forEach((h, i) => {
|
|
89
|
+
record[h] = row[i] ?? null;
|
|
90
|
+
});
|
|
91
|
+
return record;
|
|
92
|
+
});
|
|
93
|
+
return JSON.stringify(records, null, 2);
|
|
94
|
+
}
|
|
95
|
+
case "csv":
|
|
96
|
+
return toDSV(headers, dataRows, ",");
|
|
97
|
+
case "tsv":
|
|
98
|
+
return toDSV(headers, dataRows, " ");
|
|
99
|
+
default:
|
|
100
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function toDSV(headers, rows, delimiter) {
|
|
104
|
+
const escape = (val) => {
|
|
105
|
+
const str = String(val ?? "");
|
|
106
|
+
if (str.includes(delimiter) || str.includes('"') || str.includes("\n")) {
|
|
107
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
108
|
+
}
|
|
109
|
+
return str;
|
|
110
|
+
};
|
|
111
|
+
const lines = [headers.map(escape).join(delimiter)];
|
|
112
|
+
for (const row of rows) {
|
|
113
|
+
lines.push(headers.map((_, i) => escape(row[i])).join(delimiter));
|
|
114
|
+
}
|
|
115
|
+
return lines.join("\n");
|
|
116
|
+
}
|
|
117
|
+
async function createExcel(data, sheetName = "Sheet1") {
|
|
118
|
+
const workbook = new ExcelJS__default.default.Workbook();
|
|
119
|
+
const sheet = workbook.addWorksheet(sheetName);
|
|
120
|
+
if (data.length === 0) {
|
|
121
|
+
const buffer2 = await workbook.xlsx.writeBuffer();
|
|
122
|
+
return new Uint8Array(buffer2);
|
|
123
|
+
}
|
|
124
|
+
const headers = Object.keys(data[0]);
|
|
125
|
+
sheet.addRow(headers);
|
|
126
|
+
for (const record of data) {
|
|
127
|
+
sheet.addRow(headers.map((h) => record[h]));
|
|
128
|
+
}
|
|
129
|
+
const buffer = await workbook.xlsx.writeBuffer();
|
|
130
|
+
return new Uint8Array(buffer);
|
|
131
|
+
}
|
|
132
|
+
async function getStats(file) {
|
|
133
|
+
const workbook = new ExcelJS__default.default.Workbook();
|
|
134
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
135
|
+
const sheetDetails = [];
|
|
136
|
+
let totalRows = 0;
|
|
137
|
+
let totalColumns = 0;
|
|
138
|
+
workbook.eachSheet((ws, id) => {
|
|
139
|
+
sheetDetails.push({
|
|
140
|
+
name: ws.name,
|
|
141
|
+
index: id,
|
|
142
|
+
rowCount: ws.rowCount,
|
|
143
|
+
columnCount: ws.columnCount
|
|
144
|
+
});
|
|
145
|
+
totalRows += ws.rowCount;
|
|
146
|
+
totalColumns = Math.max(totalColumns, ws.columnCount);
|
|
147
|
+
});
|
|
148
|
+
return {
|
|
149
|
+
sheets: sheetDetails.length,
|
|
150
|
+
totalRows,
|
|
151
|
+
totalColumns,
|
|
152
|
+
sheetDetails,
|
|
153
|
+
sizeBytes: file.length
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
exports.convert = convert;
|
|
158
|
+
exports.createExcel = createExcel;
|
|
159
|
+
exports.getSheets = getSheets;
|
|
160
|
+
exports.getStats = getStats;
|
|
161
|
+
exports.parse = parse;
|
|
162
|
+
//# sourceMappingURL=index.js.map
|
|
163
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/excel/parse.ts","../../src/excel/convert.ts","../../src/excel/stats.ts"],"names":["ExcelJS","buffer"],"mappings":"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","file":"index.js","sourcesContent":["import ExcelJS from 'exceljs';\nimport type { ExcelParseOptions, ExcelParseResult, SheetInfo } from './types';\n\nexport async function parse(\n file: Buffer | Uint8Array,\n options: ExcelParseOptions = {}\n): Promise<ExcelParseResult> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheets: SheetInfo[] = [];\n workbook.eachSheet((ws, id) => {\n sheets.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n });\n\n const targetSheet =\n typeof options.sheet === 'number'\n ? workbook.worksheets[options.sheet]\n : typeof options.sheet === 'string'\n ? workbook.getWorksheet(options.sheet)\n : workbook.worksheets[0];\n\n if (!targetSheet) {\n throw new Error('Sheet not found');\n }\n\n const useHeaders = options.header ?? true;\n const rows: Record<string, unknown>[] = [];\n let headers: string[] = [];\n\n targetSheet.eachRow((row, rowNumber) => {\n const values = row.values as unknown[];\n const cells = values.slice(1);\n\n if (rowNumber === 1 && useHeaders) {\n headers = cells.map((c, i) => String(c ?? `Column${i + 1}`));\n return;\n }\n\n const record: Record<string, unknown> = {};\n const keys = useHeaders && headers.length > 0 ? headers : cells.map((_, i) => `Column${i + 1}`);\n\n if (!useHeaders && rowNumber === 1) {\n headers = keys;\n }\n\n keys.forEach((key, i) => {\n const val = cells[i];\n record[key] = val instanceof Date ? val.toISOString() : (val ?? null);\n });\n rows.push(record);\n });\n\n return {\n sheets,\n data: rows,\n headers,\n rowCount: rows.length,\n };\n}\n\nexport async function getSheets(\n file: Buffer | Uint8Array\n): Promise<SheetInfo[]> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheets: SheetInfo[] = [];\n workbook.eachSheet((ws, id) => {\n sheets.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n });\n\n return sheets;\n}\n","import ExcelJS from 'exceljs';\nimport type { ExcelConvertOptions, ExcelConvertFormat } from './types';\n\nexport async function convert(\n file: Buffer | Uint8Array,\n format: ExcelConvertFormat,\n options: ExcelConvertOptions = {}\n): Promise<string> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const targetSheet =\n typeof options.sheet === 'number'\n ? workbook.worksheets[options.sheet]\n : typeof options.sheet === 'string'\n ? workbook.getWorksheet(options.sheet)\n : workbook.worksheets[0];\n\n if (!targetSheet) {\n throw new Error('Sheet not found');\n }\n\n const useHeaders = options.header ?? true;\n const allRows: unknown[][] = [];\n\n targetSheet.eachRow((row) => {\n const values = row.values as unknown[];\n allRows.push(values.slice(1).map((v) => (v instanceof Date ? v.toISOString() : v)));\n });\n\n if (allRows.length === 0) return '';\n\n const headers = useHeaders\n ? allRows[0].map((c, i) => String(c ?? `Column${i + 1}`))\n : allRows[0].map((_, i) => `Column${i + 1}`);\n const dataRows = useHeaders ? allRows.slice(1) : allRows;\n\n switch (format) {\n case 'json': {\n const records = dataRows.map((row) => {\n const record: Record<string, unknown> = {};\n headers.forEach((h, i) => {\n record[h] = row[i] ?? null;\n });\n return record;\n });\n return JSON.stringify(records, null, 2);\n }\n case 'csv':\n return toDSV(headers, dataRows, ',');\n case 'tsv':\n return toDSV(headers, dataRows, '\\t');\n default:\n throw new Error(`Unsupported format: ${format}`);\n }\n}\n\nfunction toDSV(headers: string[], rows: unknown[][], delimiter: string): string {\n const escape = (val: unknown): string => {\n const str = String(val ?? '');\n if (str.includes(delimiter) || str.includes('\"') || str.includes('\\n')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n };\n\n const lines = [headers.map(escape).join(delimiter)];\n for (const row of rows) {\n lines.push(headers.map((_, i) => escape(row[i])).join(delimiter));\n }\n return lines.join('\\n');\n}\n\nexport async function createExcel(\n data: Record<string, unknown>[],\n sheetName = 'Sheet1'\n): Promise<Uint8Array> {\n const workbook = new ExcelJS.Workbook();\n const sheet = workbook.addWorksheet(sheetName);\n\n if (data.length === 0) {\n const buffer = await workbook.xlsx.writeBuffer();\n return new Uint8Array(buffer);\n }\n\n const headers = Object.keys(data[0]);\n sheet.addRow(headers);\n\n for (const record of data) {\n sheet.addRow(headers.map((h) => record[h]));\n }\n\n const buffer = await workbook.xlsx.writeBuffer();\n return new Uint8Array(buffer);\n}\n","import ExcelJS from 'exceljs';\nimport type { ExcelStats, SheetInfo } from './types';\n\nexport async function getStats(file: Buffer | Uint8Array): Promise<ExcelStats> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheetDetails: SheetInfo[] = [];\n let totalRows = 0;\n let totalColumns = 0;\n\n workbook.eachSheet((ws, id) => {\n sheetDetails.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n totalRows += ws.rowCount;\n totalColumns = Math.max(totalColumns, ws.columnCount);\n });\n\n return {\n sheets: sheetDetails.length,\n totalRows,\n totalColumns,\n sheetDetails,\n sizeBytes: file.length,\n };\n}\n"]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import ExcelJS from 'exceljs';
|
|
2
|
+
|
|
3
|
+
// src/excel/parse.ts
|
|
4
|
+
async function parse(file, options = {}) {
|
|
5
|
+
const workbook = new ExcelJS.Workbook();
|
|
6
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
7
|
+
const sheets = [];
|
|
8
|
+
workbook.eachSheet((ws, id) => {
|
|
9
|
+
sheets.push({
|
|
10
|
+
name: ws.name,
|
|
11
|
+
index: id,
|
|
12
|
+
rowCount: ws.rowCount,
|
|
13
|
+
columnCount: ws.columnCount
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
const targetSheet = typeof options.sheet === "number" ? workbook.worksheets[options.sheet] : typeof options.sheet === "string" ? workbook.getWorksheet(options.sheet) : workbook.worksheets[0];
|
|
17
|
+
if (!targetSheet) {
|
|
18
|
+
throw new Error("Sheet not found");
|
|
19
|
+
}
|
|
20
|
+
const useHeaders = options.header ?? true;
|
|
21
|
+
const rows = [];
|
|
22
|
+
let headers = [];
|
|
23
|
+
targetSheet.eachRow((row, rowNumber) => {
|
|
24
|
+
const values = row.values;
|
|
25
|
+
const cells = values.slice(1);
|
|
26
|
+
if (rowNumber === 1 && useHeaders) {
|
|
27
|
+
headers = cells.map((c, i) => String(c ?? `Column${i + 1}`));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const record = {};
|
|
31
|
+
const keys = useHeaders && headers.length > 0 ? headers : cells.map((_, i) => `Column${i + 1}`);
|
|
32
|
+
if (!useHeaders && rowNumber === 1) {
|
|
33
|
+
headers = keys;
|
|
34
|
+
}
|
|
35
|
+
keys.forEach((key, i) => {
|
|
36
|
+
const val = cells[i];
|
|
37
|
+
record[key] = val instanceof Date ? val.toISOString() : val ?? null;
|
|
38
|
+
});
|
|
39
|
+
rows.push(record);
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
sheets,
|
|
43
|
+
data: rows,
|
|
44
|
+
headers,
|
|
45
|
+
rowCount: rows.length
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function getSheets(file) {
|
|
49
|
+
const workbook = new ExcelJS.Workbook();
|
|
50
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
51
|
+
const sheets = [];
|
|
52
|
+
workbook.eachSheet((ws, id) => {
|
|
53
|
+
sheets.push({
|
|
54
|
+
name: ws.name,
|
|
55
|
+
index: id,
|
|
56
|
+
rowCount: ws.rowCount,
|
|
57
|
+
columnCount: ws.columnCount
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
return sheets;
|
|
61
|
+
}
|
|
62
|
+
async function convert(file, format, options = {}) {
|
|
63
|
+
const workbook = new ExcelJS.Workbook();
|
|
64
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
65
|
+
const targetSheet = typeof options.sheet === "number" ? workbook.worksheets[options.sheet] : typeof options.sheet === "string" ? workbook.getWorksheet(options.sheet) : workbook.worksheets[0];
|
|
66
|
+
if (!targetSheet) {
|
|
67
|
+
throw new Error("Sheet not found");
|
|
68
|
+
}
|
|
69
|
+
const useHeaders = options.header ?? true;
|
|
70
|
+
const allRows = [];
|
|
71
|
+
targetSheet.eachRow((row) => {
|
|
72
|
+
const values = row.values;
|
|
73
|
+
allRows.push(values.slice(1).map((v) => v instanceof Date ? v.toISOString() : v));
|
|
74
|
+
});
|
|
75
|
+
if (allRows.length === 0) return "";
|
|
76
|
+
const headers = useHeaders ? allRows[0].map((c, i) => String(c ?? `Column${i + 1}`)) : allRows[0].map((_, i) => `Column${i + 1}`);
|
|
77
|
+
const dataRows = useHeaders ? allRows.slice(1) : allRows;
|
|
78
|
+
switch (format) {
|
|
79
|
+
case "json": {
|
|
80
|
+
const records = dataRows.map((row) => {
|
|
81
|
+
const record = {};
|
|
82
|
+
headers.forEach((h, i) => {
|
|
83
|
+
record[h] = row[i] ?? null;
|
|
84
|
+
});
|
|
85
|
+
return record;
|
|
86
|
+
});
|
|
87
|
+
return JSON.stringify(records, null, 2);
|
|
88
|
+
}
|
|
89
|
+
case "csv":
|
|
90
|
+
return toDSV(headers, dataRows, ",");
|
|
91
|
+
case "tsv":
|
|
92
|
+
return toDSV(headers, dataRows, " ");
|
|
93
|
+
default:
|
|
94
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function toDSV(headers, rows, delimiter) {
|
|
98
|
+
const escape = (val) => {
|
|
99
|
+
const str = String(val ?? "");
|
|
100
|
+
if (str.includes(delimiter) || str.includes('"') || str.includes("\n")) {
|
|
101
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
102
|
+
}
|
|
103
|
+
return str;
|
|
104
|
+
};
|
|
105
|
+
const lines = [headers.map(escape).join(delimiter)];
|
|
106
|
+
for (const row of rows) {
|
|
107
|
+
lines.push(headers.map((_, i) => escape(row[i])).join(delimiter));
|
|
108
|
+
}
|
|
109
|
+
return lines.join("\n");
|
|
110
|
+
}
|
|
111
|
+
async function createExcel(data, sheetName = "Sheet1") {
|
|
112
|
+
const workbook = new ExcelJS.Workbook();
|
|
113
|
+
const sheet = workbook.addWorksheet(sheetName);
|
|
114
|
+
if (data.length === 0) {
|
|
115
|
+
const buffer2 = await workbook.xlsx.writeBuffer();
|
|
116
|
+
return new Uint8Array(buffer2);
|
|
117
|
+
}
|
|
118
|
+
const headers = Object.keys(data[0]);
|
|
119
|
+
sheet.addRow(headers);
|
|
120
|
+
for (const record of data) {
|
|
121
|
+
sheet.addRow(headers.map((h) => record[h]));
|
|
122
|
+
}
|
|
123
|
+
const buffer = await workbook.xlsx.writeBuffer();
|
|
124
|
+
return new Uint8Array(buffer);
|
|
125
|
+
}
|
|
126
|
+
async function getStats(file) {
|
|
127
|
+
const workbook = new ExcelJS.Workbook();
|
|
128
|
+
await workbook.xlsx.load(Buffer.from(file));
|
|
129
|
+
const sheetDetails = [];
|
|
130
|
+
let totalRows = 0;
|
|
131
|
+
let totalColumns = 0;
|
|
132
|
+
workbook.eachSheet((ws, id) => {
|
|
133
|
+
sheetDetails.push({
|
|
134
|
+
name: ws.name,
|
|
135
|
+
index: id,
|
|
136
|
+
rowCount: ws.rowCount,
|
|
137
|
+
columnCount: ws.columnCount
|
|
138
|
+
});
|
|
139
|
+
totalRows += ws.rowCount;
|
|
140
|
+
totalColumns = Math.max(totalColumns, ws.columnCount);
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
sheets: sheetDetails.length,
|
|
144
|
+
totalRows,
|
|
145
|
+
totalColumns,
|
|
146
|
+
sheetDetails,
|
|
147
|
+
sizeBytes: file.length
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export { convert, createExcel, getSheets, getStats, parse };
|
|
152
|
+
//# sourceMappingURL=index.mjs.map
|
|
153
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/excel/parse.ts","../../src/excel/convert.ts","../../src/excel/stats.ts"],"names":["ExcelJS","buffer"],"mappings":"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","file":"index.mjs","sourcesContent":["import ExcelJS from 'exceljs';\nimport type { ExcelParseOptions, ExcelParseResult, SheetInfo } from './types';\n\nexport async function parse(\n file: Buffer | Uint8Array,\n options: ExcelParseOptions = {}\n): Promise<ExcelParseResult> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheets: SheetInfo[] = [];\n workbook.eachSheet((ws, id) => {\n sheets.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n });\n\n const targetSheet =\n typeof options.sheet === 'number'\n ? workbook.worksheets[options.sheet]\n : typeof options.sheet === 'string'\n ? workbook.getWorksheet(options.sheet)\n : workbook.worksheets[0];\n\n if (!targetSheet) {\n throw new Error('Sheet not found');\n }\n\n const useHeaders = options.header ?? true;\n const rows: Record<string, unknown>[] = [];\n let headers: string[] = [];\n\n targetSheet.eachRow((row, rowNumber) => {\n const values = row.values as unknown[];\n const cells = values.slice(1);\n\n if (rowNumber === 1 && useHeaders) {\n headers = cells.map((c, i) => String(c ?? `Column${i + 1}`));\n return;\n }\n\n const record: Record<string, unknown> = {};\n const keys = useHeaders && headers.length > 0 ? headers : cells.map((_, i) => `Column${i + 1}`);\n\n if (!useHeaders && rowNumber === 1) {\n headers = keys;\n }\n\n keys.forEach((key, i) => {\n const val = cells[i];\n record[key] = val instanceof Date ? val.toISOString() : (val ?? null);\n });\n rows.push(record);\n });\n\n return {\n sheets,\n data: rows,\n headers,\n rowCount: rows.length,\n };\n}\n\nexport async function getSheets(\n file: Buffer | Uint8Array\n): Promise<SheetInfo[]> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheets: SheetInfo[] = [];\n workbook.eachSheet((ws, id) => {\n sheets.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n });\n\n return sheets;\n}\n","import ExcelJS from 'exceljs';\nimport type { ExcelConvertOptions, ExcelConvertFormat } from './types';\n\nexport async function convert(\n file: Buffer | Uint8Array,\n format: ExcelConvertFormat,\n options: ExcelConvertOptions = {}\n): Promise<string> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const targetSheet =\n typeof options.sheet === 'number'\n ? workbook.worksheets[options.sheet]\n : typeof options.sheet === 'string'\n ? workbook.getWorksheet(options.sheet)\n : workbook.worksheets[0];\n\n if (!targetSheet) {\n throw new Error('Sheet not found');\n }\n\n const useHeaders = options.header ?? true;\n const allRows: unknown[][] = [];\n\n targetSheet.eachRow((row) => {\n const values = row.values as unknown[];\n allRows.push(values.slice(1).map((v) => (v instanceof Date ? v.toISOString() : v)));\n });\n\n if (allRows.length === 0) return '';\n\n const headers = useHeaders\n ? allRows[0].map((c, i) => String(c ?? `Column${i + 1}`))\n : allRows[0].map((_, i) => `Column${i + 1}`);\n const dataRows = useHeaders ? allRows.slice(1) : allRows;\n\n switch (format) {\n case 'json': {\n const records = dataRows.map((row) => {\n const record: Record<string, unknown> = {};\n headers.forEach((h, i) => {\n record[h] = row[i] ?? null;\n });\n return record;\n });\n return JSON.stringify(records, null, 2);\n }\n case 'csv':\n return toDSV(headers, dataRows, ',');\n case 'tsv':\n return toDSV(headers, dataRows, '\\t');\n default:\n throw new Error(`Unsupported format: ${format}`);\n }\n}\n\nfunction toDSV(headers: string[], rows: unknown[][], delimiter: string): string {\n const escape = (val: unknown): string => {\n const str = String(val ?? '');\n if (str.includes(delimiter) || str.includes('\"') || str.includes('\\n')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n };\n\n const lines = [headers.map(escape).join(delimiter)];\n for (const row of rows) {\n lines.push(headers.map((_, i) => escape(row[i])).join(delimiter));\n }\n return lines.join('\\n');\n}\n\nexport async function createExcel(\n data: Record<string, unknown>[],\n sheetName = 'Sheet1'\n): Promise<Uint8Array> {\n const workbook = new ExcelJS.Workbook();\n const sheet = workbook.addWorksheet(sheetName);\n\n if (data.length === 0) {\n const buffer = await workbook.xlsx.writeBuffer();\n return new Uint8Array(buffer);\n }\n\n const headers = Object.keys(data[0]);\n sheet.addRow(headers);\n\n for (const record of data) {\n sheet.addRow(headers.map((h) => record[h]));\n }\n\n const buffer = await workbook.xlsx.writeBuffer();\n return new Uint8Array(buffer);\n}\n","import ExcelJS from 'exceljs';\nimport type { ExcelStats, SheetInfo } from './types';\n\nexport async function getStats(file: Buffer | Uint8Array): Promise<ExcelStats> {\n const workbook = new ExcelJS.Workbook();\n // @ts-expect-error - exceljs types incompatible with Node.js 22 Buffer\n await workbook.xlsx.load(Buffer.from(file));\n\n const sheetDetails: SheetInfo[] = [];\n let totalRows = 0;\n let totalColumns = 0;\n\n workbook.eachSheet((ws, id) => {\n sheetDetails.push({\n name: ws.name,\n index: id,\n rowCount: ws.rowCount,\n columnCount: ws.columnCount,\n });\n totalRows += ws.rowCount;\n totalColumns = Math.max(totalColumns, ws.columnCount);\n });\n\n return {\n sheets: sheetDetails.length,\n totalRows,\n totalColumns,\n sheetDetails,\n sizeBytes: file.length,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { C as CompressOptions, a as ConvertOptions, b as CropOptions, I as ImageFormat, c as ImageMetadata, d as ImageStats, R as ResizeOptions, e as RotateOptions, W as WatermarkOptions, f as blur, g as compress, h as convert, j as crop, k as flip, l as flop, m as getMetadata, n as getStats, o as grayscale, r as resize, p as rotate } from '../index-7XgaTVH5.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { C as CompressOptions, a as ConvertOptions, b as CropOptions, I as ImageFormat, c as ImageMetadata, d as ImageStats, R as ResizeOptions, e as RotateOptions, W as WatermarkOptions, f as blur, g as compress, h as convert, j as crop, k as flip, l as flop, m as getMetadata, n as getStats, o as grayscale, r as resize, p as rotate } from '../index-7XgaTVH5.js';
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var sharp2 = require('sharp');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var sharp2__default = /*#__PURE__*/_interopDefault(sharp2);
|
|
8
|
+
|
|
9
|
+
// src/image/resize.ts
|
|
10
|
+
async function resize(file, options) {
|
|
11
|
+
const result = await sharp2__default.default(Buffer.from(file)).resize({
|
|
12
|
+
width: options.width,
|
|
13
|
+
height: options.height,
|
|
14
|
+
fit: options.fit ?? "inside",
|
|
15
|
+
background: options.background ?? "#ffffff"
|
|
16
|
+
}).toBuffer();
|
|
17
|
+
return new Uint8Array(result);
|
|
18
|
+
}
|
|
19
|
+
async function crop(file, options) {
|
|
20
|
+
const result = await sharp2__default.default(Buffer.from(file)).extract({
|
|
21
|
+
left: options.left,
|
|
22
|
+
top: options.top,
|
|
23
|
+
width: options.width,
|
|
24
|
+
height: options.height
|
|
25
|
+
}).toBuffer();
|
|
26
|
+
return new Uint8Array(result);
|
|
27
|
+
}
|
|
28
|
+
async function rotate(file, options) {
|
|
29
|
+
const result = await sharp2__default.default(Buffer.from(file)).rotate(options.degrees, {
|
|
30
|
+
background: options.background ?? "#ffffff"
|
|
31
|
+
}).toBuffer();
|
|
32
|
+
return new Uint8Array(result);
|
|
33
|
+
}
|
|
34
|
+
async function flip(file) {
|
|
35
|
+
const result = await sharp2__default.default(Buffer.from(file)).flip().toBuffer();
|
|
36
|
+
return new Uint8Array(result);
|
|
37
|
+
}
|
|
38
|
+
async function flop(file) {
|
|
39
|
+
const result = await sharp2__default.default(Buffer.from(file)).flop().toBuffer();
|
|
40
|
+
return new Uint8Array(result);
|
|
41
|
+
}
|
|
42
|
+
async function grayscale(file) {
|
|
43
|
+
const result = await sharp2__default.default(Buffer.from(file)).grayscale().toBuffer();
|
|
44
|
+
return new Uint8Array(result);
|
|
45
|
+
}
|
|
46
|
+
async function blur(file, sigma = 3) {
|
|
47
|
+
const result = await sharp2__default.default(Buffer.from(file)).blur(sigma).toBuffer();
|
|
48
|
+
return new Uint8Array(result);
|
|
49
|
+
}
|
|
50
|
+
async function convert(file, options) {
|
|
51
|
+
let pipeline = sharp2__default.default(Buffer.from(file));
|
|
52
|
+
switch (options.format) {
|
|
53
|
+
case "png":
|
|
54
|
+
pipeline = pipeline.png();
|
|
55
|
+
break;
|
|
56
|
+
case "jpeg":
|
|
57
|
+
pipeline = pipeline.jpeg({ quality: options.quality ?? 80 });
|
|
58
|
+
break;
|
|
59
|
+
case "webp":
|
|
60
|
+
pipeline = pipeline.webp({ quality: options.quality ?? 80 });
|
|
61
|
+
break;
|
|
62
|
+
case "gif":
|
|
63
|
+
pipeline = pipeline.gif();
|
|
64
|
+
break;
|
|
65
|
+
case "tiff":
|
|
66
|
+
pipeline = pipeline.tiff({ quality: options.quality ?? 80 });
|
|
67
|
+
break;
|
|
68
|
+
case "avif":
|
|
69
|
+
pipeline = pipeline.avif({ quality: options.quality ?? 50 });
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
throw new Error(`Unsupported format: ${options.format}`);
|
|
73
|
+
}
|
|
74
|
+
const result = await pipeline.toBuffer();
|
|
75
|
+
return new Uint8Array(result);
|
|
76
|
+
}
|
|
77
|
+
async function compress(file, options = {}) {
|
|
78
|
+
const quality = options.quality ?? 70;
|
|
79
|
+
const format = options.format ?? "jpeg";
|
|
80
|
+
return convert(file, { format, quality });
|
|
81
|
+
}
|
|
82
|
+
async function getMetadata(file) {
|
|
83
|
+
const meta = await sharp2__default.default(Buffer.from(file)).metadata();
|
|
84
|
+
return {
|
|
85
|
+
width: meta.width ?? 0,
|
|
86
|
+
height: meta.height ?? 0,
|
|
87
|
+
format: meta.format ?? "unknown",
|
|
88
|
+
channels: meta.channels ?? 0,
|
|
89
|
+
space: meta.space ?? "unknown",
|
|
90
|
+
depth: meta.depth ?? "unknown",
|
|
91
|
+
density: meta.density,
|
|
92
|
+
hasAlpha: meta.hasAlpha ?? false,
|
|
93
|
+
sizeBytes: file.length
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function getStats(file) {
|
|
97
|
+
const meta = await sharp2__default.default(Buffer.from(file)).metadata();
|
|
98
|
+
const width = meta.width ?? 0;
|
|
99
|
+
const height = meta.height ?? 0;
|
|
100
|
+
return {
|
|
101
|
+
width,
|
|
102
|
+
height,
|
|
103
|
+
format: meta.format ?? "unknown",
|
|
104
|
+
channels: meta.channels ?? 0,
|
|
105
|
+
hasAlpha: meta.hasAlpha ?? false,
|
|
106
|
+
sizeBytes: file.length,
|
|
107
|
+
megapixels: Math.round(width * height / 1e4) / 100
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
exports.blur = blur;
|
|
112
|
+
exports.compress = compress;
|
|
113
|
+
exports.convert = convert;
|
|
114
|
+
exports.crop = crop;
|
|
115
|
+
exports.flip = flip;
|
|
116
|
+
exports.flop = flop;
|
|
117
|
+
exports.getMetadata = getMetadata;
|
|
118
|
+
exports.getStats = getStats;
|
|
119
|
+
exports.grayscale = grayscale;
|
|
120
|
+
exports.resize = resize;
|
|
121
|
+
exports.rotate = rotate;
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/resize.ts","../../src/image/transform.ts","../../src/image/convert.ts","../../src/image/metadata.ts"],"names":["sharp"],"mappings":"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","file":"index.js","sourcesContent":["import sharp from 'sharp';\nimport type { ResizeOptions } from './types';\n\nexport async function resize(\n file: Buffer | Uint8Array,\n options: ResizeOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .resize({\n width: options.width,\n height: options.height,\n fit: options.fit ?? 'inside',\n background: options.background ?? '#ffffff',\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n","import sharp from 'sharp';\nimport type { CropOptions, RotateOptions } from './types';\n\nexport async function crop(\n file: Buffer | Uint8Array,\n options: CropOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .extract({\n left: options.left,\n top: options.top,\n width: options.width,\n height: options.height,\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n\nexport async function rotate(\n file: Buffer | Uint8Array,\n options: RotateOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .rotate(options.degrees, {\n background: options.background ?? '#ffffff',\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n\nexport async function flip(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).flip().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function flop(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).flop().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function grayscale(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).grayscale().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function blur(\n file: Buffer | Uint8Array,\n sigma: number = 3\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).blur(sigma).toBuffer();\n return new Uint8Array(result);\n}\n","import sharp from 'sharp';\nimport type { ConvertOptions, CompressOptions } from './types';\n\nexport async function convert(\n file: Buffer | Uint8Array,\n options: ConvertOptions\n): Promise<Uint8Array> {\n let pipeline = sharp(Buffer.from(file));\n\n switch (options.format) {\n case 'png':\n pipeline = pipeline.png();\n break;\n case 'jpeg':\n pipeline = pipeline.jpeg({ quality: options.quality ?? 80 });\n break;\n case 'webp':\n pipeline = pipeline.webp({ quality: options.quality ?? 80 });\n break;\n case 'gif':\n pipeline = pipeline.gif();\n break;\n case 'tiff':\n pipeline = pipeline.tiff({ quality: options.quality ?? 80 });\n break;\n case 'avif':\n pipeline = pipeline.avif({ quality: options.quality ?? 50 });\n break;\n default:\n throw new Error(`Unsupported format: ${options.format}`);\n }\n\n const result = await pipeline.toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function compress(\n file: Buffer | Uint8Array,\n options: CompressOptions = {}\n): Promise<Uint8Array> {\n const quality = options.quality ?? 70;\n const format = options.format ?? 'jpeg';\n\n return convert(file, { format, quality });\n}\n","import sharp from 'sharp';\nimport type { ImageMetadata, ImageStats } from './types';\n\nexport async function getMetadata(\n file: Buffer | Uint8Array\n): Promise<ImageMetadata> {\n const meta = await sharp(Buffer.from(file)).metadata();\n\n return {\n width: meta.width ?? 0,\n height: meta.height ?? 0,\n format: meta.format ?? 'unknown',\n channels: meta.channels ?? 0,\n space: meta.space ?? 'unknown',\n depth: meta.depth ?? 'unknown',\n density: meta.density,\n hasAlpha: meta.hasAlpha ?? false,\n sizeBytes: file.length,\n };\n}\n\nexport async function getStats(\n file: Buffer | Uint8Array\n): Promise<ImageStats> {\n const meta = await sharp(Buffer.from(file)).metadata();\n\n const width = meta.width ?? 0;\n const height = meta.height ?? 0;\n\n return {\n width,\n height,\n format: meta.format ?? 'unknown',\n channels: meta.channels ?? 0,\n hasAlpha: meta.hasAlpha ?? false,\n sizeBytes: file.length,\n megapixels: Math.round((width * height) / 10000) / 100,\n };\n}\n"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import sharp2 from 'sharp';
|
|
2
|
+
|
|
3
|
+
// src/image/resize.ts
|
|
4
|
+
async function resize(file, options) {
|
|
5
|
+
const result = await sharp2(Buffer.from(file)).resize({
|
|
6
|
+
width: options.width,
|
|
7
|
+
height: options.height,
|
|
8
|
+
fit: options.fit ?? "inside",
|
|
9
|
+
background: options.background ?? "#ffffff"
|
|
10
|
+
}).toBuffer();
|
|
11
|
+
return new Uint8Array(result);
|
|
12
|
+
}
|
|
13
|
+
async function crop(file, options) {
|
|
14
|
+
const result = await sharp2(Buffer.from(file)).extract({
|
|
15
|
+
left: options.left,
|
|
16
|
+
top: options.top,
|
|
17
|
+
width: options.width,
|
|
18
|
+
height: options.height
|
|
19
|
+
}).toBuffer();
|
|
20
|
+
return new Uint8Array(result);
|
|
21
|
+
}
|
|
22
|
+
async function rotate(file, options) {
|
|
23
|
+
const result = await sharp2(Buffer.from(file)).rotate(options.degrees, {
|
|
24
|
+
background: options.background ?? "#ffffff"
|
|
25
|
+
}).toBuffer();
|
|
26
|
+
return new Uint8Array(result);
|
|
27
|
+
}
|
|
28
|
+
async function flip(file) {
|
|
29
|
+
const result = await sharp2(Buffer.from(file)).flip().toBuffer();
|
|
30
|
+
return new Uint8Array(result);
|
|
31
|
+
}
|
|
32
|
+
async function flop(file) {
|
|
33
|
+
const result = await sharp2(Buffer.from(file)).flop().toBuffer();
|
|
34
|
+
return new Uint8Array(result);
|
|
35
|
+
}
|
|
36
|
+
async function grayscale(file) {
|
|
37
|
+
const result = await sharp2(Buffer.from(file)).grayscale().toBuffer();
|
|
38
|
+
return new Uint8Array(result);
|
|
39
|
+
}
|
|
40
|
+
async function blur(file, sigma = 3) {
|
|
41
|
+
const result = await sharp2(Buffer.from(file)).blur(sigma).toBuffer();
|
|
42
|
+
return new Uint8Array(result);
|
|
43
|
+
}
|
|
44
|
+
async function convert(file, options) {
|
|
45
|
+
let pipeline = sharp2(Buffer.from(file));
|
|
46
|
+
switch (options.format) {
|
|
47
|
+
case "png":
|
|
48
|
+
pipeline = pipeline.png();
|
|
49
|
+
break;
|
|
50
|
+
case "jpeg":
|
|
51
|
+
pipeline = pipeline.jpeg({ quality: options.quality ?? 80 });
|
|
52
|
+
break;
|
|
53
|
+
case "webp":
|
|
54
|
+
pipeline = pipeline.webp({ quality: options.quality ?? 80 });
|
|
55
|
+
break;
|
|
56
|
+
case "gif":
|
|
57
|
+
pipeline = pipeline.gif();
|
|
58
|
+
break;
|
|
59
|
+
case "tiff":
|
|
60
|
+
pipeline = pipeline.tiff({ quality: options.quality ?? 80 });
|
|
61
|
+
break;
|
|
62
|
+
case "avif":
|
|
63
|
+
pipeline = pipeline.avif({ quality: options.quality ?? 50 });
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
throw new Error(`Unsupported format: ${options.format}`);
|
|
67
|
+
}
|
|
68
|
+
const result = await pipeline.toBuffer();
|
|
69
|
+
return new Uint8Array(result);
|
|
70
|
+
}
|
|
71
|
+
async function compress(file, options = {}) {
|
|
72
|
+
const quality = options.quality ?? 70;
|
|
73
|
+
const format = options.format ?? "jpeg";
|
|
74
|
+
return convert(file, { format, quality });
|
|
75
|
+
}
|
|
76
|
+
async function getMetadata(file) {
|
|
77
|
+
const meta = await sharp2(Buffer.from(file)).metadata();
|
|
78
|
+
return {
|
|
79
|
+
width: meta.width ?? 0,
|
|
80
|
+
height: meta.height ?? 0,
|
|
81
|
+
format: meta.format ?? "unknown",
|
|
82
|
+
channels: meta.channels ?? 0,
|
|
83
|
+
space: meta.space ?? "unknown",
|
|
84
|
+
depth: meta.depth ?? "unknown",
|
|
85
|
+
density: meta.density,
|
|
86
|
+
hasAlpha: meta.hasAlpha ?? false,
|
|
87
|
+
sizeBytes: file.length
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function getStats(file) {
|
|
91
|
+
const meta = await sharp2(Buffer.from(file)).metadata();
|
|
92
|
+
const width = meta.width ?? 0;
|
|
93
|
+
const height = meta.height ?? 0;
|
|
94
|
+
return {
|
|
95
|
+
width,
|
|
96
|
+
height,
|
|
97
|
+
format: meta.format ?? "unknown",
|
|
98
|
+
channels: meta.channels ?? 0,
|
|
99
|
+
hasAlpha: meta.hasAlpha ?? false,
|
|
100
|
+
sizeBytes: file.length,
|
|
101
|
+
megapixels: Math.round(width * height / 1e4) / 100
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export { blur, compress, convert, crop, flip, flop, getMetadata, getStats, grayscale, resize, rotate };
|
|
106
|
+
//# sourceMappingURL=index.mjs.map
|
|
107
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/image/resize.ts","../../src/image/transform.ts","../../src/image/convert.ts","../../src/image/metadata.ts"],"names":["sharp"],"mappings":"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","file":"index.mjs","sourcesContent":["import sharp from 'sharp';\nimport type { ResizeOptions } from './types';\n\nexport async function resize(\n file: Buffer | Uint8Array,\n options: ResizeOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .resize({\n width: options.width,\n height: options.height,\n fit: options.fit ?? 'inside',\n background: options.background ?? '#ffffff',\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n","import sharp from 'sharp';\nimport type { CropOptions, RotateOptions } from './types';\n\nexport async function crop(\n file: Buffer | Uint8Array,\n options: CropOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .extract({\n left: options.left,\n top: options.top,\n width: options.width,\n height: options.height,\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n\nexport async function rotate(\n file: Buffer | Uint8Array,\n options: RotateOptions\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file))\n .rotate(options.degrees, {\n background: options.background ?? '#ffffff',\n })\n .toBuffer();\n\n return new Uint8Array(result);\n}\n\nexport async function flip(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).flip().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function flop(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).flop().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function grayscale(file: Buffer | Uint8Array): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).grayscale().toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function blur(\n file: Buffer | Uint8Array,\n sigma: number = 3\n): Promise<Uint8Array> {\n const result = await sharp(Buffer.from(file)).blur(sigma).toBuffer();\n return new Uint8Array(result);\n}\n","import sharp from 'sharp';\nimport type { ConvertOptions, CompressOptions } from './types';\n\nexport async function convert(\n file: Buffer | Uint8Array,\n options: ConvertOptions\n): Promise<Uint8Array> {\n let pipeline = sharp(Buffer.from(file));\n\n switch (options.format) {\n case 'png':\n pipeline = pipeline.png();\n break;\n case 'jpeg':\n pipeline = pipeline.jpeg({ quality: options.quality ?? 80 });\n break;\n case 'webp':\n pipeline = pipeline.webp({ quality: options.quality ?? 80 });\n break;\n case 'gif':\n pipeline = pipeline.gif();\n break;\n case 'tiff':\n pipeline = pipeline.tiff({ quality: options.quality ?? 80 });\n break;\n case 'avif':\n pipeline = pipeline.avif({ quality: options.quality ?? 50 });\n break;\n default:\n throw new Error(`Unsupported format: ${options.format}`);\n }\n\n const result = await pipeline.toBuffer();\n return new Uint8Array(result);\n}\n\nexport async function compress(\n file: Buffer | Uint8Array,\n options: CompressOptions = {}\n): Promise<Uint8Array> {\n const quality = options.quality ?? 70;\n const format = options.format ?? 'jpeg';\n\n return convert(file, { format, quality });\n}\n","import sharp from 'sharp';\nimport type { ImageMetadata, ImageStats } from './types';\n\nexport async function getMetadata(\n file: Buffer | Uint8Array\n): Promise<ImageMetadata> {\n const meta = await sharp(Buffer.from(file)).metadata();\n\n return {\n width: meta.width ?? 0,\n height: meta.height ?? 0,\n format: meta.format ?? 'unknown',\n channels: meta.channels ?? 0,\n space: meta.space ?? 'unknown',\n depth: meta.depth ?? 'unknown',\n density: meta.density,\n hasAlpha: meta.hasAlpha ?? false,\n sizeBytes: file.length,\n };\n}\n\nexport async function getStats(\n file: Buffer | Uint8Array\n): Promise<ImageStats> {\n const meta = await sharp(Buffer.from(file)).metadata();\n\n const width = meta.width ?? 0;\n const height = meta.height ?? 0;\n\n return {\n width,\n height,\n format: meta.format ?? 'unknown',\n channels: meta.channels ?? 0,\n hasAlpha: meta.hasAlpha ?? false,\n sizeBytes: file.length,\n megapixels: Math.round((width * height) / 10000) / 100,\n };\n}\n"]}
|