@rcrsr/rill-cli 0.6.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.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/dist/check/config.d.ts +20 -0
  3. package/dist/check/config.d.ts.map +1 -0
  4. package/dist/check/config.js +151 -0
  5. package/dist/check/config.js.map +1 -0
  6. package/dist/check/fixer.d.ts +39 -0
  7. package/dist/check/fixer.d.ts.map +1 -0
  8. package/dist/check/fixer.js +119 -0
  9. package/dist/check/fixer.js.map +1 -0
  10. package/dist/check/index.d.ts +10 -0
  11. package/dist/check/index.d.ts.map +1 -0
  12. package/dist/check/index.js +21 -0
  13. package/dist/check/index.js.map +1 -0
  14. package/dist/check/rules/anti-patterns.d.ts +65 -0
  15. package/dist/check/rules/anti-patterns.d.ts.map +1 -0
  16. package/dist/check/rules/anti-patterns.js +481 -0
  17. package/dist/check/rules/anti-patterns.js.map +1 -0
  18. package/dist/check/rules/closures.d.ts +66 -0
  19. package/dist/check/rules/closures.d.ts.map +1 -0
  20. package/dist/check/rules/closures.js +370 -0
  21. package/dist/check/rules/closures.js.map +1 -0
  22. package/dist/check/rules/collections.d.ts +90 -0
  23. package/dist/check/rules/collections.d.ts.map +1 -0
  24. package/dist/check/rules/collections.js +373 -0
  25. package/dist/check/rules/collections.js.map +1 -0
  26. package/dist/check/rules/conditionals.d.ts +41 -0
  27. package/dist/check/rules/conditionals.d.ts.map +1 -0
  28. package/dist/check/rules/conditionals.js +134 -0
  29. package/dist/check/rules/conditionals.js.map +1 -0
  30. package/dist/check/rules/flow.d.ts +46 -0
  31. package/dist/check/rules/flow.d.ts.map +1 -0
  32. package/dist/check/rules/flow.js +206 -0
  33. package/dist/check/rules/flow.js.map +1 -0
  34. package/dist/check/rules/formatting.d.ts +143 -0
  35. package/dist/check/rules/formatting.d.ts.map +1 -0
  36. package/dist/check/rules/formatting.js +656 -0
  37. package/dist/check/rules/formatting.js.map +1 -0
  38. package/dist/check/rules/helpers.d.ts +26 -0
  39. package/dist/check/rules/helpers.d.ts.map +1 -0
  40. package/dist/check/rules/helpers.js +66 -0
  41. package/dist/check/rules/helpers.js.map +1 -0
  42. package/dist/check/rules/index.d.ts +21 -0
  43. package/dist/check/rules/index.d.ts.map +1 -0
  44. package/dist/check/rules/index.js +78 -0
  45. package/dist/check/rules/index.js.map +1 -0
  46. package/dist/check/rules/loops.d.ts +77 -0
  47. package/dist/check/rules/loops.d.ts.map +1 -0
  48. package/dist/check/rules/loops.js +310 -0
  49. package/dist/check/rules/loops.js.map +1 -0
  50. package/dist/check/rules/naming.d.ts +21 -0
  51. package/dist/check/rules/naming.d.ts.map +1 -0
  52. package/dist/check/rules/naming.js +174 -0
  53. package/dist/check/rules/naming.js.map +1 -0
  54. package/dist/check/rules/strings.d.ts +28 -0
  55. package/dist/check/rules/strings.d.ts.map +1 -0
  56. package/dist/check/rules/strings.js +79 -0
  57. package/dist/check/rules/strings.js.map +1 -0
  58. package/dist/check/rules/types.d.ts +41 -0
  59. package/dist/check/rules/types.d.ts.map +1 -0
  60. package/dist/check/rules/types.js +167 -0
  61. package/dist/check/rules/types.js.map +1 -0
  62. package/dist/check/types.d.ts +112 -0
  63. package/dist/check/types.d.ts.map +1 -0
  64. package/dist/check/types.js +6 -0
  65. package/dist/check/types.js.map +1 -0
  66. package/dist/check/validator.d.ts +18 -0
  67. package/dist/check/validator.d.ts.map +1 -0
  68. package/dist/check/validator.js +110 -0
  69. package/dist/check/validator.js.map +1 -0
  70. package/dist/check/visitor.d.ts +33 -0
  71. package/dist/check/visitor.d.ts.map +1 -0
  72. package/dist/check/visitor.js +259 -0
  73. package/dist/check/visitor.js.map +1 -0
  74. package/dist/cli-check.d.ts +43 -0
  75. package/dist/cli-check.d.ts.map +1 -0
  76. package/dist/cli-check.js +366 -0
  77. package/dist/cli-check.js.map +1 -0
  78. package/dist/cli-error-enrichment.d.ts +73 -0
  79. package/dist/cli-error-enrichment.d.ts.map +1 -0
  80. package/dist/cli-error-enrichment.js +205 -0
  81. package/dist/cli-error-enrichment.js.map +1 -0
  82. package/dist/cli-error-formatter.d.ts +45 -0
  83. package/dist/cli-error-formatter.d.ts.map +1 -0
  84. package/dist/cli-error-formatter.js +218 -0
  85. package/dist/cli-error-formatter.js.map +1 -0
  86. package/dist/cli-eval.d.ts +15 -0
  87. package/dist/cli-eval.d.ts.map +1 -0
  88. package/dist/cli-eval.js +116 -0
  89. package/dist/cli-eval.js.map +1 -0
  90. package/dist/cli-exec.d.ts +58 -0
  91. package/dist/cli-exec.d.ts.map +1 -0
  92. package/dist/cli-exec.js +326 -0
  93. package/dist/cli-exec.js.map +1 -0
  94. package/dist/cli-explain.d.ts +24 -0
  95. package/dist/cli-explain.d.ts.map +1 -0
  96. package/dist/cli-explain.js +68 -0
  97. package/dist/cli-explain.js.map +1 -0
  98. package/dist/cli-lsp-diagnostic.d.ts +35 -0
  99. package/dist/cli-lsp-diagnostic.d.ts.map +1 -0
  100. package/dist/cli-lsp-diagnostic.js +98 -0
  101. package/dist/cli-lsp-diagnostic.js.map +1 -0
  102. package/dist/cli-module-loader.d.ts +19 -0
  103. package/dist/cli-module-loader.d.ts.map +1 -0
  104. package/dist/cli-module-loader.js +83 -0
  105. package/dist/cli-module-loader.js.map +1 -0
  106. package/dist/cli-shared.d.ts +62 -0
  107. package/dist/cli-shared.d.ts.map +1 -0
  108. package/dist/cli-shared.js +158 -0
  109. package/dist/cli-shared.js.map +1 -0
  110. package/dist/cli.d.ts +13 -0
  111. package/dist/cli.d.ts.map +1 -0
  112. package/dist/cli.js +62 -0
  113. package/dist/cli.js.map +1 -0
  114. package/dist/test-internal-import.d.ts +2 -0
  115. package/dist/test-internal-import.d.ts.map +1 -0
  116. package/dist/test-internal-import.js +7 -0
  117. package/dist/test-internal-import.js.map +1 -0
  118. package/package.json +24 -0
  119. package/src/check/config.ts +202 -0
  120. package/src/check/fixer.ts +174 -0
  121. package/src/check/index.ts +39 -0
  122. package/src/check/rules/anti-patterns.ts +585 -0
  123. package/src/check/rules/closures.ts +445 -0
  124. package/src/check/rules/collections.ts +437 -0
  125. package/src/check/rules/conditionals.ts +155 -0
  126. package/src/check/rules/flow.ts +262 -0
  127. package/src/check/rules/formatting.ts +811 -0
  128. package/src/check/rules/helpers.ts +89 -0
  129. package/src/check/rules/index.ts +140 -0
  130. package/src/check/rules/loops.ts +372 -0
  131. package/src/check/rules/naming.ts +242 -0
  132. package/src/check/rules/strings.ts +104 -0
  133. package/src/check/rules/types.ts +214 -0
  134. package/src/check/types.ts +163 -0
  135. package/src/check/validator.ts +136 -0
  136. package/src/check/visitor.ts +338 -0
  137. package/src/cli-check.ts +456 -0
  138. package/src/cli-error-enrichment.ts +274 -0
  139. package/src/cli-error-formatter.ts +313 -0
  140. package/src/cli-eval.ts +145 -0
  141. package/src/cli-exec.ts +408 -0
  142. package/src/cli-explain.ts +76 -0
  143. package/src/cli-lsp-diagnostic.ts +132 -0
  144. package/src/cli-module-loader.ts +101 -0
  145. package/src/cli-shared.ts +187 -0
  146. package/tests/check/cli-check.test.ts +189 -0
  147. package/tests/check/config.test.ts +350 -0
  148. package/tests/check/fixer.test.ts +373 -0
  149. package/tests/check/format-diagnostics.test.ts +327 -0
  150. package/tests/check/rules/anti-patterns.test.ts +467 -0
  151. package/tests/check/rules/closures.test.ts +192 -0
  152. package/tests/check/rules/collections.test.ts +380 -0
  153. package/tests/check/rules/conditionals.test.ts +185 -0
  154. package/tests/check/rules/flow.test.ts +250 -0
  155. package/tests/check/rules/formatting.test.ts +755 -0
  156. package/tests/check/rules/loops.test.ts +334 -0
  157. package/tests/check/rules/naming.test.ts +336 -0
  158. package/tests/check/rules/strings.test.ts +129 -0
  159. package/tests/check/rules/types.test.ts +257 -0
  160. package/tests/check/validator.test.ts +444 -0
  161. package/tests/check/visitor.test.ts +171 -0
  162. package/tests/cli/check.test.ts +801 -0
  163. package/tests/cli/error-enrichment.test.ts +510 -0
  164. package/tests/cli/error-formatter.test.ts +631 -0
  165. package/tests/cli/eval.test.ts +85 -0
  166. package/tests/cli/exec.test.ts +537 -0
  167. package/tests/cli-explain.test.ts +249 -0
  168. package/tests/cli-lsp-diagnostic.test.ts +202 -0
  169. package/tests/cli-shared.test.ts +439 -0
  170. package/tsconfig.json +9 -0
  171. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CLI Error Formatter
