@enspirit/elo 0.9.3 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +27 -9
  2. package/dist/src/ast.d.ts +29 -6
  3. package/dist/src/ast.d.ts.map +1 -1
  4. package/dist/src/ast.js +14 -3
  5. package/dist/src/ast.js.map +1 -1
  6. package/dist/src/bindings/javascript.d.ts.map +1 -1
  7. package/dist/src/bindings/javascript.js +11 -0
  8. package/dist/src/bindings/javascript.js.map +1 -1
  9. package/dist/src/bindings/ruby.d.ts.map +1 -1
  10. package/dist/src/bindings/ruby.js +31 -2
  11. package/dist/src/bindings/ruby.js.map +1 -1
  12. package/dist/src/bindings/sql.d.ts.map +1 -1
  13. package/dist/src/bindings/sql.js +35 -0
  14. package/dist/src/bindings/sql.js.map +1 -1
  15. package/dist/src/compilers/javascript.d.ts +2 -0
  16. package/dist/src/compilers/javascript.d.ts.map +1 -1
  17. package/dist/src/compilers/javascript.js +39 -10
  18. package/dist/src/compilers/javascript.js.map +1 -1
  19. package/dist/src/compilers/ruby.d.ts +2 -0
  20. package/dist/src/compilers/ruby.d.ts.map +1 -1
  21. package/dist/src/compilers/ruby.js +37 -10
  22. package/dist/src/compilers/ruby.js.map +1 -1
  23. package/dist/src/compilers/sql.js +2 -0
  24. package/dist/src/compilers/sql.js.map +1 -1
  25. package/dist/src/csv.d.ts +39 -0
  26. package/dist/src/csv.d.ts.map +1 -0
  27. package/dist/src/csv.js +177 -0
  28. package/dist/src/csv.js.map +1 -0
  29. package/dist/src/elo.js +64 -13
  30. package/dist/src/elo.js.map +1 -1
  31. package/dist/src/eloc.js +10 -4
  32. package/dist/src/eloc.js.map +1 -1
  33. package/dist/src/formats.d.ts +94 -0
  34. package/dist/src/formats.d.ts.map +1 -0
  35. package/dist/src/formats.js +92 -0
  36. package/dist/src/formats.js.map +1 -0
  37. package/dist/src/index.d.ts +4 -0
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +12 -1
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/ir.d.ts +23 -4
  42. package/dist/src/ir.d.ts.map +1 -1
  43. package/dist/src/ir.js +12 -2
  44. package/dist/src/ir.js.map +1 -1
  45. package/dist/src/parser.d.ts +41 -1
  46. package/dist/src/parser.d.ts.map +1 -1
  47. package/dist/src/parser.js +212 -7
  48. package/dist/src/parser.js.map +1 -1
  49. package/dist/src/runtime.d.ts.map +1 -1
  50. package/dist/src/runtime.js +47 -0
  51. package/dist/src/runtime.js.map +1 -1
  52. package/dist/src/serialize.d.ts +24 -0
  53. package/dist/src/serialize.d.ts.map +1 -0
  54. package/dist/src/serialize.js +138 -0
  55. package/dist/src/serialize.js.map +1 -0
  56. package/dist/src/transform.d.ts.map +1 -1
  57. package/dist/src/transform.js +40 -5
  58. package/dist/src/transform.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * CSV parsing and serialization utilities for Elo.
