@fnndsc/brasa 0.54.3 → 0.55.1
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 -1
- package/dist/builtins/fs/pull.js +32 -14
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/help.js +7 -0
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/helpSections.js +60 -2
- package/dist/builtins/helpSections.js.map +1 -1
- package/dist/builtins/operandRuns.d.ts +22 -0
- package/dist/builtins/operandRuns.js +67 -0
- package/dist/builtins/operandRuns.js.map +1 -0
- package/dist/builtins/operands.d.ts +14 -3
- package/dist/builtins/operands.js +31 -12
- package/dist/builtins/operands.js.map +1 -1
- package/dist/builtins/pluginExecute.d.ts +2 -1
- package/dist/builtins/pluginExecute.js +92 -5
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/builtins/res/pipeline.args.d.ts +7 -1
- package/dist/builtins/res/pipeline.args.js +12 -2
- package/dist/builtins/res/pipeline.args.js.map +1 -1
- package/dist/builtins/res/pipeline.js +60 -4
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/play.js +8 -6
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/builtins/runEcho.d.ts +31 -0
- package/dist/builtins/runEcho.js +54 -0
- package/dist/builtins/runEcho.js.map +1 -0
- package/dist/chris/chrisCommands.js +4 -1
- package/dist/chris/chrisCommands.js.map +1 -1
- package/dist/chris/commandFallback.d.ts +11 -0
- package/dist/chris/commandFallback.js +110 -12
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/help.js +11 -0
- package/dist/chris/help.js.map +1 -1
- package/dist/core/engine.js +15 -7
- package/dist/core/engine.js.map +1 -1
- package/dist/core/jobletScope.d.ts +47 -0
- package/dist/core/jobletScope.js +55 -0
- package/dist/core/jobletScope.js.map +1 -0
- package/dist/core/joblets.d.ts +4 -1
- package/dist/core/joblets.js +6 -2
- package/dist/core/joblets.js.map +1 -1
- package/dist/lib/semicolonParser.d.ts +29 -4
- package/dist/lib/semicolonParser.js +44 -19
- package/dist/lib/semicolonParser.js.map +1 -1
- package/dist/lib/wildcard.js +57 -50
- package/dist/lib/wildcard.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +2 -2
package/dist/lib/wildcard.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import { minimatch } from 'minimatch';
|
|
8
|
+
import { Minimatch, minimatch } from 'minimatch';
|
|
9
9
|
import { listingItemsFromVfs_make } from './vfs/listing.js';
|
|
10
10
|
import { session } from '../session/index.js';
|
|
11
11
|
import { shellWord_literal, shellWord_unquoted } from './parser.js';
|
|
@@ -23,68 +23,75 @@ export function string_checkHasWildcard(arg) {
|
|
|
23
23
|
return /[*?[\]]/.test(arg);
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Lists a directory for expansion, through a CFS link and the listing cache.
|
|
27
|
+
*
|
|
28
|
+
* @param logicalDir - The directory as the caller spells it.
|
|
29
|
+
* @returns Its items, or null when it cannot be listed.
|
|
30
|
+
*/
|
|
31
|
+
async function directoryItems_list(logicalDir) {
|
|
32
|
+
const physicalDir = (await backendInstalled_get()?.vfs?.path_physical?.(logicalDir)) ?? logicalDir;
|
|
33
|
+
const listCache = listingCache_get();
|
|
34
|
+
const cached = listCache.cache_get(physicalDir);
|
|
35
|
+
if (cached)
|
|
36
|
+
return cached.data;
|
|
37
|
+
const vfsResult = await vfsDispatcher_get().list(physicalDir);
|
|
38
|
+
if (!vfsResult.ok)
|
|
39
|
+
return null;
|
|
40
|
+
const items = listingItemsFromVfs_make(vfsResult.value);
|
|
41
|
+
listCache.cache_set(physicalDir, items);
|
|
42
|
+
return items;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Expands a rendered pattern and its quote-aware minimatch pattern, one path
|
|
46
|
+
* component at a time, as POSIX `sh` does: a wildcard may stand in any component. The
|
|
47
|
+
* literal lead is listed once, then each match of each later component.
|
|
27
48
|
*
|
|
28
49
|
* @param value - Rendered shell-word value.
|
|
29
50
|
* @param globPattern - Quote-aware minimatch pattern.
|
|
30
|
-
* @returns A Promise resolving to Result<WildcardMatch[]
|
|
51
|
+
* @returns A Promise resolving to Result<WildcardMatch[]>, sorted by name at each level.
|
|
31
52
|
* Ok([]) = no matches (not an error).
|
|
32
53
|
* Err(...) = couldn't expand (API failure, permission denied, etc.).
|
|
33
54
|
*/
|
|
34
55
|
async function wildcardMatches_expand(value, globPattern) {
|
|
35
56
|
try {
|
|
36
|
-
// Get current directory
|
|
37
57
|
const cwd = await session.getCWD();
|
|
38
58
|
const resolvedValue = await path_resolve(value);
|
|
39
59
|
const resolvedPattern = await path_resolve(globPattern);
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
listCache.cache_set(physicalSearchDir, items);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
return Err();
|
|
60
|
+
// A word with no directory part is one component, matched in cwd. A path
|
|
61
|
+
// keeps its literal lead (`~/...` resolved, a quoted `*` as itself) and
|
|
62
|
+
// expands from the first component that holds a wildcard.
|
|
63
|
+
const valueParts = resolvedValue.includes('/') ? resolvedValue.split('/') : [resolvedValue];
|
|
64
|
+
const patternParts = resolvedValue.includes('/') ? resolvedPattern.split('/') : [resolvedPattern];
|
|
65
|
+
const magicIndex = patternParts.findIndex((part) => new Minimatch(part).hasMagic());
|
|
66
|
+
const first = magicIndex === -1 ? patternParts.length - 1 : magicIndex;
|
|
67
|
+
const base = resolvedValue.includes('/') ? (valueParts.slice(0, first).join('/') || '/') : cwd;
|
|
68
|
+
let matches = [{ path: base, type: 'dir' }];
|
|
69
|
+
for (let index = first; index < patternParts.length; index++) {
|
|
70
|
+
const pattern = patternParts[index] || '*';
|
|
71
|
+
const literal = new Minimatch(pattern).hasMagic() ? null : (valueParts[index] ?? pattern);
|
|
72
|
+
const next = [];
|
|
73
|
+
for (const parent of matches) {
|
|
74
|
+
// Past the first level a match that is a file, or cannot be listed, has nothing under it.
|
|
75
|
+
if (index > first && parent.type === 'file')
|
|
76
|
+
continue;
|
|
77
|
+
const items = await directoryItems_list(parent.path);
|
|
78
|
+
if (items === null) {
|
|
79
|
+
if (index === first)
|
|
80
|
+
return Err();
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const kept = items
|
|
84
|
+
.filter((item) => literal !== null ? item.name === literal : minimatch(item.name, pattern))
|
|
85
|
+
.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
|
|
86
|
+
for (const item of kept)
|
|
87
|
+
next.push({ path: `${parent.path}/${item.name}`.replace(/\/+/g, '/'), type: item.type });
|
|
72
88
|
}
|
|
89
|
+
matches = next;
|
|
90
|
+
}
|
|
91
|
+
// A match under cwd reads as the caller typed it: the bare name.
|
|
92
|
+
if (base === cwd) {
|
|
93
|
+
matches = matches.map((match) => ({ ...match, path: match.path.slice(cwd.replace(/\/+$/, '').length + 1) }));
|
|
73
94
|
}
|
|
74
|
-
// Filter items by pattern
|
|
75
|
-
const matches = items
|
|
76
|
-
.filter((item) => minimatch(item.name, matchPattern))
|
|
77
|
-
.map((item) => {
|
|
78
|
-
// Return a full path if we searched a different directory.
|
|
79
|
-
const itemPath = searchDir !== cwd
|
|
80
|
-
? `${searchDir}/${item.name}`.replace(/\/+/g, '/')
|
|
81
|
-
: item.name;
|
|
82
|
-
return {
|
|
83
|
-
path: itemPath,
|
|
84
|
-
type: item.type,
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
// Ok([]) for no matches (not an error)
|
|
88
95
|
return Ok(matches);
|
|
89
96
|
}
|
|
90
97
|
catch (error) {
|
package/dist/lib/wildcard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wildcard.js","sourceRoot":"","sources":["../../src/lib/wildcard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"wildcard.js","sourceRoot":"","sources":["../../src/lib/wildcard.ts"],"names":[],"mappings":"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"}
|