@fnndsc/chell 4.4.0 → 5.0.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/sys/prompt.js +2 -2
- package/dist/builtins/sys/prompt.js.map +1 -1
- package/dist/chell.d.ts +2 -2
- package/dist/chell.js +2 -2
- package/dist/chell.js.map +1 -1
- package/dist/config/settings.d.ts +4 -2
- package/dist/config/settings.js +7 -2
- package/dist/config/settings.js.map +1 -1
- package/dist/core/boot.js +49 -60
- package/dist/core/boot.js.map +1 -1
- package/dist/core/cliSurface.d.ts +1 -1
- package/dist/core/cliSurface.js +1 -1
- package/dist/core/cliSurface.js.map +1 -1
- package/dist/core/progressRenderer.d.ts +2 -2
- package/dist/core/prompt/session.d.ts +26 -1
- package/dist/core/prompt/session.js +25 -20
- package/dist/core/prompt/session.js.map +1 -1
- package/dist/core/repl.d.ts +2 -2
- package/dist/core/repl.js +6 -4
- package/dist/core/repl.js.map +1 -1
- package/dist/core/surfaceDispatch.d.ts +21 -0
- package/dist/core/surfaceDispatch.js +33 -0
- package/dist/core/surfaceDispatch.js.map +1 -0
- package/dist/remote/client.js +2 -2
- package/dist/remote/client.js.map +1 -1
- package/dist/remote/remoteEngine.d.ts +3 -3
- package/dist/remote/remoteEngine.js +7 -4
- package/dist/remote/remoteEngine.js.map +1 -1
- package/package.json +5 -5
- package/dist/builtins/debug.d.ts +0 -8
- package/dist/builtins/debug.js +0 -39
- package/dist/builtins/debug.js.map +0 -1
- package/dist/builtins/executable.d.ts +0 -22
- package/dist/builtins/executable.js +0 -115
- package/dist/builtins/executable.js.map +0 -1
- package/dist/builtins/fs/cat.d.ts +0 -16
- package/dist/builtins/fs/cat.js +0 -266
- package/dist/builtins/fs/cat.js.map +0 -1
- package/dist/builtins/fs/cd.d.ts +0 -42
- package/dist/builtins/fs/cd.js +0 -193
- package/dist/builtins/fs/cd.js.map +0 -1
- package/dist/builtins/fs/cp.d.ts +0 -10
- package/dist/builtins/fs/cp.js +0 -86
- package/dist/builtins/fs/cp.js.map +0 -1
- package/dist/builtins/fs/download.d.ts +0 -6
- package/dist/builtins/fs/download.js +0 -45
- package/dist/builtins/fs/download.js.map +0 -1
- package/dist/builtins/fs/du.d.ts +0 -58
- package/dist/builtins/fs/du.js +0 -210
- package/dist/builtins/fs/du.js.map +0 -1
- package/dist/builtins/fs/edit.d.ts +0 -7
- package/dist/builtins/fs/edit.js +0 -104
- package/dist/builtins/fs/edit.js.map +0 -1
- package/dist/builtins/fs/ls.d.ts +0 -8
- package/dist/builtins/fs/ls.js +0 -68
- package/dist/builtins/fs/ls.js.map +0 -1
- package/dist/builtins/fs/mkdir.d.ts +0 -9
- package/dist/builtins/fs/mkdir.js +0 -52
- package/dist/builtins/fs/mkdir.js.map +0 -1
- package/dist/builtins/fs/mv.d.ts +0 -10
- package/dist/builtins/fs/mv.js +0 -88
- package/dist/builtins/fs/mv.js.map +0 -1
- package/dist/builtins/fs/pull.args.d.ts +0 -22
- package/dist/builtins/fs/pull.args.js +0 -30
- package/dist/builtins/fs/pull.args.js.map +0 -1
- package/dist/builtins/fs/pull.d.ts +0 -26
- package/dist/builtins/fs/pull.js +0 -445
- package/dist/builtins/fs/pull.js.map +0 -1
- package/dist/builtins/fs/pwd.d.ts +0 -10
- package/dist/builtins/fs/pwd.js +0 -73
- package/dist/builtins/fs/pwd.js.map +0 -1
- package/dist/builtins/fs/rm.d.ts +0 -37
- package/dist/builtins/fs/rm.js +0 -197
- package/dist/builtins/fs/rm.js.map +0 -1
- package/dist/builtins/fs/touch.d.ts +0 -9
- package/dist/builtins/fs/touch.js +0 -76
- package/dist/builtins/fs/touch.js.map +0 -1
- package/dist/builtins/fs/tree.d.ts +0 -15
- package/dist/builtins/fs/tree.js +0 -84
- package/dist/builtins/fs/tree.js.map +0 -1
- package/dist/builtins/fs/upload.d.ts +0 -6
- package/dist/builtins/fs/upload.js +0 -48
- package/dist/builtins/fs/upload.js.map +0 -1
- package/dist/builtins/help.d.ts +0 -74
- package/dist/builtins/help.js +0 -1217
- package/dist/builtins/help.js.map +0 -1
- package/dist/builtins/index.d.ts +0 -46
- package/dist/builtins/index.js +0 -46
- package/dist/builtins/index.js.map +0 -1
- package/dist/builtins/net/connect.d.ts +0 -7
- package/dist/builtins/net/connect.js +0 -42
- package/dist/builtins/net/connect.js.map +0 -1
- package/dist/builtins/net/cubepath.d.ts +0 -18
- package/dist/builtins/net/cubepath.js +0 -102
- package/dist/builtins/net/cubepath.js.map +0 -1
- package/dist/builtins/net/logout.d.ts +0 -6
- package/dist/builtins/net/logout.js +0 -24
- package/dist/builtins/net/logout.js.map +0 -1
- package/dist/builtins/net/pacs.d.ts +0 -24
- package/dist/builtins/net/pacs.js +0 -121
- package/dist/builtins/net/pacs.js.map +0 -1
- package/dist/builtins/net/pacsUtils.d.ts +0 -85
- package/dist/builtins/net/pacsUtils.js +0 -184
- package/dist/builtins/net/pacsUtils.js.map +0 -1
- package/dist/builtins/net/query.d.ts +0 -60
- package/dist/builtins/net/query.js +0 -324
- package/dist/builtins/net/query.js.map +0 -1
- package/dist/builtins/parametersofplugin.d.ts +0 -13
- package/dist/builtins/parametersofplugin.js +0 -43
- package/dist/builtins/parametersofplugin.js.map +0 -1
- package/dist/builtins/pluginExecute.d.ts +0 -27
- package/dist/builtins/pluginExecute.js +0 -165
- package/dist/builtins/pluginExecute.js.map +0 -1
- package/dist/builtins/proc.d.ts +0 -6
- package/dist/builtins/proc.helpers.d.ts +0 -68
- package/dist/builtins/proc.helpers.js +0 -102
- package/dist/builtins/proc.helpers.js.map +0 -1
- package/dist/builtins/proc.js +0 -289
- package/dist/builtins/proc.js.map +0 -1
- package/dist/builtins/res/compute.d.ts +0 -6
- package/dist/builtins/res/compute.js +0 -55
- package/dist/builtins/res/compute.js.map +0 -1
- package/dist/builtins/res/feed.d.ts +0 -6
- package/dist/builtins/res/feed.js +0 -244
- package/dist/builtins/res/feed.js.map +0 -1
- package/dist/builtins/res/feed.notes.d.ts +0 -28
- package/dist/builtins/res/feed.notes.js +0 -24
- package/dist/builtins/res/feed.notes.js.map +0 -1
- package/dist/builtins/res/files.d.ts +0 -18
- package/dist/builtins/res/files.js +0 -85
- package/dist/builtins/res/files.js.map +0 -1
- package/dist/builtins/res/group.d.ts +0 -6
- package/dist/builtins/res/group.js +0 -54
- package/dist/builtins/res/group.js.map +0 -1
- package/dist/builtins/res/pipeline.args.d.ts +0 -22
- package/dist/builtins/res/pipeline.args.js +0 -28
- package/dist/builtins/res/pipeline.args.js.map +0 -1
- package/dist/builtins/res/pipeline.d.ts +0 -20
- package/dist/builtins/res/pipeline.js +0 -252
- package/dist/builtins/res/pipeline.js.map +0 -1
- package/dist/builtins/res/plugin.d.ts +0 -13
- package/dist/builtins/res/plugin.js +0 -140
- package/dist/builtins/res/plugin.js.map +0 -1
- package/dist/builtins/res/plugininstance.d.ts +0 -6
- package/dist/builtins/res/plugininstance.js +0 -53
- package/dist/builtins/res/plugininstance.js.map +0 -1
- package/dist/builtins/res/pluginmeta.d.ts +0 -6
- package/dist/builtins/res/pluginmeta.js +0 -53
- package/dist/builtins/res/pluginmeta.js.map +0 -1
- package/dist/builtins/res/tag.d.ts +0 -6
- package/dist/builtins/res/tag.js +0 -53
- package/dist/builtins/res/tag.js.map +0 -1
- package/dist/builtins/res/workflow.d.ts +0 -6
- package/dist/builtins/res/workflow.js +0 -53
- package/dist/builtins/res/workflow.js.map +0 -1
- package/dist/builtins/store.d.ts +0 -6
- package/dist/builtins/store.js +0 -108
- package/dist/builtins/store.js.map +0 -1
- package/dist/builtins/sys/context.d.ts +0 -6
- package/dist/builtins/sys/context.js +0 -50
- package/dist/builtins/sys/context.js.map +0 -1
- package/dist/builtins/sys/physicalmode.d.ts +0 -8
- package/dist/builtins/sys/physicalmode.js +0 -34
- package/dist/builtins/sys/physicalmode.js.map +0 -1
- package/dist/builtins/sys/timing.d.ts +0 -8
- package/dist/builtins/sys/timing.js +0 -34
- package/dist/builtins/sys/timing.js.map +0 -1
- package/dist/builtins/sys/version.d.ts +0 -15
- package/dist/builtins/sys/version.js +0 -23
- package/dist/builtins/sys/version.js.map +0 -1
- package/dist/builtins/sys/whoami.d.ts +0 -17
- package/dist/builtins/sys/whoami.js +0 -44
- package/dist/builtins/sys/whoami.js.map +0 -1
- package/dist/builtins/utils.d.ts +0 -55
- package/dist/builtins/utils.js +0 -145
- package/dist/builtins/utils.js.map +0 -1
- package/dist/builtins/wildcard.d.ts +0 -26
- package/dist/builtins/wildcard.js +0 -120
- package/dist/builtins/wildcard.js.map +0 -1
- package/dist/calypso.d.ts +0 -13
- package/dist/calypso.js +0 -44
- package/dist/calypso.js.map +0 -1
- package/dist/command-keys.d.ts +0 -8
- package/dist/command-keys.js +0 -32
- package/dist/command-keys.js.map +0 -1
- package/dist/core/dispatch.d.ts +0 -101
- package/dist/core/dispatch.js +0 -636
- package/dist/core/dispatch.js.map +0 -1
- package/dist/core/engine.d.ts +0 -91
- package/dist/core/engine.js +0 -222
- package/dist/core/engine.js.map +0 -1
- package/dist/core/preprocess.d.ts +0 -46
- package/dist/core/preprocess.js +0 -146
- package/dist/core/preprocess.js.map +0 -1
- package/dist/core/progress.d.ts +0 -25
- package/dist/core/progress.js +0 -10
- package/dist/core/progress.js.map +0 -1
- package/dist/core/question.d.ts +0 -27
- package/dist/core/question.js +0 -33
- package/dist/core/question.js.map +0 -1
- package/dist/core/sink.d.ts +0 -201
- package/dist/core/sink.js +0 -300
- package/dist/core/sink.js.map +0 -1
- package/dist/core/surface.d.ts +0 -172
- package/dist/core/surface.js +0 -105
- package/dist/core/surface.js.map +0 -1
- package/dist/core/version.d.ts +0 -20
- package/dist/core/version.js +0 -82
- package/dist/core/version.js.map +0 -1
- package/dist/daemon/launch.d.ts +0 -9
- package/dist/daemon/launch.js +0 -82
- package/dist/daemon/launch.js.map +0 -1
- package/dist/lib/completer/index.d.ts +0 -15
- package/dist/lib/completer/index.js +0 -212
- package/dist/lib/completer/index.js.map +0 -1
- package/dist/lib/completer/pathComplete.helpers.d.ts +0 -22
- package/dist/lib/completer/pathComplete.helpers.js +0 -49
- package/dist/lib/completer/pathComplete.helpers.js.map +0 -1
- package/dist/lib/parser.d.ts +0 -13
- package/dist/lib/parser.js +0 -52
- package/dist/lib/parser.js.map +0 -1
- package/dist/lib/pipe.d.ts +0 -11
- package/dist/lib/pipe.js +0 -90
- package/dist/lib/pipe.js.map +0 -1
- package/dist/lib/prefetch.d.ts +0 -25
- package/dist/lib/prefetch.js +0 -64
- package/dist/lib/prefetch.js.map +0 -1
- package/dist/lib/semicolonParser.d.ts +0 -22
- package/dist/lib/semicolonParser.js +0 -53
- package/dist/lib/semicolonParser.js.map +0 -1
- package/dist/lib/spinner.d.ts +0 -23
- package/dist/lib/spinner.js +0 -71
- package/dist/lib/spinner.js.map +0 -1
- package/dist/lib/vfs/providers/static.d.ts +0 -65
- package/dist/lib/vfs/providers/static.js +0 -164
- package/dist/lib/vfs/providers/static.js.map +0 -1
- package/dist/lib/vfs/providers/static_content.d.ts +0 -27
- package/dist/lib/vfs/providers/static_content.js +0 -180
- package/dist/lib/vfs/providers/static_content.js.map +0 -1
- package/dist/lib/vfs/vfs.d.ts +0 -59
- package/dist/lib/vfs/vfs.js +0 -202
- package/dist/lib/vfs/vfs.js.map +0 -1
- package/dist/remote/discovery.d.ts +0 -23
- package/dist/remote/discovery.js +0 -55
- package/dist/remote/discovery.js.map +0 -1
- package/dist/session/index.d.ts +0 -76
- package/dist/session/index.js +0 -120
- package/dist/session/index.js.map +0 -1
package/dist/builtins/fs/cat.js
DELETED
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin cat command.
|
|
3
|
-
* Displays file contents, reported as a command envelope.
|
|
4
|
-
*/
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import { path_resolve, error_stripDebugPrefix } from '../utils.js';
|
|
7
|
-
import { files_cat as chefs_cat_cmd, files_catBinary as chefs_catBinary_cmd } from '@fnndsc/chili/commands/fs/cat.js';
|
|
8
|
-
import { cat_render } from '@fnndsc/chili/views/fs.js';
|
|
9
|
-
import { errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
10
|
-
import { sink_get } from '../../core/sink.js';
|
|
11
|
-
import * as path from 'path';
|
|
12
|
-
/** File extensions that receive syntax highlighting. */
|
|
13
|
-
const HIGHLIGHT_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);
|
|
14
|
-
/**
|
|
15
|
-
* Applies chalk-based syntax highlighting to JSON content.
|
|
16
|
-
* Returns the original string if the content is not valid JSON.
|
|
17
|
-
*
|
|
18
|
-
* @param content - Raw JSON string.
|
|
19
|
-
* @returns Highlighted string, or original on parse failure.
|
|
20
|
-
*/
|
|
21
|
-
function json_highlight(content) {
|
|
22
|
-
try {
|
|
23
|
-
JSON.parse(content);
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return content;
|
|
27
|
-
}
|
|
28
|
-
return content.replace(/("(?:\\u[0-9a-fA-F]{4}|\\[^u]|[^\\"])*"(\s*:)?|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g, (match) => {
|
|
29
|
-
if (match.endsWith(':'))
|
|
30
|
-
return chalk.cyan(match); // key
|
|
31
|
-
if (match.startsWith('"'))
|
|
32
|
-
return chalk.green(match); // string value
|
|
33
|
-
if (match === 'true' || match === 'false')
|
|
34
|
-
return chalk.yellow(match);
|
|
35
|
-
if (match === 'null')
|
|
36
|
-
return chalk.gray(match);
|
|
37
|
-
return chalk.magenta(match); // number
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Applies chalk-based syntax highlighting to YAML content line by line.
|
|
42
|
-
*
|
|
43
|
-
* @param content - Raw YAML string.
|
|
44
|
-
* @returns Highlighted string.
|
|
45
|
-
*/
|
|
46
|
-
function yaml_highlight(content) {
|
|
47
|
-
return content.split('\n').map((line) => {
|
|
48
|
-
if (/^\s*#/.test(line))
|
|
49
|
-
return chalk.gray(line);
|
|
50
|
-
const kv = line.match(/^(\s*)([\w./-]+)(\s*:\s*)(.*)/);
|
|
51
|
-
if (kv) {
|
|
52
|
-
const [, indent, key, sep, value] = kv;
|
|
53
|
-
const coloredValue = value_yamlColor(value);
|
|
54
|
-
return `${indent}${chalk.cyan(key)}${chalk.gray(sep)}${coloredValue}`;
|
|
55
|
-
}
|
|
56
|
-
const listItem = line.match(/^(\s*-\s+)(.*)/);
|
|
57
|
-
if (listItem) {
|
|
58
|
-
return `${chalk.gray(listItem[1])}${chalk.green(listItem[2])}`;
|
|
59
|
-
}
|
|
60
|
-
return line;
|
|
61
|
-
}).join('\n');
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Colors a scalar YAML value based on its type.
|
|
65
|
-
*
|
|
66
|
-
* @param value - The raw value string from a YAML key: value line.
|
|
67
|
-
* @returns Chalk-colored value string.
|
|
68
|
-
*/
|
|
69
|
-
function value_yamlColor(value) {
|
|
70
|
-
if (!value)
|
|
71
|
-
return value;
|
|
72
|
-
if (value === 'true' || value === 'false')
|
|
73
|
-
return chalk.yellow(value);
|
|
74
|
-
if (value === 'null' || value === '~')
|
|
75
|
-
return chalk.gray(value);
|
|
76
|
-
if (/^-?\d+(\.\d+)?$/.test(value))
|
|
77
|
-
return chalk.magenta(value);
|
|
78
|
-
if (/^["']/.test(value))
|
|
79
|
-
return chalk.green(value);
|
|
80
|
-
return chalk.white(value);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Applies syntax highlighting to text content based on file extension.
|
|
84
|
-
* Returns the original string unchanged when stdout is not a TTY (piping).
|
|
85
|
-
*
|
|
86
|
-
* @param content - File content string.
|
|
87
|
-
* @param filePath - Full path used to determine the file type.
|
|
88
|
-
* @returns Highlighted or original content.
|
|
89
|
-
*/
|
|
90
|
-
function content_highlight(content, filePath) {
|
|
91
|
-
if (!process.stdout.isTTY)
|
|
92
|
-
return content;
|
|
93
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
94
|
-
if (ext === '.json')
|
|
95
|
-
return json_highlight(content);
|
|
96
|
-
if (ext === '.yaml' || ext === '.yml')
|
|
97
|
-
return yaml_highlight(content);
|
|
98
|
-
return content;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* List of file extensions that are considered binary.
|
|
102
|
-
*/
|
|
103
|
-
const BINARY_EXTENSIONS = new Set([
|
|
104
|
-
'.dcm', // DICOM medical images
|
|
105
|
-
'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.webp', // Images
|
|
106
|
-
'.pdf', // Documents
|
|
107
|
-
'.zip', '.tar', '.gz', '.bz2', '.xz', '.7z', '.rar', // Archives
|
|
108
|
-
'.exe', '.dll', '.so', '.dylib', '.bin', // Executables/Libraries
|
|
109
|
-
'.mp3', '.mp4', '.avi', '.mov', '.wav', '.flac', // Media
|
|
110
|
-
]);
|
|
111
|
-
/**
|
|
112
|
-
* Checks if a file path has a binary extension.
|
|
113
|
-
*
|
|
114
|
-
* @param filePath - The file path to check.
|
|
115
|
-
* @returns True if the file has a binary extension.
|
|
116
|
-
*/
|
|
117
|
-
function extension_isBinary(filePath) {
|
|
118
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
119
|
-
return BINARY_EXTENSIONS.has(ext);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Writes a buffer to stdout with proper backpressure handling.
|
|
123
|
-
*
|
|
124
|
-
* Splits large buffers into 64KB chunks and waits for drain events when the
|
|
125
|
-
* output buffer is full. This prevents data loss when piping large binary files
|
|
126
|
-
* to external commands. Waits for all data to be flushed before resolving.
|
|
127
|
-
*
|
|
128
|
-
* @param buffer - The buffer to write to stdout.
|
|
129
|
-
* @returns A Promise that resolves when all data has been written and flushed.
|
|
130
|
-
*
|
|
131
|
-
* @example
|
|
132
|
-
* ```typescript
|
|
133
|
-
* const dicomData: Buffer = await fetchDicomFile();
|
|
134
|
-
* await buffer_writeToStdout(dicomData);
|
|
135
|
-
* ```
|
|
136
|
-
*/
|
|
137
|
-
async function buffer_writeToStdout(buffer) {
|
|
138
|
-
return new Promise((resolve, reject) => {
|
|
139
|
-
if (buffer.length === 0) {
|
|
140
|
-
resolve();
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
let offset = 0;
|
|
144
|
-
const chunkSize = 64 * 1024; // 64KB chunks
|
|
145
|
-
/**
|
|
146
|
-
* Recursively writes the next chunk of data to stdout.
|
|
147
|
-
* Handles backpressure by waiting for drain events when buffer is full.
|
|
148
|
-
*/
|
|
149
|
-
const chunk_writeNext = () => {
|
|
150
|
-
try {
|
|
151
|
-
while (offset < buffer.length) {
|
|
152
|
-
const end = Math.min(offset + chunkSize, buffer.length);
|
|
153
|
-
const chunk = buffer.subarray(offset, end);
|
|
154
|
-
offset = end;
|
|
155
|
-
const canContinue = process.stdout.write(chunk);
|
|
156
|
-
if (!canContinue) {
|
|
157
|
-
// Buffer is full, wait for drain event
|
|
158
|
-
process.stdout.once('drain', chunk_writeNext);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// All chunks written - ensure stdout is flushed before resolving
|
|
163
|
-
// Writing an empty string forces a flush check. If write() returns false,
|
|
164
|
-
// the buffer is full and we must wait for drain. This prevents truncation
|
|
165
|
-
// when piping to external processes, as Node.js won't exit until we resolve.
|
|
166
|
-
if (process.stdout.write('')) {
|
|
167
|
-
// Buffer has space, all data is flushed
|
|
168
|
-
resolve();
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
// Buffer is full, wait for final drain before resolving
|
|
172
|
-
process.stdout.once('drain', () => resolve());
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch (err) {
|
|
176
|
-
reject(err);
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
chunk_writeNext();
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Displays the content of one or more files.
|
|
184
|
-
*
|
|
185
|
-
* Supports multiple files and concatenates their output. Binary mode is applied
|
|
186
|
-
* consistently to all files if any file is detected as binary or --binary is specified.
|
|
187
|
-
* Text content and errors are buffered into the envelope; binary content streams
|
|
188
|
-
* to the terminal directly with backpressure (raw bytes are not envelope text),
|
|
189
|
-
* and the binary auto-detection notice is emitted live on the err channel so it
|
|
190
|
-
* precedes the bytes it describes.
|
|
191
|
-
*
|
|
192
|
-
* @param args - Command line arguments (file paths and optional --binary flag).
|
|
193
|
-
* @returns An envelope whose rendered text carries the (highlighted) file
|
|
194
|
-
* contents and whose model lists per-file outcomes.
|
|
195
|
-
*/
|
|
196
|
-
export async function builtin_cat(args) {
|
|
197
|
-
let binaryMode = false;
|
|
198
|
-
const filePaths = [];
|
|
199
|
-
for (const arg of args) {
|
|
200
|
-
if (arg === '--binary') {
|
|
201
|
-
binaryMode = true;
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
filePaths.push(arg);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (filePaths.length === 0) {
|
|
208
|
-
return envelope_error('', undefined, `${chalk.red('Usage: cat [--binary] <file> [file...]')}\n`);
|
|
209
|
-
}
|
|
210
|
-
let rendered = '';
|
|
211
|
-
let renderedErr = '';
|
|
212
|
-
const outcomes = [];
|
|
213
|
-
let anyFailed = false;
|
|
214
|
-
for (let i = 0; i < filePaths.length; i++) {
|
|
215
|
-
const pathArg = filePaths[i];
|
|
216
|
-
const target = await path_resolve(pathArg);
|
|
217
|
-
// Auto-detect binary files
|
|
218
|
-
const isBinaryFile = extension_isBinary(target);
|
|
219
|
-
// Inform user about auto-detection only if in interactive mode (stdout is TTY).
|
|
220
|
-
// Emitted live (not buffered) so the notice precedes the raw bytes it announces.
|
|
221
|
-
// Only show on first file to avoid spam.
|
|
222
|
-
if (i === 0 && isBinaryFile && !binaryMode && process.stdout.isTTY) {
|
|
223
|
-
sink_get().err_write(`${chalk.cyan(`Info: ${pathArg} detected as binary file (${path.extname(target)}), using binary mode.`)}\n`);
|
|
224
|
-
sink_get().err_write(`${chalk.cyan('Tip: Use "cat --binary <file>" to explicitly request binary mode.')}\n`);
|
|
225
|
-
sink_get().err_write('\n');
|
|
226
|
-
}
|
|
227
|
-
// Use binary mode if requested OR if file is detected as binary
|
|
228
|
-
if (binaryMode || isBinaryFile) {
|
|
229
|
-
const result = await chefs_catBinary_cmd(target);
|
|
230
|
-
if (!result.ok) {
|
|
231
|
-
const error = errorStack.stack_pop();
|
|
232
|
-
renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
|
|
233
|
-
outcomes.push({ path: pathArg, ok: false, binary: true });
|
|
234
|
-
anyFailed = true;
|
|
235
|
-
process.exitCode = 1;
|
|
236
|
-
continue;
|
|
237
|
-
}
|
|
238
|
-
// Output raw buffer to stdout with backpressure handling
|
|
239
|
-
await buffer_writeToStdout(result.value);
|
|
240
|
-
outcomes.push({ path: pathArg, ok: true, binary: true, bytes: result.value.length });
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
const result = await chefs_cat_cmd(target);
|
|
244
|
-
if (!result.ok) {
|
|
245
|
-
const error = errorStack.stack_pop();
|
|
246
|
-
renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
|
|
247
|
-
outcomes.push({ path: pathArg, ok: false, binary: false });
|
|
248
|
-
anyFailed = true;
|
|
249
|
-
process.exitCode = 1;
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
const highlighted = content_highlight(result.value, target);
|
|
253
|
-
rendered += `${cat_render(highlighted, pathArg)}\n`;
|
|
254
|
-
outcomes.push({ path: pathArg, ok: true, binary: false });
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
const model = { kind: 'fs.cat', data: outcomes };
|
|
258
|
-
if (anyFailed) {
|
|
259
|
-
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
260
|
-
envelope.model = model;
|
|
261
|
-
return envelope;
|
|
262
|
-
}
|
|
263
|
-
const envelope = envelope_ok(rendered, model);
|
|
264
|
-
return envelope;
|
|
265
|
-
}
|
|
266
|
-
//# sourceMappingURL=cat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cd.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { CommandEnvelope } from '@fnndsc/cumin';
|
|
2
|
-
/**
|
|
3
|
-
* Interface representing a FileBrowserFolder from ChRIS API.
|
|
4
|
-
*/
|
|
5
|
-
interface FileBrowserFolder {
|
|
6
|
-
path?: string;
|
|
7
|
-
data?: {
|
|
8
|
-
path?: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Normalizes a logical path for VFS comparison by stripping a single trailing
|
|
13
|
-
* slash (except for the root path).
|
|
14
|
-
*
|
|
15
|
-
* @param logicalPath - The resolved logical path.
|
|
16
|
-
* @returns The normalized path.
|
|
17
|
-
*/
|
|
18
|
-
export declare function vfsPath_normalize(logicalPath: string): string;
|
|
19
|
-
/**
|
|
20
|
-
* Reports whether a path is a structural VFS container (always valid).
|
|
21
|
-
*
|
|
22
|
-
* @param cleanPath - The normalized path.
|
|
23
|
-
* @returns True if the path is a known structural VFS container.
|
|
24
|
-
*/
|
|
25
|
-
export declare function vfsPath_isStructural(cleanPath: string): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Verifies if a given FileBrowserFolder object exactly matches the validation path.
|
|
28
|
-
*
|
|
29
|
-
* @param folder - The FileBrowserFolder object to verify.
|
|
30
|
-
* @param validationPath - The path to match against.
|
|
31
|
-
* @returns True if the folder path exactly matches validationPath, false otherwise.
|
|
32
|
-
*/
|
|
33
|
-
export declare function folder_verifyPathMatch(folder: FileBrowserFolder | null | undefined, validationPath: string): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Changes the current working directory in the ChRIS filesystem context.
|
|
36
|
-
* Validates the existence of the target path before setting it.
|
|
37
|
-
*
|
|
38
|
-
* @param args - An array containing the target path as the first element.
|
|
39
|
-
* @returns An envelope carrying the new working directory on success.
|
|
40
|
-
*/
|
|
41
|
-
export declare function builtin_cd(args: string[]): Promise<CommandEnvelope>;
|
|
42
|
-
export {};
|
package/dist/builtins/fs/cd.js
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin cd command.
|
|
3
|
-
* Changes the current working directory, reported as a command envelope.
|
|
4
|
-
*/
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import { session } from '../../session/index.js';
|
|
7
|
-
import { path_resolve, path_resolveLinks, error_stripDebugPrefix } from '../utils.js';
|
|
8
|
-
import { envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
9
|
-
/**
|
|
10
|
-
* Structural VFS container paths that exist by definition and need no API
|
|
11
|
-
* validation when `cd`-ing into them.
|
|
12
|
-
*/
|
|
13
|
-
const STRUCTURAL_VFS_PATHS = ['/', '/net', '/net/pacs', '/net/pacs/queries', '/proc', '/proc/jobs'];
|
|
14
|
-
/**
|
|
15
|
-
* Normalizes a logical path for VFS comparison by stripping a single trailing
|
|
16
|
-
* slash (except for the root path).
|
|
17
|
-
*
|
|
18
|
-
* @param logicalPath - The resolved logical path.
|
|
19
|
-
* @returns The normalized path.
|
|
20
|
-
*/
|
|
21
|
-
export function vfsPath_normalize(logicalPath) {
|
|
22
|
-
return logicalPath.endsWith('/') && logicalPath.length > 1 ? logicalPath.slice(0, -1) : logicalPath;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Reports whether a path is a structural VFS container (always valid).
|
|
26
|
-
*
|
|
27
|
-
* @param cleanPath - The normalized path.
|
|
28
|
-
* @returns True if the path is a known structural VFS container.
|
|
29
|
-
*/
|
|
30
|
-
export function vfsPath_isStructural(cleanPath) {
|
|
31
|
-
return STRUCTURAL_VFS_PATHS.includes(cleanPath);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Verifies if a given FileBrowserFolder object exactly matches the validation path.
|
|
35
|
-
*
|
|
36
|
-
* @param folder - The FileBrowserFolder object to verify.
|
|
37
|
-
* @param validationPath - The path to match against.
|
|
38
|
-
* @returns True if the folder path exactly matches validationPath, false otherwise.
|
|
39
|
-
*/
|
|
40
|
-
export function folder_verifyPathMatch(folder, validationPath) {
|
|
41
|
-
if (!folder) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
const folderPath = folder.data?.path || folder.path || '';
|
|
45
|
-
// Normalize both by removing all leading and trailing slashes to be robust against API inconsistencies
|
|
46
|
-
const cleanFolder = folderPath.replace(/^\/+|\/+$/g, '');
|
|
47
|
-
const cleanValidation = validationPath.replace(/^\/+|\/+$/g, '');
|
|
48
|
-
return cleanFolder === cleanValidation;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Builds the success envelope for a completed directory change.
|
|
52
|
-
*
|
|
53
|
-
* @param newCwd - The working directory that is now current.
|
|
54
|
-
* @param rendered - Any stdout text (debug traces) produced along the way.
|
|
55
|
-
* @returns An ok envelope carrying the fs.cwd model.
|
|
56
|
-
*/
|
|
57
|
-
function cdSuccess_envelope(newCwd, rendered) {
|
|
58
|
-
return envelope_ok(rendered, { kind: 'fs.cwd', data: { path: newCwd } });
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Handles `cd` into a virtual (VFS) path: structural containers are accepted
|
|
62
|
-
* directly, deeper VFS paths are validated and their listing cached.
|
|
63
|
-
*
|
|
64
|
-
* @param cleanPath - The normalized virtual path.
|
|
65
|
-
* @param pathArg - The original user-supplied path (for error messages).
|
|
66
|
-
* @returns The command envelope for the attempt.
|
|
67
|
-
*/
|
|
68
|
-
async function cdVirtual_handle(cleanPath, pathArg) {
|
|
69
|
-
if (vfsPath_isStructural(cleanPath)) {
|
|
70
|
-
await session.setCWD(cleanPath);
|
|
71
|
-
return cdSuccess_envelope(cleanPath, '');
|
|
72
|
-
}
|
|
73
|
-
// For deeper VFS paths (e.g. /net/pacs/queries/<id>), validate and cache the
|
|
74
|
-
// result so a subsequent `ls` doesn't need to re-fetch.
|
|
75
|
-
const { vfsDispatcher } = await import('@fnndsc/salsa');
|
|
76
|
-
const listResult = await vfsDispatcher.list(cleanPath);
|
|
77
|
-
if (!listResult.ok) {
|
|
78
|
-
const { errorStack } = await import('@fnndsc/cumin');
|
|
79
|
-
const lastError = errorStack.stack_pop();
|
|
80
|
-
const detail = lastError ? error_stripDebugPrefix(lastError.message) : 'No such file or directory';
|
|
81
|
-
return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: ${detail}`)}\n`);
|
|
82
|
-
}
|
|
83
|
-
const { listCache_get } = await import('@fnndsc/cumin');
|
|
84
|
-
listCache_get().cache_set(cleanPath, listResult.value);
|
|
85
|
-
await session.setCWD(cleanPath);
|
|
86
|
-
return cdSuccess_envelope(cleanPath, '');
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Handles `cd` into a real (API-backed) ChRIS folder: resolves the validation
|
|
90
|
-
* path, then confirms the folder exists with an exact path match before setting
|
|
91
|
-
* the working directory.
|
|
92
|
-
*
|
|
93
|
-
* @param logicalPath - The resolved logical path.
|
|
94
|
-
* @param pathArg - The original user-supplied path (for error messages).
|
|
95
|
-
* @returns The command envelope for the attempt.
|
|
96
|
-
*/
|
|
97
|
-
async function cdReal_handle(logicalPath, pathArg) {
|
|
98
|
-
const client = await session.connection.client_get();
|
|
99
|
-
if (!client) {
|
|
100
|
-
return envelope_error('', undefined, `${chalk.red('Not connected to ChRIS.')}\n`);
|
|
101
|
-
}
|
|
102
|
-
const debugEnabled = session.connection.config?.debug === true;
|
|
103
|
-
let rendered = '';
|
|
104
|
-
let validationPath;
|
|
105
|
-
if (session.physicalMode_get()) {
|
|
106
|
-
validationPath = await path_resolveLinks(logicalPath);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const { logical_toPhysical } = await import('@fnndsc/chili/utils');
|
|
110
|
-
const physicalResult = await logical_toPhysical(logicalPath);
|
|
111
|
-
if (!physicalResult.ok) {
|
|
112
|
-
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
113
|
-
if (debugEnabled) {
|
|
114
|
-
renderedErr += `${chalk.gray(` Logical path: ${logicalPath}`)}\n`;
|
|
115
|
-
}
|
|
116
|
-
return envelope_error('', undefined, renderedErr);
|
|
117
|
-
}
|
|
118
|
-
validationPath = physicalResult.value;
|
|
119
|
-
}
|
|
120
|
-
if (debugEnabled) {
|
|
121
|
-
rendered += `${chalk.gray(`cd: ${pathArg} → logical: ${logicalPath} → validation: ${validationPath}`)}\n`;
|
|
122
|
-
}
|
|
123
|
-
const cwdPath = session.physicalMode_get() ? validationPath : logicalPath;
|
|
124
|
-
const currentCwd = await session.getCWD();
|
|
125
|
-
if (currentCwd === cwdPath) {
|
|
126
|
-
if (debugEnabled) {
|
|
127
|
-
rendered += `${chalk.gray(` Already in target directory, skipping validation`)}\n`;
|
|
128
|
-
}
|
|
129
|
-
return cdSuccess_envelope(cwdPath, rendered);
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
const folder = (await client.getFileBrowserFolderByPath(validationPath));
|
|
133
|
-
if (folder_verifyPathMatch(folder, validationPath)) {
|
|
134
|
-
await session.setCWD(cwdPath);
|
|
135
|
-
return cdSuccess_envelope(cwdPath, rendered);
|
|
136
|
-
}
|
|
137
|
-
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
138
|
-
if (debugEnabled) {
|
|
139
|
-
if (!folder) {
|
|
140
|
-
renderedErr += `${chalk.gray(` API returned null for path: ${validationPath}`)}\n`;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
const folderPath = folder.data?.path || folder.path;
|
|
144
|
-
renderedErr += `${chalk.gray(` API returned mismatched folder path: ${folderPath} (expected: ${validationPath})`)}\n`;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
const envelope = envelope_error(rendered, undefined, renderedErr);
|
|
148
|
-
return envelope;
|
|
149
|
-
}
|
|
150
|
-
catch (apiError) {
|
|
151
|
-
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
152
|
-
if (debugEnabled) {
|
|
153
|
-
const msg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
154
|
-
renderedErr += `${chalk.gray(` API error: ${msg}`)}\n`;
|
|
155
|
-
}
|
|
156
|
-
return envelope_error(rendered, undefined, renderedErr);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Changes the current working directory in the ChRIS filesystem context.
|
|
161
|
-
* Validates the existence of the target path before setting it.
|
|
162
|
-
*
|
|
163
|
-
* @param args - An array containing the target path as the first element.
|
|
164
|
-
* @returns An envelope carrying the new working directory on success.
|
|
165
|
-
*/
|
|
166
|
-
export async function builtin_cd(args) {
|
|
167
|
-
const pathArg = args.length > 0 ? args.join(' ') : undefined;
|
|
168
|
-
// 'cd' with no args goes to home
|
|
169
|
-
if (!pathArg) {
|
|
170
|
-
return builtin_cd(['~']);
|
|
171
|
-
}
|
|
172
|
-
try {
|
|
173
|
-
const logicalPath = await path_resolve(pathArg);
|
|
174
|
-
const { vfsDispatcher } = await import('@fnndsc/salsa');
|
|
175
|
-
const cleanPath = vfsPath_normalize(logicalPath);
|
|
176
|
-
// Treat the path as virtual if it is, or is a parent of, any registered
|
|
177
|
-
// provider prefix (e.g. /proc is parent of /proc/feeds).
|
|
178
|
-
const isParentOfVfs = vfsDispatcher.providers_get().some((p) => p.prefix.startsWith(cleanPath + '/'));
|
|
179
|
-
const isVirtual = cleanPath === '/' ||
|
|
180
|
-
cleanPath === '/net' ||
|
|
181
|
-
isParentOfVfs ||
|
|
182
|
-
vfsDispatcher.provider_get(cleanPath).prefix !== '';
|
|
183
|
-
if (isVirtual) {
|
|
184
|
-
return cdVirtual_handle(cleanPath, pathArg);
|
|
185
|
-
}
|
|
186
|
-
return cdReal_handle(logicalPath, pathArg);
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
190
|
-
return envelope_error('', undefined, `${chalk.red(`Failed to cd: ${msg}`)}\n`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
//# sourceMappingURL=cd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cp.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
2
|
-
/**
|
|
3
|
-
* Copies a file or directory.
|
|
4
|
-
* Supports multiple sources when destination is a directory.
|
|
5
|
-
*
|
|
6
|
-
* @param args - [flags, src1, src2, ..., dest]
|
|
7
|
-
* @returns An envelope whose rendered text reports progress and results and
|
|
8
|
-
* whose model carries per-source outcomes.
|
|
9
|
-
*/
|
|
10
|
-
export declare function builtin_cp(args: string[]): Promise<CommandEnvelope>;
|
package/dist/builtins/fs/cp.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin cp command.
|
|
3
|
-
* Copies files or directories, reported as a command envelope.
|
|
4
|
-
*/
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { listCache_get, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
8
|
-
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
9
|
-
import { files_cp as chefs_cp_cmd } from '@fnndsc/chili/commands/fs/cp.js';
|
|
10
|
-
import { cp_render } from '@fnndsc/chili/views/fs.js';
|
|
11
|
-
/**
|
|
12
|
-
* Copies a file or directory.
|
|
13
|
-
* Supports multiple sources when destination is a directory.
|
|
14
|
-
*
|
|
15
|
-
* @param args - [flags, src1, src2, ..., dest]
|
|
16
|
-
* @returns An envelope whose rendered text reports progress and results and
|
|
17
|
-
* whose model carries per-source outcomes.
|
|
18
|
-
*/
|
|
19
|
-
export async function builtin_cp(args) {
|
|
20
|
-
const parsed = commandArgs_process(args);
|
|
21
|
-
const pathArgs = parsed._;
|
|
22
|
-
if (pathArgs.length < 2) {
|
|
23
|
-
return envelope_error(`${chalk.red('Usage: cp [-r] <source...> <dest>')}\n`);
|
|
24
|
-
}
|
|
25
|
-
const recursive = !!parsed['r'] || !!parsed['recursive'];
|
|
26
|
-
// Last arg is destination, all others are sources
|
|
27
|
-
const dest = pathArgs[pathArgs.length - 1];
|
|
28
|
-
const sources = pathArgs.slice(0, -1);
|
|
29
|
-
const destPath = await path_resolve(dest);
|
|
30
|
-
const listCache = listCache_get();
|
|
31
|
-
let successCount = 0;
|
|
32
|
-
let failCount = 0;
|
|
33
|
-
let rendered = '';
|
|
34
|
-
let renderedErr = '';
|
|
35
|
-
const outcomes = [];
|
|
36
|
-
for (const src of sources) {
|
|
37
|
-
try {
|
|
38
|
-
const srcPath = await path_resolve(src);
|
|
39
|
-
// For multiple sources, show which file we're copying
|
|
40
|
-
if (sources.length > 1) {
|
|
41
|
-
rendered += `${chalk.gray(`Copying ${srcPath}...`)}\n`;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
rendered += `Copying ${srcPath} to ${destPath}...\n`;
|
|
45
|
-
}
|
|
46
|
-
const success = await chefs_cp_cmd(srcPath, destPath, { recursive });
|
|
47
|
-
if (sources.length === 1) {
|
|
48
|
-
rendered += `${cp_render(srcPath, destPath, success)}\n`;
|
|
49
|
-
}
|
|
50
|
-
outcomes.push({ source: srcPath, copied: success });
|
|
51
|
-
if (success) {
|
|
52
|
-
successCount++;
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
failCount++;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
60
|
-
renderedErr += `${chalk.red(`cp: ${src}: ${msg}`)}\n`;
|
|
61
|
-
outcomes.push({ source: src, copied: false });
|
|
62
|
-
failCount++;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Invalidate destination directory (always, since files copied into it)
|
|
66
|
-
listCache.cache_invalidate(destPath);
|
|
67
|
-
const destParent = path.posix.dirname(destPath);
|
|
68
|
-
listCache.cache_invalidate(destParent);
|
|
69
|
-
// Summary for multiple files
|
|
70
|
-
if (sources.length > 1) {
|
|
71
|
-
if (failCount === 0) {
|
|
72
|
-
rendered += `${chalk.green(`✓ Copied ${successCount} file(s) to ${destPath}`)}\n`;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
rendered += `${chalk.yellow(`⚠ Copied ${successCount} file(s), ${failCount} failed`)}\n`;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const modelData = { dest: destPath, outcomes, copied: successCount, failed: failCount };
|
|
79
|
-
if (failCount > 0) {
|
|
80
|
-
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
81
|
-
envelope.model = { kind: 'fs.cp', data: modelData };
|
|
82
|
-
return envelope;
|
|
83
|
-
}
|
|
84
|
-
return envelope_ok(rendered, { kind: 'fs.cp', data: modelData });
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=cp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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"}
|