@sagmans/dsh-tui 0.6.0 → 0.8.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/.agents/skills/dsh-tui-dogfood/SKILL.md +83 -0
- package/.agents/skills/dsh-tui-dogfood/references/home-state.md +78 -0
- package/.agents/skills/dsh-tui-dogfood/scripts/clone-links.mjs +133 -0
- package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +417 -0
- package/.agents/skills/dsh-tui-update-models/SKILL.md +199 -0
- package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +292 -0
- package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +314 -0
- package/README.md +154 -27
- package/lib/agent/present.d.ts.map +1 -1
- package/lib/agent/present.js +2 -1
- package/lib/agent/present.js.map +1 -1
- package/lib/cards/composition.d.ts +68 -0
- package/lib/cards/composition.d.ts.map +1 -0
- package/lib/cards/composition.js +117 -0
- package/lib/cards/composition.js.map +1 -0
- package/lib/cards/presenter.d.ts +23 -0
- package/lib/cards/presenter.d.ts.map +1 -0
- package/lib/cards/presenter.js +394 -0
- package/lib/cards/presenter.js.map +1 -0
- package/lib/cards/preview.d.ts +42 -0
- package/lib/cards/preview.d.ts.map +1 -0
- package/lib/cards/preview.js +51 -0
- package/lib/cards/preview.js.map +1 -0
- package/lib/cards.d.ts +12 -120
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +4 -556
- package/lib/cards.js.map +1 -1
- package/lib/compat/section.d.ts +29 -0
- package/lib/compat/section.d.ts.map +1 -0
- package/lib/compat/section.js +82 -0
- package/lib/compat/section.js.map +1 -0
- package/lib/config.d.ts +27 -2
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +61 -1
- package/lib/config.js.map +1 -1
- package/lib/contracts.d.ts +28 -0
- package/lib/contracts.d.ts.map +1 -1
- package/lib/fold-cursor.d.ts +8 -0
- package/lib/fold-cursor.d.ts.map +1 -1
- package/lib/fold-cursor.js +18 -0
- package/lib/fold-cursor.js.map +1 -1
- package/lib/gates/question-card.d.ts +77 -0
- package/lib/gates/question-card.d.ts.map +1 -0
- package/lib/gates/question-card.js +113 -0
- package/lib/gates/question-card.js.map +1 -0
- package/lib/gates/questions.d.ts +127 -0
- package/lib/gates/questions.d.ts.map +1 -0
- package/lib/gates/questions.js +418 -0
- package/lib/gates/questions.js.map +1 -0
- package/lib/gates.d.ts +1 -113
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +1 -484
- package/lib/gates.js.map +1 -1
- package/lib/herdr/client.d.ts +8 -0
- package/lib/herdr/client.d.ts.map +1 -1
- package/lib/herdr/client.js +13 -1
- package/lib/herdr/client.js.map +1 -1
- package/lib/herdr/constants.d.ts +18 -0
- package/lib/herdr/constants.d.ts.map +1 -1
- package/lib/herdr/constants.js +18 -0
- package/lib/herdr/constants.js.map +1 -1
- package/lib/herdr/reporter.d.ts +20 -4
- package/lib/herdr/reporter.d.ts.map +1 -1
- package/lib/herdr/reporter.js +70 -20
- package/lib/herdr/reporter.js.map +1 -1
- package/lib/herdr/state.d.ts +10 -0
- package/lib/herdr/state.d.ts.map +1 -1
- package/lib/herdr/state.js +21 -4
- package/lib/herdr/state.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +348 -2602
- package/lib/index.js.map +1 -1
- package/lib/input/action-catalog.d.ts +74 -0
- package/lib/input/action-catalog.d.ts.map +1 -0
- package/lib/input/action-catalog.js +137 -0
- package/lib/input/action-catalog.js.map +1 -0
- package/lib/input/actions.d.ts +5 -81
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +4 -625
- package/lib/input/actions.js.map +1 -1
- package/lib/input/completion.d.ts +1 -1
- package/lib/input/completion.d.ts.map +1 -1
- package/lib/input/completion.js +2 -1
- package/lib/input/completion.js.map +1 -1
- package/lib/input/file-index.d.ts +40 -0
- package/lib/input/file-index.d.ts.map +1 -0
- package/lib/input/file-index.js +141 -0
- package/lib/input/file-index.js.map +1 -0
- package/lib/input/file-search.d.ts +1 -38
- package/lib/input/file-search.d.ts.map +1 -1
- package/lib/input/file-search.js +1 -487
- package/lib/input/file-search.js.map +1 -1
- package/lib/input/key-press.d.ts +57 -0
- package/lib/input/key-press.d.ts.map +1 -0
- package/lib/input/key-press.js +218 -0
- package/lib/input/key-press.js.map +1 -0
- package/lib/input/keymap-conflicts.d.ts +59 -0
- package/lib/input/keymap-conflicts.d.ts.map +1 -0
- package/lib/input/keymap-conflicts.js +292 -0
- package/lib/input/keymap-conflicts.js.map +1 -0
- package/lib/input/keymap-settings.js +1 -1
- package/lib/input/keymap-settings.js.map +1 -1
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +3 -1
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/workspace-files.d.ts +10 -0
- package/lib/input/workspace-files.d.ts.map +1 -0
- package/lib/input/workspace-files.js +359 -0
- package/lib/input/workspace-files.js.map +1 -0
- package/lib/install-skills.d.ts +39 -0
- package/lib/install-skills.d.ts.map +1 -0
- package/lib/install-skills.js +273 -0
- package/lib/install-skills.js.map +1 -0
- package/lib/keys-command.d.ts +2 -1
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/keys-command.js +2 -1
- package/lib/keys-command.js.map +1 -1
- package/lib/model-list.d.ts +37 -0
- package/lib/model-list.d.ts.map +1 -0
- package/lib/model-list.js +60 -0
- package/lib/model-list.js.map +1 -0
- package/lib/startup.d.ts +8 -0
- package/lib/startup.d.ts.map +1 -1
- package/lib/startup.js +120 -24
- package/lib/startup.js.map +1 -1
- package/lib/subagents.d.ts +7 -3
- package/lib/subagents.d.ts.map +1 -1
- package/lib/subagents.js +28 -4
- package/lib/subagents.js.map +1 -1
- package/lib/surface/appearance-preferences.d.ts +26 -0
- package/lib/surface/appearance-preferences.d.ts.map +1 -0
- package/lib/surface/appearance-preferences.js +139 -0
- package/lib/surface/appearance-preferences.js.map +1 -0
- package/lib/surface/appearance.d.ts +87 -0
- package/lib/surface/appearance.d.ts.map +1 -0
- package/lib/surface/appearance.js +353 -0
- package/lib/surface/appearance.js.map +1 -0
- package/lib/surface/background-work.d.ts +51 -0
- package/lib/surface/background-work.d.ts.map +1 -0
- package/lib/surface/background-work.js +172 -0
- package/lib/surface/background-work.js.map +1 -0
- package/lib/surface/commands.d.ts +82 -0
- package/lib/surface/commands.d.ts.map +1 -0
- package/lib/surface/commands.js +370 -0
- package/lib/surface/commands.js.map +1 -0
- package/lib/surface/modal-input.d.ts +59 -0
- package/lib/surface/modal-input.d.ts.map +1 -0
- package/lib/surface/modal-input.js +243 -0
- package/lib/surface/modal-input.js.map +1 -0
- package/lib/surface/model-choice.d.ts +54 -0
- package/lib/surface/model-choice.d.ts.map +1 -0
- package/lib/surface/model-choice.js +325 -0
- package/lib/surface/model-choice.js.map +1 -0
- package/lib/surface/preset-choice.d.ts +78 -0
- package/lib/surface/preset-choice.d.ts.map +1 -0
- package/lib/surface/preset-choice.js +163 -0
- package/lib/surface/preset-choice.js.map +1 -0
- package/lib/surface/prompt-input.d.ts +97 -0
- package/lib/surface/prompt-input.d.ts.map +1 -0
- package/lib/surface/prompt-input.js +215 -0
- package/lib/surface/prompt-input.js.map +1 -0
- package/lib/surface/prompt-memory.d.ts +76 -0
- package/lib/surface/prompt-memory.d.ts.map +1 -0
- package/lib/surface/prompt-memory.js +167 -0
- package/lib/surface/prompt-memory.js.map +1 -0
- package/lib/surface/session-lifecycle.d.ts +120 -0
- package/lib/surface/session-lifecycle.d.ts.map +1 -0
- package/lib/surface/session-lifecycle.js +324 -0
- package/lib/surface/session-lifecycle.js.map +1 -0
- package/lib/surface/session-picker.d.ts +39 -0
- package/lib/surface/session-picker.d.ts.map +1 -0
- package/lib/surface/session-picker.js +107 -0
- package/lib/surface/session-picker.js.map +1 -0
- package/lib/surface/session-view.d.ts +86 -0
- package/lib/surface/session-view.d.ts.map +1 -0
- package/lib/surface/session-view.js +215 -0
- package/lib/surface/session-view.js.map +1 -0
- package/lib/surface/staged-turns.d.ts +81 -0
- package/lib/surface/staged-turns.d.ts.map +1 -0
- package/lib/surface/staged-turns.js +206 -0
- package/lib/surface/staged-turns.js.map +1 -0
- package/lib/surface/terminal-lifecycle.d.ts +76 -0
- package/lib/surface/terminal-lifecycle.d.ts.map +1 -0
- package/lib/surface/terminal-lifecycle.js +222 -0
- package/lib/surface/terminal-lifecycle.js.map +1 -0
- package/lib/terminal-text/scan.d.ts +44 -0
- package/lib/terminal-text/scan.d.ts.map +1 -0
- package/lib/terminal-text/scan.js +195 -0
- package/lib/terminal-text/scan.js.map +1 -0
- package/lib/terminal-text/sgr.d.ts +32 -0
- package/lib/terminal-text/sgr.d.ts.map +1 -0
- package/lib/terminal-text/sgr.js +203 -0
- package/lib/terminal-text/sgr.js.map +1 -0
- package/lib/terminal-text.d.ts +1 -1
- package/lib/terminal-text.d.ts.map +1 -1
- package/lib/terminal-text.js +2 -379
- package/lib/terminal-text.js.map +1 -1
- package/lib/theme-command.js +2 -1
- package/lib/theme-command.js.map +1 -1
- package/lib/theme-defaults.d.ts +64 -0
- package/lib/theme-defaults.d.ts.map +1 -0
- package/lib/theme-defaults.js +248 -0
- package/lib/theme-defaults.js.map +1 -0
- package/lib/theme-files.d.ts +1 -1
- package/lib/theme-files.d.ts.map +1 -1
- package/lib/theme-files.js +1 -1
- package/lib/theme-files.js.map +1 -1
- package/lib/theme-resolver.d.ts +36 -0
- package/lib/theme-resolver.d.ts.map +1 -0
- package/lib/theme-resolver.js +112 -0
- package/lib/theme-resolver.js.map +1 -0
- package/lib/theme-schema.d.ts.map +1 -1
- package/lib/theme-schema.js +3 -2
- package/lib/theme-schema.js.map +1 -1
- package/lib/theme-settings.d.ts +5 -7
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +37 -21
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +0 -89
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +0 -356
- package/lib/theme-tokens.js.map +1 -1
- package/lib/theme.d.ts +1 -1
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +2 -1
- package/lib/theme.js.map +1 -1
- package/lib/tool-display.d.ts.map +1 -1
- package/lib/tool-display.js +2 -1
- package/lib/tool-display.js.map +1 -1
- package/lib/transcript/message-content.d.ts +21 -0
- package/lib/transcript/message-content.d.ts.map +1 -0
- package/lib/transcript/message-content.js +61 -0
- package/lib/transcript/message-content.js.map +1 -0
- package/lib/transcript/tool-calls.d.ts +106 -0
- package/lib/transcript/tool-calls.d.ts.map +1 -0
- package/lib/transcript/tool-calls.js +254 -0
- package/lib/transcript/tool-calls.js.map +1 -0
- package/lib/transcript.d.ts +14 -55
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +31 -253
- package/lib/transcript.js.map +1 -1
- package/lib/ui/dock.d.ts +14 -2
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +52 -10
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +2 -1
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/keymap-picker.d.ts +2 -1
- package/lib/ui/keymap-picker.d.ts.map +1 -1
- package/lib/ui/keymap-picker.js +1 -0
- package/lib/ui/keymap-picker.js.map +1 -1
- package/lib/ui/view/gate-card.d.ts +21 -0
- package/lib/ui/view/gate-card.d.ts.map +1 -0
- package/lib/ui/view/gate-card.js +104 -0
- package/lib/ui/view/gate-card.js.map +1 -0
- package/lib/ui/view/tool-card.d.ts +149 -0
- package/lib/ui/view/tool-card.d.ts.map +1 -0
- package/lib/ui/view/tool-card.js +429 -0
- package/lib/ui/view/tool-card.js.map +1 -0
- package/lib/ui/view/transcript-message.d.ts +62 -0
- package/lib/ui/view/transcript-message.d.ts.map +1 -0
- package/lib/ui/view/transcript-message.js +158 -0
- package/lib/ui/view/transcript-message.js.map +1 -0
- package/lib/ui/view.d.ts +105 -223
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +132 -679
- package/lib/ui/view.js.map +1 -1
- package/package.json +3 -1
- package/themes/violet-orbit.yaml +7 -5
package/lib/input/file-search.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { lstat, readdir, realpath, stat } from 'node:fs/promises';
|
|
3
|
-
import { dirname, isAbsolute, join, relative } from 'node:path';
|
|
4
1
|
import { fuzzyScore } from "./fuzzy.js";
|
|
5
2
|
/** Suggestions a completion menu is allowed to gather at once. */
|
|
6
3
|
export const SUGGESTION_LIMIT = 20;
|
|
@@ -165,7 +162,7 @@ function compareScored(left, right) {
|
|
|
165
162
|
return length;
|
|
166
163
|
return left.candidate.path.localeCompare(right.candidate.path);
|
|
167
164
|
}
|
|
168
|
-
function depthOf(path) {
|
|
165
|
+
export function depthOf(path) {
|
|
169
166
|
return path.split('/').length;
|
|
170
167
|
}
|
|
171
168
|
/** The entries a bare at-sign offers: what sits directly in the workspace. */
|
|
@@ -179,487 +176,4 @@ function topLevel(candidates, limit) {
|
|
|
179
176
|
})
|
|
180
177
|
.slice(0, limit);
|
|
181
178
|
}
|
|
182
|
-
/** How long a gathered listing is trusted before the tree is read again. */
|
|
183
|
-
const INDEX_TTL_MS = 1_000;
|
|
184
|
-
/** How long git is given before the menu stops waiting for its answer. */
|
|
185
|
-
const GIT_TIMEOUT_MS = 3_000;
|
|
186
|
-
/** How long one scan may run before the index abandons it, awaited or not. */
|
|
187
|
-
const SCAN_TIMEOUT_MS = 5_000;
|
|
188
|
-
/** How long proving one row may hold the menu before that row is left out. */
|
|
189
|
-
const ROW_PROOF_TIMEOUT_MS = 500;
|
|
190
|
-
/**
|
|
191
|
-
* The git listing that answers for a workspace.
|
|
192
|
-
*
|
|
193
|
-
* Tracked files and untracked ones that git would add, with ignored paths left
|
|
194
|
-
* out: that is the set the agent itself works on, so a suggestion can never
|
|
195
|
-
* name a build artifact or a secret the repository deliberately ignores. The
|
|
196
|
-
* stage information is asked for too, because it is the only place the listing
|
|
197
|
-
* says which entries are symbolic links.
|
|
198
|
-
*
|
|
199
|
-
* The two sets are asked for apart: an indexed record carries metadata before a
|
|
200
|
-
* tab and an untracked one is a bare path, so a tab inside an untracked name
|
|
201
|
-
* would otherwise look like metadata and hand back a path nobody wrote.
|
|
202
|
-
*/
|
|
203
|
-
const GIT_TRACKED_ARGUMENTS = ['ls-files', '-s', '-z', '--cached'];
|
|
204
|
-
const GIT_UNTRACKED_ARGUMENTS = ['ls-files', '-z', '--others', '--exclude-standard'];
|
|
205
|
-
/** The index modes that name something other than an ordinary file. */
|
|
206
|
-
const GIT_SYMLINK_MODE = '120000';
|
|
207
|
-
const GIT_SUBMODULE_MODE = '160000';
|
|
208
|
-
const GIT_MODE_LENGTH = 6;
|
|
209
|
-
/** Git's way of saying the directory was never under version control. */
|
|
210
|
-
const GIT_EXIT_FATAL = 128;
|
|
211
|
-
const GIT_NOT_A_REPOSITORY = /not a git repository/i;
|
|
212
|
-
const GIT_ERROR_LIMIT = 4_096;
|
|
213
|
-
/** The marker git leaves at the root of a worktree, which a walk must respect. */
|
|
214
|
-
const GIT_MARKER = '.git';
|
|
215
|
-
/** A path that cannot climb further than this many parents is not mounted anywhere real. */
|
|
216
|
-
const MAX_PARENT_DIRECTORIES = 40;
|
|
217
|
-
/**
|
|
218
|
-
* Directories a plain walk never descends into.
|
|
219
|
-
*
|
|
220
|
-
* These hold build output and caches rather than anything a reader attaches,
|
|
221
|
-
* and one of them can dwarf the real tree.
|
|
222
|
-
*/
|
|
223
|
-
const SKIP_DIRECTORIES = new Set([
|
|
224
|
-
'.git',
|
|
225
|
-
'node_modules',
|
|
226
|
-
'__pycache__',
|
|
227
|
-
'.venv',
|
|
228
|
-
'venv',
|
|
229
|
-
'.cache',
|
|
230
|
-
'.next',
|
|
231
|
-
'.turbo',
|
|
232
|
-
'dist',
|
|
233
|
-
'build',
|
|
234
|
-
'coverage',
|
|
235
|
-
'target',
|
|
236
|
-
]);
|
|
237
|
-
/** Caps that keep a walk over a home directory from stalling the editor. */
|
|
238
|
-
const MAX_WALK_ENTRIES = 20_000;
|
|
239
|
-
const MAX_WALK_DEPTH = 12;
|
|
240
|
-
/**
|
|
241
|
-
* The rows of a workspace, from git when it owns the directory and from a walk
|
|
242
|
-
* when it does not.
|
|
243
|
-
*/
|
|
244
|
-
export async function listWorkspaceFiles(cwd, signal) {
|
|
245
|
-
if (signal.aborted)
|
|
246
|
-
return [];
|
|
247
|
-
const listing = await gitFiles(cwd, signal);
|
|
248
|
-
if (signal.aborted)
|
|
249
|
-
return [];
|
|
250
|
-
if (listing.kind === 'listed')
|
|
251
|
-
return await candidatesFrom(cwd, listing.entries, signal);
|
|
252
|
-
// A tree a marker claims is a tree whose ignore-files must hold, whether git
|
|
253
|
-
// owns it, lost it, or could not read it: a walk here would offer exactly the
|
|
254
|
-
// paths those files keep out. Only a directory no marker reaches above may be
|
|
255
|
-
// walked, and there nothing is being ignored in the first place.
|
|
256
|
-
if (await hasGitMarker(cwd))
|
|
257
|
-
return [];
|
|
258
|
-
return await walkFiles(cwd, signal);
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Whether git owns this directory, or one above it, without asking git itself.
|
|
262
|
-
*
|
|
263
|
-
* A marker is the name itself, even when it is a link whose target is gone:
|
|
264
|
-
* git reads that link, so this has to see it too. A stat that fails for any
|
|
265
|
-
* reason but absence, and a climb that runs out of levels before a filesystem
|
|
266
|
-
* root, both leave the question open — and an open question is answered by
|
|
267
|
-
* refusing to walk, because a walk offers the very paths an ignore-file is
|
|
268
|
-
* there to keep out.
|
|
269
|
-
*/
|
|
270
|
-
async function hasGitMarker(cwd) {
|
|
271
|
-
let directory = cwd;
|
|
272
|
-
for (let level = 0; level < MAX_PARENT_DIRECTORIES; level += 1) {
|
|
273
|
-
try {
|
|
274
|
-
await lstat(join(directory, GIT_MARKER));
|
|
275
|
-
return true;
|
|
276
|
-
}
|
|
277
|
-
catch (error) {
|
|
278
|
-
if (!isAbsent(error))
|
|
279
|
-
return true;
|
|
280
|
-
}
|
|
281
|
-
const parent = dirname(directory);
|
|
282
|
-
if (parent === directory)
|
|
283
|
-
return false;
|
|
284
|
-
directory = parent;
|
|
285
|
-
}
|
|
286
|
-
return true;
|
|
287
|
-
}
|
|
288
|
-
/** Whether a stat failed because nothing carries that name. */
|
|
289
|
-
function isAbsent(error) {
|
|
290
|
-
const code = error?.code;
|
|
291
|
-
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
292
|
-
}
|
|
293
|
-
/** Git's answer for a workspace, from the two listings a suggestion set needs. */
|
|
294
|
-
async function gitFiles(cwd, signal) {
|
|
295
|
-
if (signal.aborted)
|
|
296
|
-
return { kind: 'failed' };
|
|
297
|
-
const [tracked, untracked] = await Promise.all([
|
|
298
|
-
runGit(cwd, GIT_TRACKED_ARGUMENTS, signal),
|
|
299
|
-
runGit(cwd, GIT_UNTRACKED_ARGUMENTS, signal),
|
|
300
|
-
]);
|
|
301
|
-
if (tracked.kind === 'listed' && untracked.kind === 'listed') {
|
|
302
|
-
return {
|
|
303
|
-
kind: 'listed',
|
|
304
|
-
entries: [...parseTrackedListing(tracked.records), ...parseUntrackedListing(untracked.records)],
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
if (tracked.kind === 'not-a-repository' || untracked.kind === 'not-a-repository')
|
|
308
|
-
return { kind: 'not-a-repository' };
|
|
309
|
-
return { kind: 'failed' };
|
|
310
|
-
}
|
|
311
|
-
/** Ask git one question, and read its exit as a meaning rather than a number. */
|
|
312
|
-
async function runGit(cwd, args, signal) {
|
|
313
|
-
if (signal.aborted)
|
|
314
|
-
return { kind: 'failed' };
|
|
315
|
-
return await new Promise(resolve => {
|
|
316
|
-
let settled = false;
|
|
317
|
-
let timer;
|
|
318
|
-
const finish = (value) => {
|
|
319
|
-
if (settled)
|
|
320
|
-
return;
|
|
321
|
-
settled = true;
|
|
322
|
-
if (timer !== undefined)
|
|
323
|
-
clearTimeout(timer);
|
|
324
|
-
signal.removeEventListener('abort', onAbort);
|
|
325
|
-
resolve(value);
|
|
326
|
-
};
|
|
327
|
-
const child = spawn('git', [...args], { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
328
|
-
const onAbort = () => {
|
|
329
|
-
child.kill('SIGKILL');
|
|
330
|
-
finish({ kind: 'failed' });
|
|
331
|
-
};
|
|
332
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
333
|
-
timer = setTimeout(() => {
|
|
334
|
-
child.kill('SIGKILL');
|
|
335
|
-
finish({ kind: 'failed' });
|
|
336
|
-
}, GIT_TIMEOUT_MS);
|
|
337
|
-
let stdout = '';
|
|
338
|
-
let stderr = '';
|
|
339
|
-
child.stdout.setEncoding('utf8');
|
|
340
|
-
child.stdout.on('data', (chunk) => {
|
|
341
|
-
stdout += chunk;
|
|
342
|
-
});
|
|
343
|
-
child.stderr.setEncoding('utf8');
|
|
344
|
-
child.stderr.on('data', (chunk) => {
|
|
345
|
-
// Only the refusal is read; a repository cannot be diagnosed from here,
|
|
346
|
-
// and an unbounded buffer would grow with git's chatter.
|
|
347
|
-
if (stderr.length < GIT_ERROR_LIMIT)
|
|
348
|
-
stderr += chunk;
|
|
349
|
-
});
|
|
350
|
-
child.on('error', () => finish({ kind: 'failed' }));
|
|
351
|
-
child.on('close', code => {
|
|
352
|
-
if (code === 0) {
|
|
353
|
-
finish({ kind: 'listed', records: stdout.split('\0') });
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
if (code === GIT_EXIT_FATAL && GIT_NOT_A_REPOSITORY.test(stderr)) {
|
|
357
|
-
finish({ kind: 'not-a-repository' });
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
finish({ kind: 'failed' });
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Read the indexed listing.
|
|
366
|
-
*
|
|
367
|
-
* An entry arrives as its mode, its object, and its stage, then a tab and the
|
|
368
|
-
* path. Only the first tab separates, so a name that carries one is read whole.
|
|
369
|
-
* A path can appear once per merge stage, and the map keeps the last, so a
|
|
370
|
-
* conflicted file is not offered three times.
|
|
371
|
-
*/
|
|
372
|
-
function parseTrackedListing(records) {
|
|
373
|
-
const byPath = new Map();
|
|
374
|
-
for (const record of records) {
|
|
375
|
-
if (record === '')
|
|
376
|
-
continue;
|
|
377
|
-
const tab = record.indexOf('\t');
|
|
378
|
-
// Nothing but metadata precedes the tab, so a record without one is not a
|
|
379
|
-
// line git wrote; reading it as a path would invent a name.
|
|
380
|
-
if (tab < 0)
|
|
381
|
-
continue;
|
|
382
|
-
const mode = record.slice(0, GIT_MODE_LENGTH);
|
|
383
|
-
const path = record.slice(tab + 1);
|
|
384
|
-
if (path === '')
|
|
385
|
-
continue;
|
|
386
|
-
byPath.set(path, {
|
|
387
|
-
path,
|
|
388
|
-
symlink: mode === GIT_SYMLINK_MODE,
|
|
389
|
-
submodule: mode === GIT_SUBMODULE_MODE,
|
|
390
|
-
untracked: false,
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
return [...byPath.values()];
|
|
394
|
-
}
|
|
395
|
-
/** Read the untracked listing, which carries no metadata to mistake for a path. */
|
|
396
|
-
function parseUntrackedListing(records) {
|
|
397
|
-
const entries = [];
|
|
398
|
-
for (const record of records) {
|
|
399
|
-
if (record === '')
|
|
400
|
-
continue;
|
|
401
|
-
entries.push({ path: record, symlink: false, submodule: false, untracked: true });
|
|
402
|
-
}
|
|
403
|
-
return entries;
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Turn git's entries into rows, deriving the directories they imply.
|
|
407
|
-
*
|
|
408
|
-
* Git lists files only, but a reader typing a path prefix wants to open a
|
|
409
|
-
* directory as readily as a file. A link is offered as whatever it names, and
|
|
410
|
-
* only while that target stays in the workspace: the reader would otherwise
|
|
411
|
-
* attach a path the menu never showed them.
|
|
412
|
-
*/
|
|
413
|
-
async function candidatesFrom(root, entries, signal) {
|
|
414
|
-
const canonicalRoot = await canonicalOrUndefined(root);
|
|
415
|
-
if (canonicalRoot === undefined)
|
|
416
|
-
return [];
|
|
417
|
-
const files = new Map();
|
|
418
|
-
const directories = new Set();
|
|
419
|
-
for (const entry of entries) {
|
|
420
|
-
// Every entry costs a stat at least, so a scan whose deadline passed stops
|
|
421
|
-
// here rather than walking the rest of a tree nobody waits for.
|
|
422
|
-
if (signal.aborted)
|
|
423
|
-
return [];
|
|
424
|
-
if (!offerablePath(entry.path))
|
|
425
|
-
continue;
|
|
426
|
-
const linked = entry.symlink || (entry.untracked && await isSymlink(root, entry.path));
|
|
427
|
-
let isDirectory = entry.submodule;
|
|
428
|
-
if (linked) {
|
|
429
|
-
const target = await linkedTarget(canonicalRoot, join(root, entry.path));
|
|
430
|
-
if (target === undefined)
|
|
431
|
-
continue;
|
|
432
|
-
isDirectory = target;
|
|
433
|
-
}
|
|
434
|
-
files.set(entry.path, { path: entry.path, isDirectory });
|
|
435
|
-
addParentDirectories(directories, entry.path);
|
|
436
|
-
}
|
|
437
|
-
const rows = new Map();
|
|
438
|
-
for (const directory of directories)
|
|
439
|
-
rows.set(directory, { path: directory, isDirectory: true });
|
|
440
|
-
for (const candidate of files.values()) {
|
|
441
|
-
if (!rows.has(candidate.path))
|
|
442
|
-
rows.set(candidate.path, candidate);
|
|
443
|
-
}
|
|
444
|
-
return [...rows.values()].sort((left, right) => left.path.localeCompare(right.path));
|
|
445
|
-
}
|
|
446
|
-
/** Every path implies the directories above it, which a reader may open. */
|
|
447
|
-
function addParentDirectories(directories, path) {
|
|
448
|
-
for (let at = path.indexOf('/'); at >= 0; at = path.indexOf('/', at + 1)) {
|
|
449
|
-
directories.add(path.slice(0, at));
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
/** Whether the entry is a link when the index did not say, which is the untracked case. */
|
|
453
|
-
async function isSymlink(root, path) {
|
|
454
|
-
try {
|
|
455
|
-
return (await lstat(join(root, path))).isSymbolicLink();
|
|
456
|
-
}
|
|
457
|
-
catch {
|
|
458
|
-
// A path that vanished between the listing and the stat is offered as the
|
|
459
|
-
// plain file git saw; there is no link left to follow.
|
|
460
|
-
return false;
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
/**
|
|
464
|
-
* Whether a link names something the workspace holds, and whether that is a
|
|
465
|
-
* directory.
|
|
466
|
-
*/
|
|
467
|
-
async function linkedTarget(canonicalRoot, path) {
|
|
468
|
-
try {
|
|
469
|
-
const target = await realpath(path);
|
|
470
|
-
const inside = relative(canonicalRoot, target);
|
|
471
|
-
if (inside !== '' && (inside.startsWith('..') || isAbsolute(inside)))
|
|
472
|
-
return undefined;
|
|
473
|
-
return (await stat(target)).isDirectory();
|
|
474
|
-
}
|
|
475
|
-
catch {
|
|
476
|
-
return undefined;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
async function canonicalOrUndefined(path) {
|
|
480
|
-
try {
|
|
481
|
-
return await realpath(path);
|
|
482
|
-
}
|
|
483
|
-
catch {
|
|
484
|
-
return undefined;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
/** Walk a tree git does not own, breadth first, stopping at the caps above. */
|
|
488
|
-
export async function walkFiles(cwd, signal) {
|
|
489
|
-
if (signal.aborted)
|
|
490
|
-
return [];
|
|
491
|
-
const canonicalRoot = await canonicalOrUndefined(cwd);
|
|
492
|
-
if (canonicalRoot === undefined)
|
|
493
|
-
return [];
|
|
494
|
-
const found = [];
|
|
495
|
-
const queue = [''];
|
|
496
|
-
while (queue.length > 0) {
|
|
497
|
-
if (signal.aborted)
|
|
498
|
-
return [];
|
|
499
|
-
const directory = queue.shift() ?? '';
|
|
500
|
-
let entries;
|
|
501
|
-
try {
|
|
502
|
-
entries = await readdir(directory === '' ? cwd : join(cwd, directory), { withFileTypes: true });
|
|
503
|
-
}
|
|
504
|
-
catch {
|
|
505
|
-
continue;
|
|
506
|
-
}
|
|
507
|
-
for (const entry of entries) {
|
|
508
|
-
if (found.length >= MAX_WALK_ENTRIES)
|
|
509
|
-
return found;
|
|
510
|
-
const path = directory === '' ? entry.name : directory + '/' + entry.name;
|
|
511
|
-
if (!offerablePath(path))
|
|
512
|
-
continue;
|
|
513
|
-
if (entry.isSymbolicLink()) {
|
|
514
|
-
const target = await linkedTarget(canonicalRoot, join(cwd, path));
|
|
515
|
-
if (target === undefined)
|
|
516
|
-
continue;
|
|
517
|
-
// A link is offered as the thing it names and never followed: following
|
|
518
|
-
// one would let a single entry stand in for a tree outside the workspace.
|
|
519
|
-
found.push({ path, isDirectory: target });
|
|
520
|
-
continue;
|
|
521
|
-
}
|
|
522
|
-
if (!entry.isDirectory()) {
|
|
523
|
-
found.push({ path, isDirectory: false });
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
-
if (SKIP_DIRECTORIES.has(entry.name))
|
|
527
|
-
continue;
|
|
528
|
-
found.push({ path, isDirectory: true });
|
|
529
|
-
if (depthOf(path) < MAX_WALK_DEPTH)
|
|
530
|
-
queue.push(path);
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
return found;
|
|
534
|
-
}
|
|
535
|
-
/** A listing cache with a window, so a keystroke does not become a scan. */
|
|
536
|
-
export function createFileIndex(cwd, options = {}) {
|
|
537
|
-
const list = options.list ?? listWorkspaceFiles;
|
|
538
|
-
const now = options.now ?? Date.now;
|
|
539
|
-
const ttlMs = options.ttlMs ?? INDEX_TTL_MS;
|
|
540
|
-
const scanTimeoutMs = options.scanTimeoutMs ?? SCAN_TIMEOUT_MS;
|
|
541
|
-
const resolvePath = options.resolve ?? realpath;
|
|
542
|
-
const proofTimeoutMs = options.proofTimeoutMs ?? ROW_PROOF_TIMEOUT_MS;
|
|
543
|
-
let cached;
|
|
544
|
-
let cachedAt = 0;
|
|
545
|
-
let pending;
|
|
546
|
-
let root;
|
|
547
|
-
const startScan = () => {
|
|
548
|
-
// The scan is shared, so it cannot ride any one caller's signal: the first
|
|
549
|
-
// reader to look away would otherwise cancel the listing every other reader
|
|
550
|
-
// is still waiting on. It runs under its own bound and leaves its answer for
|
|
551
|
-
// the readers that follow.
|
|
552
|
-
const scan = new AbortController();
|
|
553
|
-
const run = list(cwd, scan.signal)
|
|
554
|
-
.then(found => {
|
|
555
|
-
// An answer that arrives after the deadline is the one the waiting
|
|
556
|
-
// readers were told to stop waiting for; keeping it would serve a
|
|
557
|
-
// listing the scan had already given up on.
|
|
558
|
-
if (!scan.signal.aborted) {
|
|
559
|
-
cached = found;
|
|
560
|
-
cachedAt = now();
|
|
561
|
-
}
|
|
562
|
-
return found;
|
|
563
|
-
})
|
|
564
|
-
.catch(() => []);
|
|
565
|
-
const entry = { run, signal: scan.signal };
|
|
566
|
-
pending = entry;
|
|
567
|
-
const timer = setTimeout(() => {
|
|
568
|
-
scan.abort();
|
|
569
|
-
// A caller arriving after the deadline starts fresh work instead of
|
|
570
|
-
// joining a scan that outlived its bound.
|
|
571
|
-
if (pending === entry)
|
|
572
|
-
pending = undefined;
|
|
573
|
-
}, scanTimeoutMs);
|
|
574
|
-
void run.finally(() => {
|
|
575
|
-
clearTimeout(timer);
|
|
576
|
-
// A settled scan is no longer pending even when its listing was refused
|
|
577
|
-
// for arriving late; a fresh scan is the next caller's own business.
|
|
578
|
-
if (pending === entry)
|
|
579
|
-
pending = undefined;
|
|
580
|
-
});
|
|
581
|
-
return entry;
|
|
582
|
-
};
|
|
583
|
-
return {
|
|
584
|
-
async candidates(signal) {
|
|
585
|
-
// A caller that has already looked away is answered from what the index
|
|
586
|
-
// holds, without starting work it would not wait for.
|
|
587
|
-
if (signal.aborted)
|
|
588
|
-
return cached ?? [];
|
|
589
|
-
if (cached !== undefined && now() - cachedAt < ttlMs)
|
|
590
|
-
return cached;
|
|
591
|
-
const entry = pending ?? startScan();
|
|
592
|
-
// The deadline releases a waiter even when the work beneath it cannot be
|
|
593
|
-
// interrupted, which is the only way a blocked filesystem call stops
|
|
594
|
-
// holding the menu.
|
|
595
|
-
const found = await untilAborted(entry.run, signal, entry.signal);
|
|
596
|
-
return found ?? cached ?? [];
|
|
597
|
-
},
|
|
598
|
-
async reachable(path, signal) {
|
|
599
|
-
if (signal.aborted)
|
|
600
|
-
return false;
|
|
601
|
-
root ??= canonicalOrUndefined(cwd);
|
|
602
|
-
// Both the root and the row are bound the same way: a filesystem that
|
|
603
|
-
// stopped answering must not hold a menu open, and a proof that did not
|
|
604
|
-
// arrive in time is a proof that never happened.
|
|
605
|
-
const canonical = await withinBound(root, signal, proofTimeoutMs);
|
|
606
|
-
// The caller may have looked away while the root was being proven, and row
|
|
607
|
-
// work started behind its back would have nothing left to answer for it.
|
|
608
|
-
if (canonical === undefined || signal.aborted)
|
|
609
|
-
return false;
|
|
610
|
-
const target = await withinBound(resolvePath(join(cwd, path)), signal, proofTimeoutMs);
|
|
611
|
-
if (target === undefined)
|
|
612
|
-
return false;
|
|
613
|
-
const inside = relative(canonical, target);
|
|
614
|
-
return inside !== '' && !inside.startsWith('..') && !isAbsolute(inside);
|
|
615
|
-
},
|
|
616
|
-
};
|
|
617
|
-
}
|
|
618
|
-
/** Wait for one filesystem answer, but only while the caller is still waiting. */
|
|
619
|
-
function withinBound(work, signal, timeoutMs) {
|
|
620
|
-
if (signal.aborted) {
|
|
621
|
-
// Work that was already started still has to be answered for, or a refusal
|
|
622
|
-
// it reports would reach the process instead of this caller.
|
|
623
|
-
void work.catch(() => undefined);
|
|
624
|
-
return Promise.resolve(undefined);
|
|
625
|
-
}
|
|
626
|
-
return new Promise(resolve => {
|
|
627
|
-
let timer;
|
|
628
|
-
const finish = (value) => {
|
|
629
|
-
if (timer !== undefined)
|
|
630
|
-
clearTimeout(timer);
|
|
631
|
-
signal.removeEventListener('abort', stop);
|
|
632
|
-
resolve(value);
|
|
633
|
-
};
|
|
634
|
-
const stop = () => finish(undefined);
|
|
635
|
-
timer = setTimeout(stop, timeoutMs);
|
|
636
|
-
signal.addEventListener('abort', stop, { once: true });
|
|
637
|
-
work.then(value => finish(value), () => finish(undefined));
|
|
638
|
-
});
|
|
639
|
-
}
|
|
640
|
-
/** Wait for shared work, but leave as soon as any reason to stop waiting fires. */
|
|
641
|
-
function untilAborted(work, ...signals) {
|
|
642
|
-
if (signals.some(signal => signal.aborted)) {
|
|
643
|
-
void work.catch(() => undefined);
|
|
644
|
-
return Promise.resolve(undefined);
|
|
645
|
-
}
|
|
646
|
-
return new Promise((resolve, reject) => {
|
|
647
|
-
const stopWaiting = () => {
|
|
648
|
-
for (const signal of signals)
|
|
649
|
-
signal.removeEventListener('abort', stopWaiting);
|
|
650
|
-
resolve(undefined);
|
|
651
|
-
};
|
|
652
|
-
for (const signal of signals)
|
|
653
|
-
signal.addEventListener('abort', stopWaiting, { once: true });
|
|
654
|
-
work.then(value => {
|
|
655
|
-
for (const signal of signals)
|
|
656
|
-
signal.removeEventListener('abort', stopWaiting);
|
|
657
|
-
resolve(value);
|
|
658
|
-
}, error => {
|
|
659
|
-
for (const signal of signals)
|
|
660
|
-
signal.removeEventListener('abort', stopWaiting);
|
|
661
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
662
|
-
});
|
|
663
|
-
});
|
|
664
|
-
}
|
|
665
179
|
//# sourceMappingURL=file-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-search.js","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-search.js","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAqBvC,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAElC,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAE5D,MAAM,KAAK,GAAG,GAAG,CAAA;AAEjB,MAAM,MAAM,GAAG,IAAI,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,6EAA6E;IAC7E,2EAA2E;IAC3E,wBAAwB;IACxB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QAChH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAA;QAChD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAC1F,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5C,KAAK,GAAG,KAAK,GAAG,CAAC,CAAA;YACjB,MAAK;QACP,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,MAAe,EAAE,IAAa;IAClE,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,GAAG,IAAI,CAAA;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;IAC1F,OAAO,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;IAClD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,oFAAoF;AACpF,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,uEAAuE;QACvE,+DAA+D;QAC/D,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,CAAA;YACV,SAAQ;QACV,CAAC;QACD,IAAI,SAAS,KAAK,KAAK;YAAE,SAAQ;QACjC,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,SAAS,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;YACjC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACtC,GAAG,IAAI,IAAI,CAAA;gBACX,KAAK,IAAI,CAAC,CAAA;gBACV,SAAQ;YACV,CAAC;QACH,CAAC;QACD,GAAG,IAAI,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,oFAAoF;AACpF,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,OAAO,KAAK,KAAK,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,0FAA0F;AAC1F,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAClD,CAAC;AAED,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,8BAA8B,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAClH,CAAC;AAED,2FAA2F;AAC3F,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAoB;IACrD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAChD,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,UAAgC,EAAE,KAAa;IACtF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACrD,MAAM,MAAM,GAA8C,EAAE,CAAA;IAC5D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAC7D,CAAC;AAOD,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC/D,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1G,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1E,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAA;IACvE,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;AAC/B,CAAC;AAED,8EAA8E;AAC9E,SAAS,QAAQ,CAAC,UAAgC,EAAE,KAAa;IAC/D,OAAO,UAAU;SACd,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAClD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type KeyId } from '@earendil-works/pi-tui';
|
|
2
|
+
/**
|
|
3
|
+
* How a key press is spelled, matched, and compared across terminals.
|
|
4
|
+
*
|
|
5
|
+
* A binding is durable, but the bytes that reach the surface are not: this
|
|
6
|
+
* layer owns the equivalences that make one press equal to another, separately
|
|
7
|
+
* from the table of actions those presses resolve to.
|
|
8
|
+
*/
|
|
9
|
+
/** A key the tty answers before the application sees it. */
|
|
10
|
+
export declare const TERMINAL_OWNED_KEYS: readonly KeyId[];
|
|
11
|
+
/** The key a plain press of Return arrives as. */
|
|
12
|
+
export declare const ENTER_KEY: KeyId;
|
|
13
|
+
/** The press one key names, folded across the spellings a bare terminal cannot tell apart. */
|
|
14
|
+
export declare function pressOf(key: KeyId): string;
|
|
15
|
+
/**
|
|
16
|
+
* One written key as the library's own canonical id, or undefined when the
|
|
17
|
+
* terminal could never report it as a single press.
|
|
18
|
+
*
|
|
19
|
+
* Modifiers are folded into one order and the key is folded to the library's
|
|
20
|
+
* spelling, because two spellings of one key would otherwise let two actions
|
|
21
|
+
* claim the same press.
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizeKey(raw: string): KeyId | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the library can match a key at all.
|
|
26
|
+
*
|
|
27
|
+
* The library answers no modifier on Escape or on a function key, because no
|
|
28
|
+
* terminal reports those, and no modifier beyond plain, shift, and control on
|
|
29
|
+
* Clear. A binding there would be a key the reader could never press.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isPressable(key: KeyId): boolean;
|
|
32
|
+
/** Whether a key is one modifier chord on one letter or digit, the only shape a chord starter may take. */
|
|
33
|
+
export declare function isSimpleChord(key: KeyId): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether a key is a character the reader types, which only an armed layer may take.
|
|
36
|
+
*
|
|
37
|
+
* Shift is not a way out of this: a terminal reports a capital letter as the
|
|
38
|
+
* shifted letter, so shift+c types a C wherever c does.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isBareCharacter(key: KeyId): boolean;
|
|
41
|
+
/** One row as a press table reads it: what answers a press, and the key it was written as. */
|
|
42
|
+
export interface PressRow {
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly key: KeyId;
|
|
45
|
+
}
|
|
46
|
+
/** A press more than one row reads: the rows, one spelling of it, and the sequences they share. */
|
|
47
|
+
export interface PressOverlap {
|
|
48
|
+
readonly ids: readonly string[];
|
|
49
|
+
readonly key: KeyId;
|
|
50
|
+
readonly spellings: readonly string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Group the rows one terminal sequence reaches, so a group is a press that cannot
|
|
54
|
+
* be split between them.
|
|
55
|
+
*/
|
|
56
|
+
export declare function pressOverlaps(rows: readonly PressRow[]): PressOverlap[];
|
|
57
|
+
//# sourceMappingURL=key-press.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-press.d.ts","sourceRoot":"","sources":["../../src/input/key-press.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnH;;;;;;GAMG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,EAAE,SAAS,KAAK,EAAe,CAAA;AAE/D,kDAAkD;AAClD,eAAO,MAAM,SAAS,EAAE,KAAe,CAAA;AAkBvC,8FAA8F;AAC9F,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAE1C;AA8BD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAgB3D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAQ/C;AAED,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAGjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAInD;AAkDD,8FAA8F;AAC9F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAA;CACpB;AAED,mGAAmG;AACnG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CACtC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,EAAE,CA+CvE"}
|