@enspirit/elo 0.9.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -14
- package/dist/src/bindings/javascript.d.ts.map +1 -1
- package/dist/src/bindings/javascript.js +9 -0
- package/dist/src/bindings/javascript.js.map +1 -1
- package/dist/src/bindings/ruby.d.ts.map +1 -1
- package/dist/src/bindings/ruby.js +18 -0
- package/dist/src/bindings/ruby.js.map +1 -1
- package/dist/src/bindings/sql.d.ts.map +1 -1
- package/dist/src/bindings/sql.js +9 -0
- package/dist/src/bindings/sql.js.map +1 -1
- package/dist/src/compile.d.ts +10 -9
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +12 -11
- package/dist/src/compile.js.map +1 -1
- package/dist/src/compilers/javascript.js +1 -0
- package/dist/src/compilers/javascript.js.map +1 -1
- package/dist/src/compilers/ruby.js +1 -0
- package/dist/src/compilers/ruby.js.map +1 -1
- package/dist/src/csv.d.ts +39 -0
- package/dist/src/csv.d.ts.map +1 -0
- package/dist/src/csv.js +177 -0
- package/dist/src/csv.js.map +1 -0
- package/dist/src/elo.js +73 -14
- package/dist/src/elo.js.map +1 -1
- package/dist/src/eloc.js +9 -1
- package/dist/src/eloc.js.map +1 -1
- package/dist/src/formats.d.ts +94 -0
- package/dist/src/formats.d.ts.map +1 -0
- package/dist/src/formats.js +92 -0
- package/dist/src/formats.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/runtime.d.ts.map +1 -1
- package/dist/src/runtime.js +35 -0
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/serialize.d.ts +24 -0
- package/dist/src/serialize.d.ts.map +1 -0
- package/dist/src/serialize.js +138 -0
- package/dist/src/serialize.js.map +1 -0
- package/dist/src/transform.js +25 -2
- package/dist/src/transform.js.map +1 -1
- package/package.json +2 -2
package/dist/src/eloc.js
CHANGED
|
@@ -7,6 +7,8 @@ const ruby_1 = require("./compilers/ruby");
|
|
|
7
7
|
const javascript_1 = require("./compilers/javascript");
|
|
8
8
|
const sql_1 = require("./compilers/sql");
|
|
9
9
|
const preludes_1 = require("./preludes");
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
11
|
+
const pkg = require('../../package.json');
|
|
10
12
|
// Map CLI target names to prelude target names
|
|
11
13
|
function toPreludeTarget(target) {
|
|
12
14
|
return target === 'js' ? 'javascript' : target;
|
|
@@ -51,6 +53,11 @@ function parseArgs(args) {
|
|
|
51
53
|
printHelp();
|
|
52
54
|
process.exit(0);
|
|
53
55
|
break;
|
|
56
|
+
case '-v':
|
|
57
|
+
case '--version':
|
|
58
|
+
console.log(`Elo ${pkg.version}`);
|
|
59
|
+
process.exit(0);
|
|
60
|
+
break;
|
|
54
61
|
case '-':
|
|
55
62
|
// Read from stdin
|
|
56
63
|
options.inputFile = '-';
|
|
@@ -71,7 +78,7 @@ function parseArgs(args) {
|
|
|
71
78
|
}
|
|
72
79
|
function printHelp() {
|
|
73
80
|
console.log(`
|
|
74
|
-
Elo Compiler (eloc) - Compile Elo expressions to Ruby, JavaScript, or SQL
|
|
81
|
+
Elo Compiler (eloc) v${pkg.version} - Compile Elo expressions to Ruby, JavaScript, or SQL
|
|
75
82
|
|
|
76
83
|
Usage:
|
|
77
84
|
eloc [options] [input-file]
|
|
@@ -83,6 +90,7 @@ Options:
|
|
|
83
90
|
-p, --prelude Include necessary library imports/requires
|
|
84
91
|
--prelude-only Output only the prelude (no expression needed)
|
|
85
92
|
-f, --file <path> Output to file instead of stdout
|
|
93
|
+
-v, --version Show version number
|
|
86
94
|
-h, --help Show this help message
|
|
87
95
|
|
|
88
96
|
Examples:
|
package/dist/src/eloc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eloc.js","sourceRoot":"","sources":["../../src/eloc.ts"],"names":[],"mappings":";;;AAEA,2BAAiD;AACjD,qCAAiC;AACjC,2CAAyD;AACzD,uDAAqE;AACrE,yCAAuD;AACvD,yCAAiE;
|
|
1
|
+
{"version":3,"file":"eloc.js","sourceRoot":"","sources":["../../src/eloc.ts"],"names":[],"mappings":";;;AAEA,2BAAiD;AACjD,qCAAiC;AACjC,2CAAyD;AACzD,uDAAqE;AACrE,yCAAuD;AACvD,yCAAiE;AAEjE,8DAA8D;AAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAI1C,+CAA+C;AAC/C,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAaD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAY;QACvB,MAAM,EAAE,IAAI,CAAQ,iBAAiB;KACtC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,cAAc;gBACjB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,UAAU;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC7D,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,iCAAiC,CAAC,CAAC;oBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,WAAW;gBACd,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,MAAM;YAER,KAAK,gBAAgB;gBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC3B,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,WAAW;gBACd,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,WAAW;gBACd,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YAER,KAAK,GAAG;gBACN,kBAAkB;gBAClB,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;gBACxB,MAAM;YAER;gBACE,qDAAqD;gBACrD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACtE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;gBAC1B,CAAC;qBAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;oBAC1C,SAAS,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;uBACS,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CjC,CAAC,CAAC;AACH,CAAC;AAOD,SAAS,OAAO,CAAC,MAAc,EAAE,MAAc,EAAE,UAA0B,EAAE;IAC3E,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE5D,IAAI,IAAY,CAAC;IACjB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,IAAA,4BAAqB,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACvD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACnB,MAAM;QACR,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,MAAM,GAAG,IAAA,wCAA2B,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACnB,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,4DAA4D;YAC5D,MAAM,MAAM,GAAG,IAAA,0BAAoB,EAAC,GAAG,CAAC,CAAC;YACzC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,IAAA,qBAAU,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,GAAG,GAAG,cAAc,OAAO,IAAI,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,0DAA0D;IAC1D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,KAAK,GAAG;gBACvC,CAAC,CAAC,IAAA,iBAAY,EAAC,CAAC,EAAE,OAAO,CAAC;gBAC1B,CAAC,CAAC,IAAA,iBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,yEAAyE;YACzE,iEAAiE;YACjE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,OAAO,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,2DAA2D;gBAC3D,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9C,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO;oBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElC,oBAAoB;IACpB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,mEAAmE;YACnE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YACnE,IAAA,kBAAa,EAAC,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACV,MAAM,WAAW,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.getPrelude = exports.JS_HELPERS = exports.compileToSQL = exports.compileToJavaScriptWithMeta = exports.compileToJavaScript = exports.compileToRuby = exports.compile = void 0;
|
|
20
|
+
exports.getFormat = exports.defaultFormats = exports.eloAdapter = exports.csvAdapter = exports.jsonAdapter = exports.toCSV = exports.parseCSV = exports.toEloCode = exports.getPrelude = exports.JS_HELPERS = exports.compileToSQL = exports.compileToJavaScriptWithMeta = exports.compileToJavaScript = exports.compileToRuby = exports.compile = void 0;
|
|
21
21
|
__exportStar(require("./ast"), exports);
|
|
22
22
|
__exportStar(require("./parser"), exports);
|
|
23
23
|
var compile_1 = require("./compile");
|
|
@@ -33,4 +33,15 @@ var runtime_1 = require("./runtime");
|
|
|
33
33
|
Object.defineProperty(exports, "JS_HELPERS", { enumerable: true, get: function () { return runtime_1.JS_HELPERS; } });
|
|
34
34
|
var preludes_1 = require("./preludes");
|
|
35
35
|
Object.defineProperty(exports, "getPrelude", { enumerable: true, get: function () { return preludes_1.getPrelude; } });
|
|
36
|
+
var serialize_1 = require("./serialize");
|
|
37
|
+
Object.defineProperty(exports, "toEloCode", { enumerable: true, get: function () { return serialize_1.toEloCode; } });
|
|
38
|
+
var csv_1 = require("./csv");
|
|
39
|
+
Object.defineProperty(exports, "parseCSV", { enumerable: true, get: function () { return csv_1.parseCSV; } });
|
|
40
|
+
Object.defineProperty(exports, "toCSV", { enumerable: true, get: function () { return csv_1.toCSV; } });
|
|
41
|
+
var formats_1 = require("./formats");
|
|
42
|
+
Object.defineProperty(exports, "jsonAdapter", { enumerable: true, get: function () { return formats_1.jsonAdapter; } });
|
|
43
|
+
Object.defineProperty(exports, "csvAdapter", { enumerable: true, get: function () { return formats_1.csvAdapter; } });
|
|
44
|
+
Object.defineProperty(exports, "eloAdapter", { enumerable: true, get: function () { return formats_1.eloAdapter; } });
|
|
45
|
+
Object.defineProperty(exports, "defaultFormats", { enumerable: true, get: function () { return formats_1.defaultFormats; } });
|
|
46
|
+
Object.defineProperty(exports, "getFormat", { enumerable: true, get: function () { return formats_1.getFormat; } });
|
|
36
47
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,wCAAsB;AACtB,2CAAyB;AACzB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,yCAAiD;AAAxC,qGAAA,aAAa,OAAA;AAEtB,qDAA0F;AAAjF,iHAAA,mBAAmB,OAAA;AAAE,yHAAA,2BAA2B,OAAA;AAEzD,uCAA+C;AAAtC,mGAAA,YAAY,OAAA;AAErB,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AACnB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,wCAAsB;AACtB,2CAAyB;AACzB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,yCAAiD;AAAxC,qGAAA,aAAa,OAAA;AAEtB,qDAA0F;AAAjF,iHAAA,mBAAmB,OAAA;AAAE,yHAAA,2BAA2B,OAAA;AAEzD,uCAA+C;AAAtC,mGAAA,YAAY,OAAA;AAErB,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AACnB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA;AAEnB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,6BAAwC;AAA/B,+FAAA,QAAQ,OAAA;AAAE,4FAAA,KAAK,OAAA;AAExB,qCAMmB;AALjB,sGAAA,WAAW,OAAA;AACX,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,yGAAA,cAAc,OAAA;AACd,oGAAA,SAAS,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAanD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyN7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAWrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+F/C,CAAC"}
|
package/dist/src/runtime.js
CHANGED
|
@@ -19,6 +19,7 @@ exports.JS_HELPER_DEPS = {
|
|
|
19
19
|
kNeq: ['kEq'],
|
|
20
20
|
// Parser helpers depend on pOk/pFail
|
|
21
21
|
pAny: ['pOk'],
|
|
22
|
+
pNull: ['pOk', 'pFail'],
|
|
22
23
|
pString: ['pOk', 'pFail'],
|
|
23
24
|
pInt: ['pOk', 'pFail'],
|
|
24
25
|
pBool: ['pOk', 'pFail'],
|
|
@@ -176,11 +177,29 @@ exports.JS_HELPERS = {
|
|
|
176
177
|
if (v === null || v === undefined) return null;
|
|
177
178
|
if (typeof v === 'string') { try { return JSON.parse(v); } catch { return null; } }
|
|
178
179
|
return v;
|
|
180
|
+
}`,
|
|
181
|
+
kString: `function kString(v) {
|
|
182
|
+
if (v === null || v === undefined) return 'null';
|
|
183
|
+
if (typeof v === 'boolean') return v ? 'true' : 'false';
|
|
184
|
+
if (typeof v === 'number') return String(v);
|
|
185
|
+
if (typeof v === 'string') return "'" + v.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, "\\\\'") + "'";
|
|
186
|
+
if (Duration.isDuration(v)) return v.toISO();
|
|
187
|
+
if (DateTime.isDateTime(v)) {
|
|
188
|
+
const iso = v.toISO();
|
|
189
|
+
return iso.includes('T') && !iso.endsWith('T00:00:00.000') ? 'D' + iso.substring(0, 19) : 'D' + iso.substring(0, 10);
|
|
190
|
+
}
|
|
191
|
+
if (Array.isArray(v)) return '[' + v.map(kString).join(', ') + ']';
|
|
192
|
+
if (typeof v === 'object') return '{' + Object.keys(v).map(k => k + ': ' + kString(v[k])).join(', ') + '}';
|
|
193
|
+
return String(v);
|
|
179
194
|
}`,
|
|
180
195
|
// Parser helpers - return Result: { success: boolean, path: string, message: string, value: any, cause: Result[] }
|
|
181
196
|
pOk: `function pOk(v, p) { return { success: true, path: p, message: '', value: v, cause: [] }; }`,
|
|
182
197
|
pFail: `function pFail(p, m, c) { return { success: false, path: p, message: m || '', value: null, cause: c || [] }; }`,
|
|
183
198
|
pAny: `function pAny(v, p) { return pOk(v, p); }`,
|
|
199
|
+
pNull: `function pNull(v, p) {
|
|
200
|
+
if (v === null || v === undefined) return pOk(null, p);
|
|
201
|
+
return pFail(p, 'expected Null, got ' + typeof v);
|
|
202
|
+
}`,
|
|
184
203
|
pString: `function pString(v, p) {
|
|
185
204
|
if (typeof v === 'string') return pOk(v, p);
|
|
186
205
|
return pFail(p, 'expected String, got ' + (v === null ? 'Null' : typeof v));
|
|
@@ -233,6 +252,7 @@ exports.JS_HELPERS = {
|
|
|
233
252
|
*/
|
|
234
253
|
exports.RUBY_HELPER_DEPS = {
|
|
235
254
|
p_any: ['p_ok'],
|
|
255
|
+
p_null: ['p_ok', 'p_fail'],
|
|
236
256
|
p_string: ['p_ok', 'p_fail'],
|
|
237
257
|
p_int: ['p_ok', 'p_fail'],
|
|
238
258
|
p_bool: ['p_ok', 'p_fail'],
|
|
@@ -272,6 +292,10 @@ end`,
|
|
|
272
292
|
p_ok: `def p_ok(v, p) { success: true, path: p, message: '', value: v, cause: [] } end`,
|
|
273
293
|
p_fail: `def p_fail(p, m = nil, c = nil) { success: false, path: p, message: m || '', value: nil, cause: c || [] } end`,
|
|
274
294
|
p_any: `def p_any(v, p) p_ok(v, p) end`,
|
|
295
|
+
p_null: `def p_null(v, p)
|
|
296
|
+
return p_ok(nil, p) if v.nil?
|
|
297
|
+
p_fail(p, "expected Null, got #{v.class}")
|
|
298
|
+
end`,
|
|
275
299
|
p_string: `def p_string(v, p)
|
|
276
300
|
return p_ok(v, p) if v.is_a?(String)
|
|
277
301
|
p_fail(p, "expected String, got #{v.nil? ? 'Null' : v.class}")
|
|
@@ -321,6 +345,17 @@ end`,
|
|
|
321
345
|
}
|
|
322
346
|
err = find_error.call(r)
|
|
323
347
|
raise "#{err[:path] || '.'}: #{err[:message] || 'type error'}"
|
|
348
|
+
end`,
|
|
349
|
+
k_string: `def k_string(v)
|
|
350
|
+
return 'null' if v.nil?
|
|
351
|
+
return v ? 'true' : 'false' if v == true || v == false
|
|
352
|
+
return v.to_s if v.is_a?(Numeric)
|
|
353
|
+
return "'" + v.gsub("\\\\", "\\\\\\\\").gsub("'", "\\\\'") + "'" if v.is_a?(String)
|
|
354
|
+
return v.iso8601 if v.is_a?(ActiveSupport::Duration)
|
|
355
|
+
return v.strftime(v.to_time == v.to_date.to_time ? 'D%Y-%m-%d' : 'D%Y-%m-%dT%H:%M:%S') if v.is_a?(Date) || v.is_a?(DateTime) || v.is_a?(Time)
|
|
356
|
+
return '[' + v.map { |e| k_string(e) }.join(', ') + ']' if v.is_a?(Array)
|
|
357
|
+
return '{' + v.map { |k, val| k.to_s + ': ' + k_string(val) }.join(', ') + '}' if v.is_a?(Hash)
|
|
358
|
+
v.to_s
|
|
324
359
|
end`,
|
|
325
360
|
};
|
|
326
361
|
//# sourceMappingURL=runtime.js.map
|
package/dist/src/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize JavaScript runtime values back to Elo code representation.
|
|
3
|
+
*
|
|
4
|
+
* This is useful for displaying execution results in a readable Elo-native format.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert a JavaScript runtime value to its Elo code representation.
|
|
8
|
+
*
|
|
9
|
+
* @param value - The JavaScript value to serialize
|
|
10
|
+
* @returns A string containing the Elo code representation
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* toEloCode(null) // => "null"
|
|
14
|
+
* toEloCode(true) // => "true"
|
|
15
|
+
* toEloCode(42) // => "42"
|
|
16
|
+
* toEloCode(3.14) // => "3.14"
|
|
17
|
+
* toEloCode('hello') // => "'hello'"
|
|
18
|
+
* toEloCode([1, 2, 3]) // => "[1, 2, 3]"
|
|
19
|
+
* toEloCode({name: 'Alice'}) // => "{name: 'Alice'}"
|
|
20
|
+
* // DateTime objects render as D-prefixed ISO strings
|
|
21
|
+
* // Duration objects render as ISO duration strings
|
|
22
|
+
*/
|
|
23
|
+
export declare function toEloCode(value: unknown): string;
|
|
24
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/serialize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2EH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyEhD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Serialize JavaScript runtime values back to Elo code representation.
|
|
4
|
+
*
|
|
5
|
+
* This is useful for displaying execution results in a readable Elo-native format.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.toEloCode = toEloCode;
|
|
9
|
+
/**
|
|
10
|
+
* Type guard for Luxon DateTime
|
|
11
|
+
*/
|
|
12
|
+
function isDateTime(value) {
|
|
13
|
+
if (typeof value !== 'object' || value === null)
|
|
14
|
+
return false;
|
|
15
|
+
const obj = value;
|
|
16
|
+
return typeof obj.toISO === 'function' &&
|
|
17
|
+
typeof obj.toISODate === 'function' &&
|
|
18
|
+
typeof obj.isValid === 'boolean';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Type guard for Luxon Duration
|
|
22
|
+
*/
|
|
23
|
+
function isDuration(value) {
|
|
24
|
+
if (typeof value !== 'object' || value === null)
|
|
25
|
+
return false;
|
|
26
|
+
const obj = value;
|
|
27
|
+
// Duration has toISO but not toISODate
|
|
28
|
+
return typeof obj.toISO === 'function' &&
|
|
29
|
+
typeof obj.toISODate !== 'function' &&
|
|
30
|
+
typeof obj.isValid === 'boolean';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if a DateTime represents a date-only value (midnight with no offset issues).
|
|
34
|
+
* Date literals in Elo are rendered as D2024-01-15, while datetimes include time.
|
|
35
|
+
*/
|
|
36
|
+
function isDateOnly(dt) {
|
|
37
|
+
return dt.hour === 0 &&
|
|
38
|
+
dt.minute === 0 &&
|
|
39
|
+
dt.second === 0 &&
|
|
40
|
+
dt.millisecond === 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a string is a valid Elo identifier (can be used as object key without quotes).
|
|
44
|
+
* Valid identifiers start with a letter or underscore, followed by letters, digits, or underscores.
|
|
45
|
+
*/
|
|
46
|
+
function isValidIdentifier(s) {
|
|
47
|
+
return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Escape a string for use in Elo single-quoted string literal.
|
|
51
|
+
* Only single quotes and backslashes need escaping.
|
|
52
|
+
*/
|
|
53
|
+
function escapeString(s) {
|
|
54
|
+
return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Convert a JavaScript runtime value to its Elo code representation.
|
|
58
|
+
*
|
|
59
|
+
* @param value - The JavaScript value to serialize
|
|
60
|
+
* @returns A string containing the Elo code representation
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* toEloCode(null) // => "null"
|
|
64
|
+
* toEloCode(true) // => "true"
|
|
65
|
+
* toEloCode(42) // => "42"
|
|
66
|
+
* toEloCode(3.14) // => "3.14"
|
|
67
|
+
* toEloCode('hello') // => "'hello'"
|
|
68
|
+
* toEloCode([1, 2, 3]) // => "[1, 2, 3]"
|
|
69
|
+
* toEloCode({name: 'Alice'}) // => "{name: 'Alice'}"
|
|
70
|
+
* // DateTime objects render as D-prefixed ISO strings
|
|
71
|
+
* // Duration objects render as ISO duration strings
|
|
72
|
+
*/
|
|
73
|
+
function toEloCode(value) {
|
|
74
|
+
// Handle null and undefined
|
|
75
|
+
if (value === null || value === undefined) {
|
|
76
|
+
return 'null';
|
|
77
|
+
}
|
|
78
|
+
// Handle booleans
|
|
79
|
+
if (typeof value === 'boolean') {
|
|
80
|
+
return value ? 'true' : 'false';
|
|
81
|
+
}
|
|
82
|
+
// Handle numbers
|
|
83
|
+
if (typeof value === 'number') {
|
|
84
|
+
if (!Number.isFinite(value)) {
|
|
85
|
+
// NaN, Infinity, -Infinity don't have Elo representations
|
|
86
|
+
return 'null';
|
|
87
|
+
}
|
|
88
|
+
return String(value);
|
|
89
|
+
}
|
|
90
|
+
// Handle strings
|
|
91
|
+
if (typeof value === 'string') {
|
|
92
|
+
return `'${escapeString(value)}'`;
|
|
93
|
+
}
|
|
94
|
+
// Handle Luxon Duration (check before DateTime since both have toISO)
|
|
95
|
+
if (isDuration(value)) {
|
|
96
|
+
const iso = value.toISO();
|
|
97
|
+
if (iso === null || !value.isValid) {
|
|
98
|
+
return 'null';
|
|
99
|
+
}
|
|
100
|
+
return iso;
|
|
101
|
+
}
|
|
102
|
+
// Handle Luxon DateTime
|
|
103
|
+
if (isDateTime(value)) {
|
|
104
|
+
if (!value.isValid) {
|
|
105
|
+
return 'null';
|
|
106
|
+
}
|
|
107
|
+
if (isDateOnly(value)) {
|
|
108
|
+
// Render as date literal: D2024-01-15
|
|
109
|
+
const dateStr = value.toISODate();
|
|
110
|
+
return dateStr ? `D${dateStr}` : 'null';
|
|
111
|
+
}
|
|
112
|
+
// Render as datetime literal: D2024-01-15T10:30:00Z
|
|
113
|
+
const isoStr = value.toISO();
|
|
114
|
+
return isoStr ? `D${isoStr}` : 'null';
|
|
115
|
+
}
|
|
116
|
+
// Handle arrays
|
|
117
|
+
if (Array.isArray(value)) {
|
|
118
|
+
const elements = value.map(elem => toEloCode(elem));
|
|
119
|
+
return `[${elements.join(', ')}]`;
|
|
120
|
+
}
|
|
121
|
+
// Handle functions (no direct Elo representation)
|
|
122
|
+
if (typeof value === 'function') {
|
|
123
|
+
return '<function>';
|
|
124
|
+
}
|
|
125
|
+
// Handle plain objects
|
|
126
|
+
if (typeof value === 'object') {
|
|
127
|
+
const entries = Object.entries(value);
|
|
128
|
+
const props = entries.map(([key, val]) => {
|
|
129
|
+
// Use identifier syntax if valid, otherwise quote the key
|
|
130
|
+
const keyStr = isValidIdentifier(key) ? key : `'${escapeString(key)}'`;
|
|
131
|
+
return `${keyStr}: ${toEloCode(val)}`;
|
|
132
|
+
});
|
|
133
|
+
return `{${props.join(', ')}}`;
|
|
134
|
+
}
|
|
135
|
+
// Fallback for unknown types
|
|
136
|
+
return 'null';
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/serialize.ts"],"names":[],"mappings":"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"}
|
package/dist/src/transform.js
CHANGED
|
@@ -96,13 +96,36 @@ function transformWithDepth(expr, env, defining, depth, maxDepth, allowUndefined
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Built-in type selectors that can be used in type expressions
|
|
101
|
+
*/
|
|
102
|
+
const BUILTIN_TYPE_SELECTORS = new Set([
|
|
103
|
+
'Any',
|
|
104
|
+
'Null',
|
|
105
|
+
'String',
|
|
106
|
+
'Int',
|
|
107
|
+
'Float',
|
|
108
|
+
'Bool',
|
|
109
|
+
'Boolean',
|
|
110
|
+
'Datetime',
|
|
111
|
+
]);
|
|
99
112
|
/**
|
|
100
113
|
* Transform an AST type expression to IR type expression
|
|
101
114
|
*/
|
|
102
115
|
function transformTypeExprWithContext(typeExpr, env, defining, depth, maxDepth, allowUndefinedVariables) {
|
|
103
116
|
switch (typeExpr.kind) {
|
|
104
|
-
case 'type_ref':
|
|
105
|
-
|
|
117
|
+
case 'type_ref': {
|
|
118
|
+
const name = typeExpr.name;
|
|
119
|
+
// Validate that the type reference is either a built-in type or a user-defined type in scope
|
|
120
|
+
if (!BUILTIN_TYPE_SELECTORS.has(name)) {
|
|
121
|
+
// Check if it's a user-defined type (uppercase identifier in environment as function type)
|
|
122
|
+
const envType = env.get(name);
|
|
123
|
+
if (!envType || envType.kind !== 'fn') {
|
|
124
|
+
throw new Error(`Unknown type selector: '${name}'`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return (0, ir_1.irTypeRef)(name);
|
|
128
|
+
}
|
|
106
129
|
case 'type_schema': {
|
|
107
130
|
const props = typeExpr.properties.map(prop => ({
|
|
108
131
|
key: prop.key,
|