@fnndsc/brasa 0.25.0 → 0.27.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/api/index.d.ts +5 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/cp.js +5 -2
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/folderExists.d.ts +8 -0
- package/dist/builtins/fs/folderExists.js +67 -0
- package/dist/builtins/fs/folderExists.js.map +1 -0
- package/dist/builtins/fs/mkdir.d.ts +25 -3
- package/dist/builtins/fs/mkdir.js +63 -7
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.js +4 -1
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +20 -3
- package/dist/builtins/fs/rm.js +51 -7
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/touch.js +4 -1
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/help.js +19 -9
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/query.csv.d.ts +38 -2
- package/dist/builtins/net/query.csv.js +84 -29
- package/dist/builtins/net/query.csv.js.map +1 -1
- package/dist/builtins/net/query.js +59 -68
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/utils.d.ts +12 -0
- package/dist/builtins/utils.js +19 -0
- package/dist/builtins/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/api/index.d.ts
CHANGED
|
@@ -52,9 +52,13 @@ export interface ChellApi {
|
|
|
52
52
|
* Creates one or more directories.
|
|
53
53
|
*
|
|
54
54
|
* @param paths - Directory path or paths, absolute or cwd-relative.
|
|
55
|
+
* @param options - `parents`: make missing parents and accept a folder
|
|
56
|
+
* already there (`mkdir -p`); without it both are errors.
|
|
55
57
|
* @returns Envelope whose `fs.mkdir` model lists per-target outcomes.
|
|
56
58
|
*/
|
|
57
|
-
mkdir(paths: string | string[]
|
|
59
|
+
mkdir(paths: string | string[], options?: {
|
|
60
|
+
parents?: boolean;
|
|
61
|
+
}): Promise<TypedEnvelope<'fs.mkdir'>>;
|
|
58
62
|
/**
|
|
59
63
|
* Creates a file, optionally with content.
|
|
60
64
|
*
|
package/dist/api/index.js
CHANGED
|
@@ -51,7 +51,7 @@ export async function chellApi_create() {
|
|
|
51
51
|
return {
|
|
52
52
|
pwd: (options) => pwd_run({ titles: options?.titles }).then((envelope_typed)),
|
|
53
53
|
cd: (path) => cd_run({ path }).then((envelope_typed)),
|
|
54
|
-
mkdir: (paths) => mkdir_run({ paths: Array.isArray(paths) ? paths : [paths] }).then((envelope_typed)),
|
|
54
|
+
mkdir: (paths, options = {}) => mkdir_run({ paths: Array.isArray(paths) ? paths : [paths], parents: options.parents === true }).then((envelope_typed)),
|
|
55
55
|
touch: (path, options) => touch_run({
|
|
56
56
|
paths: [path],
|
|
57
57
|
contents: options?.contents,
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAkB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
package/dist/buildinfo.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"hash":"
|
|
1
|
+
{"hash":"43521c"}
|
package/dist/builtins/fs/cp.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { listCache_get, envelope_ok, envelope_error, errorStack } from '@fnndsc/cumin';
|
|
8
|
-
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
8
|
+
import { commandArgs_process, optionsUnknown_refusal, path_resolve } from '../utils.js';
|
|
9
9
|
import { destination_ask, destination_missing } from './destination.js';
|
|
10
10
|
import { files_cp as chefs_cp_cmd } from '@fnndsc/chili/commands/fs/cp.js';
|
|
11
11
|
import { cp_render } from '@fnndsc/chili/views/fs.js';
|
|
@@ -18,7 +18,10 @@ import { cp_render } from '@fnndsc/chili/views/fs.js';
|
|
|
18
18
|
* whose model carries per-source outcomes.
|
|
19
19
|
*/
|
|
20
20
|
export async function builtin_cp(args) {
|
|
21
|
-
const parsed = commandArgs_process(args);
|
|
21
|
+
const parsed = commandArgs_process(args, { booleanLongOptions: ['recursive'] });
|
|
22
|
+
const refusal = optionsUnknown_refusal('cp', parsed, ['t', 'r', 'recursive']);
|
|
23
|
+
if (refusal !== null)
|
|
24
|
+
return envelope_error('', undefined, `${chalk.red(refusal)}\n`);
|
|
22
25
|
const pathArgs = parsed._;
|
|
23
26
|
// `-t <dir>` names the TARGET DIRECTORY, so every operand is a source —
|
|
24
27
|
// the shell's own answer to "several things, one destination". Given no
|
|
@@ -1 +1 @@
|
|
|
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,UAAU,EAAE,MAAM,eAAe,CAAC;AAExG,OAAO,EAAc,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reports whether a folder exists at a logical path.
|
|
3
|
+
*
|
|
4
|
+
* @param logicalPath - The resolved logical path.
|
|
5
|
+
* @returns True when a folder stands exactly there; false when nothing
|
|
6
|
+
* does, or when the path cannot be taken to a physical one.
|
|
7
|
+
*/
|
|
8
|
+
export declare function folder_checkExists(logicalPath: string): Promise<boolean>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Whether a CFS folder stands at a path.
|
|
3
|
+
*
|
|
4
|
+
* The same question `cd` asks before it moves: the logical path taken to
|
|
5
|
+
* its physical one (through links, unless the session is already physical),
|
|
6
|
+
* then the folder looked up by that path and matched exactly — CUBE answers
|
|
7
|
+
* a lookup for a missing path with its nearest ancestor, so a match on the
|
|
8
|
+
* path itself is what says it exists.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { session } from '../../session/index.js';
|
|
13
|
+
import { path_resolveLinks } from '../utils.js';
|
|
14
|
+
import { errorStack } from '@fnndsc/cumin';
|
|
15
|
+
import { folder_verifyPathMatch, vfsPath_isStructural, vfsPath_normalize } from './cd.js';
|
|
16
|
+
/**
|
|
17
|
+
* Reports whether a folder exists at a logical path.
|
|
18
|
+
*
|
|
19
|
+
* @param logicalPath - The resolved logical path.
|
|
20
|
+
* @returns True when a folder stands exactly there; false when nothing
|
|
21
|
+
* does, or when the path cannot be taken to a physical one.
|
|
22
|
+
*/
|
|
23
|
+
export async function folder_checkExists(logicalPath) {
|
|
24
|
+
// A lookup of a path that is not there is an answer, not a failure: what
|
|
25
|
+
// it leaves on the error stack is drained, or a mkdir that succeeded
|
|
26
|
+
// would exit 1 on its own question.
|
|
27
|
+
const checkpoint = errorStack.checkpoint_mark();
|
|
28
|
+
try {
|
|
29
|
+
return await folderExists_ask(logicalPath);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
errorStack.checkpoint_drain(checkpoint);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Asks whether a folder stands at a logical path.
|
|
37
|
+
*
|
|
38
|
+
* @param logicalPath - The resolved logical path.
|
|
39
|
+
* @returns True when a folder stands exactly there.
|
|
40
|
+
*/
|
|
41
|
+
async function folderExists_ask(logicalPath) {
|
|
42
|
+
const cleanPath = vfsPath_normalize(logicalPath);
|
|
43
|
+
if (vfsPath_isStructural(cleanPath))
|
|
44
|
+
return true;
|
|
45
|
+
const client = await session.connection.client_get();
|
|
46
|
+
if (!client)
|
|
47
|
+
return false;
|
|
48
|
+
let physicalPath;
|
|
49
|
+
if (session.physicalMode_get()) {
|
|
50
|
+
physicalPath = await path_resolveLinks(cleanPath);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const { logical_toPhysical } = await import('@fnndsc/chili/utils');
|
|
54
|
+
const physical = await logical_toPhysical(cleanPath);
|
|
55
|
+
if (!physical.ok)
|
|
56
|
+
return false;
|
|
57
|
+
physicalPath = physical.value;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const folder = await client.getFileBrowserFolderByPath(physicalPath);
|
|
61
|
+
return folder_verifyPathMatch(folder, physicalPath);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=folderExists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folderExists.js","sourceRoot":"","sources":["../../../src/builtins/fs/folderExists.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE1F;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,yEAAyE;IACzE,qEAAqE;IACrE,oCAAoC;IACpC,MAAM,UAAU,GAAW,UAAU,CAAC,eAAe,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACjD,MAAM,SAAS,GAAW,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,YAAoB,CAAC;IACzB,IAAI,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC/B,YAAY,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAmB,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC/B,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,MAAM,MAAM,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;QAC9E,OAAO,sBAAsB,CAAC,MAAsD,EAAE,YAAY,CAAC,CAAC;IACtG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -3,17 +3,38 @@ import { CommandEnvelope } from '@fnndsc/cumin';
|
|
|
3
3
|
export interface MkdirOutcome {
|
|
4
4
|
path: string;
|
|
5
5
|
created: boolean;
|
|
6
|
+
/** Already a folder, and `-p` says that is fine. */
|
|
7
|
+
existed?: boolean;
|
|
6
8
|
}
|
|
7
9
|
/** Typed invocation options for mkdir. */
|
|
8
10
|
export interface MkdirOptions {
|
|
9
11
|
/** Directory paths to create, absolute or relative to the session cwd. */
|
|
10
12
|
paths: string[];
|
|
13
|
+
/**
|
|
14
|
+
* Make missing parents too, and take a folder already there as done
|
|
15
|
+
* (`-p`). Without it, as POSIX has it, a missing parent or an existing
|
|
16
|
+
* target is an error.
|
|
17
|
+
*/
|
|
18
|
+
parents?: boolean;
|
|
11
19
|
}
|
|
20
|
+
/** Parsed `mkdir` arguments, or the option it refuses. */
|
|
21
|
+
export type MkdirArgs = MkdirOptions | {
|
|
22
|
+
refused: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Parses `mkdir` arguments: `-p` / `--parents`, and `--` to end options.
|
|
26
|
+
* Any other option is refused by name rather than taken for a path — a
|
|
27
|
+
* `-p` the session did not know once became a folder named `-p`.
|
|
28
|
+
*
|
|
29
|
+
* @param args - Raw command arguments.
|
|
30
|
+
* @returns The options, or the refusal line for the first unknown option.
|
|
31
|
+
*/
|
|
32
|
+
export declare function mkdirArgs_parse(args: string[]): MkdirArgs;
|
|
12
33
|
/**
|
|
13
34
|
* Creates directories: the shared typed core behind the parsed builtin and
|
|
14
35
|
* the typed API.
|
|
15
36
|
*
|
|
16
|
-
* @param options - The directories to create.
|
|
37
|
+
* @param options - The directories to create, and whether parents come too.
|
|
17
38
|
* @returns An envelope whose rendered text reports each directory and whose
|
|
18
39
|
* model lists per-target outcomes.
|
|
19
40
|
*/
|
|
@@ -21,7 +42,8 @@ export declare function mkdir_run(options: MkdirOptions): Promise<CommandEnvelop
|
|
|
21
42
|
/**
|
|
22
43
|
* Creates directories from parsed command-line arguments.
|
|
23
44
|
*
|
|
24
|
-
* @param args - Command line arguments (directory paths).
|
|
25
|
-
* @returns The envelope from {@link mkdir_run}
|
|
45
|
+
* @param args - Command line arguments (`-p` and directory paths).
|
|
46
|
+
* @returns The envelope from {@link mkdir_run}, or the refusal of an
|
|
47
|
+
* option mkdir does not have.
|
|
26
48
|
*/
|
|
27
49
|
export declare function builtin_mkdir(args: string[]): Promise<CommandEnvelope>;
|
|
@@ -5,20 +5,57 @@
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { listCache_get, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
7
7
|
import { path_resolve } from '../utils.js';
|
|
8
|
+
import { folder_checkExists } from './folderExists.js';
|
|
8
9
|
import { files_mkdir as chefs_mkdir_cmd } from '@fnndsc/chili/commands/fs/mkdir.js';
|
|
9
10
|
import { mkdir_render } from '@fnndsc/chili/views/fs.js';
|
|
11
|
+
/**
|
|
12
|
+
* Parses `mkdir` arguments: `-p` / `--parents`, and `--` to end options.
|
|
13
|
+
* Any other option is refused by name rather than taken for a path — a
|
|
14
|
+
* `-p` the session did not know once became a folder named `-p`.
|
|
15
|
+
*
|
|
16
|
+
* @param args - Raw command arguments.
|
|
17
|
+
* @returns The options, or the refusal line for the first unknown option.
|
|
18
|
+
*/
|
|
19
|
+
export function mkdirArgs_parse(args) {
|
|
20
|
+
let parents = false;
|
|
21
|
+
const paths = [];
|
|
22
|
+
let endOfOptions = false;
|
|
23
|
+
for (const arg of args) {
|
|
24
|
+
if (endOfOptions || arg === '-' || !arg.startsWith('-')) {
|
|
25
|
+
paths.push(arg);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (arg === '--') {
|
|
29
|
+
endOfOptions = true;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (arg === '--parents') {
|
|
33
|
+
parents = true;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (arg.startsWith('--'))
|
|
37
|
+
return { refused: `mkdir: unrecognized option '${arg}'` };
|
|
38
|
+
for (const flag of arg.substring(1)) {
|
|
39
|
+
if (flag !== 'p')
|
|
40
|
+
return { refused: `mkdir: invalid option -- '${flag}'` };
|
|
41
|
+
parents = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { paths, parents };
|
|
45
|
+
}
|
|
10
46
|
/**
|
|
11
47
|
* Creates directories: the shared typed core behind the parsed builtin and
|
|
12
48
|
* the typed API.
|
|
13
49
|
*
|
|
14
|
-
* @param options - The directories to create.
|
|
50
|
+
* @param options - The directories to create, and whether parents come too.
|
|
15
51
|
* @returns An envelope whose rendered text reports each directory and whose
|
|
16
52
|
* model lists per-target outcomes.
|
|
17
53
|
*/
|
|
18
54
|
export async function mkdir_run(options) {
|
|
19
55
|
const args = options.paths;
|
|
56
|
+
const parents = options.parents === true;
|
|
20
57
|
if (args.length === 0) {
|
|
21
|
-
return envelope_error('', undefined, `${chalk.red('Usage: mkdir <directory> [directory...]')}\n`);
|
|
58
|
+
return envelope_error('', undefined, `${chalk.red('Usage: mkdir [-p] <directory> [directory...]')}\n`);
|
|
22
59
|
}
|
|
23
60
|
let rendered = '';
|
|
24
61
|
let renderedErr = '';
|
|
@@ -26,12 +63,27 @@ export async function mkdir_run(options) {
|
|
|
26
63
|
for (const pathArg of args) {
|
|
27
64
|
try {
|
|
28
65
|
const targetPath = await path_resolve(pathArg);
|
|
66
|
+
const parentDir = targetPath.substring(0, targetPath.lastIndexOf('/')) || '/';
|
|
67
|
+
if (await folder_checkExists(targetPath)) {
|
|
68
|
+
if (parents) {
|
|
69
|
+
outcomes.push({ path: targetPath, created: false, existed: true });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
renderedErr += `${chalk.red(`mkdir: cannot create directory '${pathArg}': File exists`)}\n`;
|
|
73
|
+
outcomes.push({ path: targetPath, created: false });
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (!parents && !(await folder_checkExists(parentDir))) {
|
|
78
|
+
renderedErr += `${chalk.red(`mkdir: cannot create directory '${pathArg}': No such file or directory`)}\n`;
|
|
79
|
+
outcomes.push({ path: targetPath, created: false });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
29
82
|
const success = await chefs_mkdir_cmd(targetPath);
|
|
30
83
|
rendered += `${mkdir_render(targetPath, success)}\n`;
|
|
31
84
|
outcomes.push({ path: targetPath, created: success });
|
|
32
85
|
// Invalidate cache for parent directory
|
|
33
86
|
if (success) {
|
|
34
|
-
const parentDir = targetPath.substring(0, targetPath.lastIndexOf('/')) || '/';
|
|
35
87
|
const listCache = listCache_get();
|
|
36
88
|
listCache.cache_invalidate(parentDir);
|
|
37
89
|
}
|
|
@@ -42,7 +94,7 @@ export async function mkdir_run(options) {
|
|
|
42
94
|
outcomes.push({ path: pathArg, created: false });
|
|
43
95
|
}
|
|
44
96
|
}
|
|
45
|
-
const anyFailed = outcomes.some((outcome) => !outcome.created);
|
|
97
|
+
const anyFailed = outcomes.some((outcome) => !outcome.created && outcome.existed !== true);
|
|
46
98
|
const model = { kind: 'fs.mkdir', data: outcomes };
|
|
47
99
|
if (anyFailed) {
|
|
48
100
|
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
@@ -54,10 +106,14 @@ export async function mkdir_run(options) {
|
|
|
54
106
|
/**
|
|
55
107
|
* Creates directories from parsed command-line arguments.
|
|
56
108
|
*
|
|
57
|
-
* @param args - Command line arguments (directory paths).
|
|
58
|
-
* @returns The envelope from {@link mkdir_run}
|
|
109
|
+
* @param args - Command line arguments (`-p` and directory paths).
|
|
110
|
+
* @returns The envelope from {@link mkdir_run}, or the refusal of an
|
|
111
|
+
* option mkdir does not have.
|
|
59
112
|
*/
|
|
60
113
|
export async function builtin_mkdir(args) {
|
|
61
|
-
|
|
114
|
+
const parsed = mkdirArgs_parse(args);
|
|
115
|
+
if ('refused' in parsed)
|
|
116
|
+
return envelope_error('', undefined, `${chalk.red(parsed.refused)}\n`);
|
|
117
|
+
return mkdir_run(parsed);
|
|
62
118
|
}
|
|
63
119
|
//# sourceMappingURL=mkdir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mkdir.js","sourceRoot":"","sources":["../../../src/builtins/fs/mkdir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"mkdir.js","sourceRoot":"","sources":["../../../src/builtins/fs/mkdir.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/mv.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { listCache_get, envelope_ok, envelope_error, errorStack } from '@fnndsc/cumin';
|
|
8
|
-
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
8
|
+
import { commandArgs_process, optionsUnknown_refusal, path_resolve } from '../utils.js';
|
|
9
9
|
import { destination_ask, destination_missing } from './destination.js';
|
|
10
10
|
import { files_mv as chefs_mv_cmd } from '@fnndsc/chili/commands/fs/mv.js';
|
|
11
11
|
import { mv_render } from '@fnndsc/chili/views/fs.js';
|
|
@@ -19,6 +19,9 @@ import { mv_render } from '@fnndsc/chili/views/fs.js';
|
|
|
19
19
|
*/
|
|
20
20
|
export async function builtin_mv(args) {
|
|
21
21
|
const parsed = commandArgs_process(args);
|
|
22
|
+
const refusal = optionsUnknown_refusal('mv', parsed, ['t']);
|
|
23
|
+
if (refusal !== null)
|
|
24
|
+
return envelope_error('', undefined, `${chalk.red(refusal)}\n`);
|
|
22
25
|
const pathArgs = parsed._;
|
|
23
26
|
// `-t <dir>` names the TARGET DIRECTORY, so every operand is a source —
|
|
24
27
|
// the shell's own answer to "several things, one destination". Given no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mv.js","sourceRoot":"","sources":["../../../src/builtins/fs/mv.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,UAAU,EAAE,MAAM,eAAe,CAAC;AAExG,OAAO,EAAc,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mv.js","sourceRoot":"","sources":["../../../src/builtins/fs/mv.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/rm.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
2
|
+
import { RmResult } from '@fnndsc/chili/commands/fs/rm.js';
|
|
2
3
|
/**
|
|
3
4
|
* Parsed `rm` arguments: flags plus the resolved list of path operands.
|
|
4
5
|
*/
|
|
@@ -13,13 +14,19 @@ export interface RmArgs {
|
|
|
13
14
|
*/
|
|
14
15
|
once: boolean;
|
|
15
16
|
paths: string[];
|
|
17
|
+
/** The refusal line for an option rm does not have, when one was given. */
|
|
18
|
+
refused?: string;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
|
-
* Parses `rm` arguments, supporting combined short flags (`-rf`, `-rfi`)
|
|
19
|
-
*
|
|
21
|
+
* Parses `rm` arguments, supporting combined short flags (`-rf`, `-rfi`),
|
|
22
|
+
* the long forms (`--recursive`, `--force`, `--interactive`) and the `--`
|
|
23
|
+
* end-of-options separator. An option rm does not have is refused by name
|
|
24
|
+
* — never skipped, and never read letter by letter (`--force` once turned
|
|
25
|
+
* recursion on through its `r`).
|
|
20
26
|
*
|
|
21
27
|
* @param args - Raw command arguments.
|
|
22
|
-
* @returns The parsed flags and path operands
|
|
28
|
+
* @returns The parsed flags and path operands, with `refused` set for the
|
|
29
|
+
* first unknown option.
|
|
23
30
|
*/
|
|
24
31
|
export declare function rmArgs_parse(args: string[]): RmArgs;
|
|
25
32
|
/**
|
|
@@ -30,6 +37,16 @@ export declare function rmArgs_parse(args: string[]): RmArgs;
|
|
|
30
37
|
* @returns The summary string, or null if there is nothing to summarise.
|
|
31
38
|
*/
|
|
32
39
|
export declare function rmSummary_format(successCount: number, failCount: number): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Says why a removal failed in the words rm uses on Linux: a directory
|
|
42
|
+
* without `-r` "Is a directory", a missing operand "No such file or
|
|
43
|
+
* directory"; anything else as the store reported it.
|
|
44
|
+
*
|
|
45
|
+
* @param result - The failed removal.
|
|
46
|
+
* @param recursive - Whether `-r` was given.
|
|
47
|
+
* @returns The reason that finishes "rm: cannot remove 'x': ".
|
|
48
|
+
*/
|
|
49
|
+
export declare function rmFailure_reason(result: RmResult, recursive: boolean): string;
|
|
33
50
|
/** Outcome of one removal target, for the envelope model. */
|
|
34
51
|
export interface RmOutcome {
|
|
35
52
|
path: string;
|
package/dist/builtins/fs/rm.js
CHANGED
|
@@ -39,12 +39,22 @@ function unanswered_reason(error) {
|
|
|
39
39
|
? error.message
|
|
40
40
|
: 'the question could not be answered';
|
|
41
41
|
}
|
|
42
|
+
/** The long options rm knows, and the short flag each one is. */
|
|
43
|
+
const RM_LONG_OPTIONS = {
|
|
44
|
+
'--recursive': 'r',
|
|
45
|
+
'--force': 'f',
|
|
46
|
+
'--interactive': 'i',
|
|
47
|
+
};
|
|
42
48
|
/**
|
|
43
|
-
* Parses `rm` arguments, supporting combined short flags (`-rf`, `-rfi`)
|
|
44
|
-
*
|
|
49
|
+
* Parses `rm` arguments, supporting combined short flags (`-rf`, `-rfi`),
|
|
50
|
+
* the long forms (`--recursive`, `--force`, `--interactive`) and the `--`
|
|
51
|
+
* end-of-options separator. An option rm does not have is refused by name
|
|
52
|
+
* — never skipped, and never read letter by letter (`--force` once turned
|
|
53
|
+
* recursion on through its `r`).
|
|
45
54
|
*
|
|
46
55
|
* @param args - Raw command arguments.
|
|
47
|
-
* @returns The parsed flags and path operands
|
|
56
|
+
* @returns The parsed flags and path operands, with `refused` set for the
|
|
57
|
+
* first unknown option.
|
|
48
58
|
*/
|
|
49
59
|
export function rmArgs_parse(args) {
|
|
50
60
|
let recursive = false;
|
|
@@ -63,7 +73,15 @@ export function rmArgs_parse(args) {
|
|
|
63
73
|
continue;
|
|
64
74
|
}
|
|
65
75
|
if (arg.startsWith('-') && arg.length > 1) {
|
|
66
|
-
|
|
76
|
+
let flags = arg.substring(1);
|
|
77
|
+
if (arg.startsWith('--')) {
|
|
78
|
+
const short = RM_LONG_OPTIONS[arg];
|
|
79
|
+
if (short === undefined) {
|
|
80
|
+
return { recursive, force, interactive, once, paths, refused: `rm: unrecognized option '${arg}'` };
|
|
81
|
+
}
|
|
82
|
+
flags = short;
|
|
83
|
+
}
|
|
84
|
+
for (const ch of flags) {
|
|
67
85
|
if (ch === 'r' || ch === 'R')
|
|
68
86
|
recursive = true;
|
|
69
87
|
else if (ch === 'f')
|
|
@@ -72,9 +90,11 @@ export function rmArgs_parse(args) {
|
|
|
72
90
|
interactive = true;
|
|
73
91
|
else if (ch === 'I')
|
|
74
92
|
once = true;
|
|
93
|
+
else
|
|
94
|
+
return { recursive, force, interactive, once, paths, refused: `rm: invalid option -- '${ch}'` };
|
|
75
95
|
}
|
|
76
96
|
}
|
|
77
|
-
else
|
|
97
|
+
else {
|
|
78
98
|
paths.push(arg);
|
|
79
99
|
}
|
|
80
100
|
}
|
|
@@ -98,6 +118,22 @@ export function rmSummary_format(successCount, failCount) {
|
|
|
98
118
|
}
|
|
99
119
|
return chalk.red(`Failed to remove ${failCount} item${failCount !== 1 ? 's' : ''}`);
|
|
100
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Says why a removal failed in the words rm uses on Linux: a directory
|
|
123
|
+
* without `-r` "Is a directory", a missing operand "No such file or
|
|
124
|
+
* directory"; anything else as the store reported it.
|
|
125
|
+
*
|
|
126
|
+
* @param result - The failed removal.
|
|
127
|
+
* @param recursive - Whether `-r` was given.
|
|
128
|
+
* @returns The reason that finishes "rm: cannot remove 'x': ".
|
|
129
|
+
*/
|
|
130
|
+
export function rmFailure_reason(result, recursive) {
|
|
131
|
+
if (result.type === 'dir' && !recursive)
|
|
132
|
+
return 'Is a directory';
|
|
133
|
+
if (result.type === null && (result.error ?? '').startsWith('No such file or directory'))
|
|
134
|
+
return 'No such file or directory';
|
|
135
|
+
return result.error || 'unknown error';
|
|
136
|
+
}
|
|
101
137
|
/**
|
|
102
138
|
* Removes one or more files or directories.
|
|
103
139
|
*
|
|
@@ -109,7 +145,10 @@ export function rmSummary_format(successCount, failCount) {
|
|
|
109
145
|
* @returns An envelope whose model lists per-target outcomes.
|
|
110
146
|
*/
|
|
111
147
|
export async function builtin_rm(args) {
|
|
112
|
-
|
|
148
|
+
const parsed = rmArgs_parse(args);
|
|
149
|
+
if (parsed.refused !== undefined)
|
|
150
|
+
return envelope_error('', undefined, `${chalk.red(parsed.refused)}\n`);
|
|
151
|
+
return rm_run(parsed);
|
|
113
152
|
}
|
|
114
153
|
/**
|
|
115
154
|
* Removes files or directories: the shared typed core behind the parsed
|
|
@@ -218,6 +257,11 @@ export async function rm_run(runArgs) {
|
|
|
218
257
|
}
|
|
219
258
|
}
|
|
220
259
|
const result = await chefs_rm_cmd(target, options);
|
|
260
|
+
if (result.success && result.type === null) {
|
|
261
|
+
// `-f` on something not there: nothing removed, nothing to say.
|
|
262
|
+
outcomes.push({ path: pathArg, removed: false, skipped: false });
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
221
265
|
if (result.success) {
|
|
222
266
|
if (paths.length > 1) {
|
|
223
267
|
out_emit(chalk.gray(`removed '${pathArg}'`));
|
|
@@ -236,7 +280,7 @@ export async function rm_run(runArgs) {
|
|
|
236
280
|
listCache.cache_invalidateTree(target);
|
|
237
281
|
}
|
|
238
282
|
else {
|
|
239
|
-
err_emit(chalk.red(`rm: cannot remove '${pathArg}': ${result
|
|
283
|
+
err_emit(chalk.red(`rm: cannot remove '${pathArg}': ${rmFailure_reason(result, recursive)}`));
|
|
240
284
|
outcomes.push({ path: pathArg, removed: false, skipped: false });
|
|
241
285
|
failCount++;
|
|
242
286
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../src/builtins/fs/rm.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,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAuB,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE;QACnD,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,oCAAoC,CAAC;AAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../src/builtins/fs/rm.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { listCache_get, errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
8
|
-
import { commandArgs_process, path_resolve, error_stripDebugPrefix } from '../utils.js';
|
|
8
|
+
import { commandArgs_process, optionsUnknown_refusal, path_resolve, error_stripDebugPrefix } from '../utils.js';
|
|
9
9
|
import { files_touch as chefs_touch_cmd } from '@fnndsc/chili/commands/fs/touch.js';
|
|
10
10
|
import { touch_render } from '@fnndsc/chili/views/fs.js';
|
|
11
11
|
/**
|
|
@@ -80,6 +80,9 @@ export async function touch_run(runOptions) {
|
|
|
80
80
|
*/
|
|
81
81
|
export async function builtin_touch(args) {
|
|
82
82
|
const parsed = commandArgs_process(args);
|
|
83
|
+
const refusal = optionsUnknown_refusal('touch', parsed, ['withContents', 'withContentsFromFile']);
|
|
84
|
+
if (refusal !== null)
|
|
85
|
+
return envelope_error('', undefined, `${chalk.red(refusal)}\n`);
|
|
83
86
|
return touch_run({
|
|
84
87
|
paths: parsed._,
|
|
85
88
|
contents: parsed['withContents'] !== undefined ? String(parsed['withContents']) : undefined,
|