@lmnr-ai/lmnr 0.8.48 → 0.8.50
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/dist/cli.cjs +19 -14
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -2
- package/dist/cli.d.mts +2 -2
- package/dist/cli.mjs +16 -11
- package/dist/cli.mjs.map +1 -1
- package/dist/{evaluations-4bQ4UuTj.d.mts → evaluations-BVaPPf0j.d.mts} +1679 -1305
- package/dist/{evaluations-CbHnDCAY.d.cts → evaluations-C8cI_XIE.d.cts} +1682 -1307
- package/dist/{file-utils-Ci0oAv2f.mjs → file-utils-DOEv6ccL.mjs} +47 -18
- package/dist/file-utils-DOEv6ccL.mjs.map +1 -0
- package/dist/{file-utils-BvYQiFYO.cjs → file-utils-RXJzJyiI.cjs} +47 -18
- package/dist/file-utils-RXJzJyiI.cjs.map +1 -0
- package/dist/index.cjs +164 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1762 -1284
- package/dist/index.d.mts +1762 -1284
- package/dist/index.mjs +164 -54
- package/dist/index.mjs.map +1 -1
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.cjs +114 -102
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.cjs.map +1 -1
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.d.cts +776 -372
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.d.mts +776 -372
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.mjs +114 -102
- package/dist/opentelemetry-lib/instrumentation/temporal/workflow-interceptors.mjs.map +1 -1
- package/dist/{rolldown-runtime-2rV9d50f.mjs → rolldown-runtime-B4iAMlE-.mjs} +2 -2
- package/dist/{rolldown-runtime-CVvi-lCc.cjs → rolldown-runtime-Ctb5zv51.cjs} +1 -1
- package/dist/{utils-BNApHb06.cjs → utils-CNR1tzh5.cjs} +10 -9
- package/dist/utils-CNR1tzh5.cjs.map +1 -0
- package/dist/{utils-OZ7rROM9.mjs → utils-DRrXCfun.mjs} +9 -8
- package/dist/{utils-OZ7rROM9.mjs.map → utils-DRrXCfun.mjs.map} +1 -1
- package/package.json +6 -8
- package/dist/file-utils-BvYQiFYO.cjs.map +0 -1
- package/dist/file-utils-Ci0oAv2f.mjs.map +0 -1
- package/dist/utils-BNApHb06.cjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as __toESM, n as __exportAll, r as __require, t as __commonJSMin } from "./rolldown-runtime-
|
|
2
|
-
import { W as errorMessage, s as initializeLogger } from "./utils-
|
|
1
|
+
import { i as __toESM, n as __exportAll, r as __require, t as __commonJSMin } from "./rolldown-runtime-B4iAMlE-.mjs";
|
|
2
|
+
import { W as errorMessage, s as initializeLogger } from "./utils-DRrXCfun.mjs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
import { createReadStream } from "fs";
|
|
5
5
|
import * as fs from "fs/promises";
|
|
@@ -24,7 +24,7 @@ var import_csv_parser = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin((
|
|
|
24
24
|
strict: false,
|
|
25
25
|
outputByteOffset: false
|
|
26
26
|
};
|
|
27
|
-
const DANGEROUS_KEYS = new Set([
|
|
27
|
+
const DANGEROUS_KEYS = /* @__PURE__ */ new Set([
|
|
28
28
|
"__proto__",
|
|
29
29
|
"constructor",
|
|
30
30
|
"prototype"
|
|
@@ -232,7 +232,13 @@ var q;
|
|
|
232
232
|
x["tsv"] = "text/tab-separated-values";
|
|
233
233
|
x["plain"] = "text/plain";
|
|
234
234
|
})(q || (q = {}));
|
|
235
|
-
var X = (W) => W
|
|
235
|
+
var X = (W) => W;
|
|
236
|
+
var z = (W) => W;
|
|
237
|
+
var Z = X;
|
|
238
|
+
var _ = X;
|
|
239
|
+
var Y = X;
|
|
240
|
+
var N = X;
|
|
241
|
+
var V = X;
|
|
236
242
|
var h = {
|
|
237
243
|
fieldSeparator: ",",
|
|
238
244
|
decimalSeparator: ".",
|
|
@@ -253,7 +259,10 @@ var h = {
|
|
|
253
259
|
false: "FALSE"
|
|
254
260
|
},
|
|
255
261
|
replaceUndefinedWith: ""
|
|
256
|
-
}
|
|
262
|
+
};
|
|
263
|
+
var F = "\r\n";
|
|
264
|
+
var R = "";
|
|
265
|
+
var G = (W) => Object.assign({}, h, W);
|
|
257
266
|
var K = class extends Error {
|
|
258
267
|
constructor(W) {
|
|
259
268
|
super(W);
|
|
@@ -271,10 +280,20 @@ var P = class extends Error {
|
|
|
271
280
|
super(W);
|
|
272
281
|
this.name = "UnsupportedDataFormatError";
|
|
273
282
|
}
|
|
274
|
-
}
|
|
283
|
+
};
|
|
284
|
+
var s = function(W, $) {
|
|
275
285
|
if ($ == "\"" && W.indexOf("\"") > -1) return W.replace(/"/g, "\"\"");
|
|
276
286
|
return W;
|
|
277
|
-
}
|
|
287
|
+
};
|
|
288
|
+
var w = (W) => typeof W === "object" ? N(W.key) : N(W);
|
|
289
|
+
var y = (W) => typeof W === "object" ? V(W.displayLabel) : V(W);
|
|
290
|
+
var T = (W, ...$) => $.reduce((j, x) => x(j), W);
|
|
291
|
+
var E = (W) => ($) => W.useBom ? _(z($) + R) : $;
|
|
292
|
+
var M = (W) => ($) => W.showTitle ? S(_(z($) + W.title))(Y("")) : $;
|
|
293
|
+
var S = (W) => ($) => _(z(W) + z($) + F);
|
|
294
|
+
var O = (W) => ($, j) => l(W)(Y(z($) + z(j)));
|
|
295
|
+
var l = (W) => ($) => X(z($) + W.fieldSeparator);
|
|
296
|
+
var b = (W, $) => (j) => {
|
|
278
297
|
if (!W.showColumnHeaders) return j;
|
|
279
298
|
if ($.length < 1) throw new B("Option to show headers but none supplied. Make sure there are keys in your collection or that you've supplied headers through the config options.");
|
|
280
299
|
let x = Y("");
|
|
@@ -283,7 +302,8 @@ var P = class extends Error {
|
|
|
283
302
|
x = O(W)(x, v(W, z(J)));
|
|
284
303
|
}
|
|
285
304
|
return x = Y(z(x).slice(0, -1)), S(j)(x);
|
|
286
|
-
}
|
|
305
|
+
};
|
|
306
|
+
var C = (W, $, j) => (x) => {
|
|
287
307
|
let A = x;
|
|
288
308
|
for (var J = 0; J < j.length; J++) {
|
|
289
309
|
let I = Y("");
|
|
@@ -294,24 +314,31 @@ var P = class extends Error {
|
|
|
294
314
|
I = Y(z(I).slice(0, -1)), A = S(A)(I);
|
|
295
315
|
}
|
|
296
316
|
return A;
|
|
297
|
-
}
|
|
317
|
+
};
|
|
318
|
+
var k = z;
|
|
319
|
+
var m = (W) => +W === W && (!isFinite(W) || Boolean(W % 1));
|
|
320
|
+
var p = (W, $) => {
|
|
298
321
|
if (m($)) {
|
|
299
322
|
if (W.decimalSeparator === "locale") return Z($.toLocaleString());
|
|
300
323
|
if (W.decimalSeparator) return Z($.toString().replace(".", W.decimalSeparator));
|
|
301
324
|
}
|
|
302
325
|
return Z($.toString());
|
|
303
|
-
}
|
|
326
|
+
};
|
|
327
|
+
var Q = (W, $) => {
|
|
304
328
|
let j = $;
|
|
305
329
|
if (W.quoteStrings || W.fieldSeparator && $.indexOf(W.fieldSeparator) > -1 || W.quoteCharacter && $.indexOf(W.quoteCharacter) > -1 || $.indexOf("\n") > -1 || $.indexOf("\r") > -1) j = W.quoteCharacter + s($, W.quoteCharacter) + W.quoteCharacter;
|
|
306
330
|
return Z(j);
|
|
307
|
-
}
|
|
331
|
+
};
|
|
332
|
+
var g = (W, $) => {
|
|
308
333
|
const j = $ ? "true" : "false";
|
|
309
334
|
return Z(W.boolDisplay[j]);
|
|
310
|
-
}
|
|
335
|
+
};
|
|
336
|
+
var r = (W, $) => {
|
|
311
337
|
if (typeof $ === "undefined" && W.replaceUndefinedWith !== void 0) return Q(W, W.replaceUndefinedWith + "");
|
|
312
338
|
if ($ === null) return Q(W, "null");
|
|
313
339
|
return Q(W, "");
|
|
314
|
-
}
|
|
340
|
+
};
|
|
341
|
+
var v = (W, $) => {
|
|
315
342
|
if (typeof $ === "number") return p(W, $);
|
|
316
343
|
if (typeof $ === "string") return Q(W, $);
|
|
317
344
|
if (typeof $ === "boolean" && W.boolDisplay) return g(W, $);
|
|
@@ -320,7 +347,8 @@ var P = class extends Error {
|
|
|
320
347
|
typeof ${typeof $} isn't supported. Only number, string, boolean, null and undefined are supported.
|
|
321
348
|
Please convert the data in your object to one of those before generating the CSV.
|
|
322
349
|
`);
|
|
323
|
-
}
|
|
350
|
+
};
|
|
351
|
+
var BW = (W) => ($) => {
|
|
324
352
|
const j = G(W), x = j.useKeysAsHeaders ? Object.keys($[0]) : j.columnHeaders;
|
|
325
353
|
let A = T(_(""), E(j), M(j), b(j, x), C(j, x, $));
|
|
326
354
|
if (z(A).length < 1) throw new K("Output is empty. Is your data formatted correctly?");
|
|
@@ -354,9 +382,10 @@ const collectFiles = async (paths, recursive = false) => {
|
|
|
354
382
|
const collectedFiles = [];
|
|
355
383
|
for (const filepath of paths) try {
|
|
356
384
|
const stats = await fs.stat(filepath);
|
|
357
|
-
if (stats.isFile())
|
|
358
|
-
|
|
359
|
-
|
|
385
|
+
if (stats.isFile()) {
|
|
386
|
+
if (isSupportedFile(filepath)) collectedFiles.push(filepath);
|
|
387
|
+
else logger.warn(`Skipping unsupported file type: ${filepath}`);
|
|
388
|
+
} else if (stats.isDirectory()) {
|
|
360
389
|
const entries = await fs.readdir(filepath);
|
|
361
390
|
for (const entry of entries) {
|
|
362
391
|
const fullPath = path.join(filepath, entry);
|
|
@@ -514,4 +543,4 @@ const printToConsole = (data, format = "json") => {
|
|
|
514
543
|
//#endregion
|
|
515
544
|
export { writeToFile as i, loadFromPaths as n, printToConsole as r, file_utils_exports as t };
|
|
516
545
|
|
|
517
|
-
//# sourceMappingURL=file-utils-
|
|
546
|
+
//# sourceMappingURL=file-utils-DOEv6ccL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils-DOEv6ccL.mjs","names":["csv","mkConfig","generateCsv","asString"],"sources":["../../../node_modules/.pnpm/csv-parser@3.2.1/node_modules/csv-parser/index.js","../../../node_modules/.pnpm/export-to-csv@1.4.0/node_modules/export-to-csv/output/index.js","../src/cli/file-utils.ts"],"sourcesContent":["const { Transform } = require('stream')\n\nconst [cr] = Buffer.from('\\r')\nconst [nl] = Buffer.from('\\n')\nconst defaults = {\n escape: '\"',\n headers: null,\n mapHeaders: ({ header }) => header,\n mapValues: ({ value }) => value,\n newline: '\\n',\n quote: '\"',\n raw: false,\n separator: ',',\n skipComments: false,\n skipLines: null,\n maxRowBytes: Number.MAX_SAFE_INTEGER,\n strict: false,\n outputByteOffset: false\n}\n\nconst DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nfunction sanitizeHeader(header) {\n if (typeof header !== 'string') {\n return null\n }\n\n if (DANGEROUS_KEYS.has(header)) {\n return null\n }\n\n return header\n}\n\nclass CsvParser extends Transform {\n constructor (opts = {}) {\n super({ objectMode: true, highWaterMark: 16 })\n\n if (Array.isArray(opts)) opts = { headers: opts }\n\n const options = Object.assign({}, defaults, opts)\n\n options.customNewline = options.newline !== defaults.newline\n\n for (const key of ['newline', 'quote', 'separator']) {\n if (typeof options[key] !== 'undefined') {\n ([options[key]] = Buffer.from(options[key]))\n }\n }\n\n // if escape is not defined on the passed options, use the end value of quote\n options.escape = (opts || {}).escape ? Buffer.from(options.escape)[0] : options.quote\n\n this.state = {\n empty: options.raw ? Buffer.alloc(0) : '',\n escaped: false,\n first: true,\n lineNumber: 0,\n previousEnd: 0,\n rowLength: 0,\n quoted: false\n }\n\n this._prev = null\n\n if (options.headers === false) {\n // enforce, as the column length check will fail if headers:false\n options.strict = false\n }\n\n if (options.headers || options.headers === false) {\n this.state.first = false\n }\n\n this.options = options\n this.headers = options.headers\n this.bytesRead = 0\n }\n\n parseCell (buffer, start, end) {\n const { escape, quote } = this.options\n // remove quotes from quoted cells\n if (buffer[start] === quote && buffer[end - 1] === quote) {\n start++\n end--\n }\n\n let y = start\n\n for (let i = start; i < end; i++) {\n // check for escape characters and skip them\n if (buffer[i] === escape && i + 1 < end && buffer[i + 1] === quote) {\n i++\n }\n\n if (y !== i) {\n buffer[y] = buffer[i]\n }\n y++\n }\n\n return this.parseValue(buffer, start, y)\n }\n\n parseLine (buffer, start, end) {\n const { customNewline, escape, mapHeaders, mapValues, quote, separator, skipComments, skipLines } = this.options\n\n end-- // trim newline\n if (!customNewline && buffer.length && buffer[end - 1] === cr) {\n end--\n }\n\n const comma = separator\n const cells = []\n let isQuoted = false\n let offset = start\n\n if (skipComments) {\n const char = typeof skipComments === 'string' ? skipComments : '#'\n if (buffer[start] === Buffer.from(char)[0]) {\n return\n }\n }\n\n const mapValue = (value) => {\n if (this.state.first) {\n return value\n }\n\n const index = cells.length\n const header = this.headers[index]\n\n return mapValues({ header, index, value })\n }\n\n for (let i = start; i < end; i++) {\n const isStartingQuote = !isQuoted && buffer[i] === quote\n const isEndingQuote = isQuoted && buffer[i] === quote && i + 1 <= end && buffer[i + 1] === comma\n const isEscape = isQuoted && buffer[i] === escape && i + 1 < end && buffer[i + 1] === quote\n\n if (isStartingQuote || isEndingQuote) {\n isQuoted = !isQuoted\n continue\n } else if (isEscape) {\n i++\n continue\n }\n\n if (buffer[i] === comma && !isQuoted) {\n let value = this.parseCell(buffer, offset, i)\n value = mapValue(value)\n cells.push(value)\n offset = i + 1\n }\n }\n\n if (offset < end) {\n let value = this.parseCell(buffer, offset, end)\n value = mapValue(value)\n cells.push(value)\n }\n\n if (buffer[end - 1] === comma) {\n cells.push(mapValue(this.state.empty))\n }\n\n const skip = skipLines && skipLines > this.state.lineNumber\n this.state.lineNumber++\n\n if (this.state.first && !skip) {\n this.state.first = false\n this.headers = cells.map((header, index) => {\n const mapped = mapHeaders({ header, index })\n\n if (mapped === null) {\n return null\n }\n\n return sanitizeHeader(mapped)\n })\n\n this.emit('headers', this.headers)\n return\n }\n\n if (!skip && this.options.strict && cells.length !== this.headers.length) {\n const e = new RangeError('Row length does not match headers')\n this.emit('error', e)\n } else {\n if (!skip) {\n const byteOffset = this.bytesRead - buffer.length + start\n this.writeRow(cells, byteOffset)\n }\n }\n }\n\n parseValue (buffer, start, end) {\n if (this.options.raw) {\n return buffer.slice(start, end)\n }\n\n return buffer.toString('utf-8', start, end)\n }\n\n writeRow (cells, byteOffset) {\n const headers = (this.headers === false) ? cells.map((value, index) => index) : this.headers\n\n const row = cells.reduce((o, cell, index) => {\n const header = headers[index]\n if (header === null) return o // skip columns\n if (header !== undefined) {\n o[header] = cell\n } else {\n o[`_${index}`] = cell\n }\n return o\n }, {})\n\n if (this.options.outputByteOffset) {\n this.push({ row, byteOffset })\n } else {\n this.push(row)\n }\n }\n\n _flush (cb) {\n if (this.state.escaped || !this._prev) return cb()\n this.parseLine(this._prev, this.state.previousEnd, this._prev.length + 1) // plus since online -1s\n cb()\n }\n\n _transform (data, enc, cb) {\n if (typeof data === 'string') {\n data = Buffer.from(data)\n }\n\n const { escape, quote } = this.options\n let start = 0\n let buffer = data\n this.bytesRead += data.byteLength\n\n if (this._prev) {\n start = this._prev.length\n buffer = Buffer.concat([this._prev, data])\n this._prev = null\n }\n\n const bufferLength = buffer.length\n\n for (let i = start; i < bufferLength; i++) {\n const chr = buffer[i]\n const nextChr = i + 1 < bufferLength ? buffer[i + 1] : null\n\n this.state.rowLength++\n if (this.state.rowLength > this.options.maxRowBytes) {\n return cb(new Error('Row exceeds the maximum size'))\n }\n\n if (!this.state.escaped && chr === escape && nextChr === quote && i !== start) {\n this.state.escaped = true\n continue\n } else if (chr === quote) {\n if (this.state.escaped) {\n this.state.escaped = false\n // non-escaped quote (quoting the cell)\n } else {\n this.state.quoted = !this.state.quoted\n }\n continue\n }\n\n if (!this.state.quoted) {\n if (this.state.first && !this.options.customNewline) {\n if (chr === nl) {\n this.options.newline = nl\n } else if (chr === cr) {\n if (nextChr !== nl) {\n this.options.newline = cr\n }\n }\n }\n\n if (chr === this.options.newline) {\n this.parseLine(buffer, this.state.previousEnd, i + 1)\n this.state.previousEnd = i + 1\n this.state.rowLength = 0\n }\n }\n }\n\n if (this.state.previousEnd === bufferLength) {\n this.state.previousEnd = 0\n return cb()\n }\n\n if (bufferLength - this.state.previousEnd < data.length) {\n this._prev = data\n this.state.previousEnd -= (bufferLength - data.length)\n return cb()\n }\n\n this._prev = buffer\n cb()\n }\n}\n\nmodule.exports = (opts) => new CsvParser(opts)\n","var q;(function(x){x[\"csv\"]=\"text/csv\";x[\"tsv\"]=\"text/tab-separated-values\";x[\"plain\"]=\"text/plain\"})(q||(q={}));var X=(W)=>W,z=(W)=>W,Z=X,_=X,Y=X,N=X,V=X;var h={fieldSeparator:\",\",decimalSeparator:\".\",quoteStrings:!0,quoteCharacter:'\"',showTitle:!1,title:\"My Generated Report\",filename:\"generated\",showColumnHeaders:!0,useTextFile:!1,fileExtension:\"csv\",mediaType:q.csv,useBom:!0,columnHeaders:[],useKeysAsHeaders:!1,boolDisplay:{true:\"TRUE\",false:\"FALSE\"},replaceUndefinedWith:\"\"},F=\"\\r\\n\",R=\"\\uFEFF\",G=(W)=>Object.assign({},h,W);class K extends Error{constructor(W){super(W);this.name=\"CsvGenerationError\"}}class B extends Error{constructor(W){super(W);this.name=\"EmptyHeadersError\"}}class L extends Error{constructor(W){super(W);this.name=\"CsvDownloadEnvironmentError\"}}class P extends Error{constructor(W){super(W);this.name=\"UnsupportedDataFormatError\"}}var s=function(W,$){if($=='\"'&&W.indexOf('\"')>-1)return W.replace(/\"/g,'\"\"');return W},w=(W)=>typeof W===\"object\"?N(W.key):N(W),y=(W)=>typeof W===\"object\"?V(W.displayLabel):V(W),T=(W,...$)=>$.reduce((j,x)=>x(j),W),E=(W)=>($)=>W.useBom?_(z($)+R):$,M=(W)=>($)=>W.showTitle?S(_(z($)+W.title))(Y(\"\")):$,S=(W)=>($)=>_(z(W)+z($)+F),O=(W)=>($,j)=>l(W)(Y(z($)+z(j))),l=(W)=>($)=>X(z($)+W.fieldSeparator),b=(W,$)=>(j)=>{if(!W.showColumnHeaders)return j;if($.length<1)throw new B(\"Option to show headers but none supplied. Make sure there are keys in your collection or that you've supplied headers through the config options.\");let x=Y(\"\");for(let A=0;A<$.length;A++){const J=y($[A]);x=O(W)(x,v(W,z(J)))}return x=Y(z(x).slice(0,-1)),S(j)(x)},C=(W,$,j)=>(x)=>{let A=x;for(var J=0;J<j.length;J++){let I=Y(\"\");for(let U=0;U<$.length;U++){const H=w($[U]),D=j[J][z(H)];I=O(W)(I,v(W,D))}I=Y(z(I).slice(0,-1)),A=S(A)(I)}return A},k=z,m=(W)=>+W===W&&(!isFinite(W)||Boolean(W%1)),p=(W,$)=>{if(m($)){if(W.decimalSeparator===\"locale\")return Z($.toLocaleString());if(W.decimalSeparator)return Z($.toString().replace(\".\",W.decimalSeparator))}return Z($.toString())},Q=(W,$)=>{let j=$;if(W.quoteStrings||W.fieldSeparator&&$.indexOf(W.fieldSeparator)>-1||W.quoteCharacter&&$.indexOf(W.quoteCharacter)>-1||$.indexOf(\"\\n\")>-1||$.indexOf(\"\\r\")>-1)j=W.quoteCharacter+s($,W.quoteCharacter)+W.quoteCharacter;return Z(j)},g=(W,$)=>{const j=$?\"true\":\"false\";return Z(W.boolDisplay[j])},r=(W,$)=>{if(typeof $===\"undefined\"&&W.replaceUndefinedWith!==void 0)return Q(W,W.replaceUndefinedWith+\"\");if($===null)return Q(W,\"null\");return Q(W,\"\")},v=(W,$)=>{if(typeof $===\"number\")return p(W,$);if(typeof $===\"string\")return Q(W,$);if(typeof $===\"boolean\"&&W.boolDisplay)return g(W,$);if($===null||typeof $===\"undefined\")return r(W,$);throw new P(`\n typeof ${typeof $} isn't supported. Only number, string, boolean, null and undefined are supported.\n Please convert the data in your object to one of those before generating the CSV.\n `)};var BW=(W)=>($)=>{const j=G(W),x=j.useKeysAsHeaders?Object.keys($[0]):j.columnHeaders;let A=T(_(\"\"),E(j),M(j),b(j,x),C(j,x,$));if(z(A).length<1)throw new K(\"Output is empty. Is your data formatted correctly?\");return A},f=(W)=>($)=>{const j=G(W),x=z($),A=j.useTextFile?\"text/plain\":j.mediaType;return new Blob([x],{type:`${A};charset=utf8;`})},LW=(W)=>($)=>{if(!window)throw new L(\"Downloading only supported in a browser environment.\");const j=f(W)($),x=G(W),A=x.useTextFile?\"txt\":x.fileExtension,J=`${x.filename}.${A}`,I=document.createElement(\"a\");I.download=J,I.href=URL.createObjectURL(j),I.setAttribute(\"visibility\",\"hidden\"),document.body.appendChild(I),I.click(),document.body.removeChild(I)};export{G as mkConfig,BW as generateCsv,LW as download,k as asString,f as asBlob,q as MediaType};\n","import { errorMessage } from \"@lmnr-ai/types\";\nimport csv from \"csv-parser\";\nimport { asString, generateCsv, mkConfig } from \"export-to-csv\";\nimport { createReadStream } from \"fs\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\n\nimport { Datapoint } from \"../evaluations\";\nimport { initializeLogger } from \"../utils\";\n\nconst logger = initializeLogger();\n\n/**\n * Check if a file has a supported extension.\n */\nconst isSupportedFile = (file: string): boolean => {\n const ext = path.extname(file).toLowerCase();\n return [\".json\", \".csv\", \".jsonl\"].includes(ext);\n};\n\n/**\n * Collect all supported files from the given paths.\n * Handles both files and directories.\n */\nexport const collectFiles = async (\n paths: string[],\n recursive: boolean = false,\n): Promise<string[]> => {\n const collectedFiles: string[] = [];\n\n for (const filepath of paths) {\n try {\n const stats = await fs.stat(filepath);\n\n if (stats.isFile()) {\n if (isSupportedFile(filepath)) {\n collectedFiles.push(filepath);\n } else {\n logger.warn(`Skipping unsupported file type: ${filepath}`);\n }\n } else if (stats.isDirectory()) {\n const entries = await fs.readdir(filepath);\n\n for (const entry of entries) {\n const fullPath = path.join(filepath, entry);\n const entryStats = await fs.stat(fullPath);\n\n if (entryStats.isFile() && isSupportedFile(fullPath)) {\n collectedFiles.push(fullPath);\n } else if (recursive && entryStats.isDirectory()) {\n const subFiles = await collectFiles([fullPath], true);\n collectedFiles.push(...subFiles);\n }\n }\n }\n } catch (error) {\n logger.warn(\n `Path does not exist or is not accessible: ${filepath}. ` +\n `Error: ${errorMessage(error)}`,\n );\n }\n }\n\n return collectedFiles;\n};\n\n/**\n * Read a JSON file and return its contents.\n */\nconst readJsonFile = async (filepath: string): Promise<any[]> => {\n const content = await fs.readFile(filepath, \"utf-8\");\n const parsed = JSON.parse(content);\n return Array.isArray(parsed) ? parsed : [parsed];\n};\n\n/**\n * Try to parse a string as JSON. If it fails, return the original string.\n */\nconst tryParseJson = (content: string): any => {\n // Don't try to parse if it's not a string or doesn't look like JSON\n if (typeof content !== \"string\") {\n return content;\n }\n\n // If it doesn't start with { or [, it's probably not JSON\n const trimmed = content.trim();\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) {\n return content;\n }\n\n try {\n return JSON.parse(content);\n } catch (error) {\n logger.debug(`Error parsing JSON: ${errorMessage(error)}`);\n return content;\n }\n};\n\n/**\n * Parse each field in a CSV row, attempting to convert JSON strings back to objects.\n */\nconst parseCsvRow = (row: Record<string, string>): any => {\n const parsed: any = {};\n for (const [key, value] of Object.entries(row)) {\n parsed[key] = tryParseJson(value);\n }\n return parsed;\n};\n\n/**\n * Read a CSV file and return its contents as an array of objects.\n */\nconst readCsvFile = async (filepath: string): Promise<any[]> =>\n new Promise((resolve, reject) => {\n const results: any[] = [];\n createReadStream(filepath)\n .pipe(csv())\n .on(\"data\", (data) => results.push(parseCsvRow(data)))\n .on(\"end\", () => resolve(results))\n .on(\"error\", reject);\n });\n\n/**\n * Read a JSONL file and return its contents as an array of objects.\n */\nasync function readJsonlFile(filepath: string): Promise<any[]> {\n const content = await fs.readFile(filepath, \"utf-8\");\n const lines = content.split(\"\\n\").filter((line) => line.trim());\n return lines.map((line) => JSON.parse(line));\n}\n\n/**\n * Read a single file and return its contents.\n */\nasync function readFile(filepath: string): Promise<any[]> {\n const ext = path.extname(filepath).toLowerCase();\n\n if (ext === \".json\") {\n return readJsonFile(filepath);\n } else if (ext === \".csv\") {\n return readCsvFile(filepath);\n } else if (ext === \".jsonl\") {\n return readJsonlFile(filepath);\n } else {\n throw new Error(`Unsupported file type: ${ext}`);\n }\n}\n\n/**\n * Load data from all files in the specified paths.\n */\nexport const loadFromPaths = async <D = any, T = any>(\n paths: string[],\n recursive: boolean = false,\n): Promise<Datapoint<D, T>[]> => {\n const files = await collectFiles(paths, recursive);\n\n if (files.length === 0) {\n logger.warn(\"No supported files found in the specified paths\");\n return [];\n }\n\n logger.info(`Found ${files.length} file(s) to read`);\n\n const result: Datapoint<D, T>[] = [];\n\n for (const file of files) {\n try {\n const data = await readFile(file);\n result.push(...data);\n logger.info(`Read ${data.length} record(s) from ${file}`);\n } catch (error) {\n logger.error(`Error reading file ${file}: ${errorMessage(error)}`);\n throw error;\n }\n }\n\n return result;\n};\n\n/**\n * Write data to a JSON file.\n */\nconst writeJsonFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n const content = JSON.stringify(data, null, 2);\n await fs.writeFile(filepath, content, \"utf-8\");\n};\n\n/**\n * Write data to a CSV file.\n */\nconst writeCsvFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n if (data.length === 0) {\n throw new Error(\"No data to write to CSV\");\n }\n\n const formattedData = data.map((item) =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [key, stringifyForCsv(value)]),\n ),\n );\n\n const csvConfig = mkConfig({ useKeysAsHeaders: true });\n\n const csvOutput = generateCsv(csvConfig)(formattedData);\n const csvString = asString(csvOutput);\n\n await fs.writeFile(filepath, csvString, \"utf-8\");\n};\n\n/**\n * Write data to a JSONL file.\n */\nconst writeJsonlFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n const lines = data.map((item) => JSON.stringify(item)).join(\"\\n\");\n await fs.writeFile(filepath, lines + \"\\n\", \"utf-8\");\n};\n\n/**\n * Write data to a file based on the file extension.\n */\nexport const writeToFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n format?: \"json\" | \"csv\" | \"jsonl\",\n): Promise<void> => {\n // Create parent directories if they don't exist\n const dir = path.dirname(filepath);\n await fs.mkdir(dir, { recursive: true });\n\n // Determine the format\n const ext = format ?? path.extname(filepath).slice(1);\n\n if (format && format !== path.extname(filepath).slice(1)) {\n logger.warn(\n `Output format ${format} does not match file extension ${path.extname(filepath).slice(1)}`,\n );\n }\n\n if (ext === \"json\") {\n await writeJsonFile(filepath, data);\n } else if (ext === \"csv\") {\n await writeCsvFile(filepath, data);\n } else if (ext === \"jsonl\") {\n await writeJsonlFile(filepath, data);\n } else {\n throw new Error(`Unsupported output format: ${ext}`);\n }\n};\n\n/**\n * Convert a value to a CSV-safe string.\n * - Strings and numbers pass through\n * - null/undefined become empty strings\n * - Objects and arrays are stringified to JSON\n */\nconst stringifyForCsv = (value: any): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n // For objects and arrays, stringify to JSON\n return JSON.stringify(value);\n};\n\n/**\n * Print data to console in the specified format.\n */\nexport const printToConsole = <D, T>(\n data: Datapoint<D, T>[],\n format: \"json\" | \"csv\" | \"jsonl\" = \"json\",\n) => {\n if (format === \"json\") {\n console.log(JSON.stringify(data, null, 2));\n } else if (format === \"csv\") {\n if (data.length === 0) {\n logger.error(\"No data to print\");\n return;\n }\n\n const formattedData = data.map((item) =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [\n key,\n stringifyForCsv(value),\n ]),\n ),\n );\n\n const csvConfig = mkConfig({ useKeysAsHeaders: true });\n\n const csvOutput = generateCsv(csvConfig)(formattedData);\n const csvString = asString(csvOutput);\n console.log(csvString);\n } else if (format === \"jsonl\") {\n data.forEach((item) => console.log(JSON.stringify(item)));\n } else {\n throw new Error(\n `Unsupported output format: ${String(format)}. ` +\n \"(supported formats: json, csv, jsonl)\",\n );\n }\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_rolldown_runtime = require("./rolldown-runtime-
|
|
2
|
-
const require_utils = require("./utils-
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-Ctb5zv51.cjs");
|
|
2
|
+
const require_utils = require("./utils-CNR1tzh5.cjs");
|
|
3
3
|
let path = require("path");
|
|
4
4
|
path = require_rolldown_runtime.__toESM(path);
|
|
5
5
|
let fs = require("fs");
|
|
@@ -25,7 +25,7 @@ var require_csv_parser = /* @__PURE__ */ require_rolldown_runtime.__commonJSMin(
|
|
|
25
25
|
strict: false,
|
|
26
26
|
outputByteOffset: false
|
|
27
27
|
};
|
|
28
|
-
const DANGEROUS_KEYS = new Set([
|
|
28
|
+
const DANGEROUS_KEYS = /* @__PURE__ */ new Set([
|
|
29
29
|
"__proto__",
|
|
30
30
|
"constructor",
|
|
31
31
|
"prototype"
|
|
@@ -236,7 +236,13 @@ var q;
|
|
|
236
236
|
x["tsv"] = "text/tab-separated-values";
|
|
237
237
|
x["plain"] = "text/plain";
|
|
238
238
|
})(q || (q = {}));
|
|
239
|
-
var X = (W) => W
|
|
239
|
+
var X = (W) => W;
|
|
240
|
+
var z = (W) => W;
|
|
241
|
+
var Z = X;
|
|
242
|
+
var _ = X;
|
|
243
|
+
var Y = X;
|
|
244
|
+
var N = X;
|
|
245
|
+
var V = X;
|
|
240
246
|
var h = {
|
|
241
247
|
fieldSeparator: ",",
|
|
242
248
|
decimalSeparator: ".",
|
|
@@ -257,7 +263,10 @@ var h = {
|
|
|
257
263
|
false: "FALSE"
|
|
258
264
|
},
|
|
259
265
|
replaceUndefinedWith: ""
|
|
260
|
-
}
|
|
266
|
+
};
|
|
267
|
+
var F = "\r\n";
|
|
268
|
+
var R = "";
|
|
269
|
+
var G = (W) => Object.assign({}, h, W);
|
|
261
270
|
var K = class extends Error {
|
|
262
271
|
constructor(W) {
|
|
263
272
|
super(W);
|
|
@@ -275,10 +284,20 @@ var P = class extends Error {
|
|
|
275
284
|
super(W);
|
|
276
285
|
this.name = "UnsupportedDataFormatError";
|
|
277
286
|
}
|
|
278
|
-
}
|
|
287
|
+
};
|
|
288
|
+
var s = function(W, $) {
|
|
279
289
|
if ($ == "\"" && W.indexOf("\"") > -1) return W.replace(/"/g, "\"\"");
|
|
280
290
|
return W;
|
|
281
|
-
}
|
|
291
|
+
};
|
|
292
|
+
var w = (W) => typeof W === "object" ? N(W.key) : N(W);
|
|
293
|
+
var y = (W) => typeof W === "object" ? V(W.displayLabel) : V(W);
|
|
294
|
+
var T = (W, ...$) => $.reduce((j, x) => x(j), W);
|
|
295
|
+
var E = (W) => ($) => W.useBom ? _(z($) + R) : $;
|
|
296
|
+
var M = (W) => ($) => W.showTitle ? S(_(z($) + W.title))(Y("")) : $;
|
|
297
|
+
var S = (W) => ($) => _(z(W) + z($) + F);
|
|
298
|
+
var O = (W) => ($, j) => l(W)(Y(z($) + z(j)));
|
|
299
|
+
var l = (W) => ($) => X(z($) + W.fieldSeparator);
|
|
300
|
+
var b = (W, $) => (j) => {
|
|
282
301
|
if (!W.showColumnHeaders) return j;
|
|
283
302
|
if ($.length < 1) throw new B("Option to show headers but none supplied. Make sure there are keys in your collection or that you've supplied headers through the config options.");
|
|
284
303
|
let x = Y("");
|
|
@@ -287,7 +306,8 @@ var P = class extends Error {
|
|
|
287
306
|
x = O(W)(x, v(W, z(J)));
|
|
288
307
|
}
|
|
289
308
|
return x = Y(z(x).slice(0, -1)), S(j)(x);
|
|
290
|
-
}
|
|
309
|
+
};
|
|
310
|
+
var C = (W, $, j) => (x) => {
|
|
291
311
|
let A = x;
|
|
292
312
|
for (var J = 0; J < j.length; J++) {
|
|
293
313
|
let I = Y("");
|
|
@@ -298,24 +318,31 @@ var P = class extends Error {
|
|
|
298
318
|
I = Y(z(I).slice(0, -1)), A = S(A)(I);
|
|
299
319
|
}
|
|
300
320
|
return A;
|
|
301
|
-
}
|
|
321
|
+
};
|
|
322
|
+
var k = z;
|
|
323
|
+
var m = (W) => +W === W && (!isFinite(W) || Boolean(W % 1));
|
|
324
|
+
var p = (W, $) => {
|
|
302
325
|
if (m($)) {
|
|
303
326
|
if (W.decimalSeparator === "locale") return Z($.toLocaleString());
|
|
304
327
|
if (W.decimalSeparator) return Z($.toString().replace(".", W.decimalSeparator));
|
|
305
328
|
}
|
|
306
329
|
return Z($.toString());
|
|
307
|
-
}
|
|
330
|
+
};
|
|
331
|
+
var Q = (W, $) => {
|
|
308
332
|
let j = $;
|
|
309
333
|
if (W.quoteStrings || W.fieldSeparator && $.indexOf(W.fieldSeparator) > -1 || W.quoteCharacter && $.indexOf(W.quoteCharacter) > -1 || $.indexOf("\n") > -1 || $.indexOf("\r") > -1) j = W.quoteCharacter + s($, W.quoteCharacter) + W.quoteCharacter;
|
|
310
334
|
return Z(j);
|
|
311
|
-
}
|
|
335
|
+
};
|
|
336
|
+
var g = (W, $) => {
|
|
312
337
|
const j = $ ? "true" : "false";
|
|
313
338
|
return Z(W.boolDisplay[j]);
|
|
314
|
-
}
|
|
339
|
+
};
|
|
340
|
+
var r = (W, $) => {
|
|
315
341
|
if (typeof $ === "undefined" && W.replaceUndefinedWith !== void 0) return Q(W, W.replaceUndefinedWith + "");
|
|
316
342
|
if ($ === null) return Q(W, "null");
|
|
317
343
|
return Q(W, "");
|
|
318
|
-
}
|
|
344
|
+
};
|
|
345
|
+
var v = (W, $) => {
|
|
319
346
|
if (typeof $ === "number") return p(W, $);
|
|
320
347
|
if (typeof $ === "string") return Q(W, $);
|
|
321
348
|
if (typeof $ === "boolean" && W.boolDisplay) return g(W, $);
|
|
@@ -324,7 +351,8 @@ var P = class extends Error {
|
|
|
324
351
|
typeof ${typeof $} isn't supported. Only number, string, boolean, null and undefined are supported.
|
|
325
352
|
Please convert the data in your object to one of those before generating the CSV.
|
|
326
353
|
`);
|
|
327
|
-
}
|
|
354
|
+
};
|
|
355
|
+
var BW = (W) => ($) => {
|
|
328
356
|
const j = G(W), x = j.useKeysAsHeaders ? Object.keys($[0]) : j.columnHeaders;
|
|
329
357
|
let A = T(_(""), E(j), M(j), b(j, x), C(j, x, $));
|
|
330
358
|
if (z(A).length < 1) throw new K("Output is empty. Is your data formatted correctly?");
|
|
@@ -358,9 +386,10 @@ const collectFiles = async (paths, recursive = false) => {
|
|
|
358
386
|
const collectedFiles = [];
|
|
359
387
|
for (const filepath of paths) try {
|
|
360
388
|
const stats = await fs_promises.stat(filepath);
|
|
361
|
-
if (stats.isFile())
|
|
362
|
-
|
|
363
|
-
|
|
389
|
+
if (stats.isFile()) {
|
|
390
|
+
if (isSupportedFile(filepath)) collectedFiles.push(filepath);
|
|
391
|
+
else logger.warn(`Skipping unsupported file type: ${filepath}`);
|
|
392
|
+
} else if (stats.isDirectory()) {
|
|
364
393
|
const entries = await fs_promises.readdir(filepath);
|
|
365
394
|
for (const entry of entries) {
|
|
366
395
|
const fullPath = path.join(filepath, entry);
|
|
@@ -541,4 +570,4 @@ Object.defineProperty(exports, "writeToFile", {
|
|
|
541
570
|
}
|
|
542
571
|
});
|
|
543
572
|
|
|
544
|
-
//# sourceMappingURL=file-utils-
|
|
573
|
+
//# sourceMappingURL=file-utils-RXJzJyiI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils-RXJzJyiI.cjs","names":["initializeLogger","fs","errorMessage","csv","mkConfig","generateCsv","asString"],"sources":["../../../node_modules/.pnpm/csv-parser@3.2.1/node_modules/csv-parser/index.js","../../../node_modules/.pnpm/export-to-csv@1.4.0/node_modules/export-to-csv/output/index.js","../src/cli/file-utils.ts"],"sourcesContent":["const { Transform } = require('stream')\n\nconst [cr] = Buffer.from('\\r')\nconst [nl] = Buffer.from('\\n')\nconst defaults = {\n escape: '\"',\n headers: null,\n mapHeaders: ({ header }) => header,\n mapValues: ({ value }) => value,\n newline: '\\n',\n quote: '\"',\n raw: false,\n separator: ',',\n skipComments: false,\n skipLines: null,\n maxRowBytes: Number.MAX_SAFE_INTEGER,\n strict: false,\n outputByteOffset: false\n}\n\nconst DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nfunction sanitizeHeader(header) {\n if (typeof header !== 'string') {\n return null\n }\n\n if (DANGEROUS_KEYS.has(header)) {\n return null\n }\n\n return header\n}\n\nclass CsvParser extends Transform {\n constructor (opts = {}) {\n super({ objectMode: true, highWaterMark: 16 })\n\n if (Array.isArray(opts)) opts = { headers: opts }\n\n const options = Object.assign({}, defaults, opts)\n\n options.customNewline = options.newline !== defaults.newline\n\n for (const key of ['newline', 'quote', 'separator']) {\n if (typeof options[key] !== 'undefined') {\n ([options[key]] = Buffer.from(options[key]))\n }\n }\n\n // if escape is not defined on the passed options, use the end value of quote\n options.escape = (opts || {}).escape ? Buffer.from(options.escape)[0] : options.quote\n\n this.state = {\n empty: options.raw ? Buffer.alloc(0) : '',\n escaped: false,\n first: true,\n lineNumber: 0,\n previousEnd: 0,\n rowLength: 0,\n quoted: false\n }\n\n this._prev = null\n\n if (options.headers === false) {\n // enforce, as the column length check will fail if headers:false\n options.strict = false\n }\n\n if (options.headers || options.headers === false) {\n this.state.first = false\n }\n\n this.options = options\n this.headers = options.headers\n this.bytesRead = 0\n }\n\n parseCell (buffer, start, end) {\n const { escape, quote } = this.options\n // remove quotes from quoted cells\n if (buffer[start] === quote && buffer[end - 1] === quote) {\n start++\n end--\n }\n\n let y = start\n\n for (let i = start; i < end; i++) {\n // check for escape characters and skip them\n if (buffer[i] === escape && i + 1 < end && buffer[i + 1] === quote) {\n i++\n }\n\n if (y !== i) {\n buffer[y] = buffer[i]\n }\n y++\n }\n\n return this.parseValue(buffer, start, y)\n }\n\n parseLine (buffer, start, end) {\n const { customNewline, escape, mapHeaders, mapValues, quote, separator, skipComments, skipLines } = this.options\n\n end-- // trim newline\n if (!customNewline && buffer.length && buffer[end - 1] === cr) {\n end--\n }\n\n const comma = separator\n const cells = []\n let isQuoted = false\n let offset = start\n\n if (skipComments) {\n const char = typeof skipComments === 'string' ? skipComments : '#'\n if (buffer[start] === Buffer.from(char)[0]) {\n return\n }\n }\n\n const mapValue = (value) => {\n if (this.state.first) {\n return value\n }\n\n const index = cells.length\n const header = this.headers[index]\n\n return mapValues({ header, index, value })\n }\n\n for (let i = start; i < end; i++) {\n const isStartingQuote = !isQuoted && buffer[i] === quote\n const isEndingQuote = isQuoted && buffer[i] === quote && i + 1 <= end && buffer[i + 1] === comma\n const isEscape = isQuoted && buffer[i] === escape && i + 1 < end && buffer[i + 1] === quote\n\n if (isStartingQuote || isEndingQuote) {\n isQuoted = !isQuoted\n continue\n } else if (isEscape) {\n i++\n continue\n }\n\n if (buffer[i] === comma && !isQuoted) {\n let value = this.parseCell(buffer, offset, i)\n value = mapValue(value)\n cells.push(value)\n offset = i + 1\n }\n }\n\n if (offset < end) {\n let value = this.parseCell(buffer, offset, end)\n value = mapValue(value)\n cells.push(value)\n }\n\n if (buffer[end - 1] === comma) {\n cells.push(mapValue(this.state.empty))\n }\n\n const skip = skipLines && skipLines > this.state.lineNumber\n this.state.lineNumber++\n\n if (this.state.first && !skip) {\n this.state.first = false\n this.headers = cells.map((header, index) => {\n const mapped = mapHeaders({ header, index })\n\n if (mapped === null) {\n return null\n }\n\n return sanitizeHeader(mapped)\n })\n\n this.emit('headers', this.headers)\n return\n }\n\n if (!skip && this.options.strict && cells.length !== this.headers.length) {\n const e = new RangeError('Row length does not match headers')\n this.emit('error', e)\n } else {\n if (!skip) {\n const byteOffset = this.bytesRead - buffer.length + start\n this.writeRow(cells, byteOffset)\n }\n }\n }\n\n parseValue (buffer, start, end) {\n if (this.options.raw) {\n return buffer.slice(start, end)\n }\n\n return buffer.toString('utf-8', start, end)\n }\n\n writeRow (cells, byteOffset) {\n const headers = (this.headers === false) ? cells.map((value, index) => index) : this.headers\n\n const row = cells.reduce((o, cell, index) => {\n const header = headers[index]\n if (header === null) return o // skip columns\n if (header !== undefined) {\n o[header] = cell\n } else {\n o[`_${index}`] = cell\n }\n return o\n }, {})\n\n if (this.options.outputByteOffset) {\n this.push({ row, byteOffset })\n } else {\n this.push(row)\n }\n }\n\n _flush (cb) {\n if (this.state.escaped || !this._prev) return cb()\n this.parseLine(this._prev, this.state.previousEnd, this._prev.length + 1) // plus since online -1s\n cb()\n }\n\n _transform (data, enc, cb) {\n if (typeof data === 'string') {\n data = Buffer.from(data)\n }\n\n const { escape, quote } = this.options\n let start = 0\n let buffer = data\n this.bytesRead += data.byteLength\n\n if (this._prev) {\n start = this._prev.length\n buffer = Buffer.concat([this._prev, data])\n this._prev = null\n }\n\n const bufferLength = buffer.length\n\n for (let i = start; i < bufferLength; i++) {\n const chr = buffer[i]\n const nextChr = i + 1 < bufferLength ? buffer[i + 1] : null\n\n this.state.rowLength++\n if (this.state.rowLength > this.options.maxRowBytes) {\n return cb(new Error('Row exceeds the maximum size'))\n }\n\n if (!this.state.escaped && chr === escape && nextChr === quote && i !== start) {\n this.state.escaped = true\n continue\n } else if (chr === quote) {\n if (this.state.escaped) {\n this.state.escaped = false\n // non-escaped quote (quoting the cell)\n } else {\n this.state.quoted = !this.state.quoted\n }\n continue\n }\n\n if (!this.state.quoted) {\n if (this.state.first && !this.options.customNewline) {\n if (chr === nl) {\n this.options.newline = nl\n } else if (chr === cr) {\n if (nextChr !== nl) {\n this.options.newline = cr\n }\n }\n }\n\n if (chr === this.options.newline) {\n this.parseLine(buffer, this.state.previousEnd, i + 1)\n this.state.previousEnd = i + 1\n this.state.rowLength = 0\n }\n }\n }\n\n if (this.state.previousEnd === bufferLength) {\n this.state.previousEnd = 0\n return cb()\n }\n\n if (bufferLength - this.state.previousEnd < data.length) {\n this._prev = data\n this.state.previousEnd -= (bufferLength - data.length)\n return cb()\n }\n\n this._prev = buffer\n cb()\n }\n}\n\nmodule.exports = (opts) => new CsvParser(opts)\n","var q;(function(x){x[\"csv\"]=\"text/csv\";x[\"tsv\"]=\"text/tab-separated-values\";x[\"plain\"]=\"text/plain\"})(q||(q={}));var X=(W)=>W,z=(W)=>W,Z=X,_=X,Y=X,N=X,V=X;var h={fieldSeparator:\",\",decimalSeparator:\".\",quoteStrings:!0,quoteCharacter:'\"',showTitle:!1,title:\"My Generated Report\",filename:\"generated\",showColumnHeaders:!0,useTextFile:!1,fileExtension:\"csv\",mediaType:q.csv,useBom:!0,columnHeaders:[],useKeysAsHeaders:!1,boolDisplay:{true:\"TRUE\",false:\"FALSE\"},replaceUndefinedWith:\"\"},F=\"\\r\\n\",R=\"\\uFEFF\",G=(W)=>Object.assign({},h,W);class K extends Error{constructor(W){super(W);this.name=\"CsvGenerationError\"}}class B extends Error{constructor(W){super(W);this.name=\"EmptyHeadersError\"}}class L extends Error{constructor(W){super(W);this.name=\"CsvDownloadEnvironmentError\"}}class P extends Error{constructor(W){super(W);this.name=\"UnsupportedDataFormatError\"}}var s=function(W,$){if($=='\"'&&W.indexOf('\"')>-1)return W.replace(/\"/g,'\"\"');return W},w=(W)=>typeof W===\"object\"?N(W.key):N(W),y=(W)=>typeof W===\"object\"?V(W.displayLabel):V(W),T=(W,...$)=>$.reduce((j,x)=>x(j),W),E=(W)=>($)=>W.useBom?_(z($)+R):$,M=(W)=>($)=>W.showTitle?S(_(z($)+W.title))(Y(\"\")):$,S=(W)=>($)=>_(z(W)+z($)+F),O=(W)=>($,j)=>l(W)(Y(z($)+z(j))),l=(W)=>($)=>X(z($)+W.fieldSeparator),b=(W,$)=>(j)=>{if(!W.showColumnHeaders)return j;if($.length<1)throw new B(\"Option to show headers but none supplied. Make sure there are keys in your collection or that you've supplied headers through the config options.\");let x=Y(\"\");for(let A=0;A<$.length;A++){const J=y($[A]);x=O(W)(x,v(W,z(J)))}return x=Y(z(x).slice(0,-1)),S(j)(x)},C=(W,$,j)=>(x)=>{let A=x;for(var J=0;J<j.length;J++){let I=Y(\"\");for(let U=0;U<$.length;U++){const H=w($[U]),D=j[J][z(H)];I=O(W)(I,v(W,D))}I=Y(z(I).slice(0,-1)),A=S(A)(I)}return A},k=z,m=(W)=>+W===W&&(!isFinite(W)||Boolean(W%1)),p=(W,$)=>{if(m($)){if(W.decimalSeparator===\"locale\")return Z($.toLocaleString());if(W.decimalSeparator)return Z($.toString().replace(\".\",W.decimalSeparator))}return Z($.toString())},Q=(W,$)=>{let j=$;if(W.quoteStrings||W.fieldSeparator&&$.indexOf(W.fieldSeparator)>-1||W.quoteCharacter&&$.indexOf(W.quoteCharacter)>-1||$.indexOf(\"\\n\")>-1||$.indexOf(\"\\r\")>-1)j=W.quoteCharacter+s($,W.quoteCharacter)+W.quoteCharacter;return Z(j)},g=(W,$)=>{const j=$?\"true\":\"false\";return Z(W.boolDisplay[j])},r=(W,$)=>{if(typeof $===\"undefined\"&&W.replaceUndefinedWith!==void 0)return Q(W,W.replaceUndefinedWith+\"\");if($===null)return Q(W,\"null\");return Q(W,\"\")},v=(W,$)=>{if(typeof $===\"number\")return p(W,$);if(typeof $===\"string\")return Q(W,$);if(typeof $===\"boolean\"&&W.boolDisplay)return g(W,$);if($===null||typeof $===\"undefined\")return r(W,$);throw new P(`\n typeof ${typeof $} isn't supported. Only number, string, boolean, null and undefined are supported.\n Please convert the data in your object to one of those before generating the CSV.\n `)};var BW=(W)=>($)=>{const j=G(W),x=j.useKeysAsHeaders?Object.keys($[0]):j.columnHeaders;let A=T(_(\"\"),E(j),M(j),b(j,x),C(j,x,$));if(z(A).length<1)throw new K(\"Output is empty. Is your data formatted correctly?\");return A},f=(W)=>($)=>{const j=G(W),x=z($),A=j.useTextFile?\"text/plain\":j.mediaType;return new Blob([x],{type:`${A};charset=utf8;`})},LW=(W)=>($)=>{if(!window)throw new L(\"Downloading only supported in a browser environment.\");const j=f(W)($),x=G(W),A=x.useTextFile?\"txt\":x.fileExtension,J=`${x.filename}.${A}`,I=document.createElement(\"a\");I.download=J,I.href=URL.createObjectURL(j),I.setAttribute(\"visibility\",\"hidden\"),document.body.appendChild(I),I.click(),document.body.removeChild(I)};export{G as mkConfig,BW as generateCsv,LW as download,k as asString,f as asBlob,q as MediaType};\n","import { errorMessage } from \"@lmnr-ai/types\";\nimport csv from \"csv-parser\";\nimport { asString, generateCsv, mkConfig } from \"export-to-csv\";\nimport { createReadStream } from \"fs\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\n\nimport { Datapoint } from \"../evaluations\";\nimport { initializeLogger } from \"../utils\";\n\nconst logger = initializeLogger();\n\n/**\n * Check if a file has a supported extension.\n */\nconst isSupportedFile = (file: string): boolean => {\n const ext = path.extname(file).toLowerCase();\n return [\".json\", \".csv\", \".jsonl\"].includes(ext);\n};\n\n/**\n * Collect all supported files from the given paths.\n * Handles both files and directories.\n */\nexport const collectFiles = async (\n paths: string[],\n recursive: boolean = false,\n): Promise<string[]> => {\n const collectedFiles: string[] = [];\n\n for (const filepath of paths) {\n try {\n const stats = await fs.stat(filepath);\n\n if (stats.isFile()) {\n if (isSupportedFile(filepath)) {\n collectedFiles.push(filepath);\n } else {\n logger.warn(`Skipping unsupported file type: ${filepath}`);\n }\n } else if (stats.isDirectory()) {\n const entries = await fs.readdir(filepath);\n\n for (const entry of entries) {\n const fullPath = path.join(filepath, entry);\n const entryStats = await fs.stat(fullPath);\n\n if (entryStats.isFile() && isSupportedFile(fullPath)) {\n collectedFiles.push(fullPath);\n } else if (recursive && entryStats.isDirectory()) {\n const subFiles = await collectFiles([fullPath], true);\n collectedFiles.push(...subFiles);\n }\n }\n }\n } catch (error) {\n logger.warn(\n `Path does not exist or is not accessible: ${filepath}. ` +\n `Error: ${errorMessage(error)}`,\n );\n }\n }\n\n return collectedFiles;\n};\n\n/**\n * Read a JSON file and return its contents.\n */\nconst readJsonFile = async (filepath: string): Promise<any[]> => {\n const content = await fs.readFile(filepath, \"utf-8\");\n const parsed = JSON.parse(content);\n return Array.isArray(parsed) ? parsed : [parsed];\n};\n\n/**\n * Try to parse a string as JSON. If it fails, return the original string.\n */\nconst tryParseJson = (content: string): any => {\n // Don't try to parse if it's not a string or doesn't look like JSON\n if (typeof content !== \"string\") {\n return content;\n }\n\n // If it doesn't start with { or [, it's probably not JSON\n const trimmed = content.trim();\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) {\n return content;\n }\n\n try {\n return JSON.parse(content);\n } catch (error) {\n logger.debug(`Error parsing JSON: ${errorMessage(error)}`);\n return content;\n }\n};\n\n/**\n * Parse each field in a CSV row, attempting to convert JSON strings back to objects.\n */\nconst parseCsvRow = (row: Record<string, string>): any => {\n const parsed: any = {};\n for (const [key, value] of Object.entries(row)) {\n parsed[key] = tryParseJson(value);\n }\n return parsed;\n};\n\n/**\n * Read a CSV file and return its contents as an array of objects.\n */\nconst readCsvFile = async (filepath: string): Promise<any[]> =>\n new Promise((resolve, reject) => {\n const results: any[] = [];\n createReadStream(filepath)\n .pipe(csv())\n .on(\"data\", (data) => results.push(parseCsvRow(data)))\n .on(\"end\", () => resolve(results))\n .on(\"error\", reject);\n });\n\n/**\n * Read a JSONL file and return its contents as an array of objects.\n */\nasync function readJsonlFile(filepath: string): Promise<any[]> {\n const content = await fs.readFile(filepath, \"utf-8\");\n const lines = content.split(\"\\n\").filter((line) => line.trim());\n return lines.map((line) => JSON.parse(line));\n}\n\n/**\n * Read a single file and return its contents.\n */\nasync function readFile(filepath: string): Promise<any[]> {\n const ext = path.extname(filepath).toLowerCase();\n\n if (ext === \".json\") {\n return readJsonFile(filepath);\n } else if (ext === \".csv\") {\n return readCsvFile(filepath);\n } else if (ext === \".jsonl\") {\n return readJsonlFile(filepath);\n } else {\n throw new Error(`Unsupported file type: ${ext}`);\n }\n}\n\n/**\n * Load data from all files in the specified paths.\n */\nexport const loadFromPaths = async <D = any, T = any>(\n paths: string[],\n recursive: boolean = false,\n): Promise<Datapoint<D, T>[]> => {\n const files = await collectFiles(paths, recursive);\n\n if (files.length === 0) {\n logger.warn(\"No supported files found in the specified paths\");\n return [];\n }\n\n logger.info(`Found ${files.length} file(s) to read`);\n\n const result: Datapoint<D, T>[] = [];\n\n for (const file of files) {\n try {\n const data = await readFile(file);\n result.push(...data);\n logger.info(`Read ${data.length} record(s) from ${file}`);\n } catch (error) {\n logger.error(`Error reading file ${file}: ${errorMessage(error)}`);\n throw error;\n }\n }\n\n return result;\n};\n\n/**\n * Write data to a JSON file.\n */\nconst writeJsonFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n const content = JSON.stringify(data, null, 2);\n await fs.writeFile(filepath, content, \"utf-8\");\n};\n\n/**\n * Write data to a CSV file.\n */\nconst writeCsvFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n if (data.length === 0) {\n throw new Error(\"No data to write to CSV\");\n }\n\n const formattedData = data.map((item) =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [key, stringifyForCsv(value)]),\n ),\n );\n\n const csvConfig = mkConfig({ useKeysAsHeaders: true });\n\n const csvOutput = generateCsv(csvConfig)(formattedData);\n const csvString = asString(csvOutput);\n\n await fs.writeFile(filepath, csvString, \"utf-8\");\n};\n\n/**\n * Write data to a JSONL file.\n */\nconst writeJsonlFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n): Promise<void> => {\n const lines = data.map((item) => JSON.stringify(item)).join(\"\\n\");\n await fs.writeFile(filepath, lines + \"\\n\", \"utf-8\");\n};\n\n/**\n * Write data to a file based on the file extension.\n */\nexport const writeToFile = async <D, T>(\n filepath: string,\n data: Datapoint<D, T>[],\n format?: \"json\" | \"csv\" | \"jsonl\",\n): Promise<void> => {\n // Create parent directories if they don't exist\n const dir = path.dirname(filepath);\n await fs.mkdir(dir, { recursive: true });\n\n // Determine the format\n const ext = format ?? path.extname(filepath).slice(1);\n\n if (format && format !== path.extname(filepath).slice(1)) {\n logger.warn(\n `Output format ${format} does not match file extension ${path.extname(filepath).slice(1)}`,\n );\n }\n\n if (ext === \"json\") {\n await writeJsonFile(filepath, data);\n } else if (ext === \"csv\") {\n await writeCsvFile(filepath, data);\n } else if (ext === \"jsonl\") {\n await writeJsonlFile(filepath, data);\n } else {\n throw new Error(`Unsupported output format: ${ext}`);\n }\n};\n\n/**\n * Convert a value to a CSV-safe string.\n * - Strings and numbers pass through\n * - null/undefined become empty strings\n * - Objects and arrays are stringified to JSON\n */\nconst stringifyForCsv = (value: any): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n // For objects and arrays, stringify to JSON\n return JSON.stringify(value);\n};\n\n/**\n * Print data to console in the specified format.\n */\nexport const printToConsole = <D, T>(\n data: Datapoint<D, T>[],\n format: \"json\" | \"csv\" | \"jsonl\" = \"json\",\n) => {\n if (format === \"json\") {\n console.log(JSON.stringify(data, null, 2));\n } else if (format === \"csv\") {\n if (data.length === 0) {\n logger.error(\"No data to print\");\n return;\n }\n\n const formattedData = data.map((item) =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [\n key,\n stringifyForCsv(value),\n ]),\n ),\n );\n\n const csvConfig = mkConfig({ useKeysAsHeaders: true });\n\n const csvOutput = generateCsv(csvConfig)(formattedData);\n const csvString = asString(csvOutput);\n console.log(csvString);\n } else if (format === \"jsonl\") {\n data.forEach((item) => console.log(JSON.stringify(item)));\n } else {\n throw new Error(\n `Unsupported output format: ${String(format)}. ` +\n \"(supported formats: json, csv, jsonl)\",\n );\n }\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|