@enspirit/elo 0.9.4 → 0.9.7

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 (52) hide show
  1. package/README.md +3 -1
  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 +14 -2
  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 +23 -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 +36 -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 +41 -13
  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 +39 -13
  22. package/dist/src/compilers/ruby.js.map +1 -1
  23. package/dist/src/compilers/sql.js +12 -5
  24. package/dist/src/compilers/sql.js.map +1 -1
  25. package/dist/src/eloc.js +10 -4
  26. package/dist/src/eloc.js.map +1 -1
  27. package/dist/src/ir.d.ts +23 -4
  28. package/dist/src/ir.d.ts.map +1 -1
  29. package/dist/src/ir.js +12 -2
  30. package/dist/src/ir.js.map +1 -1
  31. package/dist/src/parser.d.ts +52 -1
  32. package/dist/src/parser.d.ts.map +1 -1
  33. package/dist/src/parser.js +253 -8
  34. package/dist/src/parser.js.map +1 -1
  35. package/dist/src/runtime.d.ts.map +1 -1
  36. package/dist/src/runtime.js +12 -0
  37. package/dist/src/runtime.js.map +1 -1
  38. package/dist/src/transform.d.ts.map +1 -1
  39. package/dist/src/transform.js +15 -3
  40. package/dist/src/transform.js.map +1 -1
  41. package/dist/src/typedefs.d.ts.map +1 -1
  42. package/dist/src/typedefs.js +11 -0
  43. package/dist/src/typedefs.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/src/cli.d.ts +0 -3
  46. package/dist/src/cli.d.ts.map +0 -1
  47. package/dist/src/cli.js +0 -225
  48. package/dist/src/cli.js.map +0 -1
  49. package/dist/src/eval.d.ts +0 -3
  50. package/dist/src/eval.d.ts.map +0 -1
  51. package/dist/src/eval.js +0 -196
  52. package/dist/src/eval.js.map +0 -1
