openlayer 0.24.3 → 0.25.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/CHANGELOG.md +14 -0
- package/lib/core/cli.d.mts +7 -0
- package/lib/core/cli.d.mts.map +1 -1
- package/lib/core/cli.d.ts +7 -0
- package/lib/core/cli.d.ts.map +1 -1
- package/lib/core/cli.js +76 -4
- package/lib/core/cli.js.map +1 -1
- package/lib/core/cli.mjs +73 -4
- package/lib/core/cli.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/core/cli.ts +80 -4
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.25.0 (2026-03-23)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.24.3...v0.25.0](https://github.com/openlayer-ai/openlayer-ts/compare/v0.24.3...v0.25.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **closes OPEN-5988:** openlayer-ts should accept csv datasets ([5399658](https://github.com/openlayer-ai/openlayer-ts/commit/5399658a40a29593943b225030becbbcbe0dde91))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Chores
|
|
13
|
+
|
|
14
|
+
* **tests:** bump steady to v0.19.4 ([140fde6](https://github.com/openlayer-ai/openlayer-ts/commit/140fde6da9cc92b76401d261ecc2c63461c23857))
|
|
15
|
+
* **tests:** bump steady to v0.19.5 ([c0b13a9](https://github.com/openlayer-ai/openlayer-ts/commit/c0b13a972442028cc6b73f6c56cee0b97e85df02))
|
|
16
|
+
|
|
3
17
|
## 0.24.3 (2026-03-20)
|
|
4
18
|
|
|
5
19
|
Full Changelog: [v0.24.2...v0.24.3](https://github.com/openlayer-ai/openlayer-ts/compare/v0.24.2...v0.24.3)
|
package/lib/core/cli.d.mts
CHANGED
|
@@ -14,6 +14,13 @@ export interface Config {
|
|
|
14
14
|
costColumnName?: string;
|
|
15
15
|
numOfTokenColumnName?: string;
|
|
16
16
|
}
|
|
17
|
+
export type DatasetFormat = 'csv' | 'json';
|
|
18
|
+
export declare function detectDatasetFormat(datasetPath: string): DatasetFormat;
|
|
19
|
+
export declare function parseCsv(content: string): Record<string, string>[];
|
|
20
|
+
export declare function loadDataset(datasetPath: string): {
|
|
21
|
+
data: any[];
|
|
22
|
+
format: DatasetFormat;
|
|
23
|
+
};
|
|
17
24
|
declare class CLIHandler {
|
|
18
25
|
private run;
|
|
19
26
|
constructor(runFunction: (...args: any[]) => Promise<any>);
|
package/lib/core/cli.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.mts","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC;CACb;AAYD,MAAM,WAAW,MAAM;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAAmC;gBAElC,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAIlD,UAAU;
|
|
1
|
+
{"version":3,"file":"cli.d.mts","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC;CACb;AAYD,MAAM,WAAW,MAAM;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAStE;AAkCD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAelE;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAevF;AAED,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAAmC;gBAElC,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAIlD,UAAU;IAwEjB,OAAO,CAAC,WAAW;CAcpB;AAED,eAAe,UAAU,CAAC"}
|
package/lib/core/cli.d.ts
CHANGED
|
@@ -14,6 +14,13 @@ export interface Config {
|
|
|
14
14
|
costColumnName?: string;
|
|
15
15
|
numOfTokenColumnName?: string;
|
|
16
16
|
}
|
|
17
|
+
export type DatasetFormat = 'csv' | 'json';
|
|
18
|
+
export declare function detectDatasetFormat(datasetPath: string): DatasetFormat;
|
|
19
|
+
export declare function parseCsv(content: string): Record<string, string>[];
|
|
20
|
+
export declare function loadDataset(datasetPath: string): {
|
|
21
|
+
data: any[];
|
|
22
|
+
format: DatasetFormat;
|
|
23
|
+
};
|
|
17
24
|
declare class CLIHandler {
|
|
18
25
|
private run;
|
|
19
26
|
constructor(runFunction: (...args: any[]) => Promise<any>);
|
package/lib/core/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC;CACb;AAYD,MAAM,WAAW,MAAM;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAAmC;gBAElC,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAIlD,UAAU;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC;CACb;AAYD,MAAM,WAAW,MAAM;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAStE;AAkCD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAelE;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAevF;AAED,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAAmC;gBAElC,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAIlD,UAAU;IAwEjB,OAAO,CAAC,WAAW;CAcpB;AAED,eAAe,UAAU,CAAC"}
|
package/lib/core/cli.js
CHANGED
|
@@ -11,11 +11,86 @@
|
|
|
11
11
|
* cliHandler.runFromCLI();
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.detectDatasetFormat = detectDatasetFormat;
|
|
15
|
+
exports.parseCsv = parseCsv;
|
|
16
|
+
exports.loadDataset = loadDataset;
|
|
14
17
|
const tslib_1 = require("../../internal/tslib.js");
|
|
15
18
|
const commander_1 = require("commander");
|
|
16
19
|
const fs = tslib_1.__importStar(require("fs"));
|
|
17
20
|
const path = tslib_1.__importStar(require("path"));
|
|
18
21
|
const tracer_1 = require("../tracing/tracer.js");
|
|
22
|
+
function detectDatasetFormat(datasetPath) {
|
|
23
|
+
const ext = path.extname(datasetPath).toLowerCase();
|
|
24
|
+
if (ext === '.csv') {
|
|
25
|
+
return 'csv';
|
|
26
|
+
}
|
|
27
|
+
if (ext === '.json') {
|
|
28
|
+
return 'json';
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`Unsupported dataset format: ${datasetPath}`);
|
|
31
|
+
}
|
|
32
|
+
function parseCsvLine(line) {
|
|
33
|
+
const result = [];
|
|
34
|
+
let current = '';
|
|
35
|
+
let inQuotes = false;
|
|
36
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
37
|
+
const char = line[i];
|
|
38
|
+
const next = line[i + 1];
|
|
39
|
+
if (inQuotes) {
|
|
40
|
+
if (char === '"' && next === '"') {
|
|
41
|
+
current += '"';
|
|
42
|
+
i += 1; // skip escaped quote
|
|
43
|
+
}
|
|
44
|
+
else if (char === '"') {
|
|
45
|
+
inQuotes = false;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
current += char;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (char === ',') {
|
|
52
|
+
result.push(current);
|
|
53
|
+
current = '';
|
|
54
|
+
}
|
|
55
|
+
else if (char === '"') {
|
|
56
|
+
inQuotes = true;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
current += char;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
result.push(current);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
function parseCsv(content) {
|
|
66
|
+
const lines = content.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
67
|
+
if (lines.length === 0) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
const headers = parseCsvLine(lines[0]);
|
|
71
|
+
return lines.slice(1).map((line) => {
|
|
72
|
+
const values = parseCsvLine(line);
|
|
73
|
+
const row = {};
|
|
74
|
+
headers.forEach((header, idx) => {
|
|
75
|
+
row[header] = values[idx] ?? '';
|
|
76
|
+
});
|
|
77
|
+
return row;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function loadDataset(datasetPath) {
|
|
81
|
+
const datasetFullPath = path.resolve(datasetPath);
|
|
82
|
+
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
83
|
+
const format = detectDatasetFormat(datasetFullPath);
|
|
84
|
+
if (format === 'json') {
|
|
85
|
+
const parsed = JSON.parse(rawData);
|
|
86
|
+
if (!Array.isArray(parsed)) {
|
|
87
|
+
throw new Error('Dataset JSON must be an array of records');
|
|
88
|
+
}
|
|
89
|
+
return { data: parsed, format };
|
|
90
|
+
}
|
|
91
|
+
const parsed = parseCsv(rawData);
|
|
92
|
+
return { data: parsed, format };
|
|
93
|
+
}
|
|
19
94
|
class CLIHandler {
|
|
20
95
|
constructor(runFunction) {
|
|
21
96
|
this.run = runFunction;
|
|
@@ -27,10 +102,7 @@ class CLIHandler {
|
|
|
27
102
|
commander_1.program.parse(process.argv);
|
|
28
103
|
const options = commander_1.program.opts();
|
|
29
104
|
const { datasetPath, outputDir } = options;
|
|
30
|
-
|
|
31
|
-
const datasetFullPath = path.resolve(datasetPath);
|
|
32
|
-
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
33
|
-
const dataset = JSON.parse(rawData);
|
|
105
|
+
const { data: dataset } = loadDataset(datasetPath);
|
|
34
106
|
// Process each item in the dataset dynamically
|
|
35
107
|
Promise.all(dataset.map(async (item) => {
|
|
36
108
|
try {
|
package/lib/core/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/core/cli.mjs
CHANGED
|
@@ -13,6 +13,78 @@ import { program } from 'commander';
|
|
|
13
13
|
import * as fs from 'fs';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { getCurrentTrace, postProcessTrace } from "../tracing/tracer.mjs";
|
|
16
|
+
export function detectDatasetFormat(datasetPath) {
|
|
17
|
+
const ext = path.extname(datasetPath).toLowerCase();
|
|
18
|
+
if (ext === '.csv') {
|
|
19
|
+
return 'csv';
|
|
20
|
+
}
|
|
21
|
+
if (ext === '.json') {
|
|
22
|
+
return 'json';
|
|
23
|
+
}
|
|
24
|
+
throw new Error(`Unsupported dataset format: ${datasetPath}`);
|
|
25
|
+
}
|
|
26
|
+
function parseCsvLine(line) {
|
|
27
|
+
const result = [];
|
|
28
|
+
let current = '';
|
|
29
|
+
let inQuotes = false;
|
|
30
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
31
|
+
const char = line[i];
|
|
32
|
+
const next = line[i + 1];
|
|
33
|
+
if (inQuotes) {
|
|
34
|
+
if (char === '"' && next === '"') {
|
|
35
|
+
current += '"';
|
|
36
|
+
i += 1; // skip escaped quote
|
|
37
|
+
}
|
|
38
|
+
else if (char === '"') {
|
|
39
|
+
inQuotes = false;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
current += char;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (char === ',') {
|
|
46
|
+
result.push(current);
|
|
47
|
+
current = '';
|
|
48
|
+
}
|
|
49
|
+
else if (char === '"') {
|
|
50
|
+
inQuotes = true;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
current += char;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
result.push(current);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
export function parseCsv(content) {
|
|
60
|
+
const lines = content.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
61
|
+
if (lines.length === 0) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
const headers = parseCsvLine(lines[0]);
|
|
65
|
+
return lines.slice(1).map((line) => {
|
|
66
|
+
const values = parseCsvLine(line);
|
|
67
|
+
const row = {};
|
|
68
|
+
headers.forEach((header, idx) => {
|
|
69
|
+
row[header] = values[idx] ?? '';
|
|
70
|
+
});
|
|
71
|
+
return row;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export function loadDataset(datasetPath) {
|
|
75
|
+
const datasetFullPath = path.resolve(datasetPath);
|
|
76
|
+
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
77
|
+
const format = detectDatasetFormat(datasetFullPath);
|
|
78
|
+
if (format === 'json') {
|
|
79
|
+
const parsed = JSON.parse(rawData);
|
|
80
|
+
if (!Array.isArray(parsed)) {
|
|
81
|
+
throw new Error('Dataset JSON must be an array of records');
|
|
82
|
+
}
|
|
83
|
+
return { data: parsed, format };
|
|
84
|
+
}
|
|
85
|
+
const parsed = parseCsv(rawData);
|
|
86
|
+
return { data: parsed, format };
|
|
87
|
+
}
|
|
16
88
|
class CLIHandler {
|
|
17
89
|
constructor(runFunction) {
|
|
18
90
|
this.run = runFunction;
|
|
@@ -24,10 +96,7 @@ class CLIHandler {
|
|
|
24
96
|
program.parse(process.argv);
|
|
25
97
|
const options = program.opts();
|
|
26
98
|
const { datasetPath, outputDir } = options;
|
|
27
|
-
|
|
28
|
-
const datasetFullPath = path.resolve(datasetPath);
|
|
29
|
-
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
30
|
-
const dataset = JSON.parse(rawData);
|
|
99
|
+
const { data: dataset } = loadDataset(datasetPath);
|
|
31
100
|
// Process each item in the dataset dynamically
|
|
32
101
|
Promise.all(dataset.map(async (item) => {
|
|
33
102
|
try {
|
package/lib/core/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;OAEI,EAAE,OAAO,EAAE,MAAM,WAAW;OAC5B,KAAK,EAAE,MAAM,IAAI;OACjB,KAAK,IAAI,MAAM,MAAM;OACrB,EAAE,eAAe,EAAE,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"cli.mjs","sourceRoot":"","sources":["../../src/lib/core/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/lib/core/cli.ts
CHANGED
|
@@ -42,6 +42,85 @@ export interface Config {
|
|
|
42
42
|
numOfTokenColumnName?: string;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
export type DatasetFormat = 'csv' | 'json';
|
|
46
|
+
|
|
47
|
+
export function detectDatasetFormat(datasetPath: string): DatasetFormat {
|
|
48
|
+
const ext = path.extname(datasetPath).toLowerCase();
|
|
49
|
+
if (ext === '.csv') {
|
|
50
|
+
return 'csv';
|
|
51
|
+
}
|
|
52
|
+
if (ext === '.json') {
|
|
53
|
+
return 'json';
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Unsupported dataset format: ${datasetPath}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function parseCsvLine(line: string): string[] {
|
|
59
|
+
const result: string[] = [];
|
|
60
|
+
let current = '';
|
|
61
|
+
let inQuotes = false;
|
|
62
|
+
|
|
63
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
64
|
+
const char = line[i];
|
|
65
|
+
const next = line[i + 1];
|
|
66
|
+
|
|
67
|
+
if (inQuotes) {
|
|
68
|
+
if (char === '"' && next === '"') {
|
|
69
|
+
current += '"';
|
|
70
|
+
i += 1; // skip escaped quote
|
|
71
|
+
} else if (char === '"') {
|
|
72
|
+
inQuotes = false;
|
|
73
|
+
} else {
|
|
74
|
+
current += char;
|
|
75
|
+
}
|
|
76
|
+
} else if (char === ',') {
|
|
77
|
+
result.push(current);
|
|
78
|
+
current = '';
|
|
79
|
+
} else if (char === '"') {
|
|
80
|
+
inQuotes = true;
|
|
81
|
+
} else {
|
|
82
|
+
current += char;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
result.push(current);
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function parseCsv(content: string): Record<string, string>[] {
|
|
91
|
+
const lines = content.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
92
|
+
if (lines.length === 0) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const headers = parseCsvLine(lines[0]!);
|
|
97
|
+
return lines.slice(1).map((line) => {
|
|
98
|
+
const values = parseCsvLine(line);
|
|
99
|
+
const row: Record<string, string> = {};
|
|
100
|
+
headers.forEach((header, idx) => {
|
|
101
|
+
row[header] = values[idx] ?? '';
|
|
102
|
+
});
|
|
103
|
+
return row;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function loadDataset(datasetPath: string): { data: any[]; format: DatasetFormat } {
|
|
108
|
+
const datasetFullPath = path.resolve(datasetPath);
|
|
109
|
+
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
110
|
+
const format = detectDatasetFormat(datasetFullPath);
|
|
111
|
+
|
|
112
|
+
if (format === 'json') {
|
|
113
|
+
const parsed = JSON.parse(rawData);
|
|
114
|
+
if (!Array.isArray(parsed)) {
|
|
115
|
+
throw new Error('Dataset JSON must be an array of records');
|
|
116
|
+
}
|
|
117
|
+
return { data: parsed, format };
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const parsed = parseCsv(rawData);
|
|
121
|
+
return { data: parsed, format };
|
|
122
|
+
}
|
|
123
|
+
|
|
45
124
|
class CLIHandler {
|
|
46
125
|
private run: (...args: any[]) => Promise<any>;
|
|
47
126
|
|
|
@@ -59,10 +138,7 @@ class CLIHandler {
|
|
|
59
138
|
const options = program.opts();
|
|
60
139
|
const { datasetPath, outputDir } = options;
|
|
61
140
|
|
|
62
|
-
|
|
63
|
-
const datasetFullPath = path.resolve(datasetPath);
|
|
64
|
-
const rawData = fs.readFileSync(datasetFullPath, 'utf8');
|
|
65
|
-
const dataset = JSON.parse(rawData);
|
|
141
|
+
const { data: dataset } = loadDataset(datasetPath);
|
|
66
142
|
|
|
67
143
|
// Process each item in the dataset dynamically
|
|
68
144
|
Promise.all<Output>(
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.25.0'; // x-release-please-version
|
package/version.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.25.0";
|
|
2
2
|
//# sourceMappingURL=version.d.mts.map
|
package/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.25.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/version.js
CHANGED
package/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.25.0'; // x-release-please-version
|
|
2
2
|
//# sourceMappingURL=version.mjs.map
|