4
+ *
5
+ * CSV data is represented as an array of objects, where:
6
+ * - Headers become object keys
7
+ * - All values are kept as strings (Elo's type coercion handles conversion)
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.parseCSV = parseCSV;
11
+ exports.toCSV = toCSV;
12
+ /**
13
+ * Parse a CSV string into an array of objects.
14
+ * First row is treated as headers (keys for each row object).
15
+ * All values are kept as strings.
16
+ *
17
+ * @param csv - The CSV string to parse
18
+ * @returns An array of objects, one per data row
19
+ *
20
+ * @example
21
+ * parseCSV('name,age\nAlice,30\nBob,25')
22
+ * // => [{name: 'Alice', age: '30'}, {name: 'Bob', age: '25'}]
23
+ */
24
+ function parseCSV(csv) {
25
+ const lines = parseCSVLines(csv);
26
+ if (lines.length === 0) {
27
+ return [];
28
+ }
29
+ const headers = lines[0];
30
+ const result = [];
31
+ for (let i = 1; i < lines.length; i++) {
32
+ const values = lines[i];
33
+ const row = {};
34
+ for (let j = 0; j < headers.length; j++) {
35
+ row[headers[j]] = values[j] ?? '';
36
+ }
37
+ result.push(row);
38
+ }
39
+ return result;
40
+ }
41
+ /**
42
+ * Parse CSV into a 2D array of strings (rows × columns).
43
+ * Handles quoted values, escaped quotes, and multi-line values.
44
+ */
45
+ function parseCSVLines(csv) {
46
+ const result = [];
47
+ let currentRow = [];
48
+ let currentValue = '';
49
+ let inQuotes = false;
50
+ let i = 0;
51
+ while (i < csv.length) {
52
+ const char = csv[i];
53
+ if (inQuotes) {
54
+ if (char === '"') {
55
+ // Check for escaped quote
56
+ if (csv[i + 1] === '"') {
57
+ currentValue += '"';
58
+ i += 2;
59
+ }
60
+ else {
61
+ // End of quoted value
62
+ inQuotes = false;
63
+ i++;
64
+ }
65
+ }
66
+ else {
67
+ currentValue += char;
68
+ i++;
69
+ }
70
+ }
71
+ else {
72
+ if (char === '"') {
73
+ // Start of quoted value
74
+ inQuotes = true;
75
+ i++;
76
+ }
77
+ else if (char === ',') {
78
+ // Field separator
79
+ currentRow.push(currentValue);
80
+ currentValue = '';
81
+ i++;
82
+ }
83
+ else if (char === '\n') {
84
+ // End of line
85
+ currentRow.push(currentValue);
86
+ if (currentRow.length > 0 && !(currentRow.length === 1 && currentRow[0] === '')) {
87
+ result.push(currentRow);
88
+ }
89
+ currentRow = [];
90
+ currentValue = '';
91
+ i++;
92
+ }
93
+ else if (char === '\r') {
94
+ // Handle \r\n
95
+ i++;
96
+ }
97
+ else {
98
+ currentValue += char;
99
+ i++;
100
+ }
101
+ }
102
+ }
103
+ // Handle last value/row
104
+ if (currentValue || currentRow.length > 0) {
105
+ currentRow.push(currentValue);
106
+ if (currentRow.length > 0 && !(currentRow.length === 1 && currentRow[0] === '')) {
107
+ result.push(currentRow);
108
+ }
109
+ }
110
+ return result;
111
+ }
112
+ /**
113
+ * Serialize a value to CSV format.
114
+ *
115
+ * For arrays of objects, the first object's keys become headers.
116
+ * For a single object, it becomes a single-row CSV with headers.
117
+ * For other values, an error is thrown.
118
+ *
119
+ * @param value - The value to serialize (array of objects, or single object)
120
+ * @returns A CSV string
121
+ *
122
+ * @example
123
+ * toCSV([{name: 'Alice', age: 30}, {name: 'Bob', age: 25}])
124
+ * // => 'name,age\nAlice,30\nBob,25'
125
+ *
126
+ * toCSV({name: 'Alice', age: 30})
127
+ * // => 'name,age\nAlice,30'
128
+ */
129
+ function toCSV(value) {
130
+ // Handle array of objects
131
+ if (Array.isArray(value)) {
132
+ if (value.length === 0) {
133
+ return '';
134
+ }
135
+ // Get headers from first object
136
+ const first = value[0];
137
+ if (typeof first !== 'object' || first === null || Array.isArray(first)) {
138
+ throw new Error('CSV output requires an array of objects');
139
+ }
140
+ const headers = Object.keys(first);
141
+ const lines = [];
142
+ // Add header row
143
+ lines.push(headers.map(escapeCSVValue).join(','));
144
+ // Add data rows
145
+ for (const row of value) {
146
+ if (typeof row !== 'object' || row === null || Array.isArray(row)) {
147
+ throw new Error('CSV output requires all elements to be objects');
148
+ }
149
+ const rowObj = row;
150
+ const values = headers.map(h => escapeCSVValue(String(rowObj[h] ?? '')));
151
+ lines.push(values.join(','));
152
+ }
153
+ return lines.join('\n');
154
+ }
155
+ // Handle single object as single-row CSV
156
+ if (typeof value === 'object' && value !== null) {
157
+ const obj = value;
158
+ const headers = Object.keys(obj);
159
+ const values = headers.map(h => escapeCSVValue(String(obj[h] ?? '')));
160
+ return headers.map(escapeCSVValue).join(',') + '\n' + values.join(',');
161
+ }
162
+ throw new Error('CSV output requires an object or array of objects');
163
+ }
164
+ /**
165
+ * Escape a value for CSV output.
166
+ * Wraps in quotes if the value contains commas, quotes, or newlines.
167
+ * Doubles any internal quotes.
168
+ */
169
+ function escapeCSVValue(value) {
170
+ // Check if quoting is needed
171
+ if (value.includes(',') || value.includes('"') || value.includes('\n') || value.includes('\r')) {
172
+ // Double any internal quotes and wrap in quotes
173
+ return '"' + value.replace(/"/g, '""') + '"';
174
+ }
175
+ return value;
176
+ }
177
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/csv.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAcH,4BAmBC;AAwFD,sBAyCC;AAhKD;;;;;;;;;;;GAWG;AACH,SAAgB,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAA6B,EAAE,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,0BAA0B;gBAC1B,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACvB,YAAY,IAAI,GAAG,CAAC;oBACpB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,sBAAsB;oBACtB,QAAQ,GAAG,KAAK,CAAC;oBACjB,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,IAAI,IAAI,CAAC;gBACrB,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,wBAAwB;gBACxB,QAAQ,GAAG,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,kBAAkB;gBAClB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9B,YAAY,GAAG,EAAE,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,cAAc;gBACd,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;oBAChF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1B,CAAC;gBACD,UAAU,GAAG,EAAE,CAAC;gBAChB,YAAY,GAAG,EAAE,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,cAAc;gBACd,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,YAAY,IAAI,IAAI,CAAC;gBACrB,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,YAAY,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAChF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,KAAK,CAAC,KAAc;IAClC,0BAA0B;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAElD,gBAAgB;QAChB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,MAAM,GAAG,GAA8B,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,6BAA6B;IAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,gDAAgD;QAChD,OAAO,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/src/elo.js CHANGED
@@ -5,6 +5,7 @@ const fs_1 = require("fs");
5
5
  const parser_1 = require("./parser");
6
6
  const javascript_1 = require("./compilers/javascript");
7
7
  const luxon_1 = require("luxon");
8
+ const formats_1 = require("./formats");
8
9
  // eslint-disable-next-line @typescript-eslint/no-var-requires
9
10
  const pkg = require('../../package.json');
10
11
  function parseArgs(args) {
@@ -23,6 +24,22 @@ function parseArgs(args) {
23
24
  case '--stdin':
24
25
  options.stdinData = true;
25
26
  break;
27
+ case '-f':
28
+ case '--input-format':
29
+ options.inputFormat = args[++i];
30
+ if (options.inputFormat !== 'json' && options.inputFormat !== 'csv') {
31
+ console.error(`Invalid input format: ${options.inputFormat}. Use 'json' or 'csv'.`);
32
+ process.exit(1);
33
+ }
34
+ break;
35
+ case '-o':
36
+ case '--output-format':
37
+ options.outputFormat = args[++i];
38
+ if (options.outputFormat !== 'json' && options.outputFormat !== 'elo' && options.outputFormat !== 'csv') {
39
+ console.error(`Invalid output format: ${options.outputFormat}. Use 'json', 'elo', or 'csv'.`);
40
+ process.exit(1);
41
+ }
42
+ break;
26
43
  case '-h':
27
44
  case '--help':
28
45
  printHelp();
@@ -60,8 +77,10 @@ Usage:
60
77
 
61
78
  Options:
62
79
  -e, --expression <expr> Expression to evaluate (like ruby -e)
63
- -d, --data <json> JSON input data for _ variable (or @file to read from file)
64
- --stdin Read input data as JSON from stdin
80
+ -d, --data <data> Input data for _ variable (or @file to read from file)
81
+ --stdin Read input data from stdin
82
+ -f, --input-format <fmt> Input data format: json (default) or csv
83
+ -o, --output-format <fmt> Output format: json (default), elo, or csv
65
84
  -v, --version Show version number
66
85
  -h, --help Show this help message
67
86
 
@@ -69,10 +88,19 @@ Examples:
69
88
  # Evaluate a simple expression
70
89
  elo -e "2 + 3 * 4"
71
90
 
72
- # Evaluate with input data
91
+ # Evaluate with JSON input data
73
92
  elo -e "_.x + _.y" -d '{"x": 1, "y": 2}'
74
93
 
75
- # Evaluate with input data from file
94
+ # Evaluate with CSV input data
95
+ elo -e "map(_, fn(r ~> r.name))" -d @data.csv -f csv
96
+
97
+ # Output as Elo code
98
+ elo -e "{a: 1, b: 2}" -o elo
99
+
100
+ # Output as CSV
101
+ elo -e "[{name: 'Alice', age: 30}]" -o csv
102
+
103
+ # Evaluate with input data from file (format auto-detected from extension)
76
104
  elo -e "_.name" -d @data.json
77
105
 
78
106
  # Evaluate from .elo file
@@ -86,26 +114,44 @@ Examples:
86
114
  `);
87
115
  }
88
116
  /**
89
- * Parse input data from CLI option (JSON string or @file path)
117
+ * Detect input format from file extension
90
118
  */
91
- function parseInputData(inputData) {
92
- let jsonString = inputData;
119
+ function detectInputFormat(filePath) {
120
+ if (filePath.endsWith('.csv')) {
121
+ return 'csv';
122
+ }
123
+ return 'json';
124
+ }
125
+ /**
126
+ * Parse input data from CLI option (JSON/CSV string or @file path)
127
+ */
128
+ function parseInputData(inputData, format, formats) {
129
+ let dataString = inputData;
130
+ let detectedFormat = format;
93
131
  // If starts with @, read from file
94
132
  if (inputData.startsWith('@')) {
95
133
  const filePath = inputData.slice(1);
134
+ // Auto-detect format from extension if not specified
135
+ if (!detectedFormat) {
136
+ detectedFormat = detectInputFormat(filePath);
137
+ }
96
138
  try {
97
- jsonString = (0, fs_1.readFileSync)(filePath, 'utf-8');
139
+ dataString = (0, fs_1.readFileSync)(filePath, 'utf-8');
98
140
  }
99
141
  catch (error) {
100
142
  console.error(`Error reading input file ${filePath}: ${error}`);
101
143
  process.exit(1);
102
144
  }
103
145
  }
146
+ // Default to JSON if not specified
147
+ if (!detectedFormat) {
148
+ detectedFormat = 'json';
149
+ }
104
150
  try {
105
- return JSON.parse(jsonString);
151
+ return (0, formats_1.getFormat)(formats, detectedFormat).parse(dataString);
106
152
  }
107
153
  catch (error) {
108
- console.error(`Error parsing input JSON: ${error}`);
154
+ console.error(`Error parsing input ${detectedFormat.toUpperCase()}: ${error}`);
109
155
  process.exit(1);
110
156
  }
111
157
  }
@@ -128,6 +174,8 @@ function main() {
128
174
  process.exit(0);
129
175
  }
130
176
  const options = parseArgs(args);
177
+ // Use default formats (can be extended by users in programmatic usage)
178
+ const formats = formats_1.defaultFormats;
131
179
  // Get the source expression(s)
132
180
  let sources;
133
181
  if (options.expression) {
@@ -157,10 +205,11 @@ function main() {
157
205
  }
158
206
  // Get input data
159
207
  let inputValue = null;
208
+ const inputFormat = options.inputFormat || 'json';
160
209
  if (options.stdinData) {
161
210
  try {
162
211
  const stdinContent = (0, fs_1.readFileSync)(0, 'utf-8');
163
- inputValue = JSON.parse(stdinContent);
212
+ inputValue = (0, formats_1.getFormat)(formats, inputFormat).parse(stdinContent);
164
213
  }
165
214
  catch (error) {
166
215
  console.error(`Error reading/parsing stdin: ${error}`);
@@ -168,9 +217,11 @@ function main() {
168
217
  }
169
218
  }
170
219
  else if (options.inputData) {
171
- inputValue = parseInputData(options.inputData);
220
+ inputValue = parseInputData(options.inputData, options.inputFormat, formats);
172
221
  }
173
222
  // Evaluate each expression
223
+ const outputFormat = options.outputFormat || 'json';
224
+ const outputAdapter = (0, formats_1.getFormat)(formats, outputFormat);
174
225
  const outputs = [];
175
226
  for (let i = 0; i < sources.length; i++) {
176
227
  const source = sources[i];
@@ -181,7 +232,7 @@ function main() {
181
232
  }
182
233
  try {
183
234
  const result = evaluate(trimmed, inputValue);
184
- outputs.push(JSON.stringify(result));
235
+ outputs.push(outputAdapter.serialize(result));
185
236
  }
186
237
  catch (error) {
187
238
  console.error(`Error on line ${i + 1}: ${error}`);
@@ -1 +1 @@
1
- {"version":3,"file":"elo.js","sourceRoot":"","sources":["../../src/elo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elo.js","sourceRoot":"","sources":["../../src/elo.ts"],"names":[],"mappings":"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"}
package/dist/src/eloc.js CHANGED
@@ -48,6 +48,9 @@ function parseArgs(args) {
48
48
  case '--execute':
49
49
  options.execute = true;
50
50
  break;
51
+ case '--strip-guards':
52
+ options.stripGuards = true;
53
+ break;
51
54
  case '-h':
52
55
  case '--help':
53
56
  printHelp();
@@ -89,6 +92,7 @@ Options:
89
92
  -x, --execute Output self-executing code (calls function with null/nil)
90
93
  -p, --prelude Include necessary library imports/requires
91
94
  --prelude-only Output only the prelude (no expression needed)
95
+ --strip-guards Strip guard/check assertions from output
92
96
  -f, --file <path> Output to file instead of stdout
93
97
  -v, --version Show version number
94
98
  -h, --help Show this help message
@@ -124,21 +128,22 @@ For evaluating expressions, use the 'elo' command instead.
124
128
  }
125
129
  function compile(source, target, options = {}) {
126
130
  const ast = (0, parser_1.parse)(source);
127
- const { includePrelude = false, execute = false } = options;
131
+ const { includePrelude = false, execute = false, stripGuards = false } = options;
128
132
  let code;
129
133
  switch (target) {
130
134
  case 'ruby': {
131
- const result = (0, ruby_1.compileToRubyWithMeta)(ast, { execute });
135
+ const result = (0, ruby_1.compileToRubyWithMeta)(ast, { execute, stripGuards });
132
136
  code = result.code;
133
137
  break;
134
138
  }
135
139
  case 'js': {
136
- const result = (0, javascript_1.compileToJavaScriptWithMeta)(ast, { execute });
140
+ const result = (0, javascript_1.compileToJavaScriptWithMeta)(ast, { execute, stripGuards });
137
141
  code = result.code;
138
142
  break;
139
143
  }
140
144
  case 'sql': {
141
145
  // SQL doesn't support execute option (no function wrapping)
146
+ // and guards already throw an error, so stripGuards is not needed
142
147
  const result = (0, sql_1.compileToSQLWithMeta)(ast);
143
148
  code = result.code;
144
149
  break;
@@ -205,7 +210,8 @@ function main() {
205
210
  }
206
211
  return compile(trimmed, options.target, {
207
212
  includePrelude: index === 0 && options.prelude,
208
- execute: options.execute
213
+ execute: options.execute,
214
+ stripGuards: options.stripGuards
209
215
  });
210
216
  }
211
217
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"eloc.js","sourceRoot":"","sources":["../../src/eloc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eloc.js","sourceRoot":"","sources":["../../src/eloc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Pluggable data format adapters for Elo.
3
+ *
4
+ * This module defines interfaces for parsing and serializing different data formats
5
+ * (JSON, CSV, XLSX, etc.). Users can provide their own implementations using
6
+ * libraries like PapaParse or SheetJS.
7
+ *
8
+ * @example
9
+ * // Using the built-in CSV adapter
10
+ * import { defaultFormats } from '@enspirit/elo';
11
+ * const data = defaultFormats.csv.parse('name,age\nAlice,30');
12
+ *
13
+ * @example
14
+ * // Providing a custom adapter with PapaParse
15
+ * import Papa from 'papaparse';
16
+ * import { FormatAdapter } from '@enspirit/elo';
17
+ *
18
+ * const csvAdapter: FormatAdapter = {
19
+ * parse: (s) => Papa.parse(s, { header: true }).data,
20
+ * serialize: (v) => Papa.unparse(v)
21
+ * };
22
+ */
23
+ /**
24
+ * Interface for a data format adapter.
25
+ * Implement this to add support for custom data formats.
26
+ */
27
+ export interface FormatAdapter {
28
+ /**
29
+ * Parse a string into a JavaScript value.
30
+ * @param input - The string to parse
31
+ * @returns The parsed value
32
+ * @throws Error if parsing fails
33
+ */
34
+ parse(input: string): unknown;
35
+ /**
36
+ * Serialize a JavaScript value to a string.
37
+ * @param value - The value to serialize
38
+ * @returns The serialized string
39
+ * @throws Error if the value cannot be serialized to this format
40
+ */
41
+ serialize(value: unknown): string;
42
+ }
43
+ /**
44
+ * Registry of format adapters by name.
45
+ * Extend this to add custom formats.
46
+ */
47
+ export interface FormatRegistry {
48
+ json: FormatAdapter;
49
+ csv: FormatAdapter;
50
+ elo: FormatAdapter;
51
+ [key: string]: FormatAdapter | undefined;
52
+ }
53
+ /**
54
+ * Built-in JSON format adapter.
55
+ */
56
+ export declare const jsonAdapter: FormatAdapter;
57
+ /**
58
+ * Built-in CSV format adapter.
59
+ * CSV data is parsed as an array of objects with string values.
60
+ * For output, requires an array of objects or a single object.
61
+ */
62
+ export declare const csvAdapter: FormatAdapter;
63
+ /**
64
+ * Built-in Elo code format adapter.
65
+ * This format is output-only (serialize only).
66
+ * Parsing Elo code requires the full parser.
67
+ */
68
+ export declare const eloAdapter: FormatAdapter;
69
+ /**
70
+ * Default format registry with built-in adapters.
71
+ * Use this as-is or extend with custom adapters.
72
+ *
73
+ * @example
74
+ * // Extend with a custom XLSX adapter
75
+ * import XLSX from 'xlsx';
76
+ *
77
+ * const formats = {
78
+ * ...defaultFormats,
79
+ * xlsx: {
80
+ * parse: (s) => XLSX.read(s, { type: 'string' }),
81
+ * serialize: (v) => XLSX.write(v, { type: 'string' })
82
+ * }
83
+ * };
84
+ */
85
+ export declare const defaultFormats: FormatRegistry;
86
+ /**
87
+ * Helper to get a format adapter by name.
88
+ * @param formats - The format registry to search
89
+ * @param name - The format name (e.g., 'json', 'csv')
90
+ * @returns The adapter
91
+ * @throws Error if format is not found
92
+ */
93
+ export declare function getFormat(formats: FormatRegistry, name: string): FormatAdapter;
94
+ //# sourceMappingURL=formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/formats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,aAGzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,aAGxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,aAKxB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAO9E"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Pluggable data format adapters for Elo.
4
+ *
5
+ * This module defines interfaces for parsing and serializing different data formats
6
+ * (JSON, CSV, XLSX, etc.). Users can provide their own implementations using
7
+ * libraries like PapaParse or SheetJS.
8
+ *
9
+ * @example
10
+ * // Using the built-in CSV adapter
11
+ * import { defaultFormats } from '@enspirit/elo';
12
+ * const data = defaultFormats.csv.parse('name,age\nAlice,30');
13
+ *
14
+ * @example
15
+ * // Providing a custom adapter with PapaParse
16
+ * import Papa from 'papaparse';
17
+ * import { FormatAdapter } from '@enspirit/elo';
18
+ *
19
+ * const csvAdapter: FormatAdapter = {
20
+ * parse: (s) => Papa.parse(s, { header: true }).data,
21
+ * serialize: (v) => Papa.unparse(v)
22
+ * };
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.defaultFormats = exports.eloAdapter = exports.csvAdapter = exports.jsonAdapter = void 0;
26
+ exports.getFormat = getFormat;
27
+ const csv_1 = require("./csv");
28
+ const serialize_1 = require("./serialize");
29
+ /**
30
+ * Built-in JSON format adapter.
31
+ */
32
+ exports.jsonAdapter = {
33
+ parse: (input) => JSON.parse(input),
34
+ serialize: (value) => JSON.stringify(value)
35
+ };
36
+ /**
37
+ * Built-in CSV format adapter.
38
+ * CSV data is parsed as an array of objects with string values.
39
+ * For output, requires an array of objects or a single object.
40
+ */
41
+ exports.csvAdapter = {
42
+ parse: (input) => (0, csv_1.parseCSV)(input),
43
+ serialize: (value) => (0, csv_1.toCSV)(value)
44
+ };
45
+ /**
46
+ * Built-in Elo code format adapter.
47
+ * This format is output-only (serialize only).
48
+ * Parsing Elo code requires the full parser.
49
+ */
50
+ exports.eloAdapter = {
51
+ parse: (_input) => {
52
+ throw new Error('Elo format is output-only. Use the parser for Elo expressions.');
53
+ },
54
+ serialize: (value) => (0, serialize_1.toEloCode)(value)
55
+ };
56
+ /**
57
+ * Default format registry with built-in adapters.
58
+ * Use this as-is or extend with custom adapters.
59
+ *
60
+ * @example
61
+ * // Extend with a custom XLSX adapter
62
+ * import XLSX from 'xlsx';
63
+ *
64
+ * const formats = {
65
+ * ...defaultFormats,
66
+ * xlsx: {
67
+ * parse: (s) => XLSX.read(s, { type: 'string' }),
68
+ * serialize: (v) => XLSX.write(v, { type: 'string' })
69
+ * }
70
+ * };
71
+ */
72
+ exports.defaultFormats = {
73
+ json: exports.jsonAdapter,
74
+ csv: exports.csvAdapter,
75
+ elo: exports.eloAdapter
76
+ };
77
+ /**
78
+ * Helper to get a format adapter by name.
79
+ * @param formats - The format registry to search
80
+ * @param name - The format name (e.g., 'json', 'csv')
81
+ * @returns The adapter
82
+ * @throws Error if format is not found
83
+ */
84
+ function getFormat(formats, name) {
85
+ const adapter = formats[name];
86
+ if (!adapter) {
87
+ const available = Object.keys(formats).join(', ');
88
+ throw new Error(`Unknown format '${name}'. Available: ${available}`);
89
+ }
90
+ return adapter;
91
+ }
92
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/formats.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAiGH,8BAOC;AAtGD,+BAAwC;AACxC,2CAAwC;AAmCxC;;GAEG;AACU,QAAA,WAAW,GAAkB;IACxC,KAAK,EAAE,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACpD,SAAS,EAAE,CAAC,KAAc,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;CAC7D,CAAC;AAEF;;;;GAIG;AACU,QAAA,UAAU,GAAkB;IACvC,KAAK,EAAE,CAAC,KAAa,EAAW,EAAE,CAAC,IAAA,cAAQ,EAAC,KAAK,CAAC;IAClD,SAAS,EAAE,CAAC,KAAc,EAAU,EAAE,CAAC,IAAA,WAAK,EAAC,KAAK,CAAC;CACpD,CAAC;AAEF;;;;GAIG;AACU,QAAA,UAAU,GAAkB;IACvC,KAAK,EAAE,CAAC,MAAc,EAAW,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,SAAS,EAAE,CAAC,KAAc,EAAU,EAAE,CAAC,IAAA,qBAAS,EAAC,KAAK,CAAC;CACxD,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACU,QAAA,cAAc,GAAmB;IAC5C,IAAI,EAAE,mBAAW;IACjB,GAAG,EAAE,kBAAU;IACf,GAAG,EAAE,kBAAU;CAChB,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,OAAuB,EAAE,IAAY;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -14,4 +14,8 @@ export type { SQLCompileOptions } from './compilers/sql';
14
14
  export { JS_HELPERS } from './runtime';
15
15
  export { getPrelude } from './preludes';
16
16
  export type { Target as PreludeTarget } from './preludes';
17
+ export { toEloCode } from './serialize';
18
+ export { parseCSV, toCSV } from './csv';
19
+ export type { FormatAdapter, FormatRegistry } from './formats';
20
+ export { jsonAdapter, csvAdapter, eloAdapter, defaultFormats, getFormat } from './formats';
17
21
  //# sourceMappingURL=index.d.ts.map