@rcrsr/rill-cli 0.11.0 → 0.12.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.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * rill-run: Extension-aware rill script runner.
4
+ * Loads extensions from rill-config.json, generates bindings, and executes scripts.
5
+ */
6
+ import type { RunCliOptions } from './run/types.js';
7
+ export declare function parseCliArgs(argv?: string[]): RunCliOptions;
8
+ export declare function main(): Promise<void>;
9
+ //# sourceMappingURL=cli-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":";AACA;;;GAGG;AAyBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAsCpD,wBAAgB,YAAY,CAC1B,IAAI,GAAE,MAAM,EAA0B,GACrC,aAAa,CA6Cf;AAqCD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0L1C"}
@@ -0,0 +1,282 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * rill-run: Extension-aware rill script runner.
4
+ * Loads extensions from rill-config.json, generates bindings, and executes scripts.
5
+ */
6
+ import { readFileSync, mkdirSync, writeFileSync } from 'node:fs';
7
+ import { dirname, resolve } from 'node:path';
8
+ import { parseArgs } from 'node:util';
9
+ import { config as dotenvConfig } from 'dotenv';
10
+ import { parse, execute, createRuntimeContext, invokeCallable, isScriptCallable, VERSION, } from '@rcrsr/rill';
11
+ import { resolveConfigPath, loadProject, parseMainField, introspectHandler, marshalCliArgs, ConfigError, } from '@rcrsr/rill-config';
12
+ import { explainError } from './cli-explain.js';
13
+ import { runScript } from './run/runner.js';
14
+ // ============================================================
15
+ // HELP TEXT
16
+ // ============================================================
17
+ const USAGE = `\
18
+ Usage: rill-run [args...]
19
+
20
+ Options:
21
+ --config <path> Config file path (default: search from cwd)
22
+ --format <mode> Output format: human, json, compact (default: human)
23
+ --verbose Show full error details (default: false)
24
+ --max-stack-depth <n> Error stack frame limit (default: 10)
25
+ --create-bindings Write bindings source to config-defined file and exit
26
+ --explain <code> Print error code documentation
27
+ --help Print this help message and exit
28
+ --version Print version and exit`.trimEnd();
29
+ // ============================================================
30
+ // BASE OPTIONS (used to separate known flags from handler args)
31
+ // ============================================================
32
+ const BASE_OPTIONS = {
33
+ config: { type: 'string' },
34
+ format: { type: 'string' },
35
+ verbose: { type: 'boolean' },
36
+ 'max-stack-depth': { type: 'string' },
37
+ 'create-bindings': { type: 'boolean' },
38
+ help: { type: 'boolean' },
39
+ version: { type: 'boolean' },
40
+ explain: { type: 'string' },
41
+ };
42
+ // ============================================================
43
+ // PARSE ARGS
44
+ // ============================================================
45
+ export function parseCliArgs(argv = process.argv.slice(2)) {
46
+ const { values, positionals } = parseArgs({
47
+ args: argv,
48
+ options: BASE_OPTIONS,
49
+ allowPositionals: true,
50
+ strict: false,
51
+ });
52
+ if (values['help'] === true) {
53
+ process.stdout.write(USAGE + '\n');
54
+ process.exit(0);
55
+ }
56
+ if (values['version'] === true) {
57
+ process.stdout.write(`rill-run ${VERSION}\n`);
58
+ process.exit(0);
59
+ }
60
+ if (positionals.length === 0 && values['create-bindings'] === undefined) {
61
+ process.stderr.write('Error: no script path provided\n\n' + USAGE + '\n');
62
+ process.exit(1);
63
+ }
64
+ const scriptPath = positionals[0];
65
+ const scriptArgs = positionals.slice(1);
66
+ const rawFormat = values['format'];
67
+ const format = rawFormat === 'json' || rawFormat === 'compact' ? rawFormat : 'human';
68
+ const rawDepth = values['max-stack-depth'];
69
+ const parsedDepth = rawDepth !== undefined ? parseInt(rawDepth, 10) : NaN;
70
+ const maxStackDepth = !isNaN(parsedDepth) && parsedDepth >= 0 ? parsedDepth : 10;
71
+ return {
72
+ scriptPath,
73
+ scriptArgs,
74
+ config: values['config'] ?? './rill-config.json',
75
+ format,
76
+ verbose: values['verbose'] === true,
77
+ maxStackDepth,
78
+ explain: values['explain'],
79
+ createBindings: values['create-bindings'] === true,
80
+ };
81
+ }
82
+ // ============================================================
83
+ // HANDLER ARG EXTRACTION
84
+ // ============================================================
85
+ /**
86
+ * Extract unknown flags from argv as handler parameter strings.
87
+ * Filters out known base options and their values.
88
+ */
89
+ function extractHandlerArgs(argv) {
90
+ const { values } = parseArgs({
91
+ args: argv,
92
+ options: BASE_OPTIONS,
93
+ allowPositionals: true,
94
+ strict: false,
95
+ });
96
+ const knownKeys = new Set(Object.keys(BASE_OPTIONS));
97
+ const handlerArgs = {};
98
+ for (const [key, value] of Object.entries(values)) {
99
+ if (knownKeys.has(key))
100
+ continue;
101
+ if (typeof value === 'string') {
102
+ handlerArgs[key] = value;
103
+ }
104
+ else if (value === true) {
105
+ handlerArgs[key] = '';
106
+ }
107
+ }
108
+ return handlerArgs;
109
+ }
110
+ // ============================================================
111
+ // MAIN
112
+ // ============================================================
113
+ export async function main() {
114
+ dotenvConfig({ quiet: true });
115
+ const argv = process.argv.slice(2);
116
+ const opts = parseCliArgs(argv);
117
+ if (opts.explain !== undefined) {
118
+ const doc = explainError(opts.explain);
119
+ if (doc !== null) {
120
+ process.stdout.write(doc + '\n');
121
+ }
122
+ else {
123
+ process.stdout.write(`${opts.explain}: No documentation available.\n`);
124
+ }
125
+ process.exit(0);
126
+ }
127
+ const hasExplicitConfig = opts.config !== './rill-config.json';
128
+ let configPath;
129
+ try {
130
+ configPath = resolveConfigPath({
131
+ ...(hasExplicitConfig ? { configFlag: opts.config } : {}),
132
+ cwd: process.cwd(),
133
+ });
134
+ }
135
+ catch (err) {
136
+ if (err instanceof ConfigError) {
137
+ process.stderr.write(err.message + '\n');
138
+ process.exit(1);
139
+ }
140
+ throw err;
141
+ }
142
+ let project;
143
+ try {
144
+ project = await loadProject({
145
+ configPath,
146
+ env: process.env,
147
+ rillVersion: VERSION,
148
+ });
149
+ }
150
+ catch (err) {
151
+ if (err instanceof ConfigError) {
152
+ process.stderr.write(err.message + '\n');
153
+ process.exit(1);
154
+ }
155
+ throw err;
156
+ }
157
+ // Create bindings and exit early if --create-bindings was set
158
+ if (opts.createBindings === true) {
159
+ const extBindingsPath = resolve(process.cwd(), project.config.extensions?.bindings ?? 'bindings/ext.rill');
160
+ const ctxBindingsPath = resolve(process.cwd(), project.config.context?.bindings ?? 'bindings/context.rill');
161
+ mkdirSync(dirname(extBindingsPath), { recursive: true });
162
+ writeFileSync(extBindingsPath, project.extensionBindings + '\n');
163
+ mkdirSync(dirname(ctxBindingsPath), { recursive: true });
164
+ writeFileSync(ctxBindingsPath, project.contextBindings + '\n');
165
+ process.exit(0);
166
+ }
167
+ // Handler mode: main field contains "file.rill:handlerName"
168
+ const mainField = project.config.main;
169
+ if (mainField !== undefined && mainField.includes(':')) {
170
+ const { filePath, handlerName } = parseMainField(mainField);
171
+ const absolutePath = resolve(process.cwd(), filePath);
172
+ let source;
173
+ try {
174
+ source = readFileSync(absolutePath, 'utf-8');
175
+ }
176
+ catch (err) {
177
+ const message = err instanceof Error ? err.message : String(err);
178
+ process.stderr.write(message + '\n');
179
+ process.exit(1);
180
+ }
181
+ let ast;
182
+ try {
183
+ ast = parse(source);
184
+ }
185
+ catch (err) {
186
+ const message = err instanceof Error ? err.message : String(err);
187
+ process.stderr.write(message + '\n');
188
+ process.exit(1);
189
+ }
190
+ const runtimeOptions = {
191
+ ...project.resolverConfig,
192
+ parseSource: parse,
193
+ callbacks: {
194
+ onLog: (msg) => {
195
+ process.stdout.write(msg + '\n');
196
+ },
197
+ },
198
+ maxCallStackDepth: opts.maxStackDepth,
199
+ };
200
+ const ctx = createRuntimeContext(runtimeOptions);
201
+ try {
202
+ await execute(ast, ctx);
203
+ }
204
+ catch (err) {
205
+ const message = err instanceof Error ? err.message : String(err);
206
+ process.stderr.write(message + '\n');
207
+ process.exit(1);
208
+ }
209
+ const handlerValue = handlerName !== undefined ? ctx.variables.get(handlerName) : undefined;
210
+ if (handlerValue === undefined || !isScriptCallable(handlerValue)) {
211
+ process.stderr.write(`Handler not found: $${handlerName ?? '(none)'} is not a closure\n`);
212
+ process.exit(1);
213
+ }
214
+ const introspection = introspectHandler(handlerValue);
215
+ const rawHandlerArgs = extractHandlerArgs(argv);
216
+ let handlerArgs;
217
+ try {
218
+ handlerArgs = marshalCliArgs(rawHandlerArgs, introspection.params);
219
+ }
220
+ catch (err) {
221
+ if (err instanceof ConfigError) {
222
+ process.stderr.write(err.message + '\n');
223
+ process.exit(1);
224
+ }
225
+ throw err;
226
+ }
227
+ ctx.pipeValue = handlerArgs;
228
+ let handlerResult;
229
+ try {
230
+ handlerResult = await invokeCallable(handlerValue, [], ctx);
231
+ }
232
+ catch (err) {
233
+ const message = err instanceof Error ? err.message : String(err);
234
+ process.stderr.write(message + '\n');
235
+ process.exit(1);
236
+ }
237
+ finally {
238
+ for (const dispose of project.disposes) {
239
+ try {
240
+ await dispose();
241
+ }
242
+ catch {
243
+ // Ignore dispose errors
244
+ }
245
+ }
246
+ }
247
+ if (typeof handlerResult === 'string' && handlerResult.length > 0) {
248
+ process.stdout.write(handlerResult + '\n');
249
+ }
250
+ process.exit(0);
251
+ }
252
+ // Module mode: use main field as script path, or use CLI positional
253
+ const scriptPath = mainField !== undefined
254
+ ? resolve(process.cwd(), mainField)
255
+ : opts.scriptPath;
256
+ const runOpts = {
257
+ ...opts,
258
+ scriptPath,
259
+ };
260
+ const runResult = await runScript(runOpts, project.config, project.extTree, project.extensionBindings, [...project.disposes]);
261
+ if (runResult.output !== undefined) {
262
+ process.stdout.write(runResult.output + '\n');
263
+ }
264
+ if (runResult.errorOutput !== undefined) {
265
+ process.stderr.write(runResult.errorOutput + '\n');
266
+ }
267
+ process.exit(runResult.exitCode);
268
+ }
269
+ // ============================================================
270
+ // ENTRY
271
+ // ============================================================
272
+ const shouldRunMain = process.env['NODE_ENV'] !== 'test' &&
273
+ !process.env['VITEST'] &&
274
+ !process.env['VITEST_WORKER_ID'];
275
+ if (shouldRunMain) {
276
+ main().catch((err) => {
277
+ const message = err instanceof Error ? err.message : String(err);
278
+ process.stderr.write(`Fatal error: ${message}\n`);
279
+ process.exit(1);
280
+ });
281
+ }
282
+ //# sourceMappingURL=cli-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Script runner for rill-run.
3
+ * Builds runtime options, executes rill scripts, and maps results to exit codes.
4
+ */
5
+ import { type SchemeResolver } from '@rcrsr/rill';
6
+ import type { NestedExtConfig, RillConfigFile } from '@rcrsr/rill-config';
7
+ import type { RunCliOptions } from './types.js';
8
+ export interface RunResult {
9
+ readonly exitCode: number;
10
+ readonly output?: string | undefined;
11
+ readonly errorOutput?: string | undefined;
12
+ }
13
+ /**
14
+ * Build a custom module scheme resolver.
15
+ * - ID 'ext' → returns generated bindings source
16
+ * - ID 'ext.*' → drills into extTree subtree and returns bindings for that node
17
+ * - All other IDs → delegates to moduleResolver with the modules config
18
+ */
19
+ export declare function buildModuleResolver(bindingsSource: string, modulesConfig: Record<string, string>, extTree: NestedExtConfig): SchemeResolver;
20
+ /**
21
+ * Run a rill script file with the given extension tree and config.
22
+ */
23
+ export declare function runScript(opts: RunCliOptions, config: RillConfigFile, extTree: NestedExtConfig, bindingsSrc: string, disposes: Array<() => void | Promise<void>>): Promise<RunResult>;
24
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/run/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAWL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AA4CD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwChB;AA6ID;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC1C,OAAO,CAAC,SAAS,CAAC,CA4FpB"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Script runner for rill-run.
3
+ * Builds runtime options, executes rill scripts, and maps results to exit codes.
4
+ */
5
+ import { readFileSync } from 'node:fs';
6
+ import { parse, execute, createRuntimeContext, extResolver, moduleResolver, toNative, isTuple, } from '@rcrsr/rill';
7
+ import { ParseError, RillError, getCallStack } from '@rcrsr/rill';
8
+ import { buildExtensionBindings, isLeafFunction } from '@rcrsr/rill-config';
9
+ // ============================================================
10
+ // TREE CONVERSION
11
+ // ============================================================
12
+ function convertTreeToRillValues(tree) {
13
+ const result = {};
14
+ for (const [key, value] of Object.entries(tree)) {
15
+ if (typeof value === 'object' &&
16
+ value !== null &&
17
+ 'fn' in value &&
18
+ typeof value.fn === 'function' &&
19
+ 'params' in value) {
20
+ const rillFn = value;
21
+ result[key] = {
22
+ __type: 'callable',
23
+ kind: 'application',
24
+ isProperty: false,
25
+ fn: rillFn.fn,
26
+ params: rillFn.params,
27
+ };
28
+ }
29
+ else {
30
+ result[key] = convertTreeToRillValues(value);
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ // ============================================================
36
+ // MODULE RESOLVER
37
+ // ============================================================
38
+ /**
39
+ * Build a custom module scheme resolver.
40
+ * - ID 'ext' → returns generated bindings source
41
+ * - ID 'ext.*' → drills into extTree subtree and returns bindings for that node
42
+ * - All other IDs → delegates to moduleResolver with the modules config
43
+ */
44
+ export function buildModuleResolver(bindingsSource, modulesConfig, extTree) {
45
+ const moduleConfig = {};
46
+ for (const [id, path] of Object.entries(modulesConfig)) {
47
+ if (id !== 'ext') {
48
+ moduleConfig[id] = path;
49
+ }
50
+ }
51
+ const resolver = (resource) => {
52
+ if (resource === 'ext') {
53
+ return { kind: 'source', text: bindingsSource };
54
+ }
55
+ if (resource.startsWith('ext.')) {
56
+ const suffix = resource.slice('ext.'.length);
57
+ const segments = suffix.split('.');
58
+ let node = extTree;
59
+ let fullyResolved = true;
60
+ for (const segment of segments) {
61
+ const child = node[segment];
62
+ if (child === undefined) {
63
+ fullyResolved = false;
64
+ break;
65
+ }
66
+ if (isLeafFunction(child)) {
67
+ fullyResolved = false;
68
+ break;
69
+ }
70
+ node = child;
71
+ }
72
+ if (fullyResolved && node !== extTree) {
73
+ const subtreeSource = buildExtensionBindings(node, suffix);
74
+ return { kind: 'source', text: subtreeSource };
75
+ }
76
+ }
77
+ return moduleResolver(resource, moduleConfig);
78
+ };
79
+ return resolver;
80
+ }
81
+ // ============================================================
82
+ // EXIT CODE MAPPING
83
+ // ============================================================
84
+ function mapResultToRunResult(result, format) {
85
+ if (isTuple(result)) {
86
+ const tuple = result;
87
+ if (tuple.entries.length === 2) {
88
+ const code = tuple.entries[0];
89
+ const message = tuple.entries[1];
90
+ if (typeof code === 'number' && typeof message === 'string') {
91
+ return {
92
+ exitCode: code,
93
+ output: message.length > 0 ? message : undefined,
94
+ };
95
+ }
96
+ }
97
+ }
98
+ if (result === false || result === '') {
99
+ return { exitCode: 1 };
100
+ }
101
+ const formatted = formatOutput(result, format);
102
+ return { exitCode: 0, output: formatted };
103
+ }
104
+ function formatOutput(value, format) {
105
+ const native = toNative(value);
106
+ if (format === 'json' || format === 'compact') {
107
+ return JSON.stringify(native.value);
108
+ }
109
+ if (typeof value === 'string') {
110
+ return value;
111
+ }
112
+ return JSON.stringify(native.value, null, 2);
113
+ }
114
+ // ============================================================
115
+ // ERROR FORMATTING
116
+ // ============================================================
117
+ function resolveSourceSnippet(location, sources, filePath) {
118
+ if (sources.script !== undefined) {
119
+ const lines = sources.script.split('\n');
120
+ const idx = location.line - 1;
121
+ if (idx >= 0 &&
122
+ idx < lines.length &&
123
+ location.column <= lines[idx].length + 1) {
124
+ return {
125
+ label: filePath ?? '<script>',
126
+ ...(lines[idx] !== undefined ? { sourceLine: lines[idx] } : {}),
127
+ };
128
+ }
129
+ }
130
+ if (sources.bindings !== undefined) {
131
+ const lines = sources.bindings.split('\n');
132
+ const idx = location.line - 1;
133
+ if (idx >= 0 && idx < lines.length) {
134
+ return {
135
+ label: '<generated bindings>',
136
+ ...(lines[idx] !== undefined ? { sourceLine: lines[idx] } : {}),
137
+ };
138
+ }
139
+ }
140
+ return { label: filePath ?? '<unknown>' };
141
+ }
142
+ function formatRillError(error, verbose, maxStackDepth, filePath, sources) {
143
+ const data = error.toData();
144
+ const parts = [];
145
+ parts.push(`${data.errorId}: ${data.message}`);
146
+ if (data.location !== undefined && sources !== undefined) {
147
+ const match = resolveSourceSnippet(data.location, sources, filePath);
148
+ parts.push(` at ${match.label}:${data.location.line}:${data.location.column}`);
149
+ if (match.sourceLine !== undefined) {
150
+ parts.push('');
151
+ const lineNum = String(data.location.line);
152
+ parts.push(` ${lineNum} | ${match.sourceLine}`);
153
+ const caretCol = Math.max(0, data.location.column - 1);
154
+ parts.push(` ${' '.repeat(lineNum.length)} | ${' '.repeat(caretCol)}^`);
155
+ }
156
+ }
157
+ else if (data.location !== undefined) {
158
+ parts.push(` at line ${data.location.line}, column ${data.location.column}`);
159
+ }
160
+ if (verbose &&
161
+ data.context !== undefined &&
162
+ Object.keys(data.context).length > 0) {
163
+ parts.push(` context: ${JSON.stringify(data.context, null, 2)}`);
164
+ }
165
+ if (verbose && data.helpUrl !== undefined) {
166
+ parts.push(` help: ${data.helpUrl}`);
167
+ }
168
+ const frames = getCallStack(error);
169
+ const visibleFrames = frames.slice(0, maxStackDepth);
170
+ for (const frame of visibleFrames) {
171
+ const loc = `${frame.location.start.line}:${frame.location.start.column}`;
172
+ const name = frame.functionName !== undefined ? ` in ${frame.functionName}` : '';
173
+ const ctx = frame.context !== undefined ? ` (${frame.context})` : '';
174
+ parts.push(` at ${loc}${name}${ctx}`);
175
+ }
176
+ return parts.join('\n');
177
+ }
178
+ // ============================================================
179
+ // RUNNER
180
+ // ============================================================
181
+ /**
182
+ * Run a rill script file with the given extension tree and config.
183
+ */
184
+ export async function runScript(opts, config, extTree, bindingsSrc, disposes) {
185
+ if (!opts.scriptPath) {
186
+ return { exitCode: 1, errorOutput: 'no script path provided' };
187
+ }
188
+ let source;
189
+ try {
190
+ source = readFileSync(opts.scriptPath, 'utf-8');
191
+ }
192
+ catch (err) {
193
+ const message = err instanceof Error ? err.message : String(err);
194
+ return { exitCode: 1, errorOutput: message };
195
+ }
196
+ const extConfig = convertTreeToRillValues(extTree);
197
+ const modulesConfig = config.modules ?? {};
198
+ const customModuleResolver = buildModuleResolver(bindingsSrc, modulesConfig, extTree);
199
+ const runtimeOptions = {
200
+ resolvers: {
201
+ ext: extResolver,
202
+ module: customModuleResolver,
203
+ },
204
+ configurations: {
205
+ resolvers: {
206
+ ext: extConfig,
207
+ },
208
+ },
209
+ parseSource: parse,
210
+ callbacks: {
211
+ onLog: (msg) => {
212
+ process.stdout.write(msg + '\n');
213
+ },
214
+ },
215
+ maxCallStackDepth: opts.maxStackDepth,
216
+ };
217
+ const ctx = createRuntimeContext(runtimeOptions);
218
+ if (opts.scriptArgs.length > 0) {
219
+ ctx.pipeValue = opts.scriptArgs.join(' ');
220
+ }
221
+ let ast;
222
+ try {
223
+ ast = parse(source);
224
+ }
225
+ catch (err) {
226
+ if (err instanceof ParseError) {
227
+ const formatted = formatRillError(err, opts.verbose, opts.maxStackDepth, opts.scriptPath, { script: source });
228
+ return { exitCode: 1, errorOutput: formatted };
229
+ }
230
+ const message = err instanceof Error ? err.message : String(err);
231
+ return { exitCode: 1, errorOutput: message };
232
+ }
233
+ let result;
234
+ try {
235
+ const execResult = await execute(ast, ctx);
236
+ result = execResult.result;
237
+ }
238
+ catch (err) {
239
+ if (err instanceof RillError) {
240
+ const formatted = formatRillError(err, opts.verbose, opts.maxStackDepth, opts.scriptPath, { script: source, bindings: bindingsSrc });
241
+ return { exitCode: 1, errorOutput: formatted };
242
+ }
243
+ const message = err instanceof Error ? err.message : String(err);
244
+ return { exitCode: 1, errorOutput: message };
245
+ }
246
+ finally {
247
+ for (const dispose of disposes) {
248
+ try {
249
+ await dispose();
250
+ }
251
+ catch {
252
+ // Ignore dispose errors
253
+ }
254
+ }
255
+ }
256
+ return mapResultToRunResult(result, opts.format);
257
+ }
258
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/run/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Type definitions for rill-run.
3
+ */
4
+ /**
5
+ * Parsed CLI options from process.argv.
6
+ */
7
+ export interface RunCliOptions {
8
+ readonly scriptPath?: string | undefined;
9
+ readonly scriptArgs: string[];
10
+ readonly config: string;
11
+ readonly format: 'human' | 'json' | 'compact';
12
+ readonly verbose: boolean;
13
+ readonly maxStackDepth: number;
14
+ readonly explain?: string | undefined;
15
+ readonly createBindings?: boolean | undefined;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/run/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/C"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for rill-run.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/run/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rcrsr/rill-cli",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "CLI tools for the rill scripting language",
5
5
  "license": "MIT",
6
6
  "author": "Andre Bremer",
@@ -15,11 +15,14 @@
15
15
  "bin": {
16
16
  "rill-exec": "./dist/cli-exec.js",
17
17
  "rill-eval": "./dist/cli-eval.js",
18
- "rill-check": "./dist/cli-check.js"
18
+ "rill-check": "./dist/cli-check.js",
19
+ "rill-run": "./dist/cli-run.js"
19
20
  },
20
21
  "dependencies": {
22
+ "dotenv": "^16.0.0",
21
23
  "yaml": "^2.8.2",
22
- "@rcrsr/rill": "^0.11.0"
24
+ "@rcrsr/rill": "^0.12.0",
25
+ "@rcrsr/rill-config": "^0.12.0"
23
26
  },
24
27
  "files": [
25
28
  "dist"