@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.
Files changed (142) hide show
  1. package/README.md +742 -0
  2. package/dist/archive/index.d.mts +1 -0
  3. package/dist/archive/index.d.ts +1 -0
  4. package/dist/archive/index.js +90 -0
  5. package/dist/archive/index.js.map +1 -0
  6. package/dist/archive/index.mjs +80 -0
  7. package/dist/archive/index.mjs.map +1 -0
  8. package/dist/color/index.d.mts +1 -0
  9. package/dist/color/index.d.ts +1 -0
  10. package/dist/color/index.js +347 -0
  11. package/dist/color/index.js.map +1 -0
  12. package/dist/color/index.mjs +336 -0
  13. package/dist/color/index.mjs.map +1 -0
  14. package/dist/crypto/index.d.mts +1 -0
  15. package/dist/crypto/index.d.ts +1 -0
  16. package/dist/crypto/index.js +116 -0
  17. package/dist/crypto/index.js.map +1 -0
  18. package/dist/crypto/index.mjs +108 -0
  19. package/dist/crypto/index.mjs.map +1 -0
  20. package/dist/csv/index.d.mts +1 -0
  21. package/dist/csv/index.d.ts +1 -0
  22. package/dist/csv/index.js +371 -0
  23. package/dist/csv/index.js.map +1 -0
  24. package/dist/csv/index.mjs +348 -0
  25. package/dist/csv/index.mjs.map +1 -0
  26. package/dist/datetime/index.d.mts +1 -0
  27. package/dist/datetime/index.d.ts +1 -0
  28. package/dist/datetime/index.js +234 -0
  29. package/dist/datetime/index.js.map +1 -0
  30. package/dist/datetime/index.mjs +224 -0
  31. package/dist/datetime/index.mjs.map +1 -0
  32. package/dist/diff/index.d.mts +2 -0
  33. package/dist/diff/index.d.ts +2 -0
  34. package/dist/diff/index.js +84 -0
  35. package/dist/diff/index.js.map +1 -0
  36. package/dist/diff/index.mjs +78 -0
  37. package/dist/diff/index.mjs.map +1 -0
  38. package/dist/excel/index.d.mts +1 -0
  39. package/dist/excel/index.d.ts +1 -0
  40. package/dist/excel/index.js +163 -0
  41. package/dist/excel/index.js.map +1 -0
  42. package/dist/excel/index.mjs +153 -0
  43. package/dist/excel/index.mjs.map +1 -0
  44. package/dist/image/index.d.mts +1 -0
  45. package/dist/image/index.d.ts +1 -0
  46. package/dist/image/index.js +123 -0
  47. package/dist/image/index.js.map +1 -0
  48. package/dist/image/index.mjs +107 -0
  49. package/dist/image/index.mjs.map +1 -0
  50. package/dist/index--vbnYfdE.d.mts +142 -0
  51. package/dist/index--vbnYfdE.d.ts +142 -0
  52. package/dist/index-7FZQloN-.d.mts +62 -0
  53. package/dist/index-7FZQloN-.d.ts +62 -0
  54. package/dist/index-7XgaTVH5.d.mts +93 -0
  55. package/dist/index-7XgaTVH5.d.ts +93 -0
  56. package/dist/index-7bvFmh45.d.mts +87 -0
  57. package/dist/index-7bvFmh45.d.ts +87 -0
  58. package/dist/index-BDZcIVCU.d.mts +53 -0
  59. package/dist/index-BDZcIVCU.d.ts +53 -0
  60. package/dist/index-BN00EnUU.d.mts +55 -0
  61. package/dist/index-BN00EnUU.d.ts +55 -0
  62. package/dist/index-CQ1EukC4.d.mts +59 -0
  63. package/dist/index-CQ1EukC4.d.ts +59 -0
  64. package/dist/index-CgRVnFOt.d.mts +91 -0
  65. package/dist/index-CgRVnFOt.d.ts +91 -0
  66. package/dist/index-DjBDZzuj.d.mts +54 -0
  67. package/dist/index-DjBDZzuj.d.ts +54 -0
  68. package/dist/index-FFrvmr-n.d.mts +50 -0
  69. package/dist/index-FFrvmr-n.d.ts +50 -0
  70. package/dist/index-QWC8yIgW.d.mts +106 -0
  71. package/dist/index-QWC8yIgW.d.ts +106 -0
  72. package/dist/index-RVqNunxE.d.mts +193 -0
  73. package/dist/index-RVqNunxE.d.ts +193 -0
  74. package/dist/index-fJD8SORm.d.mts +61 -0
  75. package/dist/index-fJD8SORm.d.ts +61 -0
  76. package/dist/index-pPy_XDQU.d.mts +56 -0
  77. package/dist/index-pPy_XDQU.d.ts +56 -0
  78. package/dist/index-rwh9hdD9.d.mts +68 -0
  79. package/dist/index-rwh9hdD9.d.ts +68 -0
  80. package/dist/index-uXdkAfea.d.mts +93 -0
  81. package/dist/index-uXdkAfea.d.ts +93 -0
  82. package/dist/index.d.mts +17 -0
  83. package/dist/index.d.ts +17 -0
  84. package/dist/index.js +3744 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/index.mjs +3694 -0
  87. package/dist/index.mjs.map +1 -0
  88. package/dist/json/index.d.mts +1 -0
  89. package/dist/json/index.d.ts +1 -0
  90. package/dist/json/index.js +599 -0
  91. package/dist/json/index.js.map +1 -0
  92. package/dist/json/index.mjs +552 -0
  93. package/dist/json/index.mjs.map +1 -0
  94. package/dist/markdown/index.d.mts +1 -0
  95. package/dist/markdown/index.d.ts +1 -0
  96. package/dist/markdown/index.js +151 -0
  97. package/dist/markdown/index.js.map +1 -0
  98. package/dist/markdown/index.mjs +139 -0
  99. package/dist/markdown/index.mjs.map +1 -0
  100. package/dist/math/index.d.mts +1 -0
  101. package/dist/math/index.d.ts +1 -0
  102. package/dist/math/index.js +247 -0
  103. package/dist/math/index.js.map +1 -0
  104. package/dist/math/index.mjs +240 -0
  105. package/dist/math/index.mjs.map +1 -0
  106. package/dist/pdf/index.d.mts +1 -0
  107. package/dist/pdf/index.d.ts +1 -0
  108. package/dist/pdf/index.js +546 -0
  109. package/dist/pdf/index.js.map +1 -0
  110. package/dist/pdf/index.mjs +518 -0
  111. package/dist/pdf/index.mjs.map +1 -0
  112. package/dist/regex/index.d.mts +1 -0
  113. package/dist/regex/index.d.ts +1 -0
  114. package/dist/regex/index.js +93 -0
  115. package/dist/regex/index.js.map +1 -0
  116. package/dist/regex/index.mjs +88 -0
  117. package/dist/regex/index.mjs.map +1 -0
  118. package/dist/settings/index.d.mts +41 -0
  119. package/dist/settings/index.d.ts +41 -0
  120. package/dist/settings/index.js +146 -0
  121. package/dist/settings/index.js.map +1 -0
  122. package/dist/settings/index.mjs +139 -0
  123. package/dist/settings/index.mjs.map +1 -0
  124. package/dist/sql/index.d.mts +1 -0
  125. package/dist/sql/index.d.ts +1 -0
  126. package/dist/sql/index.js +146 -0
  127. package/dist/sql/index.js.map +1 -0
  128. package/dist/sql/index.mjs +139 -0
  129. package/dist/sql/index.mjs.map +1 -0
  130. package/dist/text/index.d.mts +1 -0
  131. package/dist/text/index.d.ts +1 -0
  132. package/dist/text/index.js +250 -0
  133. package/dist/text/index.js.map +1 -0
  134. package/dist/text/index.mjs +242 -0
  135. package/dist/text/index.mjs.map +1 -0
  136. package/dist/xml/index.d.mts +1 -0
  137. package/dist/xml/index.d.ts +1 -0
  138. package/dist/xml/index.js +188 -0
  139. package/dist/xml/index.js.map +1 -0
  140. package/dist/xml/index.mjs +180 -0
  141. package/dist/xml/index.mjs.map +1 -0
  142. 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":";;;AAGA,eAAsB,KAAA,CACpB,IAAA,EACA,OAAA,GAA6B,EAAC,EACH;AAC3B,EAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,QAAA,EAAS;AAEtC,EAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1C,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,QAAA,CAAS,SAAA,CAAU,CAAC,EAAA,EAAI,EAAA,KAAO;AAC7B,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,EAAA,CAAG,QAAA;AAAA,MACb,aAAa,EAAA,CAAG;AAAA,KACjB,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GACJ,OAAO,OAAA,CAAQ,KAAA,KAAU,WACrB,QAAA,CAAS,UAAA,CAAW,QAAQ,KAAK,CAAA,GACjC,OAAO,OAAA,CAAQ,KAAA,KAAU,WACvB,QAAA,CAAS,YAAA,CAAa,QAAQ,KAAK,CAAA,GACnC,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA;AAE7B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,IAAU,IAAA;AACrC,EAAA,MAAM,OAAkC,EAAC;AACzC,EAAA,IAAI,UAAoB,EAAC;AAEzB,EAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,GAAA,EAAK,SAAA,KAAc;AACtC,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAE5B,IAAA,IAAI,SAAA,KAAc,KAAK,UAAA,EAAY;AACjC,MAAA,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,IAAK,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,MAAM,IAAA,GAAO,UAAA,IAAc,OAAA,CAAQ,MAAA,GAAS,IAAI,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAE9F,IAAA,IAAI,CAAC,UAAA,IAAc,SAAA,KAAc,CAAA,EAAG;AAClC,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AACvB,MAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,YAAe,OAAO,GAAA,CAAI,WAAA,KAAiB,GAAA,IAAO,IAAA;AAAA,IAClE,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,OAAA;AAAA,IACA,UAAU,IAAA,CAAK;AAAA,GACjB;AACF;AAEA,eAAsB,UACpB,IAAA,EACsB;AACtB,EAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,QAAA,EAAS;AAEtC,EAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1C,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,QAAA,CAAS,SAAA,CAAU,CAAC,EAAA,EAAI,EAAA,KAAO;AAC7B,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,EAAA,CAAG,QAAA;AAAA,MACb,aAAa,EAAA,CAAG;AAAA,KACjB,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AClFA,eAAsB,OAAA,CACpB,IAAA,EACA,MAAA,EACA,OAAA,GAA+B,EAAC,EACf;AACjB,EAAA,MAAM,QAAA,GAAW,IAAIA,OAAAA,CAAQ,QAAA,EAAS;AAEtC,EAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1C,EAAA,MAAM,WAAA,GACJ,OAAO,OAAA,CAAQ,KAAA,KAAU,WACrB,QAAA,CAAS,UAAA,CAAW,QAAQ,KAAK,CAAA,GACjC,OAAO,OAAA,CAAQ,KAAA,KAAU,WACvB,QAAA,CAAS,YAAA,CAAa,QAAQ,KAAK,CAAA,GACnC,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA;AAE7B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,IAAU,IAAA;AACrC,EAAA,MAAM,UAAuB,EAAC;AAE9B,EAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC3B,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,YAAa,IAAA,GAAO,CAAA,CAAE,WAAA,EAAY,GAAI,CAAE,CAAC,CAAA;AAAA,EACpF,CAAC,CAAA;AAED,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAEjC,EAAA,MAAM,OAAA,GAAU,UAAA,GACZ,OAAA,CAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,IAAK,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,GACtD,OAAA,CAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,OAAA;AAEjD,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpC,QAAA,MAAM,SAAkC,EAAC;AACzC,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,UAAA,MAAA,CAAO,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA;AAAA,QACxB,CAAC,CAAA;AACD,QAAA,OAAO,MAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,IACxC;AAAA,IACA,KAAK,KAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,EAAS,QAAA,EAAU,GAAG,CAAA;AAAA,IACrC,KAAK,KAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,EAAS,QAAA,EAAU,GAAI,CAAA;AAAA,IACtC;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAE,CAAA;AAAA;AAErD;AAEA,SAAS,KAAA,CAAM,OAAA,EAAmB,IAAA,EAAmB,SAAA,EAA2B;AAC9E,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AACvC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,IAAO,EAAE,CAAA;AAC5B,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AACtE,MAAA,OAAO,CAAA,CAAA,EAAI,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,SAAS,CAAC,CAAA;AAClD,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,eAAsB,WAAA,CACpB,IAAA,EACA,SAAA,GAAY,QAAA,EACS;AACrB,EAAA,MAAM,QAAA,GAAW,IAAIA,OAAAA,CAAQ,QAAA,EAAS;AACtC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,YAAA,CAAa,SAAS,CAAA;AAE7C,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAMC,OAAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,WAAA,EAAY;AAC/C,IAAA,OAAO,IAAI,WAAWA,OAAM,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AACnC,EAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AAEpB,EAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,IAAA,KAAA,CAAM,MAAA,CAAO,QAAQ,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,WAAA,EAAY;AAC/C,EAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAC9B;AC5FA,eAAsB,SAAS,IAAA,EAAgD;AAC7E,EAAA,MAAM,QAAA,GAAW,IAAID,OAAAA,CAAQ,QAAA,EAAS;AAEtC,EAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1C,EAAA,MAAM,eAA4B,EAAC;AACnC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,EAAA,QAAA,CAAS,SAAA,CAAU,CAAC,EAAA,EAAI,EAAA,KAAO;AAC7B,IAAA,YAAA,CAAa,IAAA,CAAK;AAAA,MAChB,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,EAAA,CAAG,QAAA;AAAA,MACb,aAAa,EAAA,CAAG;AAAA,KACjB,CAAA;AACD,IAAA,SAAA,IAAa,EAAA,CAAG,QAAA;AAChB,IAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,EAAA,CAAG,WAAW,CAAA;AAAA,EACtD,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,SAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAW,IAAA,CAAK;AAAA,GAClB;AACF","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"]}