3
+ * Format enriched errors for human-readable, JSON, or compact output
4
+ */
5
+ import type { SourceSpan, CallFrame } from '@rcrsr/rill';
6
+ import type { EnrichedError } from './cli-error-enrichment.js';
7
+ export type { CallFrame, EnrichedError };
8
+ /**
9
+ * Format options for error output.
10
+ */
11
+ export interface FormatOptions {
12
+ readonly format: 'human' | 'json' | 'compact';
13
+ readonly verbose: boolean;
14
+ readonly includeCallStack: boolean;
15
+ readonly maxCallStackDepth: number;
16
+ }
17
+ /**
18
+ * Format enriched error for output.
19
+ *
20
+ * Constraints:
21
+ * - Human format: multi-line with snippet and caret underline
22
+ * - JSON format: LSP Diagnostic compatible
23
+ * - Compact format: single line for CI output
24
+ *
25
+ * @param error - Enriched error with context
26
+ * @param options - Format options
27
+ * @returns Formatted error string
28
+ * @throws {TypeError} Unknown format
29
+ */
30
+ export declare function formatError(error: EnrichedError, options: FormatOptions): string;
31
+ /**
32
+ * Render caret underline for error span.
33
+ *
34
+ * Constraints:
35
+ * - Single-char: single ^
36
+ * - Multi-char same line: ^^^^^ (length = span width)
37
+ * - Multi-line: ^^^^^ (continues) on first line only
38
+ *
39
+ * @param span - Error span
40
+ * @param lineContent - Content of the line
41
+ * @returns Caret underline string
42
+ * @throws {RangeError} Invalid span (start after end)
43
+ */
44
+ export declare function renderCaretUnderline(span: SourceSpan, lineContent: string): string;
45
+ //# sourceMappingURL=cli-error-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error-formatter.d.ts","sourceRoot":"","sources":["../src/cli-error-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM/D,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,GACrB,MAAM,CAmBR;AA8MD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CA2BR"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * CLI Error Formatter
3
+ * Format enriched errors for human-readable, JSON, or compact output
4
+ */
5
+ // ============================================================
6
+ // ERROR FORMATTING
7
+ // ============================================================
8
+ /**
9
+ * Format enriched error for output.
10
+ *
11
+ * Constraints:
12
+ * - Human format: multi-line with snippet and caret underline
13
+ * - JSON format: LSP Diagnostic compatible
14
+ * - Compact format: single line for CI output
15
+ *
16
+ * @param error - Enriched error with context
17
+ * @param options - Format options
18
+ * @returns Formatted error string
19
+ * @throws {TypeError} Unknown format
20
+ */
21
+ export function formatError(error, options) {
22
+ // EC-5: Unknown format throws TypeError
23
+ if (options.format !== 'human' &&
24
+ options.format !== 'json' &&
25
+ options.format !== 'compact') {
26
+ throw new TypeError(`Unknown format: ${options.format}`);
27
+ }
28
+ if (options.format === 'json') {
29
+ return formatErrorJson(error, options);
30
+ }
31
+ if (options.format === 'compact') {
32
+ return formatErrorCompact(error);
33
+ }
34
+ return formatErrorHuman(error, options);
35
+ }
36
+ /**
37
+ * Format error in human-readable format.
38
+ *
39
+ * Output format:
40
+ * ```
41
+ * error[RILL-R005]: Variable foo is not defined
42
+ * --> script.rill:5:10
43
+ * |
44
+ * 3 | "start" => $begin
45
+ * 4 | $begin -> .upper => $upper
46
+ * 5 | $foo -> .len
47
+ * | ^^^^ undefined variable
48
+ * |
49
+ * = help: Did you mean `$begin`?
50
+ * ```
51
+ */
52
+ function formatErrorHuman(error, options) {
53
+ const lines = [];
54
+ // Header: error[RILL-XXXX]: message
55
+ lines.push(`error[${error.errorId}]: ${error.message}`);
56
+ // Location: --> script.rill:5:10
57
+ if (error.span) {
58
+ const location = `${error.span.start.line}:${error.span.start.column}`;
59
+ lines.push(` --> ${location}`);
60
+ }
61
+ // Source snippet with caret underline
62
+ if (error.sourceSnippet && error.sourceSnippet.lines.length > 0) {
63
+ lines.push(' |');
64
+ // Calculate padding width for line numbers
65
+ const maxLineNumber = Math.max(...error.sourceSnippet.lines.map((l) => l.lineNumber));
66
+ const lineNumberWidth = String(maxLineNumber).length;
67
+ for (const line of error.sourceSnippet.lines) {
68
+ const lineNumStr = String(line.lineNumber).padStart(lineNumberWidth, ' ');
69
+ lines.push(` ${lineNumStr} | ${line.content}`);
70
+ // Add caret underline for error lines
71
+ if (line.isErrorLine && error.span) {
72
+ const caret = renderCaretUnderline(error.span, line.content);
73
+ const padding = ' '.repeat(lineNumberWidth);
74
+ lines.push(` ${padding} | ${caret}`);
75
+ }
76
+ }
77
+ lines.push(' |');
78
+ }
79
+ // Suggestions: = help: Did you mean `$begin`?
80
+ if (error.suggestions && error.suggestions.length > 0) {
81
+ for (const suggestion of error.suggestions) {
82
+ lines.push(` = help: ${suggestion}`);
83
+ }
84
+ }
85
+ // Help URL
86
+ if (options.verbose && error.helpUrl) {
87
+ lines.push(` = see: ${error.helpUrl}`);
88
+ }
89
+ // Call stack
90
+ if (options.includeCallStack &&
91
+ error.callStack &&
92
+ error.callStack.length > 0) {
93
+ lines.push('');
94
+ lines.push('Call stack:');
95
+ const depth = Math.min(error.callStack.length, options.maxCallStackDepth);
96
+ for (let i = 0; i < depth; i++) {
97
+ const frame = error.callStack[i];
98
+ const location = `${frame.location.start.line}:${frame.location.start.column}`;
99
+ const name = frame.functionName ?? '<anonymous>';
100
+ const context = frame.context ? ` (${frame.context})` : '';
101
+ lines.push(` ${i + 1}. ${name}${context} at ${location}`);
102
+ }
103
+ if (error.callStack.length > depth) {
104
+ lines.push(` ... ${error.callStack.length - depth} more frames`);
105
+ }
106
+ }
107
+ return lines.join('\n');
108
+ }
109
+ /**
110
+ * Format error in JSON format (LSP Diagnostic compatible).
111
+ */
112
+ function formatErrorJson(error, options) {
113
+ const diagnostic = {
114
+ errorId: error.errorId,
115
+ severity: 1, // Error severity in LSP (1 = Error, 2 = Warning, 3 = Information, 4 = Hint)
116
+ message: error.message,
117
+ source: 'rill',
118
+ code: error.errorId,
119
+ };
120
+ if (error.span) {
121
+ diagnostic.range = {
122
+ start: {
123
+ line: error.span.start.line - 1, // LSP uses 0-based line numbers
124
+ character: error.span.start.column,
125
+ },
126
+ end: {
127
+ line: error.span.end.line - 1, // LSP uses 0-based line numbers
128
+ character: error.span.end.column,
129
+ },
130
+ };
131
+ }
132
+ if (error.suggestions && error.suggestions.length > 0) {
133
+ diagnostic.suggestions = error.suggestions;
134
+ }
135
+ if (options.includeCallStack &&
136
+ error.callStack &&
137
+ error.callStack.length > 0) {
138
+ const depth = Math.min(error.callStack.length, options.maxCallStackDepth);
139
+ diagnostic.callStack = error.callStack.slice(0, depth).map((frame) => {
140
+ const callFrame = {
141
+ location: {
142
+ start: {
143
+ line: frame.location.start.line - 1,
144
+ character: frame.location.start.column,
145
+ },
146
+ end: {
147
+ line: frame.location.end.line - 1,
148
+ character: frame.location.end.column,
149
+ },
150
+ },
151
+ };
152
+ if (frame.functionName !== undefined) {
153
+ callFrame.functionName = frame.functionName;
154
+ }
155
+ if (frame.context !== undefined) {
156
+ callFrame.context = frame.context;
157
+ }
158
+ return callFrame;
159
+ });
160
+ }
161
+ if (options.verbose && error.helpUrl) {
162
+ diagnostic.helpUrl = error.helpUrl;
163
+ }
164
+ return JSON.stringify(diagnostic, null, 2);
165
+ }
166
+ /**
167
+ * Format error in compact format (single line for CI).
168
+ */
169
+ function formatErrorCompact(error) {
170
+ const parts = [`[${error.errorId}]`, error.message];
171
+ if (error.span) {
172
+ parts.push(`at ${error.span.start.line}:${error.span.start.column}`);
173
+ }
174
+ if (error.suggestions && error.suggestions.length > 0) {
175
+ parts.push(`(hint: ${error.suggestions[0]})`);
176
+ }
177
+ return parts.join(' ');
178
+ }
179
+ // ============================================================
180
+ // CARET UNDERLINE
181
+ // ============================================================
182
+ /**
183
+ * Render caret underline for error span.
184
+ *
185
+ * Constraints:
186
+ * - Single-char: single ^
187
+ * - Multi-char same line: ^^^^^ (length = span width)
188
+ * - Multi-line: ^^^^^ (continues) on first line only
189
+ *
190
+ * @param span - Error span
191
+ * @param lineContent - Content of the line
192
+ * @returns Caret underline string
193
+ * @throws {RangeError} Invalid span (start after end)
194
+ */
195
+ export function renderCaretUnderline(span, lineContent) {
196
+ // EC-8: Invalid span throws RangeError
197
+ if (span.start.line > span.end.line ||
198
+ (span.start.line === span.end.line && span.start.column > span.end.column)) {
199
+ throw new RangeError('Span start must precede end');
200
+ }
201
+ // Calculate the width of the underline
202
+ const startColumn = span.start.column;
203
+ let endColumn;
204
+ if (span.start.line === span.end.line) {
205
+ // Single-line span: underline from start to end
206
+ endColumn = span.end.column;
207
+ }
208
+ else {
209
+ // Multi-line span: underline to end of first line
210
+ endColumn = lineContent.length;
211
+ }
212
+ // Build underline: spaces before, carets for the span
213
+ const padding = ' '.repeat(startColumn);
214
+ const caretCount = Math.max(1, endColumn - startColumn);
215
+ const carets = '^'.repeat(caretCount);
216
+ return padding + carets;
217
+ }
218
+ //# sourceMappingURL=cli-error-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error-formatter.js","sourceRoot":"","sources":["../src/cli-error-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CACzB,KAAoB,EACpB,OAAsB;IAEtB,wCAAwC;IACxC,IACE,OAAO,CAAC,MAAM,KAAK,OAAO;QAC1B,OAAO,CAAC,MAAM,KAAK,MAAM;QACzB,OAAO,CAAC,MAAM,KAAK,SAAS,EAC5B,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,gBAAgB,CACvB,KAAoB,EACpB,OAAsB;IAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,oCAAoC;IACpC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAExD,iCAAiC;IACjC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,2CAA2C;QAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CACtD,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QAErD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAE/C,sCAAsC;YACtC,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa;IACb,IACE,OAAO,CAAC,gBAAgB;QACxB,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,OAAO,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,cAAc,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAoB,EAAE,OAAsB;IACnE,MAAM,UAAU,GAoBZ;QACF,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,CAAC,EAAE,4EAA4E;QACzF,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,OAAO;KACpB,CAAC;IAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,GAAG;YACjB,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,gCAAgC;gBACjE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;aACnC;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,gCAAgC;gBAC/D,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;aACjC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED,IACE,OAAO,CAAC,gBAAgB;QACxB,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAC1B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1E,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACnE,MAAM,SAAS,GAOX;gBACF,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;wBACnC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;qBACvC;oBACD,GAAG,EAAE;wBACH,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;wBACjC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM;qBACrC;iBACF;aACF,CAAC;YACF,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACrC,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YAC9C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,MAAM,KAAK,GAAa,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE9D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;AAE/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAgB,EAChB,WAAmB;IAEnB,uCAAuC;IACvC,IACE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;QAC/B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;IAED,uCAAuC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,IAAI,SAAiB,CAAC;IAEtB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,gDAAgD;QAChD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,sDAAsD;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,OAAO,GAAG,MAAM,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rill CLI - Evaluate rill expressions
4
+ *
5
+ * Usage:
6
+ * rill-eval '"hello".len'
7
+ * rill-eval --help
8
+ * rill-eval --version
9
+ */
10
+ import { type ExecutionResult } from '@rcrsr/rill';
11
+ /**
12
+ * Evaluate a Rill expression without file context
13
+ */
14
+ export declare function evaluateExpression(expression: string): Promise<ExecutionResult>;
15
+ //# sourceMappingURL=cli-eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-eval.d.ts","sourceRoot":"","sources":["../src/cli-eval.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAuCrB;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAY1B"}
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rill CLI - Evaluate rill expressions
4
+ *
5
+ * Usage:
6
+ * rill-eval '"hello".len'
7
+ * rill-eval --help
8
+ * rill-eval --version
9
+ */
10
+ import { createRuntimeContext, execute, parse, } from '@rcrsr/rill';
11
+ import { formatOutput, determineExitCode, VERSION } from './cli-shared.js';
12
+ /**
13
+ * Parse command-line arguments into structured command
14
+ */
15
+ function parseArgs(argv) {
16
+ // Check for --help and --version in any position
17
+ if (argv.includes('--help')) {
18
+ return { mode: 'help' };
19
+ }
20
+ if (argv.includes('--version')) {
21
+ return { mode: 'version' };
22
+ }
23
+ // Check for unknown flags (anything starting with -)
24
+ for (const arg of argv) {
25
+ if (arg.startsWith('-') && arg !== '-') {
26
+ throw new Error(`Unknown option: ${arg}`);
27
+ }
28
+ }
29
+ // If no arguments, default to help
30
+ if (argv.length === 0) {
31
+ return { mode: 'help' };
32
+ }
33
+ // First positional arg determines mode
34
+ const firstArg = argv[0];
35
+ // Eval mode: direct expression
36
+ return { mode: 'eval', expression: firstArg };
37
+ }
38
+ /**
39
+ * Evaluate a Rill expression without file context
40
+ */
41
+ export async function evaluateExpression(expression) {
42
+ const ctx = createRuntimeContext({
43
+ callbacks: {
44
+ onLog: (value) => console.log(formatOutput(value)),
45
+ },
46
+ });
47
+ // Set pipeValue to empty list (Rill has no null concept per language spec)
48
+ ctx.pipeValue = [];
49
+ const ast = parse(expression);
50
+ return execute(ast, ctx);
51
+ }
52
+ /**
53
+ * Display help information
54
+ */
55
+ function showHelp() {
56
+ console.log(`Rill Expression Evaluator
57
+
58
+ Usage:
59
+ rill-eval <expression> Evaluate a Rill expression
60
+ rill-eval --help Show this help message
61
+ rill-eval --version Show version information
62
+
63
+ Examples:
64
+ rill-eval '"hello".len'
65
+ rill-eval '5 + 3'
66
+ rill-eval '[1, 2, 3] -> map |x|($x * 2)'`);
67
+ }
68
+ /**
69
+ * Display version information
70
+ */
71
+ function showVersion() {
72
+ console.log(`rill-eval ${VERSION}`);
73
+ }
74
+ /**
75
+ * Entry point for rill-eval binary
76
+ */
77
+ async function main() {
78
+ try {
79
+ const args = process.argv.slice(2);
80
+ const command = parseArgs(args);
81
+ if (command.mode === 'help') {
82
+ showHelp();
83
+ return;
84
+ }
85
+ if (command.mode === 'version') {
86
+ showVersion();
87
+ return;
88
+ }
89
+ if (command.mode === 'eval') {
90
+ const result = await evaluateExpression(command.expression);
91
+ const { code, message } = determineExitCode(result.value);
92
+ if (message !== undefined) {
93
+ console.log(message);
94
+ }
95
+ else {
96
+ console.log(formatOutput(result.value));
97
+ }
98
+ process.exit(code);
99
+ }
100
+ // Unreachable - exec mode not supported in rill-eval
101
+ console.error('Unexpected command mode');
102
+ process.exit(1);
103
+ }
104
+ catch (err) {
105
+ console.error(err instanceof Error ? err.message : String(err));
106
+ process.exit(1);
107
+ }
108
+ }
109
+ // Only run main if this is the entry point (not imported)
110
+ const shouldRunMain = process.env['NODE_ENV'] !== 'test' &&
111
+ !process.env['VITEST'] &&
112
+ !process.env['VITEST_WORKER_ID'];
113
+ if (shouldRunMain) {
114
+ main();
115
+ }
116
+ //# sourceMappingURL=cli-eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-eval.js","sourceRoot":"","sources":["../src/cli-eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Execution Entry Point
4
+ *
5
+ * Implements main(), parseArgs(), and executeScript() for rill-exec and rill-eval binaries.
6
+ * Handles file execution, stdin input, and module loading.
7
+ */
8
+ import type { ExecutionResult } from '@rcrsr/rill';
9
+ /**
10
+ * Parsed command-line arguments
11
+ */
12
+ export type ParsedArgs = {
13
+ mode: 'exec';
14
+ file: string;
15
+ args: string[];
16
+ format: 'human' | 'json' | 'compact';
17
+ verbose: boolean;
18
+ maxStackDepth: number;
19
+ } | {
20
+ mode: 'eval';
21
+ expression: string;
22
+ } | {
23
+ mode: 'help' | 'version';
24
+ } | {
25
+ mode: 'explain';
26
+ errorId: string;
27
+ };
28
+ /**
29
+ * Parse command-line arguments into structured command
30
+ *
31
+ * @param argv - Raw command-line arguments (typically process.argv.slice(2))
32
+ * @returns Parsed command object
33
+ */
34
+ export declare function parseArgs(argv: string[]): ParsedArgs;
35
+ /**
36
+ * Execute a Rill script file with arguments and module support
37
+ *
38
+ * @param file - File path or '-' for stdin
39
+ * @param args - Command-line arguments to pass as $ pipe value
40
+ * @param options - Execution options
41
+ * @returns Execution result with value, variables, and source text
42
+ * @throws Error if file not found or execution fails
43
+ */
44
+ export declare function executeScript(file: string, args: string[], options?: {
45
+ stdin?: boolean;
46
+ source?: string;
47
+ }): Promise<ExecutionResult & {
48
+ source: string;
49
+ }>;
50
+ /**
51
+ * Entry point for rill-exec and rill-eval binaries
52
+ *
53
+ * Parses command-line arguments, executes scripts, and handles errors.
54
+ * Writes results to stdout and errors to stderr.
55
+ * Sets process.exit(1) on any error.
56
+ */
57
+ export declare function main(): Promise<void>;
58
+ //# sourceMappingURL=cli-exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-exec.d.ts","sourceRoot":"","sources":["../src/cli-exec.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAOH,OAAO,KAAK,EAAa,eAAe,EAAE,MAAM,aAAa,CAAC;AAW9D;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsIpD;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,eAAe,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAiE/C;AAED;;;;;;GAMG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAgI1C"}