@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,371 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Papa = require('papaparse');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var Papa__default = /*#__PURE__*/_interopDefault(Papa);
|
|
8
|
+
|
|
9
|
+
// src/csv/parse.ts
|
|
10
|
+
function parse(input, options = {}) {
|
|
11
|
+
const {
|
|
12
|
+
delimiter = ",",
|
|
13
|
+
header = true,
|
|
14
|
+
skipRows = 0,
|
|
15
|
+
trimFields = true,
|
|
16
|
+
dynamicTyping = true
|
|
17
|
+
} = options;
|
|
18
|
+
let processedInput = input;
|
|
19
|
+
if (skipRows > 0) {
|
|
20
|
+
const lines = input.split("\n");
|
|
21
|
+
processedInput = lines.slice(skipRows).join("\n");
|
|
22
|
+
}
|
|
23
|
+
const result = Papa__default.default.parse(processedInput, {
|
|
24
|
+
delimiter,
|
|
25
|
+
header,
|
|
26
|
+
skipEmptyLines: true,
|
|
27
|
+
transformHeader: trimFields ? (h) => h.trim() : void 0,
|
|
28
|
+
transform: trimFields ? (v) => v.trim() : void 0,
|
|
29
|
+
dynamicTyping
|
|
30
|
+
});
|
|
31
|
+
const errors = result.errors.map((e) => ({
|
|
32
|
+
row: e.row ?? -1,
|
|
33
|
+
message: e.message
|
|
34
|
+
}));
|
|
35
|
+
const headers = header ? result.meta.fields || [] : Array.from({ length: result.data[0]?.length || 0 }, (_, i) => `col_${i}`);
|
|
36
|
+
const data = header ? result.data : result.data.map((row) => {
|
|
37
|
+
const obj = {};
|
|
38
|
+
headers.forEach((h, i) => {
|
|
39
|
+
obj[h] = row[i];
|
|
40
|
+
});
|
|
41
|
+
return obj;
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
data,
|
|
45
|
+
headers,
|
|
46
|
+
rowCount: data.length,
|
|
47
|
+
errors
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function parseToArray(input, options = {}) {
|
|
51
|
+
const result = parse(input, { ...options, header: false });
|
|
52
|
+
return result.data.map((row) => Object.values(row));
|
|
53
|
+
}
|
|
54
|
+
function detectDelimiter(input) {
|
|
55
|
+
const delimiters = [",", " ", ";", "|"];
|
|
56
|
+
const firstLine = input.split("\n")[0];
|
|
57
|
+
let maxCount = 0;
|
|
58
|
+
let detected = ",";
|
|
59
|
+
for (const d of delimiters) {
|
|
60
|
+
const count = (firstLine.match(new RegExp(`\\${d}`, "g")) || []).length;
|
|
61
|
+
if (count > maxCount) {
|
|
62
|
+
maxCount = count;
|
|
63
|
+
detected = d;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return detected;
|
|
67
|
+
}
|
|
68
|
+
function getHeaders(input, delimiter) {
|
|
69
|
+
const d = delimiter || detectDelimiter(input);
|
|
70
|
+
const firstLine = input.split("\n")[0];
|
|
71
|
+
return Papa__default.default.parse(firstLine, { delimiter: d }).data[0];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// src/csv/filter.ts
|
|
75
|
+
function filter(input, filters) {
|
|
76
|
+
const result = parse(input);
|
|
77
|
+
const filteredData = filterData(result.data, filters);
|
|
78
|
+
return toCSV(filteredData, result.headers);
|
|
79
|
+
}
|
|
80
|
+
function filterData(data, filters) {
|
|
81
|
+
return data.filter((row) => {
|
|
82
|
+
return filters.every((f) => matchesFilter(row, f));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function matchesFilter(row, filter2) {
|
|
86
|
+
const value = row[filter2.column];
|
|
87
|
+
const filterValue = filter2.value;
|
|
88
|
+
switch (filter2.operator) {
|
|
89
|
+
case "eq":
|
|
90
|
+
return value === filterValue;
|
|
91
|
+
case "neq":
|
|
92
|
+
return value !== filterValue;
|
|
93
|
+
case "gt":
|
|
94
|
+
return Number(value) > Number(filterValue);
|
|
95
|
+
case "gte":
|
|
96
|
+
return Number(value) >= Number(filterValue);
|
|
97
|
+
case "lt":
|
|
98
|
+
return Number(value) < Number(filterValue);
|
|
99
|
+
case "lte":
|
|
100
|
+
return Number(value) <= Number(filterValue);
|
|
101
|
+
case "contains":
|
|
102
|
+
return String(value).toLowerCase().includes(String(filterValue).toLowerCase());
|
|
103
|
+
case "startsWith":
|
|
104
|
+
return String(value).toLowerCase().startsWith(String(filterValue).toLowerCase());
|
|
105
|
+
case "endsWith":
|
|
106
|
+
return String(value).toLowerCase().endsWith(String(filterValue).toLowerCase());
|
|
107
|
+
case "matches":
|
|
108
|
+
return new RegExp(String(filterValue), "i").test(String(value));
|
|
109
|
+
case "isNull":
|
|
110
|
+
return value === null || value === void 0 || value === "";
|
|
111
|
+
case "isNotNull":
|
|
112
|
+
return value !== null && value !== void 0 && value !== "";
|
|
113
|
+
default:
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function toCSV(data, headers) {
|
|
118
|
+
const headerRow = headers.map(escapeCSVField).join(",");
|
|
119
|
+
const dataRows = data.map(
|
|
120
|
+
(row) => headers.map((h) => escapeCSVField(row[h])).join(",")
|
|
121
|
+
);
|
|
122
|
+
return [headerRow, ...dataRows].join("\n");
|
|
123
|
+
}
|
|
124
|
+
function escapeCSVField(value) {
|
|
125
|
+
if (value === null || value === void 0) {
|
|
126
|
+
return "";
|
|
127
|
+
}
|
|
128
|
+
const str = String(value);
|
|
129
|
+
if (str.includes(",") || str.includes('"') || str.includes("\n")) {
|
|
130
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
131
|
+
}
|
|
132
|
+
return str;
|
|
133
|
+
}
|
|
134
|
+
function filterByColumn(input, column, operator, value) {
|
|
135
|
+
return filter(input, [{ column, operator, value }]);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// src/csv/stats.ts
|
|
139
|
+
function getStats(input) {
|
|
140
|
+
const result = parse(input);
|
|
141
|
+
return getStatsFromData(result);
|
|
142
|
+
}
|
|
143
|
+
function getStatsFromData(result) {
|
|
144
|
+
const { data, headers } = result;
|
|
145
|
+
return headers.map((header) => {
|
|
146
|
+
const values = data.map((row) => row[header]);
|
|
147
|
+
return analyzeColumn(header, values);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function analyzeColumn(name, values) {
|
|
151
|
+
const nonNullValues = values.filter(
|
|
152
|
+
(v) => v !== null && v !== void 0 && v !== ""
|
|
153
|
+
);
|
|
154
|
+
const nullCount = values.length - nonNullValues.length;
|
|
155
|
+
const type = detectType(nonNullValues);
|
|
156
|
+
const stats = {
|
|
157
|
+
name,
|
|
158
|
+
type,
|
|
159
|
+
count: values.length,
|
|
160
|
+
nullCount,
|
|
161
|
+
uniqueCount: new Set(nonNullValues.map(String)).size
|
|
162
|
+
};
|
|
163
|
+
if (type === "number") {
|
|
164
|
+
const numbers = nonNullValues.map(Number).filter((n) => !isNaN(n));
|
|
165
|
+
if (numbers.length > 0) {
|
|
166
|
+
stats.min = Math.min(...numbers);
|
|
167
|
+
stats.max = Math.max(...numbers);
|
|
168
|
+
stats.sum = numbers.reduce((a, b) => a + b, 0);
|
|
169
|
+
stats.mean = stats.sum / numbers.length;
|
|
170
|
+
}
|
|
171
|
+
} else if (type === "string" || type === "date") {
|
|
172
|
+
const sorted = [...nonNullValues].map(String).sort();
|
|
173
|
+
if (sorted.length > 0) {
|
|
174
|
+
stats.min = sorted[0];
|
|
175
|
+
stats.max = sorted[sorted.length - 1];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
stats.topValues = getTopValues(nonNullValues, 5);
|
|
179
|
+
return stats;
|
|
180
|
+
}
|
|
181
|
+
function detectType(values) {
|
|
182
|
+
if (values.length === 0) return "empty";
|
|
183
|
+
const types = /* @__PURE__ */ new Set();
|
|
184
|
+
for (const value of values) {
|
|
185
|
+
if (typeof value === "number" || !isNaN(Number(value))) {
|
|
186
|
+
types.add("number");
|
|
187
|
+
} else if (typeof value === "boolean" || value === "true" || value === "false") {
|
|
188
|
+
types.add("boolean");
|
|
189
|
+
} else if (isDateLike(String(value))) {
|
|
190
|
+
types.add("date");
|
|
191
|
+
} else {
|
|
192
|
+
types.add("string");
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (types.size === 1) {
|
|
196
|
+
return types.values().next().value;
|
|
197
|
+
}
|
|
198
|
+
if (types.size === 2 && types.has("number") && types.has("string")) {
|
|
199
|
+
const numberRatio = values.filter((v) => !isNaN(Number(v))).length / values.length;
|
|
200
|
+
if (numberRatio > 0.9) return "number";
|
|
201
|
+
}
|
|
202
|
+
return "mixed";
|
|
203
|
+
}
|
|
204
|
+
function isDateLike(value) {
|
|
205
|
+
const datePatterns = [
|
|
206
|
+
/^\d{4}-\d{2}-\d{2}$/,
|
|
207
|
+
/^\d{2}\/\d{2}\/\d{4}$/,
|
|
208
|
+
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/
|
|
209
|
+
];
|
|
210
|
+
return datePatterns.some((p) => p.test(value));
|
|
211
|
+
}
|
|
212
|
+
function getTopValues(values, limit) {
|
|
213
|
+
const counts = /* @__PURE__ */ new Map();
|
|
214
|
+
for (const value of values) {
|
|
215
|
+
const key = String(value);
|
|
216
|
+
const existing = counts.get(key);
|
|
217
|
+
if (existing) {
|
|
218
|
+
existing.count++;
|
|
219
|
+
} else {
|
|
220
|
+
counts.set(key, { value, count: 1 });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return [...counts.values()].sort((a, b) => b.count - a.count).slice(0, limit);
|
|
224
|
+
}
|
|
225
|
+
function getColumnStats(input, column) {
|
|
226
|
+
const stats = getStats(input);
|
|
227
|
+
return stats.find((s) => s.name === column) || null;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// src/csv/transform.ts
|
|
231
|
+
function transform(input, options) {
|
|
232
|
+
const result = parse(input);
|
|
233
|
+
const transformed = transformData(result, options);
|
|
234
|
+
return toCSV2(transformed.data, transformed.headers);
|
|
235
|
+
}
|
|
236
|
+
function transformData(result, options) {
|
|
237
|
+
let { data, headers } = result;
|
|
238
|
+
if (options.select) {
|
|
239
|
+
headers = options.select.filter((h) => headers.includes(h));
|
|
240
|
+
}
|
|
241
|
+
if (options.exclude) {
|
|
242
|
+
headers = headers.filter((h) => !options.exclude.includes(h));
|
|
243
|
+
}
|
|
244
|
+
if (options.rename) {
|
|
245
|
+
headers = headers.map((h) => options.rename[h] || h);
|
|
246
|
+
}
|
|
247
|
+
data = data.map((row) => {
|
|
248
|
+
const newRow = {};
|
|
249
|
+
for (const header of result.headers) {
|
|
250
|
+
if (options.select && !options.select.includes(header)) continue;
|
|
251
|
+
if (options.exclude && options.exclude.includes(header)) continue;
|
|
252
|
+
const newKey = options.rename?.[header] || header;
|
|
253
|
+
newRow[newKey] = row[header];
|
|
254
|
+
}
|
|
255
|
+
if (options.derive) {
|
|
256
|
+
for (const [key, fn] of Object.entries(options.derive)) {
|
|
257
|
+
newRow[key] = fn(row);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return newRow;
|
|
261
|
+
});
|
|
262
|
+
if (options.derive) {
|
|
263
|
+
headers = [...headers, ...Object.keys(options.derive)];
|
|
264
|
+
}
|
|
265
|
+
return { data, headers, rowCount: data.length, errors: [] };
|
|
266
|
+
}
|
|
267
|
+
function toCSV2(data, headers) {
|
|
268
|
+
const headerRow = headers.map(escapeCSVField2).join(",");
|
|
269
|
+
const dataRows = data.map(
|
|
270
|
+
(row) => headers.map((h) => escapeCSVField2(row[h])).join(",")
|
|
271
|
+
);
|
|
272
|
+
return [headerRow, ...dataRows].join("\n");
|
|
273
|
+
}
|
|
274
|
+
function escapeCSVField2(value) {
|
|
275
|
+
if (value === null || value === void 0) {
|
|
276
|
+
return "";
|
|
277
|
+
}
|
|
278
|
+
const str = String(value);
|
|
279
|
+
if (str.includes(",") || str.includes('"') || str.includes("\n")) {
|
|
280
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
281
|
+
}
|
|
282
|
+
return str;
|
|
283
|
+
}
|
|
284
|
+
function sortData(data, column, direction = "asc") {
|
|
285
|
+
return [...data].sort((a, b) => {
|
|
286
|
+
const aVal = a[column];
|
|
287
|
+
const bVal = b[column];
|
|
288
|
+
if (aVal === bVal) return 0;
|
|
289
|
+
if (aVal === null || aVal === void 0) return 1;
|
|
290
|
+
if (bVal === null || bVal === void 0) return -1;
|
|
291
|
+
const comparison = typeof aVal === "number" && typeof bVal === "number" ? aVal - bVal : String(aVal).localeCompare(String(bVal));
|
|
292
|
+
return direction === "asc" ? comparison : -comparison;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// src/csv/export.ts
|
|
297
|
+
function exportData(input, options) {
|
|
298
|
+
const result = parse(input);
|
|
299
|
+
return exportFromData(result, options);
|
|
300
|
+
}
|
|
301
|
+
function exportFromData(result, options) {
|
|
302
|
+
const { format, headers = true, delimiter } = options;
|
|
303
|
+
switch (format) {
|
|
304
|
+
case "csv":
|
|
305
|
+
return toCSV3(result.data, result.headers, delimiter || ",", headers);
|
|
306
|
+
case "tsv":
|
|
307
|
+
return toCSV3(result.data, result.headers, " ", headers);
|
|
308
|
+
case "json":
|
|
309
|
+
return JSON.stringify(result.data, null, 2);
|
|
310
|
+
case "jsonl":
|
|
311
|
+
return result.data.map((row) => JSON.stringify(row)).join("\n");
|
|
312
|
+
default:
|
|
313
|
+
throw new Error(`Unsupported export format: ${format}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function toCSV3(data, headers, delimiter, includeHeaders) {
|
|
317
|
+
const lines = [];
|
|
318
|
+
if (includeHeaders) {
|
|
319
|
+
lines.push(headers.map((h) => escapeField(h, delimiter)).join(delimiter));
|
|
320
|
+
}
|
|
321
|
+
for (const row of data) {
|
|
322
|
+
lines.push(
|
|
323
|
+
headers.map((h) => escapeField(row[h], delimiter)).join(delimiter)
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
return lines.join("\n");
|
|
327
|
+
}
|
|
328
|
+
function escapeField(value, delimiter) {
|
|
329
|
+
if (value === null || value === void 0) {
|
|
330
|
+
return "";
|
|
331
|
+
}
|
|
332
|
+
const str = String(value);
|
|
333
|
+
const needsQuoting = str.includes(delimiter) || str.includes('"') || str.includes("\n");
|
|
334
|
+
if (needsQuoting) {
|
|
335
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
336
|
+
}
|
|
337
|
+
return str;
|
|
338
|
+
}
|
|
339
|
+
function toJson(input, pretty = true) {
|
|
340
|
+
const result = parse(input);
|
|
341
|
+
return pretty ? JSON.stringify(result.data, null, 2) : JSON.stringify(result.data);
|
|
342
|
+
}
|
|
343
|
+
function toJsonLines(input) {
|
|
344
|
+
const result = parse(input);
|
|
345
|
+
return result.data.map((row) => JSON.stringify(row)).join("\n");
|
|
346
|
+
}
|
|
347
|
+
function toArray(input) {
|
|
348
|
+
const result = parse(input);
|
|
349
|
+
return result.data;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
exports.detectDelimiter = detectDelimiter;
|
|
353
|
+
exports.exportData = exportData;
|
|
354
|
+
exports.exportFromData = exportFromData;
|
|
355
|
+
exports.filter = filter;
|
|
356
|
+
exports.filterByColumn = filterByColumn;
|
|
357
|
+
exports.filterData = filterData;
|
|
358
|
+
exports.getColumnStats = getColumnStats;
|
|
359
|
+
exports.getHeaders = getHeaders;
|
|
360
|
+
exports.getStats = getStats;
|
|
361
|
+
exports.getStatsFromData = getStatsFromData;
|
|
362
|
+
exports.parse = parse;
|
|
363
|
+
exports.parseToArray = parseToArray;
|
|
364
|
+
exports.sortData = sortData;
|
|
365
|
+
exports.toArray = toArray;
|
|
366
|
+
exports.toJson = toJson;
|
|
367
|
+
exports.toJsonLines = toJsonLines;
|
|
368
|
+
exports.transform = transform;
|
|
369
|
+
exports.transformData = transformData;
|
|
370
|
+
//# sourceMappingURL=index.js.map
|
|
371
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/csv/parse.ts","../../src/csv/filter.ts","../../src/csv/stats.ts","../../src/csv/transform.ts","../../src/csv/export.ts"],"names":["Papa","filter","toCSV","escapeCSVField"],"mappings":"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","file":"index.js","sourcesContent":["import Papa from 'papaparse';\nimport type { ParseOptions, ParseResult, ParseError } from './types';\n\nexport function parse(input: string, options: ParseOptions = {}): ParseResult {\n const {\n delimiter = ',',\n header = true,\n skipRows = 0,\n trimFields = true,\n dynamicTyping = true,\n } = options;\n\n let processedInput = input;\n if (skipRows > 0) {\n const lines = input.split('\\n');\n processedInput = lines.slice(skipRows).join('\\n');\n }\n\n const result = Papa.parse(processedInput, {\n delimiter,\n header,\n skipEmptyLines: true,\n transformHeader: trimFields ? (h) => h.trim() : undefined,\n transform: trimFields ? (v) => v.trim() : undefined,\n dynamicTyping,\n });\n\n const errors: ParseError[] = result.errors.map((e) => ({\n row: e.row ?? -1,\n message: e.message,\n }));\n\n const headers = header\n ? (result.meta.fields || [])\n : Array.from({ length: (result.data[0] as unknown[])?.length || 0 }, (_, i) => `col_${i}`);\n\n const data = header\n ? (result.data as Record<string, unknown>[])\n : (result.data as unknown[][]).map((row) => {\n const obj: Record<string, unknown> = {};\n headers.forEach((h, i) => {\n obj[h] = row[i];\n });\n return obj;\n });\n\n return {\n data,\n headers,\n rowCount: data.length,\n errors,\n };\n}\n\nexport function parseToArray(input: string, options: ParseOptions = {}): unknown[][] {\n const result = parse(input, { ...options, header: false });\n return result.data.map((row) => Object.values(row));\n}\n\nexport function detectDelimiter(input: string): string {\n const delimiters = [',', '\\t', ';', '|'];\n const firstLine = input.split('\\n')[0];\n\n let maxCount = 0;\n let detected = ',';\n\n for (const d of delimiters) {\n const count = (firstLine.match(new RegExp(`\\\\${d}`, 'g')) || []).length;\n if (count > maxCount) {\n maxCount = count;\n detected = d;\n }\n }\n\n return detected;\n}\n\nexport function getHeaders(input: string, delimiter?: string): string[] {\n const d = delimiter || detectDelimiter(input);\n const firstLine = input.split('\\n')[0];\n return Papa.parse(firstLine, { delimiter: d }).data[0] as string[];\n}\n","import type { Filter, FilterOperator } from './types';\nimport { parse } from './parse';\n\nexport function filter(input: string, filters: Filter[]): string {\n const result = parse(input);\n const filteredData = filterData(result.data, filters);\n return toCSV(filteredData, result.headers);\n}\n\nexport function filterData(\n data: Record<string, unknown>[],\n filters: Filter[]\n): Record<string, unknown>[] {\n return data.filter((row) => {\n return filters.every((f) => matchesFilter(row, f));\n });\n}\n\nfunction matchesFilter(row: Record<string, unknown>, filter: Filter): boolean {\n const value = row[filter.column];\n const filterValue = filter.value;\n\n switch (filter.operator) {\n case 'eq':\n return value === filterValue;\n case 'neq':\n return value !== filterValue;\n case 'gt':\n return Number(value) > Number(filterValue);\n case 'gte':\n return Number(value) >= Number(filterValue);\n case 'lt':\n return Number(value) < Number(filterValue);\n case 'lte':\n return Number(value) <= Number(filterValue);\n case 'contains':\n return String(value).toLowerCase().includes(String(filterValue).toLowerCase());\n case 'startsWith':\n return String(value).toLowerCase().startsWith(String(filterValue).toLowerCase());\n case 'endsWith':\n return String(value).toLowerCase().endsWith(String(filterValue).toLowerCase());\n case 'matches':\n return new RegExp(String(filterValue), 'i').test(String(value));\n case 'isNull':\n return value === null || value === undefined || value === '';\n case 'isNotNull':\n return value !== null && value !== undefined && value !== '';\n default:\n return true;\n }\n}\n\nfunction toCSV(data: Record<string, unknown>[], headers: string[]): string {\n const headerRow = headers.map(escapeCSVField).join(',');\n const dataRows = data.map((row) =>\n headers.map((h) => escapeCSVField(row[h])).join(',')\n );\n return [headerRow, ...dataRows].join('\\n');\n}\n\nfunction escapeCSVField(value: unknown): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nexport function filterByColumn(\n input: string,\n column: string,\n operator: FilterOperator,\n value?: unknown\n): string {\n return filter(input, [{ column, operator, value }]);\n}\n","import type { ColumnStats, ParseResult } from './types';\nimport { parse } from './parse';\n\nexport function getStats(input: string): ColumnStats[] {\n const result = parse(input);\n return getStatsFromData(result);\n}\n\nexport function getStatsFromData(result: ParseResult): ColumnStats[] {\n const { data, headers } = result;\n\n return headers.map((header) => {\n const values = data.map((row) => row[header]);\n return analyzeColumn(header, values);\n });\n}\n\nfunction analyzeColumn(name: string, values: unknown[]): ColumnStats {\n const nonNullValues = values.filter(\n (v) => v !== null && v !== undefined && v !== ''\n );\n\n const nullCount = values.length - nonNullValues.length;\n const type = detectType(nonNullValues);\n\n const stats: ColumnStats = {\n name,\n type,\n count: values.length,\n nullCount,\n uniqueCount: new Set(nonNullValues.map(String)).size,\n };\n\n if (type === 'number') {\n const numbers = nonNullValues.map(Number).filter((n) => !isNaN(n));\n if (numbers.length > 0) {\n stats.min = Math.min(...numbers);\n stats.max = Math.max(...numbers);\n stats.sum = numbers.reduce((a, b) => a + b, 0);\n stats.mean = stats.sum / numbers.length;\n }\n } else if (type === 'string' || type === 'date') {\n const sorted = [...nonNullValues].map(String).sort();\n if (sorted.length > 0) {\n stats.min = sorted[0];\n stats.max = sorted[sorted.length - 1];\n }\n }\n\n stats.topValues = getTopValues(nonNullValues, 5);\n\n return stats;\n}\n\nfunction detectType(\n values: unknown[]\n): 'string' | 'number' | 'boolean' | 'date' | 'mixed' | 'empty' {\n if (values.length === 0) return 'empty';\n\n const types = new Set<string>();\n\n for (const value of values) {\n if (typeof value === 'number' || !isNaN(Number(value))) {\n types.add('number');\n } else if (typeof value === 'boolean' || value === 'true' || value === 'false') {\n types.add('boolean');\n } else if (isDateLike(String(value))) {\n types.add('date');\n } else {\n types.add('string');\n }\n }\n\n if (types.size === 1) {\n return types.values().next().value as 'string' | 'number' | 'boolean' | 'date';\n }\n\n if (types.size === 2 && types.has('number') && types.has('string')) {\n const numberRatio =\n values.filter((v) => !isNaN(Number(v))).length / values.length;\n if (numberRatio > 0.9) return 'number';\n }\n\n return 'mixed';\n}\n\nfunction isDateLike(value: string): boolean {\n const datePatterns = [\n /^\\d{4}-\\d{2}-\\d{2}$/,\n /^\\d{2}\\/\\d{2}\\/\\d{4}$/,\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/,\n ];\n return datePatterns.some((p) => p.test(value));\n}\n\nfunction getTopValues(\n values: unknown[],\n limit: number\n): { value: unknown; count: number }[] {\n const counts = new Map<string, { value: unknown; count: number }>();\n\n for (const value of values) {\n const key = String(value);\n const existing = counts.get(key);\n if (existing) {\n existing.count++;\n } else {\n counts.set(key, { value, count: 1 });\n }\n }\n\n return [...counts.values()]\n .sort((a, b) => b.count - a.count)\n .slice(0, limit);\n}\n\nexport function getColumnStats(input: string, column: string): ColumnStats | null {\n const stats = getStats(input);\n return stats.find((s) => s.name === column) || null;\n}\n","import type { TransformOptions, ParseResult } from './types';\nimport { parse } from './parse';\n\nexport function transform(input: string, options: TransformOptions): string {\n const result = parse(input);\n const transformed = transformData(result, options);\n return toCSV(transformed.data, transformed.headers);\n}\n\nexport function transformData(\n result: ParseResult,\n options: TransformOptions\n): ParseResult {\n let { data, headers } = result;\n\n if (options.select) {\n headers = options.select.filter((h) => headers.includes(h));\n }\n\n if (options.exclude) {\n headers = headers.filter((h) => !options.exclude!.includes(h));\n }\n\n if (options.rename) {\n headers = headers.map((h) => options.rename![h] || h);\n }\n\n data = data.map((row) => {\n const newRow: Record<string, unknown> = {};\n\n for (const header of result.headers) {\n if (options.select && !options.select.includes(header)) continue;\n if (options.exclude && options.exclude.includes(header)) continue;\n\n const newKey = options.rename?.[header] || header;\n newRow[newKey] = row[header];\n }\n\n if (options.derive) {\n for (const [key, fn] of Object.entries(options.derive)) {\n newRow[key] = fn(row);\n }\n }\n\n return newRow;\n });\n\n if (options.derive) {\n headers = [...headers, ...Object.keys(options.derive)];\n }\n\n return { data, headers, rowCount: data.length, errors: [] };\n}\n\nfunction toCSV(data: Record<string, unknown>[], headers: string[]): string {\n const headerRow = headers.map(escapeCSVField).join(',');\n const dataRows = data.map((row) =>\n headers.map((h) => escapeCSVField(row[h])).join(',')\n );\n return [headerRow, ...dataRows].join('\\n');\n}\n\nfunction escapeCSVField(value: unknown): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nexport function sortData(\n data: Record<string, unknown>[],\n column: string,\n direction: 'asc' | 'desc' = 'asc'\n): Record<string, unknown>[] {\n return [...data].sort((a, b) => {\n const aVal = a[column];\n const bVal = b[column];\n\n if (aVal === bVal) return 0;\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n const comparison =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n}\n","import type { ExportOptions, ParseResult } from './types';\nimport { parse } from './parse';\n\nexport function exportData(input: string, options: ExportOptions): string {\n const result = parse(input);\n return exportFromData(result, options);\n}\n\nexport function exportFromData(result: ParseResult, options: ExportOptions): string {\n const { format, headers = true, delimiter } = options;\n\n switch (format) {\n case 'csv':\n return toCSV(result.data, result.headers, delimiter || ',', headers);\n case 'tsv':\n return toCSV(result.data, result.headers, '\\t', headers);\n case 'json':\n return JSON.stringify(result.data, null, 2);\n case 'jsonl':\n return result.data.map((row) => JSON.stringify(row)).join('\\n');\n default:\n throw new Error(`Unsupported export format: ${format}`);\n }\n}\n\nfunction toCSV(\n data: Record<string, unknown>[],\n headers: string[],\n delimiter: string,\n includeHeaders: boolean\n): string {\n const lines: string[] = [];\n\n if (includeHeaders) {\n lines.push(headers.map((h) => escapeField(h, delimiter)).join(delimiter));\n }\n\n for (const row of data) {\n lines.push(\n headers.map((h) => escapeField(row[h], delimiter)).join(delimiter)\n );\n }\n\n return lines.join('\\n');\n}\n\nfunction escapeField(value: unknown, delimiter: string): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n const needsQuoting =\n str.includes(delimiter) || str.includes('\"') || str.includes('\\n');\n\n if (needsQuoting) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n return str;\n}\n\nexport function toJson(input: string, pretty = true): string {\n const result = parse(input);\n return pretty\n ? JSON.stringify(result.data, null, 2)\n : JSON.stringify(result.data);\n}\n\nexport function toJsonLines(input: string): string {\n const result = parse(input);\n return result.data.map((row) => JSON.stringify(row)).join('\\n');\n}\n\nexport function toArray(input: string): Record<string, unknown>[] {\n const result = parse(input);\n return result.data;\n}\n"]}
|