@fnndsc/brasa 0.9.2 → 0.10.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/buildinfo.json +1 -0
- package/dist/builtins/argumentTokens.d.ts +18 -0
- package/dist/builtins/argumentTokens.js +58 -0
- package/dist/builtins/argumentTokens.js.map +1 -0
- package/dist/builtins/executable.d.ts +3 -7
- package/dist/builtins/executable.js +32 -29
- package/dist/builtins/executable.js.map +1 -1
- package/dist/builtins/feedCreation.d.ts +23 -0
- package/dist/builtins/feedCreation.js +45 -0
- package/dist/builtins/feedCreation.js.map +1 -0
- package/dist/builtins/fs/cat.args.d.ts +36 -0
- package/dist/builtins/fs/cat.args.js +63 -0
- package/dist/builtins/fs/cat.args.js.map +1 -0
- package/dist/builtins/fs/cat.d.ts +2 -2
- package/dist/builtins/fs/cat.js +222 -101
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.js +41 -5
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/cp.js +3 -2
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +1 -1
- package/dist/builtins/fs/download.js +52 -13
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/du.js +15 -1
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/ls.js +10 -1
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/fs/mv.js +7 -3
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.args.d.ts +14 -1
- package/dist/builtins/fs/pull.args.js +72 -9
- package/dist/builtins/fs/pull.args.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +1 -0
- package/dist/builtins/fs/pull.js +191 -259
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/rm.js +4 -0
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/tree.js +7 -3
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.js +29 -2
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/help.d.ts +7 -0
- package/dist/builtins/help.js +144 -36
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/index.d.ts +1 -0
- package/dist/builtins/index.js +1 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +1 -0
- package/dist/builtins/net/pacs.js +5 -1
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/pacsUtils.d.ts +5 -4
- package/dist/builtins/net/pacsUtils.js +12 -32
- package/dist/builtins/net/pacsUtils.js.map +1 -1
- package/dist/builtins/net/query.js +4 -1
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.d.ts +14 -0
- package/dist/builtins/net/status.js +210 -0
- package/dist/builtins/net/status.js.map +1 -0
- package/dist/builtins/pluginExecute.d.ts +3 -2
- package/dist/builtins/pluginExecute.js +41 -70
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/builtins/pluginSelector.d.ts +15 -0
- package/dist/builtins/pluginSelector.js +21 -0
- package/dist/builtins/pluginSelector.js.map +1 -0
- package/dist/builtins/proc.js +106 -4
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.js +8 -3
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/group.d.ts +1 -1
- package/dist/builtins/res/group.js +122 -5
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/pipeline.args.d.ts +4 -0
- package/dist/builtins/res/pipeline.args.js +63 -12
- package/dist/builtins/res/pipeline.args.js.map +1 -1
- package/dist/builtins/res/pipeline.d.ts +3 -1
- package/dist/builtins/res/pipeline.js +155 -60
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/pipeline.manifest.d.ts +15 -0
- package/dist/builtins/res/pipeline.manifest.js +93 -0
- package/dist/builtins/res/pipeline.manifest.js.map +1 -0
- package/dist/builtins/res/plugin.js +14 -7
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/builtins/res/user.d.ts +8 -0
- package/dist/builtins/res/user.js +87 -0
- package/dist/builtins/res/user.js.map +1 -0
- package/dist/builtins/store.js +24 -3
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/fortune.d.ts +9 -0
- package/dist/builtins/sys/fortune.js +16 -1
- package/dist/builtins/sys/fortune.js.map +1 -1
- package/dist/builtins/sys/whoami.d.ts +13 -1
- package/dist/builtins/sys/whoami.js +47 -2
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/builtins/utils.d.ts +14 -1
- package/dist/builtins/utils.js +13 -3
- package/dist/builtins/utils.js.map +1 -1
- package/dist/builtins/wildcard.d.ts +31 -0
- package/dist/builtins/wildcard.js +112 -50
- package/dist/builtins/wildcard.js.map +1 -1
- package/dist/command-keys.js +2 -1
- package/dist/command-keys.js.map +1 -1
- package/dist/core/cancellation.d.ts +28 -0
- package/dist/core/cancellation.js +70 -0
- package/dist/core/cancellation.js.map +1 -0
- package/dist/core/dispatch.d.ts +1 -8
- package/dist/core/dispatch.js +82 -82
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/elevation.d.ts +35 -0
- package/dist/core/elevation.js +77 -0
- package/dist/core/elevation.js.map +1 -0
- package/dist/core/engine.d.ts +12 -0
- package/dist/core/engine.js +35 -8
- package/dist/core/engine.js.map +1 -1
- package/dist/core/preprocess.d.ts +11 -4
- package/dist/core/preprocess.js +43 -10
- package/dist/core/preprocess.js.map +1 -1
- package/dist/core/progress.d.ts +15 -5
- package/dist/core/progress.js +14 -0
- package/dist/core/progress.js.map +1 -1
- package/dist/core/promptContext.d.ts +3 -5
- package/dist/core/promptContext.js +9 -2
- package/dist/core/promptContext.js.map +1 -1
- package/dist/core/sink.d.ts +9 -0
- package/dist/core/sink.js +23 -3
- package/dist/core/sink.js.map +1 -1
- package/dist/core/surface.d.ts +14 -0
- package/dist/core/surface.js +5 -0
- package/dist/core/surface.js.map +1 -1
- package/dist/core/version.d.ts +34 -0
- package/dist/core/version.js +51 -0
- package/dist/core/version.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/completer/index.js +39 -1
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/parser.d.ts +75 -2
- package/dist/lib/parser.js +158 -15
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/vfs/providers/binEntry.d.ts +20 -0
- package/dist/lib/vfs/providers/binEntry.js +47 -0
- package/dist/lib/vfs/providers/binEntry.js.map +1 -0
- package/dist/lib/vfs/providers/static.js +1 -0
- package/dist/lib/vfs/providers/static.js.map +1 -1
- package/dist/lib/vfs/providers/static_content.js +5 -36
- package/dist/lib/vfs/providers/static_content.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +7 -0
- package/dist/lib/vfs/vfs.js +25 -0
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/session/index.d.ts +18 -0
- package/dist/session/index.js +29 -1
- package/dist/session/index.js.map +1 -1
- package/package.json +10 -5
package/dist/builtins/fs/cat.js
CHANGED
|
@@ -1,100 +1,176 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file
|
|
3
|
-
*
|
|
2
|
+
* @file Text and binary implementation of the `cat` builtin.
|
|
3
|
+
*
|
|
4
|
+
* Reads ChRIS files through ChILI, streams binary bytes through the active
|
|
5
|
+
* output sink, and returns text in command envelopes. Text highlighting uses
|
|
6
|
+
* cli-highlight with a forced-color theme only after argument/TTY policy has
|
|
7
|
+
* allowed ANSI; ordinary pipe and redirect sinks strip ANSI downstream.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
4
10
|
*/
|
|
11
|
+
import * as path from 'path';
|
|
5
12
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
13
|
+
import { highlight, supportsLanguage } from 'cli-highlight';
|
|
7
14
|
import { files_cat as chefs_cat_cmd, files_catBinary as chefs_catBinary_cmd } from '@fnndsc/chili/commands/fs/cat.js';
|
|
8
15
|
import { cat_render } from '@fnndsc/chili/views/fs.js';
|
|
9
16
|
import { errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
17
|
+
import { path_resolve, error_stripDebugPrefix } from '../utils.js';
|
|
10
18
|
import { sink_get } from '../../core/sink.js';
|
|
11
|
-
import
|
|
12
|
-
/**
|
|
13
|
-
const
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
19
|
+
import { CAT_USAGE, catArguments_parse, } from './cat.args.js';
|
|
20
|
+
/** Delay before a slow group projection becomes visible as progress. */
|
|
21
|
+
const GROUP_PROGRESS_DELAY_MS = 300;
|
|
22
|
+
/** User-facing status shown while CUBE group memberships are hydrated. */
|
|
23
|
+
const GROUP_PROGRESS_LABEL = 'Resolving /etc/group memberships…';
|
|
24
|
+
/** cli-highlight language names inferred for commonly viewed text formats. */
|
|
25
|
+
const SOURCE_LANGUAGE_BY_EXTENSION = {
|
|
26
|
+
'.bash': 'bash',
|
|
27
|
+
'.c': 'c',
|
|
28
|
+
'.cc': 'cpp',
|
|
29
|
+
'.cfg': 'ini',
|
|
30
|
+
'.cjs': 'javascript',
|
|
31
|
+
'.conf': 'ini',
|
|
32
|
+
'.cpp': 'cpp',
|
|
33
|
+
'.css': 'css',
|
|
34
|
+
'.cts': 'typescript',
|
|
35
|
+
'.cxx': 'cpp',
|
|
36
|
+
'.diff': 'diff',
|
|
37
|
+
'.dockerfile': 'dockerfile',
|
|
38
|
+
'.go': 'go',
|
|
39
|
+
'.h': 'c',
|
|
40
|
+
'.hh': 'cpp',
|
|
41
|
+
'.hpp': 'cpp',
|
|
42
|
+
'.htm': 'xml',
|
|
43
|
+
'.html': 'xml',
|
|
44
|
+
'.hxx': 'cpp',
|
|
45
|
+
'.ini': 'ini',
|
|
46
|
+
'.java': 'java',
|
|
47
|
+
'.js': 'javascript',
|
|
48
|
+
'.json': 'json',
|
|
49
|
+
'.jsonc': 'json',
|
|
50
|
+
'.jsx': 'jsx',
|
|
51
|
+
'.kt': 'kotlin',
|
|
52
|
+
'.kts': 'kotlin',
|
|
53
|
+
'.less': 'less',
|
|
54
|
+
'.lua': 'lua',
|
|
55
|
+
'.markdown': 'markdown',
|
|
56
|
+
'.md': 'markdown',
|
|
57
|
+
'.mjs': 'javascript',
|
|
58
|
+
'.mts': 'typescript',
|
|
59
|
+
'.patch': 'diff',
|
|
60
|
+
'.php': 'php',
|
|
61
|
+
'.pl': 'perl',
|
|
62
|
+
'.pm': 'perl',
|
|
63
|
+
'.proto': 'protobuf',
|
|
64
|
+
'.py': 'python',
|
|
65
|
+
'.pyw': 'python',
|
|
66
|
+
'.r': 'r',
|
|
67
|
+
'.rb': 'ruby',
|
|
68
|
+
'.rs': 'rust',
|
|
69
|
+
'.sass': 'scss',
|
|
70
|
+
'.scss': 'scss',
|
|
71
|
+
'.sh': 'bash',
|
|
72
|
+
'.sql': 'sql',
|
|
73
|
+
'.svg': 'xml',
|
|
74
|
+
'.swift': 'swift',
|
|
75
|
+
'.toml': 'toml',
|
|
76
|
+
'.ts': 'typescript',
|
|
77
|
+
'.tsx': 'tsx',
|
|
78
|
+
'.xml': 'xml',
|
|
79
|
+
'.yaml': 'yaml',
|
|
80
|
+
'.yml': 'yaml',
|
|
81
|
+
'.zsh': 'bash',
|
|
82
|
+
};
|
|
83
|
+
/** cli-highlight language names inferred from conventional extensionless files. */
|
|
84
|
+
const SOURCE_LANGUAGE_BY_BASENAME = {
|
|
85
|
+
'.env': 'ini',
|
|
86
|
+
'dockerfile': 'dockerfile',
|
|
87
|
+
'gnumakefile': 'makefile',
|
|
88
|
+
'makefile': 'makefile',
|
|
89
|
+
};
|
|
90
|
+
/** Forced-color palette used only after terminal/highlight policy allows ANSI. */
|
|
91
|
+
const HIGHLIGHT_COLOR = new chalk.Instance({ level: 3 });
|
|
92
|
+
/** High-contrast token palette shared by every highlighted language. */
|
|
93
|
+
const HIGHLIGHT_THEME = {
|
|
94
|
+
addition: HIGHLIGHT_COLOR.green,
|
|
95
|
+
attr: HIGHLIGHT_COLOR.yellow,
|
|
96
|
+
attribute: HIGHLIGHT_COLOR.cyan,
|
|
97
|
+
built_in: HIGHLIGHT_COLOR.cyanBright,
|
|
98
|
+
bullet: HIGHLIGHT_COLOR.yellow,
|
|
99
|
+
class: HIGHLIGHT_COLOR.blueBright,
|
|
100
|
+
code: HIGHLIGHT_COLOR.green,
|
|
101
|
+
comment: HIGHLIGHT_COLOR.gray,
|
|
102
|
+
deletion: HIGHLIGHT_COLOR.redBright,
|
|
103
|
+
doctag: HIGHLIGHT_COLOR.gray,
|
|
104
|
+
emphasis: HIGHLIGHT_COLOR.italic,
|
|
105
|
+
function: HIGHLIGHT_COLOR.yellowBright,
|
|
106
|
+
keyword: HIGHLIGHT_COLOR.blueBright,
|
|
107
|
+
link: HIGHLIGHT_COLOR.blueBright.underline,
|
|
108
|
+
literal: HIGHLIGHT_COLOR.yellowBright,
|
|
109
|
+
meta: HIGHLIGHT_COLOR.magenta,
|
|
110
|
+
'meta-keyword': HIGHLIGHT_COLOR.magentaBright,
|
|
111
|
+
'meta-string': HIGHLIGHT_COLOR.green,
|
|
112
|
+
name: HIGHLIGHT_COLOR.cyanBright,
|
|
113
|
+
number: HIGHLIGHT_COLOR.magentaBright,
|
|
114
|
+
params: HIGHLIGHT_COLOR.white,
|
|
115
|
+
quote: HIGHLIGHT_COLOR.gray,
|
|
116
|
+
regexp: HIGHLIGHT_COLOR.redBright,
|
|
117
|
+
section: HIGHLIGHT_COLOR.magentaBright.bold,
|
|
118
|
+
'selector-attr': HIGHLIGHT_COLOR.green,
|
|
119
|
+
'selector-class': HIGHLIGHT_COLOR.yellow,
|
|
120
|
+
'selector-id': HIGHLIGHT_COLOR.magentaBright,
|
|
121
|
+
'selector-pseudo': HIGHLIGHT_COLOR.blueBright,
|
|
122
|
+
'selector-tag': HIGHLIGHT_COLOR.cyan,
|
|
123
|
+
string: HIGHLIGHT_COLOR.green,
|
|
124
|
+
strong: HIGHLIGHT_COLOR.bold,
|
|
125
|
+
subst: HIGHLIGHT_COLOR.cyan,
|
|
126
|
+
symbol: HIGHLIGHT_COLOR.magentaBright,
|
|
127
|
+
tag: HIGHLIGHT_COLOR.blueBright,
|
|
128
|
+
'template-tag': HIGHLIGHT_COLOR.magenta,
|
|
129
|
+
'template-variable': HIGHLIGHT_COLOR.cyan,
|
|
130
|
+
title: HIGHLIGHT_COLOR.cyanBright,
|
|
131
|
+
type: HIGHLIGHT_COLOR.cyan,
|
|
132
|
+
variable: HIGHLIGHT_COLOR.cyanBright,
|
|
133
|
+
};
|
|
63
134
|
/**
|
|
64
|
-
*
|
|
135
|
+
* Infers a syntax grammar from a file extension or conventional basename.
|
|
65
136
|
*
|
|
66
|
-
* @param
|
|
67
|
-
* @returns
|
|
137
|
+
* @param filePath - Resolved source path.
|
|
138
|
+
* @returns cli-highlight language name, or undefined for an unknown format.
|
|
68
139
|
*/
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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);
|
|
140
|
+
function sourceLanguage_get(filePath) {
|
|
141
|
+
const basename = path.basename(filePath).toLowerCase();
|
|
142
|
+
return SOURCE_LANGUAGE_BY_BASENAME[basename]
|
|
143
|
+
?? SOURCE_LANGUAGE_BY_EXTENSION[path.extname(basename).toLowerCase()];
|
|
81
144
|
}
|
|
82
145
|
/**
|
|
83
|
-
* Applies syntax highlighting to
|
|
84
|
-
*
|
|
146
|
+
* Applies syntax highlighting according to explicit flags, filename inference,
|
|
147
|
+
* and terminal detection.
|
|
85
148
|
*
|
|
86
149
|
* @param content - File content string.
|
|
87
150
|
* @param filePath - Full path used to determine the file type.
|
|
151
|
+
* @param mode - Automatic terminal policy, forced highlighting, or disabled highlighting.
|
|
152
|
+
* @param language - Explicit language that forces highlighting when provided.
|
|
88
153
|
* @returns Highlighted or original content.
|
|
89
154
|
*/
|
|
90
|
-
function content_highlight(content, filePath) {
|
|
91
|
-
if (
|
|
155
|
+
function content_highlight(content, filePath, mode, language) {
|
|
156
|
+
if (mode === 'never')
|
|
92
157
|
return content;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
return
|
|
158
|
+
if (language) {
|
|
159
|
+
return highlight(content, { language, ignoreIllegals: true, theme: HIGHLIGHT_THEME });
|
|
160
|
+
}
|
|
161
|
+
if (mode === 'auto' && !process.stdout.isTTY)
|
|
162
|
+
return content;
|
|
163
|
+
const sourceLanguage = sourceLanguage_get(filePath);
|
|
164
|
+
if (sourceLanguage) {
|
|
165
|
+
return highlight(content, {
|
|
166
|
+
language: sourceLanguage,
|
|
167
|
+
ignoreIllegals: true,
|
|
168
|
+
theme: HIGHLIGHT_THEME,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (mode === 'always') {
|
|
172
|
+
return highlight(content, { ignoreIllegals: true, theme: HIGHLIGHT_THEME });
|
|
173
|
+
}
|
|
98
174
|
return content;
|
|
99
175
|
}
|
|
100
176
|
/**
|
|
@@ -118,53 +194,98 @@ function extension_isBinary(filePath) {
|
|
|
118
194
|
const ext = path.extname(filePath).toLowerCase();
|
|
119
195
|
return BINARY_EXTENSIONS.has(ext);
|
|
120
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Reads one text target, adding delayed semantic progress for `/etc/group`.
|
|
199
|
+
*
|
|
200
|
+
* Fast cache hits complete before the delay. Inspection progress is ephemeral,
|
|
201
|
+
* so pipe and redirect sinks drop it while interactive surfaces show a spinner.
|
|
202
|
+
*
|
|
203
|
+
* @param target - Resolved VFS path.
|
|
204
|
+
* @returns Text content or the original read failure.
|
|
205
|
+
*/
|
|
206
|
+
async function textFile_read(target) {
|
|
207
|
+
if (target !== '/etc/group')
|
|
208
|
+
return chefs_cat_cmd(target);
|
|
209
|
+
let progressStarted = false;
|
|
210
|
+
let progressFailed = false;
|
|
211
|
+
const progressTimer = setTimeout(() => {
|
|
212
|
+
progressStarted = true;
|
|
213
|
+
sink_get().progress_write({
|
|
214
|
+
operation: 'group',
|
|
215
|
+
kind: 'inspection',
|
|
216
|
+
phase: 'reading',
|
|
217
|
+
label: GROUP_PROGRESS_LABEL,
|
|
218
|
+
status: 'running',
|
|
219
|
+
});
|
|
220
|
+
}, GROUP_PROGRESS_DELAY_MS);
|
|
221
|
+
try {
|
|
222
|
+
const result = await chefs_cat_cmd(target);
|
|
223
|
+
progressFailed = !result.ok;
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
progressFailed = true;
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
clearTimeout(progressTimer);
|
|
232
|
+
if (progressStarted) {
|
|
233
|
+
sink_get().progress_write({
|
|
234
|
+
operation: 'group',
|
|
235
|
+
kind: 'inspection',
|
|
236
|
+
phase: progressFailed ? 'failed' : 'complete',
|
|
237
|
+
label: GROUP_PROGRESS_LABEL,
|
|
238
|
+
status: progressFailed ? 'error' : 'done',
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
121
243
|
/**
|
|
122
244
|
* Displays the content of one or more files.
|
|
123
245
|
*
|
|
124
246
|
* Supports multiple files and concatenates their output. Binary mode is applied
|
|
125
|
-
* consistently to all files
|
|
247
|
+
* per recognized file, or consistently to all files when `--binary` is specified.
|
|
126
248
|
* Text content and errors are buffered into the envelope; binary content streams
|
|
127
249
|
* to the terminal directly with backpressure (raw bytes are not envelope text),
|
|
128
250
|
* and the binary auto-detection notice is emitted live on the err channel so it
|
|
129
251
|
* precedes the bytes it describes.
|
|
130
252
|
*
|
|
131
|
-
* @param args -
|
|
253
|
+
* @param args - File paths plus optional binary/highlight flags.
|
|
132
254
|
* @returns An envelope whose rendered text carries the (highlighted) file
|
|
133
255
|
* contents and whose model lists per-file outcomes.
|
|
134
256
|
*/
|
|
135
257
|
export async function builtin_cat(args) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (arg === '--binary') {
|
|
140
|
-
binaryMode = true;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
filePaths.push(arg);
|
|
144
|
-
}
|
|
258
|
+
const parsed = catArguments_parse(args);
|
|
259
|
+
if (parsed.filePaths.length === 0) {
|
|
260
|
+
return envelope_error('', undefined, `${chalk.red(`Usage: ${CAT_USAGE}`)}\n`);
|
|
145
261
|
}
|
|
146
|
-
|
|
147
|
-
|
|
262
|
+
const targets = await Promise.all(parsed.filePaths.map(async (pathArg) => {
|
|
263
|
+
const target = await path_resolve(pathArg);
|
|
264
|
+
return { pathArg, target, isBinaryFile: extension_isBinary(target) };
|
|
265
|
+
}));
|
|
266
|
+
const hasTextTarget = !parsed.binaryMode
|
|
267
|
+
&& targets.some((target) => !target.isBinaryFile);
|
|
268
|
+
if (hasTextTarget
|
|
269
|
+
&& parsed.highlightLanguage !== undefined
|
|
270
|
+
&& !supportsLanguage(parsed.highlightLanguage)) {
|
|
271
|
+
return envelope_error('', undefined, `${chalk.red(`cat: unknown highlight language '${parsed.highlightLanguage}'`)}\n`);
|
|
148
272
|
}
|
|
149
273
|
let rendered = '';
|
|
150
274
|
let renderedErr = '';
|
|
151
275
|
const outcomes = [];
|
|
152
276
|
let anyFailed = false;
|
|
153
|
-
for (let i = 0; i <
|
|
154
|
-
const pathArg =
|
|
155
|
-
const target = await path_resolve(pathArg);
|
|
156
|
-
// Auto-detect binary files
|
|
157
|
-
const isBinaryFile = extension_isBinary(target);
|
|
277
|
+
for (let i = 0; i < targets.length; i++) {
|
|
278
|
+
const { pathArg, target, isBinaryFile } = targets[i];
|
|
158
279
|
// Inform user about auto-detection only if in interactive mode (stdout is TTY).
|
|
159
280
|
// Emitted live (not buffered) so the notice precedes the raw bytes it announces.
|
|
160
281
|
// Only show on first file to avoid spam.
|
|
161
|
-
if (i === 0 && isBinaryFile && !binaryMode && process.stdout.isTTY) {
|
|
282
|
+
if (i === 0 && isBinaryFile && !parsed.binaryMode && process.stdout.isTTY) {
|
|
162
283
|
sink_get().err_write(`${chalk.cyan(`Info: ${pathArg} detected as binary file (${path.extname(target)}), using binary mode.`)}\n`);
|
|
163
284
|
sink_get().err_write(`${chalk.cyan('Tip: Use "cat --binary <file>" to explicitly request binary mode.')}\n`);
|
|
164
285
|
sink_get().err_write('\n');
|
|
165
286
|
}
|
|
166
287
|
// Use binary mode if requested OR if file is detected as binary
|
|
167
|
-
if (binaryMode || isBinaryFile) {
|
|
288
|
+
if (parsed.binaryMode || isBinaryFile) {
|
|
168
289
|
const result = await chefs_catBinary_cmd(target);
|
|
169
290
|
if (!result.ok) {
|
|
170
291
|
const error = errorStack.stack_pop();
|
|
@@ -180,7 +301,7 @@ export async function builtin_cat(args) {
|
|
|
180
301
|
outcomes.push({ path: pathArg, ok: true, binary: true, bytes: result.value.length });
|
|
181
302
|
}
|
|
182
303
|
else {
|
|
183
|
-
const result = await
|
|
304
|
+
const result = await textFile_read(target);
|
|
184
305
|
if (!result.ok) {
|
|
185
306
|
const error = errorStack.stack_pop();
|
|
186
307
|
renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
|
|
@@ -189,7 +310,7 @@ export async function builtin_cat(args) {
|
|
|
189
310
|
process.exitCode = 1;
|
|
190
311
|
continue;
|
|
191
312
|
}
|
|
192
|
-
const highlighted = content_highlight(result.value, target);
|
|
313
|
+
const highlighted = content_highlight(result.value, target, parsed.highlightMode, parsed.highlightLanguage);
|
|
193
314
|
rendered += `${cat_render(highlighted, pathArg)}\n`;
|
|
194
315
|
outcomes.push({ path: pathArg, ok: true, binary: false });
|
|
195
316
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cd.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Changes the current working directory, reported as a command envelope.
|
|
4
4
|
*/
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
+
import path from 'path';
|
|
6
7
|
import { session } from '../../session/index.js';
|
|
7
8
|
import { path_resolve, path_resolveLinks, error_stripDebugPrefix } from '../utils.js';
|
|
8
9
|
import { envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
@@ -67,12 +68,37 @@ function cdSuccess_envelope(newCwd, rendered) {
|
|
|
67
68
|
*/
|
|
68
69
|
async function cdVirtual_handle(cleanPath, pathArg) {
|
|
69
70
|
if (vfsPath_isStructural(cleanPath)) {
|
|
70
|
-
await session.
|
|
71
|
+
await session.directory_change(cleanPath);
|
|
71
72
|
return cdSuccess_envelope(cleanPath, '');
|
|
72
73
|
}
|
|
73
|
-
//
|
|
74
|
-
//
|
|
74
|
+
// Resolve the target from its parent listing before asking the target provider
|
|
75
|
+
// to list its children. Some providers deliberately return a containing-node
|
|
76
|
+
// listing for virtual files such as /proc/.../status; a successful list alone
|
|
77
|
+
// therefore does not establish that `cleanPath` is navigable.
|
|
75
78
|
const { vfsDispatcher } = await import('@fnndsc/salsa');
|
|
79
|
+
const parentPath = path.posix.dirname(cleanPath);
|
|
80
|
+
const entryName = path.posix.basename(cleanPath);
|
|
81
|
+
const parentResult = await vfsDispatcher.list(parentPath);
|
|
82
|
+
const entry = parentResult.ok
|
|
83
|
+
? parentResult.value.find((item) => item.name === entryName)
|
|
84
|
+
: undefined;
|
|
85
|
+
if (entry?.type === 'link') {
|
|
86
|
+
let target = entry.target;
|
|
87
|
+
if (!target) {
|
|
88
|
+
const linkResult = await vfsDispatcher.linkTarget_resolve(cleanPath);
|
|
89
|
+
if (linkResult.ok)
|
|
90
|
+
target = linkResult.value;
|
|
91
|
+
}
|
|
92
|
+
if (!target) {
|
|
93
|
+
return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`);
|
|
94
|
+
}
|
|
95
|
+
return cdReal_handle(target, pathArg);
|
|
96
|
+
}
|
|
97
|
+
if (entry && !['dir', 'job', 'vfs'].includes(entry.type)) {
|
|
98
|
+
return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: Not a directory`)}\n`);
|
|
99
|
+
}
|
|
100
|
+
// A directory-like VFS entry still asks its provider to enumerate children,
|
|
101
|
+
// both as final validation and to prime a subsequent `ls`.
|
|
76
102
|
const listResult = await vfsDispatcher.list(cleanPath);
|
|
77
103
|
if (!listResult.ok) {
|
|
78
104
|
const { errorStack } = await import('@fnndsc/cumin');
|
|
@@ -82,7 +108,7 @@ async function cdVirtual_handle(cleanPath, pathArg) {
|
|
|
82
108
|
}
|
|
83
109
|
const { listCache_get } = await import('@fnndsc/cumin');
|
|
84
110
|
listCache_get().cache_set(cleanPath, listResult.value);
|
|
85
|
-
await session.
|
|
111
|
+
await session.directory_change(cleanPath);
|
|
86
112
|
return cdSuccess_envelope(cleanPath, '');
|
|
87
113
|
}
|
|
88
114
|
/**
|
|
@@ -131,7 +157,7 @@ async function cdReal_handle(logicalPath, pathArg) {
|
|
|
131
157
|
try {
|
|
132
158
|
const folder = (await client.getFileBrowserFolderByPath(validationPath));
|
|
133
159
|
if (folder_verifyPathMatch(folder, validationPath)) {
|
|
134
|
-
await session.
|
|
160
|
+
await session.directory_change(cwdPath);
|
|
135
161
|
return cdSuccess_envelope(cwdPath, rendered);
|
|
136
162
|
}
|
|
137
163
|
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
@@ -169,6 +195,16 @@ export async function builtin_cd(args) {
|
|
|
169
195
|
if (!pathArg) {
|
|
170
196
|
return builtin_cd(['~']);
|
|
171
197
|
}
|
|
198
|
+
if (pathArg === '-') {
|
|
199
|
+
const previousCWD = session.previousCWD_get();
|
|
200
|
+
if (!previousCWD) {
|
|
201
|
+
return envelope_error('', undefined, `${chalk.red('cd: OLDPWD not set')}\n`);
|
|
202
|
+
}
|
|
203
|
+
const result = await builtin_cd([previousCWD]);
|
|
204
|
+
return result.status === 'ok'
|
|
205
|
+
? { ...result, rendered: `${previousCWD}\n${result.rendered}` }
|
|
206
|
+
: result;
|
|
207
|
+
}
|
|
172
208
|
try {
|
|
173
209
|
const logicalPath = await path_resolve(pathArg);
|
|
174
210
|
const { vfsDispatcher } = await import('@fnndsc/salsa');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc5D;;;GAGG;AACH,MAAM,oBAAoB,GAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAE9G;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACtG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA4C,EAAE,cAAsB;IACzG,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAW,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAElE,uGAAuG;IACvG,MAAM,WAAW,GAAW,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,eAAe,GAAW,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEzE,OAAO,WAAW,KAAK,eAAe,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAc,EAAE,QAAgB;IAC1D,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAe;IAChE,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cp.js
CHANGED
|
@@ -62,8 +62,9 @@ export async function builtin_cp(args) {
|
|
|
62
62
|
failCount++;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
// Invalidate destination
|
|
66
|
-
|
|
65
|
+
// Invalidate the destination subtree (a recursive copy replaces whatever
|
|
66
|
+
// listings were cached beneath it) and its parent.
|
|
67
|
+
listCache.cache_invalidateTree(destPath);
|
|
67
68
|
const destParent = path.posix.dirname(destPath);
|
|
68
69
|
listCache.cache_invalidate(destParent);
|
|
69
70
|
// Summary for multiple files
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAmB,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5F,OAAO,EAAc,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgBtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,MAAM,GAAe,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAa,MAAM,CAAC,CAAa,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,SAAS,GAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAElE,kDAAkD;IAClD,MAAM,IAAI,GAAW,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAW,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAc,aAAa,EAAE,CAAC;IAC7C,IAAI,YAAY,GAAW,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAW,CAAC,CAAC;IAC1B,IAAI,QAAQ,GAAW,EAAE,CAAC;IAC1B,IAAI,WAAW,GAAW,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,OAAO,GAAW,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YAEhD,sDAAsD;YACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC,IAAI,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,WAAW,OAAO,OAAO,QAAQ,OAAO,CAAC;YACvD,CAAC;YAED,MAAM,OAAO,GAAY,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAE9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,QAAQ,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;YAC3D,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,EAAE,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAW,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,WAAW,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,mDAAmD;IACnD,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEvC,6BAA6B;IAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,YAAY,eAAe,QAAQ,EAAE,CAAC,IAAI,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,YAAY,aAAa,SAAS,SAAS,CAAC,IAAI,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrG,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAoB,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;QAChG,QAAQ,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { type CommandEnvelope } from '@fnndsc/cumin';
|
|
|
2
2
|
/**
|
|
3
3
|
* Downloads a remote ChRIS file or directory to the local filesystem.
|
|
4
4
|
*
|
|
5
|
-
* @param args - [
|
|
5
|
+
* @param args - [remotePathOrGlob, localPath] plus optional -f/--force to overwrite.
|
|
6
6
|
* @returns An envelope carrying the download summary.
|
|
7
7
|
*/
|
|
8
8
|
export declare function builtin_download(args: string[]): Promise<CommandEnvelope>;
|