package/dist/src/eval.js DELETED
@@ -1,196 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const fs_1 = require("fs");
8
- const parser_1 = require("./parser");
9
- const javascript_1 = require("./compilers/javascript");
10
- const dayjs_1 = __importDefault(require("dayjs"));
11
- const duration_1 = __importDefault(require("dayjs/plugin/duration"));
12
- const isoWeek_1 = __importDefault(require("dayjs/plugin/isoWeek"));
13
- const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
14
- dayjs_1.default.extend(duration_1.default);
15
- dayjs_1.default.extend(isoWeek_1.default);
16
- dayjs_1.default.extend(quarterOfYear_1.default);
17
- function parseArgs(args) {
18
- const options = {};
19
- for (let i = 0; i < args.length; i++) {
20
- const arg = args[i];
21
- switch (arg) {
22
- case '-e':
23
- case '--expression':
24
- options.expression = args[++i];
25
- break;
26
- case '-d':
27
- case '--data':
28
- options.inputData = args[++i];
29
- break;
30
- case '--stdin':
31
- options.stdinData = true;
32
- break;
33
- case '-h':
34
- case '--help':
35
- printHelp();
36
- process.exit(0);
37
- break;
38
- case '-':
39
- // Read expression from stdin
40
- options.inputFile = '-';
41
- break;
42
- default:
43
- // If it doesn't start with -, treat it as input file
44
- if (!arg.startsWith('-') && !options.inputFile && !options.expression) {
45
- options.inputFile = arg;
46
- }
47
- else if (!arg.startsWith('-')) {
48
- console.error(`Unknown argument: ${arg}`);
49
- printHelp();
50
- process.exit(1);
51
- }
52
- }
53
- }
54
- return options;
55
- }
56
- function printHelp() {
57
- console.log(`
58
- Elo Evaluator (elo) - Evaluate Elo expressions
59
-
60
- Usage:
61
- elo [options] [input-file]
62
-
63
- Options:
64
- -e, --expression <expr> Expression to evaluate (like ruby -e)
65
- -d, --data <json> JSON input data for _ variable (or @file to read from file)
66
- --stdin Read input data as JSON from stdin
67
- -h, --help Show this help message
68
-
69
- Examples:
70
- # Evaluate a simple expression
71
- elo -e "2 + 3 * 4"
72
-
73
- # Evaluate with input data
74
- elo -e "_.x + _.y" -d '{"x": 1, "y": 2}'
75
-
76
- # Evaluate with input data from file
77
- elo -e "_.name" -d @data.json
78
-
79
- # Evaluate from .elo file
80
- elo expressions.elo
81
-
82
- # Pipe data through stdin
83
- echo '{"x": 10}' | elo -e "_.x * 2" --stdin
84
-
85
- # Read expression from stdin
86
- echo "2 + 3" | elo -
87
- `);
88
- }
89
- /**
90
- * Parse input data from CLI option (JSON string or @file path)
91
- */
92
- function parseInputData(inputData) {
93
- let jsonString = inputData;
94
- // If starts with @, read from file
95
- if (inputData.startsWith('@')) {
96
- const filePath = inputData.slice(1);
97
- try {
98
- jsonString = (0, fs_1.readFileSync)(filePath, 'utf-8');
99
- }
100
- catch (error) {
101
- console.error(`Error reading input file ${filePath}: ${error}`);
102
- process.exit(1);
103
- }
104
- }
105
- try {
106
- return JSON.parse(jsonString);
107
- }
108
- catch (error) {
109
- console.error(`Error parsing input JSON: ${error}`);
110
- process.exit(1);
111
- }
112
- }
113
- /**
114
- * Compile and evaluate a single Elo expression
115
- */
116
- function evaluate(source, inputValue) {
117
- const ast = (0, parser_1.parse)(source);
118
- const result = (0, javascript_1.compileToJavaScriptWithMeta)(ast);
119
- // Create function with dayjs in scope
120
- // The compiled code is always a function that takes _ as input
121
- const execFn = new Function('dayjs', `return ${result.code}`);
122
- const fn = execFn(dayjs_1.default);
123
- return fn(inputValue);
124
- }
125
- function main() {
126
- const args = process.argv.slice(2);
127
- if (args.length === 0) {
128
- printHelp();
129
- process.exit(0);
130
- }
131
- const options = parseArgs(args);
132
- // Get the source expression(s)
133
- let sources;
134
- if (options.expression) {
135
- sources = [options.expression];
136
- }
137
- else if (options.inputFile) {
138
- try {
139
- // Use file descriptor 0 for stdin when input is '-'
140
- const content = options.inputFile === '-'
141
- ? (0, fs_1.readFileSync)(0, 'utf-8')
142
- : (0, fs_1.readFileSync)(options.inputFile, 'utf-8');
143
- // Split into lines - keep all lines but mark empty/comment lines as null
144
- sources = content.split('\n').map(line => {
145
- const trimmed = line.trim();
146
- return (trimmed === '' || trimmed.startsWith('#')) ? '' : line;
147
- });
148
- }
149
- catch (error) {
150
- console.error(`Error reading ${options.inputFile === '-' ? 'stdin' : `file ${options.inputFile}`}: ${error}`);
151
- process.exit(1);
152
- }
153
- }
154
- else {
155
- console.error('Error: Must provide either -e <expression>, an input file, or - for stdin');
156
- printHelp();
157
- process.exit(1);
158
- }
159
- // Get input data
160
- let inputValue = null;
161
- if (options.stdinData) {
162
- try {
163
- const stdinContent = (0, fs_1.readFileSync)(0, 'utf-8');
164
- inputValue = JSON.parse(stdinContent);
165
- }
166
- catch (error) {
167
- console.error(`Error reading/parsing stdin: ${error}`);
168
- process.exit(1);
169
- }
170
- }
171
- else if (options.inputData) {
172
- inputValue = parseInputData(options.inputData);
173
- }
174
- // Evaluate each expression
175
- const outputs = [];
176
- for (let i = 0; i < sources.length; i++) {
177
- const source = sources[i];
178
- const trimmed = source.trim();
179
- // Skip empty lines and comments
180
- if (trimmed === '' || trimmed.startsWith('#')) {
181
- continue;
182
- }
183
- try {
184
- const result = evaluate(trimmed, inputValue);
185
- outputs.push(JSON.stringify(result));
186
- }
187
- catch (error) {
188
- console.error(`Error on line ${i + 1}: ${error}`);
189
- process.exit(1);
190
- }
191
- }
192
- // Output results
193
- console.log(outputs.join('\n'));
194
- }
195
- main();
196
- //# sourceMappingURL=eval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"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"}