@fnndsc/brasa 0.1.0 → 0.3.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.
- package/dist/builtins/fs/cat.js +3 -63
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +3 -1
- package/dist/builtins/fs/download.js +10 -7
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/du.d.ts +2 -1
- package/dist/builtins/fs/du.js +15 -7
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +3 -1
- package/dist/builtins/fs/edit.js +17 -23
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/ls.d.ts +2 -1
- package/dist/builtins/fs/ls.js +22 -11
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +2 -1
- package/dist/builtins/fs/pull.js +31 -27
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/tree.d.ts +2 -1
- package/dist/builtins/fs/tree.js +10 -13
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.d.ts +3 -1
- package/dist/builtins/fs/upload.js +10 -8
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/help.d.ts +16 -1
- package/dist/builtins/help.js +39 -18
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/connect.d.ts +3 -2
- package/dist/builtins/net/connect.js +6 -8
- package/dist/builtins/net/connect.js.map +1 -1
- package/dist/builtins/net/cubepath.d.ts +2 -1
- package/dist/builtins/net/cubepath.js +19 -15
- package/dist/builtins/net/cubepath.js.map +1 -1
- package/dist/builtins/net/logout.d.ts +4 -2
- package/dist/builtins/net/logout.js +7 -4
- package/dist/builtins/net/logout.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +4 -1
- package/dist/builtins/net/pacs.js +38 -39
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/query.d.ts +2 -2
- package/dist/builtins/net/query.js +20 -23
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/parametersofplugin.d.ts +3 -2
- package/dist/builtins/parametersofplugin.js +8 -9
- package/dist/builtins/parametersofplugin.js.map +1 -1
- package/dist/builtins/proc.d.ts +3 -1
- package/dist/builtins/proc.js +74 -64
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.d.ts +3 -1
- package/dist/builtins/res/compute.js +9 -12
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/feed.d.ts +3 -1
- package/dist/builtins/res/feed.js +58 -83
- package/dist/builtins/res/feed.js.map +1 -1
- package/dist/builtins/res/files.d.ts +7 -3
- package/dist/builtins/res/files.js +26 -25
- package/dist/builtins/res/files.js.map +1 -1
- package/dist/builtins/res/group.d.ts +3 -1
- package/dist/builtins/res/group.js +10 -14
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/pipeline.d.ts +2 -1
- package/dist/builtins/res/pipeline.js +53 -53
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/plugin.d.ts +6 -2
- package/dist/builtins/res/plugin.js +47 -50
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/builtins/res/plugininstance.d.ts +2 -1
- package/dist/builtins/res/plugininstance.js +9 -14
- package/dist/builtins/res/plugininstance.js.map +1 -1
- package/dist/builtins/res/pluginmeta.d.ts +2 -1
- package/dist/builtins/res/pluginmeta.js +9 -14
- package/dist/builtins/res/pluginmeta.js.map +1 -1
- package/dist/builtins/res/tag.d.ts +3 -1
- package/dist/builtins/res/tag.js +10 -14
- package/dist/builtins/res/tag.js.map +1 -1
- package/dist/builtins/res/workflow.d.ts +2 -1
- package/dist/builtins/res/workflow.js +9 -14
- package/dist/builtins/res/workflow.js.map +1 -1
- package/dist/builtins/store.d.ts +3 -1
- package/dist/builtins/store.js +19 -35
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/context.d.ts +2 -1
- package/dist/builtins/sys/context.js +5 -4
- package/dist/builtins/sys/context.js.map +1 -1
- package/dist/core/chiliDelegate.d.ts +10 -7
- package/dist/core/chiliDelegate.js +20 -11
- package/dist/core/chiliDelegate.js.map +1 -1
- package/dist/core/dispatch.d.ts +6 -0
- package/dist/core/dispatch.js +121 -169
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/sink.d.ts +57 -18
- package/dist/core/sink.js +77 -77
- package/dist/core/sink.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +2 -2
- package/dist/lib/vfs/vfs.js +10 -14
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/package.json +2 -2
package/dist/core/sink.js
CHANGED
|
@@ -23,9 +23,6 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
25
25
|
import { NullProgressRenderer } from './progress.js';
|
|
26
|
-
function sink_streamsEnvelopeOutput(sink) {
|
|
27
|
-
return sink.liveEnvelopeOutput === true;
|
|
28
|
-
}
|
|
29
26
|
/**
|
|
30
27
|
* Sink that writes both channels to the process's standard output.
|
|
31
28
|
*
|
|
@@ -153,6 +150,44 @@ export class CaptureSink {
|
|
|
153
150
|
return Buffer.concat(this.errChunks).toString('utf-8');
|
|
154
151
|
}
|
|
155
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Sink that captures the data channel for a pipe or redirect.
|
|
155
|
+
*
|
|
156
|
+
* Text writes (a command's rendered envelope output) are ANSI-stripped, the
|
|
157
|
+
* documented plain-pipe deviation; binary writes (a raw `cat` of a DICOM file)
|
|
158
|
+
* are kept byte-for-byte. The err channel passes through to stderr live, since
|
|
159
|
+
* a pipe never carries the error stream. Status and progress are ephemeral.
|
|
160
|
+
*/
|
|
161
|
+
export class PipeCaptureSink {
|
|
162
|
+
chunks = [];
|
|
163
|
+
/** @inheritdoc */
|
|
164
|
+
data_write(chunk) {
|
|
165
|
+
this.chunks.push(typeof chunk === 'string'
|
|
166
|
+
? Buffer.from(ansi_strip(chunk), 'utf-8')
|
|
167
|
+
: chunk);
|
|
168
|
+
}
|
|
169
|
+
/** @inheritdoc */
|
|
170
|
+
err_write(chunk) {
|
|
171
|
+
// The err channel is never piped: pass it straight to stderr, exactly as
|
|
172
|
+
// the historical inherit behavior did.
|
|
173
|
+
process.stderr.write(chunk);
|
|
174
|
+
}
|
|
175
|
+
/** @inheritdoc */
|
|
176
|
+
status_write(_text) {
|
|
177
|
+
// Status is ephemeral by contract.
|
|
178
|
+
}
|
|
179
|
+
progress_write(_event) {
|
|
180
|
+
// Progress is ephemeral by contract.
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Returns everything captured on the data channel so far.
|
|
184
|
+
*
|
|
185
|
+
* @returns The captured bytes (stripped text and raw binary, in write order).
|
|
186
|
+
*/
|
|
187
|
+
buffer_get() {
|
|
188
|
+
return Buffer.concat(this.chunks);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
156
191
|
/**
|
|
157
192
|
* The host sink: the process-wide default installed by whoever owns the output
|
|
158
193
|
* destination (the CLI REPL, the daemon). Defaults to stdout so every entry
|
|
@@ -195,6 +230,22 @@ export function sink_set(sink) {
|
|
|
195
230
|
hostSink = sink;
|
|
196
231
|
return previous;
|
|
197
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Runs `fn` with `sink` installed as the active sink for its async context.
|
|
235
|
+
*
|
|
236
|
+
* Command execution inside the callback resolves {@link sink_get} to `sink`,
|
|
237
|
+
* isolated from any other command running concurrently in the same process.
|
|
238
|
+
* This is how the pipe and redirect paths capture a command's output without
|
|
239
|
+
* touching the global console, and how a multi-tenant host would scope a
|
|
240
|
+
* session's sink around one `line_execute`.
|
|
241
|
+
*
|
|
242
|
+
* @param sink - The sink to scope.
|
|
243
|
+
* @param fn - The work to run within the scope.
|
|
244
|
+
* @returns Whatever `fn` resolves to.
|
|
245
|
+
*/
|
|
246
|
+
export function sinkScope_run(sink, fn) {
|
|
247
|
+
return sinkScope.run(sink, fn);
|
|
248
|
+
}
|
|
198
249
|
/**
|
|
199
250
|
* Delivers a completed envelope to the active sink.
|
|
200
251
|
*
|
|
@@ -214,6 +265,29 @@ export function envelope_deliver(envelope) {
|
|
|
214
265
|
sink.err_write(envelope.renderedErr);
|
|
215
266
|
}
|
|
216
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Writes a line to the active sink's data channel (appending a newline).
|
|
270
|
+
*
|
|
271
|
+
* The `console.log` replacement for streaming builtins — commands that emit
|
|
272
|
+
* incremental output over their lifetime (a blocking pull with per-series
|
|
273
|
+
* progress) rather than a single final envelope. In a pipe or redirect this
|
|
274
|
+
* lands in the capture buffer; on a daemon it streams to the remote surface.
|
|
275
|
+
*
|
|
276
|
+
* @param text - The line to write (a newline is appended).
|
|
277
|
+
*/
|
|
278
|
+
export function sink_dataLine(text) {
|
|
279
|
+
sink_get().data_write(`${text}\n`);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Writes a line to the active sink's error channel (appending a newline).
|
|
283
|
+
*
|
|
284
|
+
* The `console.error` replacement for streaming builtins.
|
|
285
|
+
*
|
|
286
|
+
* @param text - The line to write (a newline is appended).
|
|
287
|
+
*/
|
|
288
|
+
export function sink_errLine(text) {
|
|
289
|
+
sink_get().err_write(`${text}\n`);
|
|
290
|
+
}
|
|
217
291
|
/**
|
|
218
292
|
* Adapts an envelope-returning builtin to the legacy printing handler shape.
|
|
219
293
|
*
|
|
@@ -235,80 +309,6 @@ export function envelopeHandler_wrap(handler) {
|
|
|
235
309
|
envelope_deliver(envelope);
|
|
236
310
|
};
|
|
237
311
|
}
|
|
238
|
-
/**
|
|
239
|
-
* Adapts a legacy printing builtin to the envelope-returning shape.
|
|
240
|
-
*
|
|
241
|
-
* This is the capture bridge for commands whose rendering lives below the
|
|
242
|
-
* seam (chili's table display prints internally): the handler runs with the
|
|
243
|
-
* data and err channels captured, console printing redirected into the
|
|
244
|
-
* capture, and status passed through live so spinners stay visible. The
|
|
245
|
-
* result is an envelope carrying the exact bytes each stream would have
|
|
246
|
-
* shown, with the status derived from the process exit code the handler set.
|
|
247
|
-
*
|
|
248
|
-
* Bridged commands gain envelope semantics without typed models; native
|
|
249
|
-
* conversion (models, streamed data) remains the end state for commands
|
|
250
|
-
* where a structural consumer exists.
|
|
251
|
-
*
|
|
252
|
-
* @param handler - A legacy printing command handler.
|
|
253
|
-
* @returns An envelope-returning handler with identical observable output.
|
|
254
|
-
*/
|
|
255
|
-
export function printingHandler_wrap(handler) {
|
|
256
|
-
return async (args) => {
|
|
257
|
-
const live = sink_get();
|
|
258
|
-
const capture = new CaptureSink(live, {
|
|
259
|
-
forwardEnvelopeOutput: sink_streamsEnvelopeOutput(live),
|
|
260
|
-
});
|
|
261
|
-
// The command's sink is scoped to this async context, so sink_get() (used
|
|
262
|
-
// by spinners, progress and directly-writing builtins) resolves to this
|
|
263
|
-
// capture without a shared global that concurrent commands would stomp.
|
|
264
|
-
// The console/stdout redirect below remains per-invocation: removing it in
|
|
265
|
-
// favour of envelope-returning builtins is tracked separately (#98).
|
|
266
|
-
const originalLog = console.log;
|
|
267
|
-
const originalError = console.error;
|
|
268
|
-
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
269
|
-
const exitCodeBefore = typeof process.exitCode === 'number' ? process.exitCode : 0;
|
|
270
|
-
console.log = (...logArgs) => {
|
|
271
|
-
const text = logArgs
|
|
272
|
-
.map((arg) => (typeof arg === 'string' ? arg : JSON.stringify(arg)))
|
|
273
|
-
.join(' ');
|
|
274
|
-
capture.data_write(`${text}\n`);
|
|
275
|
-
};
|
|
276
|
-
console.error = (...logArgs) => {
|
|
277
|
-
const text = logArgs
|
|
278
|
-
.map((arg) => (typeof arg === 'string' ? arg : JSON.stringify(arg)))
|
|
279
|
-
.join(' ');
|
|
280
|
-
capture.err_write(`${text}\n`);
|
|
281
|
-
};
|
|
282
|
-
process.stdout.write = ((chunk) => {
|
|
283
|
-
if (typeof chunk === 'string' || Buffer.isBuffer(chunk)) {
|
|
284
|
-
capture.data_write(chunk);
|
|
285
|
-
}
|
|
286
|
-
else if (chunk instanceof Uint8Array) {
|
|
287
|
-
capture.data_write(Buffer.from(chunk));
|
|
288
|
-
}
|
|
289
|
-
return true;
|
|
290
|
-
});
|
|
291
|
-
try {
|
|
292
|
-
await sinkScope.run(capture, async () => {
|
|
293
|
-
await handler(args);
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
finally {
|
|
297
|
-
console.log = originalLog;
|
|
298
|
-
console.error = originalError;
|
|
299
|
-
process.stdout.write = originalStdoutWrite;
|
|
300
|
-
}
|
|
301
|
-
const exitCodeAfter = typeof process.exitCode === 'number' ? process.exitCode : 0;
|
|
302
|
-
const failed = exitCodeAfter !== 0 && exitCodeAfter !== exitCodeBefore;
|
|
303
|
-
const rendered = capture.dataText_get();
|
|
304
|
-
const renderedErr = capture.errText_get();
|
|
305
|
-
const envelope = { status: failed ? 'error' : 'ok', rendered };
|
|
306
|
-
if (renderedErr.length > 0) {
|
|
307
|
-
envelope.renderedErr = renderedErr;
|
|
308
|
-
}
|
|
309
|
-
return envelope;
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
312
|
/** Matches ANSI escape sequences (SGR colors, cursor movement, erase). */
|
|
313
313
|
const ANSI_PATTERN = /\x1b\[[0-9;?]*[a-zA-Z]/g;
|
|
314
314
|
/**
|
package/dist/core/sink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/core/sink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAA6C,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/core/sink.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/vfs/vfs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ListingItem } from '@fnndsc/chili/models/listing.js';
|
|
2
|
-
import { Result } from '@fnndsc/cumin';
|
|
2
|
+
import { Result, type CommandEnvelope } from '@fnndsc/cumin';
|
|
3
3
|
/**
|
|
4
4
|
* Virtual File System Router.
|
|
5
5
|
* Dispatches operations to Virtual or Native providers.
|
|
@@ -43,7 +43,7 @@ export declare class VFS {
|
|
|
43
43
|
sort?: 'name' | 'size' | 'date' | 'owner';
|
|
44
44
|
reverse?: boolean;
|
|
45
45
|
directory?: boolean;
|
|
46
|
-
}): Promise<
|
|
46
|
+
}): Promise<CommandEnvelope>;
|
|
47
47
|
/**
|
|
48
48
|
* Refreshes cache in the background without blocking or updating display.
|
|
49
49
|
* Used for optimistic rendering - fetch fresh data after serving stale cache.
|
package/dist/lib/vfs/vfs.js
CHANGED
|
@@ -12,7 +12,7 @@ import chalk from 'chalk';
|
|
|
12
12
|
import * as path from 'path';
|
|
13
13
|
import { grid_render, long_render } from '@fnndsc/chili/views/ls.js';
|
|
14
14
|
import { list_applySort } from '@fnndsc/chili/utils/sort.js';
|
|
15
|
-
import { listCache_get, Ok, Err, errorStack } from '@fnndsc/cumin';
|
|
15
|
+
import { listCache_get, Ok, Err, errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
16
16
|
import { spinner } from '../spinner.js';
|
|
17
17
|
import { error_stripDebugPrefix } from '../../builtins/utils.js';
|
|
18
18
|
/**
|
|
@@ -145,24 +145,19 @@ export class VFS {
|
|
|
145
145
|
}
|
|
146
146
|
if (!result.ok) {
|
|
147
147
|
const lastError = errorStack.stack_pop();
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
return;
|
|
148
|
+
const renderedErr = lastError ? `${chalk.red(error_stripDebugPrefix(lastError.message))}\n` : '';
|
|
149
|
+
return envelope_error('', undefined, renderedErr);
|
|
152
150
|
}
|
|
153
151
|
if (result.value.length === 0) {
|
|
154
|
-
return;
|
|
152
|
+
return envelope_ok('');
|
|
155
153
|
}
|
|
156
154
|
// Render based on options
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
console.log(grid_render(result.value, { oneColumn: !!options.oneColumn }));
|
|
162
|
-
}
|
|
163
|
-
// If we served stale cache, show indicator and refresh in background
|
|
155
|
+
let rendered = options.long
|
|
156
|
+
? `${long_render(result.value, { human: !!options.human })}\n`
|
|
157
|
+
: `${grid_render(result.value, { oneColumn: !!options.oneColumn })}\n`;
|
|
158
|
+
// If we served stale cache, note it and refresh in background.
|
|
164
159
|
if (wasStale) {
|
|
165
|
-
|
|
160
|
+
rendered += `${chalk.gray('(cached, refreshing...)')}\n`;
|
|
166
161
|
// Trigger background refresh - don't await. Fenced in its own error-stack
|
|
167
162
|
// scope so its pushes/pops cannot corrupt a concurrent foreground
|
|
168
163
|
// command's error-drain window.
|
|
@@ -172,6 +167,7 @@ export class VFS {
|
|
|
172
167
|
});
|
|
173
168
|
});
|
|
174
169
|
}
|
|
170
|
+
return envelope_ok(rendered);
|
|
175
171
|
}
|
|
176
172
|
/**
|
|
177
173
|
* Refreshes cache in the background without blocking or updating display.
|
package/dist/lib/vfs/vfs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../src/lib/vfs/vfs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAmB,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../src/lib/vfs/vfs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAmB,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAwB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9H,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;GAGG;AACH,MAAM,OAAO,GAAG;IACd;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,UAAmB,EAAE,UAAiG,EAAE;QACrI,IAAI,CAAC;YACH,MAAM,GAAG,GAAW,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAW,UAAU;gBACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBACrC,CAAC,CAAC,GAAG,CAAC;YAER,kEAAkE;YAClE,IAAI,OAAO,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;YAED,wEAAwE;YACxE,6EAA6E;YAC7E,MAAM,UAAU,GAAY,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE9D,0CAA0C;YAC1C,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAgB,aAAa,CAAC,CAAC;gBACjE,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,SAAS,GAAuC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;oBAC7E,MAAM,WAAW,GAAkB,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC3F,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,mGAAmG;YACnG,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAkB,SAAS,CAAC,KAAiC,CAAC;gBAEzE,0CAA0C;gBAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBAC5C,CAAC;gBAED,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YAED,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAW,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,iCAAiC,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,kBAAkB,CAC9B,YAAoB,EACpB,OAAyE;QAEzE,MAAM,QAAQ,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,kDAAkD;QAClD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,IAAI,WAAW,GAAyB,IAAI,CAAC;QAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAgB,UAAU,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAA0B,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAA0B,CAAC;YACnH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;gBACpB,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC;gBACjC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAA4B,WAAW,CAAC,IAAI,CAAC,CAAC,IAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACvG,IAAI,KAAK;gBAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,mDAAmD;QACnD,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,UAAmB,EAAE,UAAuJ,EAAE;QACvL,4CAA4C;QAC5C,MAAM,GAAG,GAAW,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAW,UAAU;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;YACrC,CAAC,CAAC,GAAG,CAAC;QAER,0DAA0D;QAC1D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAmB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACzD,MAAM,WAAW,GAAY,CAAC,MAAM,CAAC;QAErC,6DAA6D;QAC7D,IAAI,cAAc,GAAY,KAAK,CAAC,CAAC,gDAAgD;QACrF,IAAI,mBAAmB,GAA0B,IAAI,CAAC;QAEtD,IAAI,WAAW,EAAE,CAAC;YAChB,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC,CAAC,kCAAkC;gBACzF,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAED,iCAAiC;QACjC,MAAM,MAAM,GAA0B,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE/E,sCAAsC;QACtC,IAAI,mBAAmB,EAAE,CAAC;YACxB,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,WAAW,GAAW,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,0BAA0B;QAC1B,IAAI,QAAQ,GAAW,OAAO,CAAC,IAAI;YACjC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI;YAC9D,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;QAEzE,+DAA+D;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;YACzD,0EAA0E;YAC1E,kEAAkE;YAClE,gCAAgC;YAChC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;gBACxB,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC1D,qDAAqD;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,mBAAmB,CAAC,UAAkB,EAAE,OAA8F;QAClJ,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAEvC,gDAAgD;YAChD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEzC,2CAA2C;YAC3C,2CAA2C;QAC7C,CAAC;QAAC,OAAO,MAAe,EAAE,CAAC;YACzB,oDAAoD;QACtD,CAAC;IACH,CAAC;CAGF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAQ,IAAI,GAAG,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fnndsc/brasa",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "BRASA Runs Abstracted Shell Actions - the hostable ChRIS shell engine (kernel)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"author": "FNNDSC <dev@babyMRI.org>",
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@fnndsc/chili": "^3.
|
|
42
|
+
"@fnndsc/chili": "^3.5.0",
|
|
43
43
|
"@fnndsc/cumin": "^3.5.0",
|
|
44
44
|
"@fnndsc/salsa": "^3.2.6",
|
|
45
45
|
"chalk": "^4.1.2",
|