@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/pull.js
CHANGED
|
@@ -11,28 +11,21 @@
|
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
13
|
import chalk from 'chalk';
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
14
|
+
import { envelope_ok, envelope_error, procCache_get, seriesStorage_resolve, } from '@fnndsc/cumin';
|
|
15
|
+
import { feed_create, plugin_run, retrieveTask_make, retrieveTasks_fire, retrieveTasks_skipComplete, retrieve_fireAndWatch, retrieve_confirmLoop, retrieveProgress_classify, } from '@fnndsc/salsa';
|
|
16
16
|
import { session } from '../../session/index.js';
|
|
17
17
|
import { args_checkHasHelpFlag, help_render } from '../help.js';
|
|
18
18
|
import { pacsQuery_createAndWait, queryExpr_parse } from '../net/query.js';
|
|
19
19
|
import { spinner } from '../../lib/spinner.js';
|
|
20
20
|
import { path_resolve } from '../utils.js';
|
|
21
|
-
import { pacs_seriesCollect, pacsServer_resolve,
|
|
21
|
+
import { pacs_seriesCollect, pacsServer_resolve, } from '../net/pacsUtils.js';
|
|
22
22
|
import { builtin_cubepath } from '../net/cubepath.js';
|
|
23
23
|
import { pullArgs_parse } from './pull.args.js';
|
|
24
24
|
import { sink_get, sink_dataLine, sink_errLine } from '../../core/sink.js';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function progressStatus_fromSeries(status, lonkConfirmed) {
|
|
30
|
-
if (status === 'pulled')
|
|
31
|
-
return lonkConfirmed ? 'done' : 'unconfirmed';
|
|
32
|
-
if (status === 'pending' || status === 'pulling')
|
|
33
|
-
return 'running';
|
|
34
|
-
return status;
|
|
35
|
-
}
|
|
25
|
+
import { newFeed_cacheAdd } from '../feedCreation.js';
|
|
26
|
+
import { builtin_pipeline } from '../res/pipeline.js';
|
|
27
|
+
import { executableArguments_parse } from '../argumentTokens.js';
|
|
28
|
+
import { pluginSelector_normalize } from '../pluginSelector.js';
|
|
36
29
|
function pullProgress_emit(task, status, phase = 'watching') {
|
|
37
30
|
const current = task.actualFiles;
|
|
38
31
|
const total = task.expectedFiles > 0 ? Math.max(task.expectedFiles, current, 1) : Math.max(current, 1);
|
|
@@ -46,9 +39,21 @@ function pullProgress_emit(task, status, phase = 'watching') {
|
|
|
46
39
|
total,
|
|
47
40
|
percent: total > 0 ? Math.min(100, (current / total) * 100) : undefined,
|
|
48
41
|
unit: 'files',
|
|
49
|
-
status: status ??
|
|
42
|
+
status: status ?? retrieveProgress_classify(task),
|
|
50
43
|
});
|
|
51
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Engine progress events rendered onto this surface's structured sink, plus
|
|
47
|
+
* the retry-round banner line.
|
|
48
|
+
*
|
|
49
|
+
* @returns Event callbacks for the retrieve engine.
|
|
50
|
+
*/
|
|
51
|
+
function pullEvents_make() {
|
|
52
|
+
return {
|
|
53
|
+
task: (task, status, phase) => pullProgress_emit(task, status, phase),
|
|
54
|
+
retryRound: (attempt, retryMax, count) => sink_dataLine(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${count} unconfirmed series...`)),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
52
57
|
function pullProgress_complete(allTasks, failed) {
|
|
53
58
|
const done = allTasks.filter((t) => t.status === 'pulled').length;
|
|
54
59
|
sink_get().progress_write({
|
|
@@ -64,215 +69,33 @@ function pullProgress_complete(allTasks, failed) {
|
|
|
64
69
|
});
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
67
|
-
* Walks a VFS path and returns
|
|
72
|
+
* Walks a VFS path and returns RetrieveTask array, delegating collection to pacsUtils.
|
|
68
73
|
*
|
|
69
74
|
* @param pathStr - Absolute VFS path to a query, study, or series directory.
|
|
70
75
|
* @param fallbackPacsName - PACS identifier used when RetrieveAETitle is absent.
|
|
71
|
-
* @returns Array of
|
|
76
|
+
* @returns Array of RetrieveTask ready for firing.
|
|
72
77
|
*/
|
|
73
78
|
async function path_seriesCollect(pathStr, fallbackPacsName) {
|
|
74
79
|
const infos = await pacs_seriesCollect(pathStr, fallbackPacsName, 'pull');
|
|
75
|
-
return infos.map((info) => ({
|
|
80
|
+
return infos.map((info) => retrieveTask_make({
|
|
76
81
|
label: info.label,
|
|
77
82
|
seriesUID: info.seriesUID,
|
|
78
83
|
studyUID: info.studyUID,
|
|
79
84
|
pacsName: info.pacsName,
|
|
80
85
|
expectedFiles: info.expectedFiles,
|
|
81
|
-
syntheticQueryId: null,
|
|
82
|
-
retrieveId: null,
|
|
83
|
-
status: 'pending',
|
|
84
|
-
actualFiles: 0,
|
|
85
|
-
lastProgressFiles: 0,
|
|
86
|
-
lastProgressTime: Date.now(),
|
|
87
|
-
startTime: 0,
|
|
88
|
-
lonkConfirmed: false,
|
|
89
|
-
cubePathDir: null,
|
|
90
86
|
}));
|
|
91
87
|
}
|
|
92
|
-
/**
|
|
93
|
-
* Creates a synthetic PACSQuery + PACSRetrieve for a single series.
|
|
94
|
-
*
|
|
95
|
-
* @param task - The pull task to fire (mutated in place: syntheticQueryId, retrieveId, startTime).
|
|
96
|
-
* @param pacsserver - Resolved PACS server ID string.
|
|
97
|
-
*/
|
|
98
|
-
async function task_fire(task, pacsserver) {
|
|
99
|
-
const queryData = {
|
|
100
|
-
// CUBE rejects duplicate query titles per user, which used to make a
|
|
101
|
-
// re-pull of the same series fail; a timestamp keeps titles unique.
|
|
102
|
-
title: `pull_${task.seriesUID}_${Date.now().toString(36)}`,
|
|
103
|
-
query: JSON.stringify({
|
|
104
|
-
SeriesInstanceUID: task.seriesUID,
|
|
105
|
-
StudyInstanceUID: task.studyUID,
|
|
106
|
-
}),
|
|
107
|
-
execute: false,
|
|
108
|
-
};
|
|
109
|
-
const queryResult = await pacsQueries_create(pacsserver, queryData);
|
|
110
|
-
if (!queryResult.ok) {
|
|
111
|
-
task.status = 'error';
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const syntheticQueryId = queryResult.value.id;
|
|
115
|
-
const retrieveResult = await pacsRetrieve_create(syntheticQueryId);
|
|
116
|
-
if (!retrieveResult.ok) {
|
|
117
|
-
task.status = 'error';
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
task.syntheticQueryId = syntheticQueryId;
|
|
121
|
-
task.retrieveId = retrieveResult.value.id;
|
|
122
|
-
task.startTime = Date.now();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Constructs a LONK WebSocket URL from a download token response.
|
|
126
|
-
*
|
|
127
|
-
* @param tokenUrl - The download token resource URL.
|
|
128
|
-
* @param token - The actual download token string.
|
|
129
|
-
* @returns WebSocket URL for the LONK endpoint.
|
|
130
|
-
*/
|
|
131
|
-
function lonkWsUrl_build(tokenUrl, token) {
|
|
132
|
-
return tokenUrl
|
|
133
|
-
.replace(/^http(s?):\/\//, (_m, s) => `ws${s}://`)
|
|
134
|
-
.replace(/v1\/downloadtokens\/\d+\//, `v1/pacs/ws/?token=${token}`);
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Opens a LONK WebSocket, fires retrieves for the given tasks, and blocks until all
|
|
138
|
-
* tasks reach a terminal state. Mutates each task's status, actualFiles, and lonkConfirmed.
|
|
139
|
-
*
|
|
140
|
-
* @param tasks - Tasks to subscribe, fire, and watch.
|
|
141
|
-
* @param pacsserver - Resolved PACS server identifier.
|
|
142
|
-
* @param client - Authenticated ChRIS API client.
|
|
143
|
-
* @returns Number of tasks that failed to fire their retrieve.
|
|
144
|
-
*/
|
|
145
|
-
async function tasks_pullWatch(tasks, pacsserver, client) {
|
|
146
|
-
const tokenClient = client;
|
|
147
|
-
const downloadToken = await tokenClient.createDownloadToken();
|
|
148
|
-
const tokenStr = String(downloadToken.data.token ?? '');
|
|
149
|
-
const wsUrl = lonkWsUrl_build(downloadToken.url, tokenStr);
|
|
150
|
-
const ws = new WebSocket(wsUrl);
|
|
151
|
-
await new Promise((openResolve, openReject) => {
|
|
152
|
-
ws.once('open', openResolve);
|
|
153
|
-
ws.once('error', (err) => openReject(err));
|
|
154
|
-
});
|
|
155
|
-
for (const t of tasks) {
|
|
156
|
-
ws.send(JSON.stringify({
|
|
157
|
-
SeriesInstanceUID: t.seriesUID,
|
|
158
|
-
pacs_name: t.pacsName,
|
|
159
|
-
action: 'subscribe',
|
|
160
|
-
}));
|
|
161
|
-
}
|
|
162
|
-
await Promise.all(tasks.map((t) => task_fire(t, pacsserver)));
|
|
163
|
-
const fired = tasks.filter((t) => t.status !== 'error');
|
|
164
|
-
const firingErrors = tasks.length - fired.length;
|
|
165
|
-
if (fired.length === 0) {
|
|
166
|
-
for (const t of tasks) {
|
|
167
|
-
if (t.status === 'error')
|
|
168
|
-
pullProgress_emit(t, 'error');
|
|
169
|
-
}
|
|
170
|
-
ws.close();
|
|
171
|
-
return firingErrors;
|
|
172
|
-
}
|
|
173
|
-
for (const t of tasks) {
|
|
174
|
-
pullProgress_emit(t, t.status === 'error' ? 'error' : 'running');
|
|
175
|
-
}
|
|
176
|
-
const taskByUID = new Map(tasks.map((t) => [t.seriesUID, t]));
|
|
177
|
-
await new Promise((resolve) => {
|
|
178
|
-
let resolved = false;
|
|
179
|
-
const done = () => {
|
|
180
|
-
if (resolved)
|
|
181
|
-
return;
|
|
182
|
-
resolved = true;
|
|
183
|
-
clearInterval(checker);
|
|
184
|
-
try {
|
|
185
|
-
ws.close();
|
|
186
|
-
}
|
|
187
|
-
catch { /* ignore */ }
|
|
188
|
-
resolve();
|
|
189
|
-
};
|
|
190
|
-
const checker = setInterval(() => {
|
|
191
|
-
const now = Date.now();
|
|
192
|
-
let allTerminal = true;
|
|
193
|
-
for (const t of fired) {
|
|
194
|
-
if (t.status === 'pulled' || t.status === 'error' || t.status === 'stalled' || t.status === 'timeout') {
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
allTerminal = false;
|
|
198
|
-
if (t.startTime > 0 && now - t.startTime > SERIES_TIMEOUT_MS) {
|
|
199
|
-
t.status = 'timeout';
|
|
200
|
-
pullProgress_emit(t, 'timeout');
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
if (t.actualFiles > 0 && now - t.lastProgressTime > STALL_TIMEOUT_MS) {
|
|
204
|
-
t.status = 'stalled';
|
|
205
|
-
pullProgress_emit(t, 'stalled');
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
if (t.startTime > 0 && t.actualFiles === 0 && now - t.startTime > NO_ACTIVITY_TIMEOUT_MS) {
|
|
209
|
-
t.status = 'pulled';
|
|
210
|
-
t.lonkConfirmed = false;
|
|
211
|
-
pullProgress_emit(t, 'unconfirmed');
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (allTerminal)
|
|
216
|
-
done();
|
|
217
|
-
}, CHECKER_INTERVAL_MS);
|
|
218
|
-
ws.on('message', (data) => {
|
|
219
|
-
try {
|
|
220
|
-
const outer = JSON.parse(data.toString());
|
|
221
|
-
const seriesUID = outer.SeriesInstanceUID;
|
|
222
|
-
const message = outer.message;
|
|
223
|
-
if (!seriesUID || !message)
|
|
224
|
-
return;
|
|
225
|
-
const t = taskByUID.get(seriesUID);
|
|
226
|
-
if (!t)
|
|
227
|
-
return;
|
|
228
|
-
if ('ndicom' in message && typeof message.ndicom === 'number') {
|
|
229
|
-
const n = message.ndicom;
|
|
230
|
-
t.actualFiles = n;
|
|
231
|
-
t.lastProgressFiles = n;
|
|
232
|
-
t.lastProgressTime = Date.now();
|
|
233
|
-
if (t.status === 'pending')
|
|
234
|
-
t.status = 'pulling';
|
|
235
|
-
pullProgress_emit(t, 'running');
|
|
236
|
-
}
|
|
237
|
-
else if ('done' in message && message.done === true) {
|
|
238
|
-
t.status = 'pulled';
|
|
239
|
-
t.lonkConfirmed = true;
|
|
240
|
-
if (t.actualFiles < t.expectedFiles)
|
|
241
|
-
t.actualFiles = t.expectedFiles;
|
|
242
|
-
pullProgress_emit(t, 'done');
|
|
243
|
-
}
|
|
244
|
-
else if ('error' in message && typeof message.error === 'string') {
|
|
245
|
-
t.status = 'error';
|
|
246
|
-
pullProgress_emit(t, 'error');
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
// Malformed message — ignore
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
ws.on('error', () => {
|
|
254
|
-
for (const t of fired) {
|
|
255
|
-
if (t.status === 'pending' || t.status === 'pulling') {
|
|
256
|
-
t.status = 'error';
|
|
257
|
-
pullProgress_emit(t, 'error');
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
done();
|
|
261
|
-
});
|
|
262
|
-
ws.on('close', () => { done(); });
|
|
263
|
-
});
|
|
264
|
-
return firingErrors;
|
|
265
|
-
}
|
|
266
88
|
/**
|
|
267
89
|
* Resolves raw path/query arguments to concrete `/net/pacs` VFS paths,
|
|
268
90
|
* running PACS queries for query expressions.
|
|
269
91
|
*
|
|
270
92
|
* @param paths - Raw path or query-expression operands.
|
|
271
93
|
* @param pacsserver - The resolved PACS server identifier.
|
|
272
|
-
* @returns
|
|
94
|
+
* @returns Resolved VFS paths and whether every operand resolved.
|
|
273
95
|
*/
|
|
274
96
|
async function paths_resolveToVfs(paths, pacsserver) {
|
|
275
97
|
const resolvedPaths = [];
|
|
98
|
+
let complete = true;
|
|
276
99
|
for (const rawPath of paths) {
|
|
277
100
|
const p = rawPath.startsWith('/') ? rawPath : await path_resolve(rawPath);
|
|
278
101
|
if (p.startsWith('/net/pacs')) {
|
|
@@ -290,59 +113,15 @@ async function paths_resolveToVfs(paths, pacsserver) {
|
|
|
290
113
|
}
|
|
291
114
|
else {
|
|
292
115
|
sink_errLine(chalk.red(`pull: Query failed for: ${rawPath}`));
|
|
116
|
+
complete = false;
|
|
293
117
|
}
|
|
294
118
|
}
|
|
295
119
|
else {
|
|
296
120
|
sink_errLine(chalk.red(`pull: Not a PACS VFS path or valid query expression: ${rawPath}`));
|
|
121
|
+
complete = false;
|
|
297
122
|
}
|
|
298
123
|
}
|
|
299
|
-
return resolvedPaths;
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Re-fires retrieves for series that pulled without LONK confirmation, up to
|
|
303
|
-
* `retryMax` additional attempts, then permanently fails any still unconfirmed.
|
|
304
|
-
*
|
|
305
|
-
* @param allTasks - All pull tasks.
|
|
306
|
-
* @param retryMax - Maximum retry attempts.
|
|
307
|
-
* @param pacsserver - The PACS server identifier.
|
|
308
|
-
* @param client - The connected ChRIS client.
|
|
309
|
-
* @returns The number of additional retrieve-firing errors incurred.
|
|
310
|
-
*/
|
|
311
|
-
async function pullRetryLoop(allTasks, retryMax, pacsserver, client) {
|
|
312
|
-
let extraFiringErrors = 0;
|
|
313
|
-
let retryCandidates = allTasks.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
|
|
314
|
-
const pacsClient = client;
|
|
315
|
-
for (let attempt = 1; attempt <= retryMax && retryCandidates.length > 0; attempt++) {
|
|
316
|
-
await Promise.all(retryCandidates.map(async (t) => {
|
|
317
|
-
const result = await series_cubePathGet(t.seriesUID, pacsClient, 1, 0);
|
|
318
|
-
if (result) {
|
|
319
|
-
t.lonkConfirmed = true;
|
|
320
|
-
t.cubePathDir = result.folderPath;
|
|
321
|
-
}
|
|
322
|
-
}));
|
|
323
|
-
retryCandidates = retryCandidates.filter((t) => !t.lonkConfirmed);
|
|
324
|
-
if (retryCandidates.length === 0)
|
|
325
|
-
break;
|
|
326
|
-
sink_dataLine(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${retryCandidates.length} unconfirmed series...`));
|
|
327
|
-
for (const t of retryCandidates) {
|
|
328
|
-
t.status = 'pending';
|
|
329
|
-
t.actualFiles = 0;
|
|
330
|
-
t.lastProgressFiles = 0;
|
|
331
|
-
t.lastProgressTime = Date.now();
|
|
332
|
-
t.startTime = 0;
|
|
333
|
-
t.lonkConfirmed = false;
|
|
334
|
-
t.syntheticQueryId = null;
|
|
335
|
-
t.retrieveId = null;
|
|
336
|
-
pullProgress_emit(t, 'running', 'retrying');
|
|
337
|
-
}
|
|
338
|
-
extraFiringErrors += await tasks_pullWatch(retryCandidates, pacsserver, client);
|
|
339
|
-
retryCandidates = retryCandidates.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
|
|
340
|
-
}
|
|
341
|
-
for (const t of retryCandidates) {
|
|
342
|
-
t.status = 'error';
|
|
343
|
-
pullProgress_emit(t, 'error');
|
|
344
|
-
}
|
|
345
|
-
return extraFiringErrors;
|
|
124
|
+
return { paths: resolvedPaths, complete };
|
|
346
125
|
}
|
|
347
126
|
/**
|
|
348
127
|
* Prints the pull summary and sets a non-zero exit code on any failure.
|
|
@@ -359,17 +138,81 @@ function pullSummary_print(allTasks, totalFiringErrors) {
|
|
|
359
138
|
}
|
|
360
139
|
else {
|
|
361
140
|
sink_dataLine(chalk.yellow(`\n⚠ ${pulled}/${totalCount} series complete.`));
|
|
141
|
+
// An unfired series is permanent loss for this run (no retrieve exists,
|
|
142
|
+
// nothing will ever arrive); a watch failure is usually cosmetic — the
|
|
143
|
+
// PACS keeps pushing and CUBE keeps registering after detach.
|
|
362
144
|
for (const f of failures) {
|
|
363
|
-
|
|
145
|
+
if (f.status === 'unfired') {
|
|
146
|
+
sink_dataLine(chalk.red(` ✗ ${f.label} [FAILED TO FIRE — will not arrive; re-run pull]`));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
sink_dataLine(chalk.yellow(` ✗ ${f.label} [${f.status.toUpperCase()} — verify with: pacs status]`));
|
|
150
|
+
}
|
|
364
151
|
}
|
|
365
152
|
process.exitCode = 1;
|
|
366
153
|
}
|
|
367
154
|
if (totalFiringErrors > 0) {
|
|
368
|
-
sink_dataLine(chalk.red(` ${totalFiringErrors} retrieve(s)
|
|
155
|
+
sink_dataLine(chalk.red(` ${totalFiringErrors} retrieve(s) were never fired — re-run pull to fetch them.`));
|
|
369
156
|
process.exitCode = 1;
|
|
370
157
|
}
|
|
371
158
|
pullProgress_complete(allTasks, failures.length > 0 || totalFiringErrors > 0);
|
|
372
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Resolves the exact CUBE directories materialised by a completed pull.
|
|
162
|
+
*
|
|
163
|
+
* @param allTasks - Successfully pulled series tasks.
|
|
164
|
+
* @param client - Authenticated ChRIS API client.
|
|
165
|
+
* @returns De-duplicated CUBE directories, or null if any series is unresolved.
|
|
166
|
+
*/
|
|
167
|
+
async function feedInputDirs_resolve(allTasks, client) {
|
|
168
|
+
const resolved = await Promise.all(allTasks.map(async (task) => {
|
|
169
|
+
if (task.cubePathDir !== null)
|
|
170
|
+
return { task, folderPath: task.cubePathDir };
|
|
171
|
+
const stateResult = await seriesStorage_resolve(task.seriesUID, { attempts: 4, delayMs: 2_000 });
|
|
172
|
+
return { task, folderPath: stateResult.ok ? stateResult.value.folderPath : null };
|
|
173
|
+
}));
|
|
174
|
+
const missing = resolved.find(({ folderPath }) => folderPath === null);
|
|
175
|
+
if (missing) {
|
|
176
|
+
sink_errLine(chalk.red(`pull: Could not resolve CUBE storage for series ${missing.task.seriesUID}; new feed not created.`));
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
return [...new Set(resolved.map(({ folderPath }) => folderPath))];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Creates a feed whose pl-dircopy root contains exactly the pulled series.
|
|
183
|
+
*
|
|
184
|
+
* @param title - Requested feed title.
|
|
185
|
+
* @param allTasks - Successfully pulled series tasks.
|
|
186
|
+
* @param client - Authenticated ChRIS API client.
|
|
187
|
+
* @returns True when a valid feed and root instance were created.
|
|
188
|
+
*/
|
|
189
|
+
async function pulledFeed_create(title, allTasks, client) {
|
|
190
|
+
const dirs = await feedInputDirs_resolve(allTasks, client);
|
|
191
|
+
if (dirs === null)
|
|
192
|
+
return null;
|
|
193
|
+
const feed = await feed_create(dirs, { title });
|
|
194
|
+
const feedID = Number(feed?.id);
|
|
195
|
+
const rootInstanceID = Number(feed?.pluginInstance?.data?.id);
|
|
196
|
+
const owner = typeof feed?.owner_username === 'string'
|
|
197
|
+
? feed.owner_username.trim()
|
|
198
|
+
: '';
|
|
199
|
+
if (!feed || !Number.isInteger(feedID) || feedID <= 0 ||
|
|
200
|
+
!Number.isInteger(rootInstanceID) || rootInstanceID <= 0 || owner.length === 0) {
|
|
201
|
+
sink_errLine(chalk.red(`pull: Failed to create feed '${title}'.`));
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
newFeed_cacheAdd({
|
|
205
|
+
feedID,
|
|
206
|
+
title,
|
|
207
|
+
ownerUsername: owner,
|
|
208
|
+
rootInstanceID,
|
|
209
|
+
});
|
|
210
|
+
sink_dataLine(chalk.green(`Feed created: ${feedID}`));
|
|
211
|
+
sink_dataLine(chalk.green(`Root job: pl-dircopy (ID: ${rootInstanceID})`));
|
|
212
|
+
sink_dataLine(`Input: ${allTasks.length} PACS series`);
|
|
213
|
+
sink_dataLine(chalk.cyan(`Feed path: /home/${owner}/feeds/feed_${feedID}/pl-dircopy_${rootInstanceID}/data/`));
|
|
214
|
+
return { feedID, rootInstanceID, owner };
|
|
215
|
+
}
|
|
373
216
|
/**
|
|
374
217
|
* Pulls one or more `/net/pacs/queries/...` VFS paths into ChRIS storage.
|
|
375
218
|
*
|
|
@@ -377,6 +220,7 @@ function pullSummary_print(allTasks, totalFiringErrors) {
|
|
|
377
220
|
* exits non-zero on partial failure.
|
|
378
221
|
* With `--nowait`: fires retrieves and prints `<seriesUID> <retrieveId>` per line, then returns.
|
|
379
222
|
* With `--retry N`: re-fires retrieves for [NO LONK] series up to N additional times.
|
|
223
|
+
* With `--new-feed TITLE`: creates one feed from the exact successfully retrieved set.
|
|
380
224
|
*
|
|
381
225
|
* @param args - Command arguments (VFS paths, optional flags).
|
|
382
226
|
* @example
|
|
@@ -387,9 +231,20 @@ export async function builtin_pull(args) {
|
|
|
387
231
|
if (args_checkHasHelpFlag(args, 'pull')) {
|
|
388
232
|
return envelope_ok(help_render('pull'));
|
|
389
233
|
}
|
|
390
|
-
const
|
|
234
|
+
const parsed = pullArgs_parse(args);
|
|
235
|
+
const { nowait, retryMax, newFeedTitle, parseError, paths } = parsed;
|
|
236
|
+
if (parseError !== null) {
|
|
237
|
+
sink_errLine(chalk.red(`pull: ${parseError}.`));
|
|
238
|
+
process.exitCode = 1;
|
|
239
|
+
return envelope_error('');
|
|
240
|
+
}
|
|
241
|
+
if (nowait && newFeedTitle !== null) {
|
|
242
|
+
sink_errLine(chalk.red('pull: --new-feed cannot be combined with --nowait.'));
|
|
243
|
+
process.exitCode = 1;
|
|
244
|
+
return envelope_error('');
|
|
245
|
+
}
|
|
391
246
|
if (paths.length === 0) {
|
|
392
|
-
sink_errLine(chalk.red('pull: No paths specified. Usage: pull [--nowait] [--retry N] <vfs-path> [...]'));
|
|
247
|
+
sink_errLine(chalk.red('pull: No paths specified. Usage: pull [--nowait] [--retry N] [--new-feed <title>] <vfs-path> [...]'));
|
|
393
248
|
process.exitCode = 1;
|
|
394
249
|
return envelope_error('');
|
|
395
250
|
}
|
|
@@ -400,12 +255,15 @@ export async function builtin_pull(args) {
|
|
|
400
255
|
return envelope_error('');
|
|
401
256
|
}
|
|
402
257
|
const pacsserver = pacsIdentifier;
|
|
403
|
-
const
|
|
258
|
+
const pathResolution = await paths_resolveToVfs(paths, pacsserver);
|
|
259
|
+
const resolvedPaths = pathResolution.paths;
|
|
260
|
+
let selectionComplete = pathResolution.complete;
|
|
404
261
|
const allTasks = [];
|
|
405
262
|
for (const p of resolvedPaths) {
|
|
406
263
|
const tasks = await path_seriesCollect(p, pacsIdentifier);
|
|
407
264
|
if (tasks.length === 0) {
|
|
408
265
|
sink_errLine(chalk.yellow(`pull: No series found under: ${p}`));
|
|
266
|
+
selectionComplete = false;
|
|
409
267
|
}
|
|
410
268
|
allTasks.push(...tasks);
|
|
411
269
|
}
|
|
@@ -420,10 +278,18 @@ export async function builtin_pull(args) {
|
|
|
420
278
|
process.exitCode = 1;
|
|
421
279
|
return envelope_error('');
|
|
422
280
|
}
|
|
281
|
+
// Idempotent recovery: skip series whose expected file count is already
|
|
282
|
+
// registered in CUBE, so re-running the same pull fetches only what is
|
|
283
|
+
// missing instead of re-firing the whole study.
|
|
284
|
+
const skipped = await retrieveTasks_skipComplete(allTasks);
|
|
285
|
+
if (skipped > 0) {
|
|
286
|
+
sink_dataLine(chalk.gray(`pull: ${skipped}/${allTasks.length} series already in CUBE — skipped.`));
|
|
287
|
+
}
|
|
288
|
+
const toFetch = allTasks.filter((t) => t.status !== 'pulled');
|
|
423
289
|
// --nowait: fire retrieves and exit without watching
|
|
424
290
|
if (nowait) {
|
|
425
|
-
|
|
426
|
-
|
|
291
|
+
await retrieveTasks_fire(toFetch, pacsserver);
|
|
292
|
+
for (const t of toFetch) {
|
|
427
293
|
if (t.retrieveId !== null) {
|
|
428
294
|
sink_dataLine(`${t.seriesUID} ${t.retrieveId}`);
|
|
429
295
|
}
|
|
@@ -434,8 +300,11 @@ export async function builtin_pull(args) {
|
|
|
434
300
|
}
|
|
435
301
|
return envelope_ok('');
|
|
436
302
|
}
|
|
437
|
-
|
|
438
|
-
totalFiringErrors
|
|
303
|
+
const events = pullEvents_make();
|
|
304
|
+
let totalFiringErrors = toFetch.length > 0
|
|
305
|
+
? await retrieve_fireAndWatch(toFetch, pacsserver, client, events)
|
|
306
|
+
: 0;
|
|
307
|
+
totalFiringErrors += await retrieve_confirmLoop(allTasks, retryMax, pacsserver, client, events);
|
|
439
308
|
pullSummary_print(allTasks, totalFiringErrors);
|
|
440
309
|
// Report CUBE paths via cubepath; --retry handles pacsseries DB lag post-pull
|
|
441
310
|
const cubeEnvelope = await builtin_cubepath([...resolvedPaths, '--retry']);
|
|
@@ -443,7 +312,70 @@ export async function builtin_pull(args) {
|
|
|
443
312
|
sink_get().data_write(cubeEnvelope.rendered);
|
|
444
313
|
if (cubeEnvelope.renderedErr !== undefined && cubeEnvelope.renderedErr.length > 0)
|
|
445
314
|
sink_get().err_write(cubeEnvelope.renderedErr);
|
|
446
|
-
|
|
315
|
+
if (newFeedTitle !== null) {
|
|
316
|
+
if (!selectionComplete) {
|
|
317
|
+
sink_errLine(chalk.red('pull: New feed not created because the requested selection was incomplete.'));
|
|
318
|
+
process.exitCode = 1;
|
|
319
|
+
return envelope_error('');
|
|
320
|
+
}
|
|
321
|
+
const incomplete = totalFiringErrors > 0 || allTasks.some((task) => task.status !== 'pulled');
|
|
322
|
+
if (incomplete) {
|
|
323
|
+
sink_errLine(chalk.red('pull: New feed not created because retrieval was incomplete.'));
|
|
324
|
+
process.exitCode = 1;
|
|
325
|
+
return envelope_error('');
|
|
326
|
+
}
|
|
327
|
+
const feedResult = await pulledFeed_create(newFeedTitle, allTasks, client);
|
|
328
|
+
if (feedResult === null) {
|
|
329
|
+
process.exitCode = 1;
|
|
330
|
+
return envelope_error('');
|
|
331
|
+
}
|
|
332
|
+
const attachment = parsed.attachment;
|
|
333
|
+
if (attachment?.kind === 'pipeline') {
|
|
334
|
+
const attachmentEnvelope = await builtin_pipeline([
|
|
335
|
+
'run', attachment.selector, '--previous', String(feedResult.rootInstanceID), ...attachment.args,
|
|
336
|
+
]);
|
|
337
|
+
if (attachmentEnvelope.status === 'error') {
|
|
338
|
+
sink_errLine(chalk.red(`pull: Pipeline attachment failed; Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
|
|
339
|
+
process.exitCode = 1;
|
|
340
|
+
return envelope_error('');
|
|
341
|
+
}
|
|
342
|
+
sink_dataLine(chalk.green(`Pipeline attached: ${attachment.selector}`));
|
|
343
|
+
}
|
|
344
|
+
else if (attachment?.kind === 'plugin') {
|
|
345
|
+
let pluginParameters;
|
|
346
|
+
try {
|
|
347
|
+
pluginParameters = executableArguments_parse(attachment.args);
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
351
|
+
sink_errLine(chalk.red(`pull: Plugin attachment failed (${message}); Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
|
|
352
|
+
process.exitCode = 1;
|
|
353
|
+
return envelope_error('');
|
|
354
|
+
}
|
|
355
|
+
const instance = await plugin_run(pluginSelector_normalize(attachment.selector), {
|
|
356
|
+
...pluginParameters,
|
|
357
|
+
previous_id: feedResult.rootInstanceID,
|
|
358
|
+
});
|
|
359
|
+
const instanceID = Number(instance?.id);
|
|
360
|
+
if (!instance || !Number.isInteger(instanceID) || instanceID <= 0) {
|
|
361
|
+
sink_errLine(chalk.red(`pull: Plugin attachment failed; Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
|
|
362
|
+
process.exitCode = 1;
|
|
363
|
+
return envelope_error('');
|
|
364
|
+
}
|
|
365
|
+
procCache_get().instance_add({
|
|
366
|
+
id: instanceID,
|
|
367
|
+
feedID: feedResult.feedID,
|
|
368
|
+
parentID: feedResult.rootInstanceID,
|
|
369
|
+
pluginName: typeof instance.plugin_name === 'string' ? instance.plugin_name : attachment.selector,
|
|
370
|
+
params: null,
|
|
371
|
+
status: 'scheduled',
|
|
372
|
+
});
|
|
373
|
+
sink_dataLine(chalk.green(`Plugin attached: ${attachment.selector} (ID: ${instanceID})`));
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
if (newFeedTitle === null) {
|
|
377
|
+
sink_dataLine(chalk.gray('Detached — use `pacsretrieve report <queryId>` to verify.'));
|
|
378
|
+
}
|
|
447
379
|
return envelope_ok('');
|
|
448
380
|
}
|
|
449
381
|
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,EAKnB,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAGL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3E,MAAM,gBAAgB,GAAW,MAAM,CAAC;AACxC,MAAM,sBAAsB,GAAW,MAAM,CAAC;AAC9C,MAAM,iBAAiB,GAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACjD,MAAM,mBAAmB,GAAW,KAAK,CAAC;AAI1C,SAAS,yBAAyB,CAAC,MAAoB,EAAE,aAAsB;IAC7E,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;IACvE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAqCD,SAAS,iBAAiB,CAAC,IAAoB,EAAE,MAAuB,EAAE,QAAiC,UAAU;IACnH,MAAM,OAAO,GAAW,IAAI,CAAC,WAAW,CAAC;IACzC,MAAM,KAAK,GAAW,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/G,QAAQ,EAAE,CAAC,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,UAAU;QAChB,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,SAAS;QACtB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO;QACP,KAAK;QACL,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;KAC7E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA0B,EAAE,MAAe;IACxE,MAAM,IAAI,GAAW,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC1F,QAAQ,EAAE,CAAC,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QACrC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe;QACnD,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG;QACnE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;KAClC,CAAC,CAAC;AACL,CAAC;AASD;;;;;;GAMG;AACH,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,gBAAwB;IACzE,MAAM,KAAK,GAAqB,MAAM,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAoB,EAAkB,EAAE,CAAC,CAAC;QAC1D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,SAAS,CAAC,IAAoB,EAAE,UAAkB;IAC/D,MAAM,SAAS,GAAwB;QACrC,qEAAqE;QACrE,oEAAoE;QACpE,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAC1D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,iBAAiB,EAAE,IAAI,CAAC,SAAS;YACjC,gBAAgB,EAAE,IAAI,CAAC,QAAQ;SAChC,CAAC;QACF,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAW,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACnE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACzC,IAAI,CAAC,UAAU,GAAI,cAAc,CAAC,KAA4B,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,QAAgB,EAAE,KAAa;IACtD,OAAO,QAAQ;SACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;SACjE,OAAO,CAAC,2BAA2B,EAAE,qBAAqB,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAuB,EACvB,UAAkB,EAClB,MAAc;IAEd,MAAM,WAAW,GAAqB,MAAqC,CAAC;IAC5E,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAW,MAAM,CAAE,aAAa,CAAC,IAA2C,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACxG,MAAM,KAAK,GAAW,eAAe,CAAC,aAAa,CAAC,GAAa,EAAE,QAAQ,CAAC,CAAC;IAE7E,MAAM,EAAE,GAAc,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,IAAI,OAAO,CAAO,CAAC,WAAuB,EAAE,UAAgC,EAAE,EAAE;QACpF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,iBAAiB,EAAE,CAAC,CAAC,SAAS;YAC9B,SAAS,EAAE,CAAC,CAAC,QAAQ;YACrB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAiB,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAE7F,MAAM,KAAK,GAAqB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAW,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;gBAAE,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAgC,IAAI,GAAG,CACpD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAiB,EAA4B,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAC7E,CAAC;IAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAmB,EAAE,EAAE;QAC9C,IAAI,QAAQ,GAAY,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC;gBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,OAAO,GAAmB,WAAW,CAAC,GAAG,EAAE;YAC/C,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,WAAW,GAAY,IAAI,CAAC;YAEhC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACtG,SAAS;gBACX,CAAC;gBACD,WAAW,GAAG,KAAK,CAAC;gBAEpB,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,iBAAiB,EAAE,CAAC;oBAC7D,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;oBACrB,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAChC,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;oBACrE,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;oBACrB,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAChC,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,sBAAsB,EAAE,CAAC;oBACzF,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACpB,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC;oBACxB,iBAAiB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBACpC,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,WAAW;gBAAE,IAAI,EAAE,CAAC;QAC1B,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAExB,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAuB,EAAE,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAA4B,CAAC;gBAC9F,MAAM,SAAS,GAAuB,KAAK,CAAC,iBAAuC,CAAC;gBACpF,MAAM,OAAO,GAAwC,KAAK,CAAC,OAA8C,CAAC;gBAE1G,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO;oBAAE,OAAO;gBAEnC,MAAM,CAAC,GAA+B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/D,IAAI,CAAC,CAAC;oBAAE,OAAO;gBAEf,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC9D,MAAM,CAAC,GAAW,OAAO,CAAC,MAAM,CAAC;oBACjC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;oBAClB,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;oBACxB,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAChC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;wBAAE,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;oBACjD,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACtD,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACpB,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,aAAa;wBAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC;oBACrE,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnE,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC;oBACnB,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACrD,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC;oBACnB,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAAC,KAAe,EAAE,UAAkB;IACnE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAW,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,mEAAmE;YACnE,qEAAqE;YACrE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,OAAO,GAAwD,MAAM,uBAAuB,CAChG,OAAO,EACP,QAAQ,OAAO,EAAE,EACjB,UAAU,EACV,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAC5C,CAAC;YACF,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,aAAa,CAC1B,QAA0B,EAC1B,QAAgB,EAChB,UAAkB,EAClB,MAAc;IAEd,IAAI,iBAAiB,GAAW,CAAC,CAAC;IAClC,IAAI,eAAe,GAAqB,QAAQ,CAAC,MAAM,CACrD,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,CACjE,CAAC;IACF,MAAM,UAAU,GAAoB,MAAoC,CAAC;IAEzE,KAAK,IAAI,OAAO,GAAW,CAAC,EAAE,OAAO,IAAI,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC3F,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAiB,EAAiB,EAAE;YAC/E,MAAM,MAAM,GAAmD,MAAM,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvH,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;QAEJ,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAClF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAExC,aAAa,CAAC,KAAK,CAAC,MAAM,CACxB,WAAW,OAAO,IAAI,QAAQ,QAAQ,eAAe,CAAC,MAAM,wBAAwB,CACrF,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;YAChC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;YACpB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,iBAAiB,IAAI,MAAM,eAAe,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEhF,eAAe,GAAG,eAAe,CAAC,MAAM,CACtC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,CACjE,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC;QACnB,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,QAA0B,EAAE,iBAAyB;IAC9E,MAAM,MAAM,GAAW,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC5F,MAAM,UAAU,GAAW,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,QAAQ,GAAqB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAEjG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,IAAI,UAAU,8BAA8B,CAAC,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,IAAI,UAAU,mBAAmB,CAAC,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,iBAAiB,+BAA+B,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAChF,CAAC;AAGD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,IAAI,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAa,cAAc,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,cAAc,GAAkB,MAAM,kBAAkB,EAAE,CAAC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,UAAU,GAAW,cAAc,CAAC;IAE1C,MAAM,aAAa,GAAa,MAAM,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAqB,MAAM,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IACpE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,qDAAqD;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1B,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC;gBACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,iBAAiB,GAAW,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpF,iBAAiB,IAAI,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjF,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAE/C,8EAA8E;IAC9E,MAAM,YAAY,GAAoB,MAAM,gBAAgB,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5F,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnF,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAElI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACvF,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/rm.js
CHANGED
|
@@ -164,6 +164,10 @@ export async function builtin_rm(args) {
|
|
|
164
164
|
const listCache = listCache_get();
|
|
165
165
|
const parentDir = path.posix.dirname(target);
|
|
166
166
|
listCache.cache_invalidate(parentDir);
|
|
167
|
+
// Also drop the removed target and any listings cached beneath it:
|
|
168
|
+
// a later re-upload to the same path must not inherit still-fresh
|
|
169
|
+
// nested listings from the deleted tree.
|
|
170
|
+
listCache.cache_invalidateTree(target);
|
|
167
171
|
}
|
|
168
172
|
else {
|
|
169
173
|
err_emit(chalk.red(`rm: cannot remove '${pathArg}': ${result.error || 'unknown error'}`));
|