redlinegate 0.0.2 → 0.0.3

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.
Files changed (63) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/redline.js +247 -42
  3. package/dist/bin/redline.js.map +1 -1
  4. package/dist/commands/init.js +274 -26
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/remove.js +40 -0
  7. package/dist/commands/remove.js.map +1 -1
  8. package/dist/commands/status.js +94 -0
  9. package/dist/commands/status.js.map +1 -0
  10. package/dist/config/redline-json.js +18 -1
  11. package/dist/config/redline-json.js.map +1 -1
  12. package/dist/core/git.js +50 -3
  13. package/dist/core/git.js.map +1 -1
  14. package/dist/core/version.js +6 -0
  15. package/dist/core/version.js.map +1 -1
  16. package/dist/detect/setup.js +200 -0
  17. package/dist/detect/setup.js.map +1 -0
  18. package/dist/detect/stack.js +56 -17
  19. package/dist/detect/stack.js.map +1 -1
  20. package/dist/metrics/options.js +0 -9
  21. package/dist/metrics/options.js.map +1 -1
  22. package/dist/platforms/azure/install.js +1 -5
  23. package/dist/platforms/azure/install.js.map +1 -1
  24. package/dist/platforms/azure/verify.js +4 -2
  25. package/dist/platforms/azure/verify.js.map +1 -1
  26. package/dist/platforms/github/install.js +110 -22
  27. package/dist/platforms/github/install.js.map +1 -1
  28. package/dist/platforms/github/vendor.js +81 -0
  29. package/dist/platforms/github/vendor.js.map +1 -0
  30. package/dist/platforms/github/verify.js +17 -2
  31. package/dist/platforms/github/verify.js.map +1 -1
  32. package/dist/platforms/types.js +4 -0
  33. package/dist/platforms/types.js.map +1 -1
  34. package/dist/render/standards.js +8 -1
  35. package/dist/render/standards.js.map +1 -1
  36. package/dist/render/vendors.js +9 -52
  37. package/dist/render/vendors.js.map +1 -1
  38. package/dist/rules/catalogue.js +127 -0
  39. package/dist/rules/catalogue.js.map +1 -0
  40. package/dist/ui/facts.js +30 -1
  41. package/dist/ui/facts.js.map +1 -1
  42. package/dist/ui/prompt.js +137 -8
  43. package/dist/ui/prompt.js.map +1 -1
  44. package/dist/ui/report.js +214 -0
  45. package/dist/ui/report.js.map +1 -0
  46. package/dist/ui/tty.js +358 -25
  47. package/dist/ui/tty.js.map +1 -1
  48. package/dist/ui/wizard.js +133 -19
  49. package/dist/ui/wizard.js.map +1 -1
  50. package/dist/verify/remote.js +33 -0
  51. package/dist/verify/remote.js.map +1 -1
  52. package/package.json +4 -1
  53. package/scripts/fetch-stars.mjs +92 -0
  54. package/scripts/lib/rules.d.mts +18 -0
  55. package/scripts/publish-local.mjs +183 -0
  56. package/standards/manifest.json +79 -8
  57. package/standards/stacks/angular.md +57 -0
  58. package/standards/stacks/dom.md +61 -0
  59. package/standards/stacks/svelte.md +45 -0
  60. package/standards/stacks/vue.md +54 -0
  61. package/templates/redline.yml +4 -0
  62. package/workflows/redline-gate.yml +28 -4
  63. package/scripts/measure-context.mjs +0 -101
@@ -147,57 +147,14 @@ const cursor = (ctx) => {
147
147
  prune: [{ dir: '.cursor/rules', matches: (f) => f.startsWith(PREFIX) && f.endsWith('.mdc') }],
148
148
  };
149
149
  };
150
- // Claude skills: per-stack rules that load only when the stack is in play.
150
+ // OpenAI Codex reads AGENTS.md the same file the `agents` vendor writes.
151
151
  //
152
- // The asymmetry this closes. Copilot receives .github/instructions/redline-*.md
153
- // with applyTo globs conditional, per-stack loading. Claude receives
154
- // CLAUDE.md -> @AGENTS.md: the entire composed standard, every turn, for the life
155
- // of every session. On a twelve-stack profile that is most of a context window
156
- // spent on rules for languages the repository is not currently editing.
157
- //
158
- // Two constraints from the roadmap, both load-bearing:
159
- //
160
- // - Rules stay authored in standards/. This is packaging, not authoring, and no
161
- // Claude-shaped concept may leak backward into how a rule is written. Every
162
- // body below is the stack's own markdown, unmodified.
163
- // - Build it thin. The roadmap rates this the highest-exposure piece in the
164
- // plan — per-file conditional instruction loading is exactly what a platform
165
- // makes free — so there is no cleverness here to maintain or to abandon.
166
- //
167
- // A skill loads on its description, not on a glob, so the description names the
168
- // stack, its file extensions and its globs. That is the whole mechanism.
169
- const skillDescription = (title, globs) => {
170
- const extensions = [...new Set(globs.map((g) => g.slice(g.lastIndexOf('.'))).filter((e) => e.startsWith('.')))];
171
- const suffix = extensions.length > 0 ? ` Covers ${extensions.join(', ')} files.` : '';
172
- return (`Redline engineering standards for ${title}. Use when writing, editing or reviewing ` +
173
- `${title} code in this repository — before proposing a change, not after.${suffix}`);
174
- };
175
- const skills = (ctx) => {
176
- const files = new Map();
177
- // Core always loads: it carries the output contract and the security floor,
178
- // and it is not stack-scoped. Splitting it per stack would duplicate it twelve
179
- // times and let a repository end up with none of it.
180
- files.set(`.claude/skills/${PREFIX}core/SKILL.md`, {
181
- localRules: true,
182
- body: `---\nname: ${PREFIX}core\ndescription: >-\n Redline core engineering standards — the severity output contract, security,\n` +
183
- ` type safety, error handling and scope discipline. Use when writing, editing or\n` +
184
- ` reviewing any code in this repository.\n---\n\n` +
185
- withLocal(ctx, `${header(ctx, ctx.stacks)}\n\n${read(ctx.root, ctx.manifest.core.source)}`),
186
- });
187
- for (const id of ctx.stacks) {
188
- const stack = ctx.manifest.stacks[id];
189
- files.set(`.claude/skills/${PREFIX}${id}/SKILL.md`, {
190
- body: `---\nname: ${PREFIX}${id}\ndescription: >-\n ${skillDescription(stack.title, stack.globs)}\n---\n\n` +
191
- `${header(ctx, [id])}\n\n${stackBody(ctx, id)}\n\n_Applies to: ${stack.globs.map((g) => `\`${g}\``).join(', ')}_`,
192
- });
193
- }
194
- return {
195
- files,
196
- // A stack leaving the profile must take its skill with it, or a repository
197
- // keeps loading rules for a language it no longer has. The directory shape
198
- // means pruning matches on the directory name, not the file.
199
- prune: [{ dir: '.claude/skills', matches: (f) => f.startsWith(PREFIX), directories: true }],
200
- };
201
- };
202
- export const VENDORS = { copilot, agents, claude, cursor, skills };
152
+ // It is a separate vendor id because an operator looking for Codex has to be
153
+ // able to find it by name, and "it is covered by the one called agents" is not
154
+ // something a menu can say. It is the SAME renderer because inventing a
155
+ // Codex-specific path would put the rules somewhere nothing reads them: a file
156
+ // only Redline believes in is worse than no file. Selecting both writes
157
+ // AGENTS.md once, with identical content either way.
158
+ const codex = (ctx) => agents(ctx);
159
+ export const VENDORS = { copilot, agents, codex, claude, cursor };
203
160
  //# sourceMappingURL=vendors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vendors.js","sourceRoot":"","sources":["../../cli/render/vendors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vendors.js","sourceRoot":"","sources":["../../cli/render/vendors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { loadManifest } from "../render/manifest.js";
4
+ import { RedlineError } from "../core/errors.js";
5
+ const RULE_LINE = /^-\s+`([a-z0-9][a-z0-9-]*\/[a-z0-9][a-z0-9-]*)`\s+—\s+(.*)$/;
6
+ const RULE_HEADING = /^#{2,3}\s+(BLOCKER|HIGH|SUGGESTION|Security|Type safety|Error handling|General correctness|Scope discipline)\b/i;
7
+ const ANY_HEADING = /^#{1,6}\s/;
8
+ // How a section heading decides the severity of the rules under it. This mirrors
9
+ // scripts/lib/rules.mjs exactly, which is the authority: it is what validate,
10
+ // seed scoring and the telemetry aggregation already use, so a rule's severity
11
+ // here has to be the severity the gate acts on. A stack file heads its sections
12
+ // with the severity word; the core standard groups by topic instead and states
13
+ // the severity in the heading's own text ("## Security (BLOCKER)"), which is why
14
+ // the fallback reads the line rather than the word.
15
+ const SEVERITIES = new Set(['BLOCKER', 'HIGH', 'SUGGESTION']);
16
+ function severityOf(heading, line) {
17
+ const word = heading.toUpperCase();
18
+ if (SEVERITIES.has(word))
19
+ return word;
20
+ return /BLOCKER/i.test(line) ? 'BLOCKER' : 'HIGH';
21
+ }
22
+ /** Every rule the standards define, keyed by id, in source order. */
23
+ export function loadRules(root, manifest = loadManifest(root)) {
24
+ const sources = [
25
+ ['core', manifest.core.source],
26
+ ...Object.entries(manifest.stacks).map(([id, stack]) => [id, stack.source]),
27
+ ];
28
+ const rules = new Map();
29
+ for (const [stack, relPath] of sources) {
30
+ let severity = null;
31
+ let inFence = false;
32
+ readFileSync(join(root, relPath), 'utf8')
33
+ .split('\n')
34
+ .forEach((line, index) => {
35
+ if (/^```/.test(line.trim()))
36
+ inFence = !inFence;
37
+ if (inFence)
38
+ return;
39
+ if (ANY_HEADING.test(line)) {
40
+ const heading = RULE_HEADING.exec(line);
41
+ severity = heading ? severityOf(heading[1], line) : null;
42
+ return;
43
+ }
44
+ const match = RULE_LINE.exec(line);
45
+ if (!match || severity === null)
46
+ return;
47
+ const [, id, text] = match;
48
+ rules.set(id, {
49
+ id: id,
50
+ stack,
51
+ severity,
52
+ text: text.trim(),
53
+ source: relPath,
54
+ line: index + 1,
55
+ });
56
+ });
57
+ }
58
+ return rules;
59
+ }
60
+ /**
61
+ * One rule, with the context a finding does not carry.
62
+ *
63
+ * A finding gives an id and a line. What it cannot say is whether a human or a
64
+ * checker decided it, which files the rule is scoped to, and which repositories
65
+ * in the estate receive it at all — which is exactly what someone asks when
66
+ * they disagree with a finding.
67
+ */
68
+ export function explain(root, id) {
69
+ const manifest = loadManifest(root);
70
+ const rules = loadRules(root, manifest);
71
+ const rule = rules.get(id);
72
+ if (!rule) {
73
+ const near = suggest(id, [...rules.keys()]);
74
+ throw new RedlineError('usage', `no rule "${id}" in the standards`, near.length > 0 ? `did you mean: ${near.join(', ')}` : 'list them with: redline explain --list');
75
+ }
76
+ const profiles = Object.entries(manifest.profiles)
77
+ .filter(([, stacks]) => rule.stack === 'core' || stacks.includes(rule.stack))
78
+ .map(([name]) => name);
79
+ return {
80
+ rule,
81
+ profiles,
82
+ globs: manifest.stacks[rule.stack]?.globs ?? [],
83
+ deterministic: manifest.deterministic.includes(id),
84
+ };
85
+ }
86
+ /**
87
+ * Ids close enough to be what was meant.
88
+ *
89
+ * A mistyped id is the common case — they are copied out of a review comment by
90
+ * hand — and "no such rule" with no candidates makes a typo look like a rule
91
+ * that was removed.
92
+ */
93
+ export function suggest(id, known, limit = 3) {
94
+ const target = id.toLowerCase();
95
+ const [stack, slug] = target.includes('/') ? target.split('/') : [null, target];
96
+ return known
97
+ .map((candidate) => {
98
+ const lower = candidate.toLowerCase();
99
+ const [candStack, candSlug] = lower.split('/');
100
+ let score = 0;
101
+ if (lower === target)
102
+ score += 100;
103
+ if (stack !== null && candStack === stack)
104
+ score += 20;
105
+ if (candSlug === slug)
106
+ score += 40;
107
+ if (slug !== undefined && candSlug !== undefined) {
108
+ if (candSlug.includes(slug) || slug.includes(candSlug))
109
+ score += 15;
110
+ score += shared(candSlug, slug);
111
+ }
112
+ return { candidate, score };
113
+ })
114
+ // Above what a bare stack match scores: sharing a prefix with the typo makes
115
+ // every rule in that stack a candidate, and a list of unrelated rules is
116
+ // worse than no list — it reads as though the tool found something.
117
+ .filter(({ score }) => score > 20)
118
+ .sort((a, b) => b.score - a.score)
119
+ .slice(0, limit)
120
+ .map(({ candidate }) => candidate);
121
+ }
122
+ /** How many hyphen-separated words two slugs have in common. */
123
+ function shared(a, b) {
124
+ const words = new Set(b.split('-'));
125
+ return a.split('-').filter((word) => word.length > 2 && words.has(word)).length * 10;
126
+ }
127
+ //# sourceMappingURL=catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../cli/rules/catalogue.ts"],"names":[],"mappings":"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"}
package/dist/ui/facts.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { existsSync, readdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { readConfig } from "../config/redline-json.js";
4
+ import { OWNING_TEAM } from "../commands/init.js";
4
5
  import { surveyRepo } from "../detect/existing.js";
6
+ import { offerable as offerableSetup } from "../detect/setup.js";
7
+ import { resolveProfile } from "../render/profile.js";
5
8
  import { proposeProfile } from "../detect/stack.js";
6
9
  import { scanRepo } from "../detect/scan.js";
7
10
  import { loadManifest } from "../render/manifest.js";
@@ -59,13 +62,36 @@ export function gatherFacts(opts) {
59
62
  const manifest = loadManifest(root);
60
63
  const proposal = proposeProfile(scanRepo(cwd));
61
64
  const recorded = readConfig(cwd);
65
+ const survey = surveyRepo(cwd);
66
+ // What could be installed here. The profile is not chosen yet — the menu asks
67
+ // for it after this — so the stacks come from what detection proposed, which
68
+ // is what decides CodeQL's language matrix. A profile chosen against the
69
+ // proposal only ever widens it, and CodeQL on one language too few is a worse
70
+ // failure than the file not being offered.
71
+ let stacks = [];
72
+ try {
73
+ stacks = resolveProfile(manifest, proposal.profile).stacks;
74
+ }
75
+ catch {
76
+ stacks = [];
77
+ }
78
+ const evidenceFor = new Map(survey.tools.map((tool) => [tool.id, tool.evidence]));
79
+ const offerable = offerableSetup(cwd, opts.detectedHost ?? 'github', stacks).map(({ integration }) => ({
80
+ id: integration.id,
81
+ label: integration.label,
82
+ hint: integration.hint,
83
+ ...(evidenceFor.has(integration.id) ? { evidence: evidenceFor.get(integration.id) } : {}),
84
+ }));
62
85
  const orgVendors = Object.entries(manifest.vendors)
63
86
  .filter(([, vendor]) => vendor.enabled)
64
87
  .map(([id]) => id);
65
88
  return {
66
89
  manifest,
67
- survey: surveyRepo(cwd),
90
+ survey,
91
+ offerable,
68
92
  detectedProfile: proposal.profile,
93
+ defaultOwner: `@<org>/${OWNING_TEAM}`,
94
+ detectedConfidence: proposal.confidence,
69
95
  profileEvidence: proposal.evidence,
70
96
  detectedVendors: detectVendors(cwd, orgVendors),
71
97
  detectedHost: opts.detectedHost,
@@ -76,6 +102,9 @@ export function gatherFacts(opts) {
76
102
  ...(recorded.profile !== undefined ? { profile: recorded.profile } : {}),
77
103
  ...(recorded.vendors !== undefined ? { vendors: recorded.vendors } : {}),
78
104
  ...(recorded.rung !== undefined ? { rung: recorded.rung } : {}),
105
+ // Empty means nobody has said, which must fall through to detection
106
+ // rather than record "this repository runs nothing".
107
+ ...(recorded.integrations.length > 0 ? { integrations: recorded.integrations } : {}),
79
108
  },
80
109
  };
81
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../cli/ui/facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../cli/ui/facts.ts"],"names":[],"mappings":"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"}
package/dist/ui/prompt.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { emitKeypressEvents } from 'node:readline';
2
- import { answered, colorEnabled, firstEnabled, frame, glyphs, intro as introLine, note as noteLine, outro as outroLine, palette, readKey, reduceList, } from "./tty.js";
2
+ import { answered, colorDepth, colorEnabled, firstEnabled, field, frame, glyphs, intro as introLine, note as noteLine, outro as outroLine, palette, spinner as spinnerLine, spinnerDone, readKey, reduceList, } from "./tty.js";
3
3
  // The terminal side of the prompt kit: raw mode, the in-place redraw, and
4
4
  // restoring the terminal whatever happens. Everything that decides what a
5
5
  // prompt looks like or what a key means lives in tty.ts and is pure.
@@ -24,6 +24,10 @@ export class Cancelled extends Error {
24
24
  this.name = 'Cancelled';
25
25
  }
26
26
  }
27
+ // Slow enough that the line is readable, fast enough to look alive. Also the
28
+ // interval a non-TTY never pays: there, `task` writes one line and never
29
+ // schedules anything.
30
+ const SPIN_MS = 90;
27
31
  /**
28
32
  * True when a stepped, redrawing prompt can be shown.
29
33
  *
@@ -43,11 +47,15 @@ export function isInteractive(env = process.env, input = process.stdin, output =
43
47
  return input.isTTY === true && output.isTTY === true;
44
48
  }
45
49
  const DEFAULT_WIDTH = 80;
50
+ const DEFAULT_HEIGHT = 24;
51
+ // Below this a list is faster to read than to filter, and the letters are worth
52
+ // more as shortcuts: `j`/`k` to move, `a` to take everything.
53
+ const SEARCH_FROM = 9;
46
54
  export function createPrompter(opts = {}) {
47
55
  const input = opts.input ?? process.stdin;
48
56
  const output = opts.output ?? process.stdout;
49
57
  const env = opts.env ?? process.env;
50
- const c = palette(colorEnabled(env, output.isTTY === true));
58
+ const c = palette(colorEnabled(env, output.isTTY === true), colorDepth(env));
51
59
  const g = glyphs(env);
52
60
  const write = (text) => {
53
61
  output.write(text);
@@ -95,22 +103,32 @@ export function createPrompter(opts = {}) {
95
103
  // own output rather than asking the terminal is what makes this correct
96
104
  // without a cursor-position query — and is why frame() must never emit a
97
105
  // line wider than `columns`.
106
+ //
107
+ // Every draw ends with a newline, so the cursor sits on the blank line below
108
+ // the frame, not on its last row: the rewind has to clear that line too or it
109
+ // stops one short and leaves the frame's first line — the title — on screen,
110
+ // once per keypress.
98
111
  const erase = (lines) => {
99
112
  if (lines === 0)
100
113
  return;
101
114
  write('\x1b[0G');
102
- for (let i = 0; i < lines; i += 1) {
115
+ for (let i = 0; i <= lines; i += 1) {
103
116
  write('\x1b[2K');
104
- if (i < lines - 1)
117
+ if (i < lines)
105
118
  write('\x1b[1A');
106
119
  }
107
120
  };
108
121
  async function list(title, choices, multi, preselected, cursorAt) {
109
122
  if (choices.length === 0)
110
123
  return [];
111
- let state = { cursor: cursorAt, selected: preselected };
124
+ let state = { cursor: cursorAt, selected: preselected, query: '' };
112
125
  const width = output.columns ?? DEFAULT_WIDTH;
113
- const render = () => frame({ title, choices, state, multi, palette: c, glyphs: g, width });
126
+ const height = output.rows ?? DEFAULT_HEIGHT;
127
+ // A search field costs a row and is worth one only where rows are not the
128
+ // scarce thing. On a terminal shorter than this the list itself needs every
129
+ // line it can get, and filtering a list you cannot see does not help.
130
+ const search = choices.length >= SEARCH_FROM && height >= 10;
131
+ const render = () => frame({ title, choices, state, multi, palette: c, glyphs: g, width, height, search });
114
132
  enterRaw();
115
133
  let drawn = render();
116
134
  write(`${drawn}\n`);
@@ -120,7 +138,7 @@ export function createPrompter(opts = {}) {
120
138
  const key = readKey(chunk.toString());
121
139
  if (key === null)
122
140
  return;
123
- const result = reduceList(choices, state, key, multi);
141
+ const result = reduceList(choices, state, key, { multi, search });
124
142
  if (result.kind === 'cancel') {
125
143
  cleanup();
126
144
  reject(new Cancelled());
@@ -159,7 +177,7 @@ export function createPrompter(opts = {}) {
159
177
  }
160
178
  return {
161
179
  intro(title) {
162
- write(`${introLine(title, c, g)}\n`);
180
+ write(`${introLine(title, c, g, output.columns ?? DEFAULT_WIDTH)}\n`);
163
181
  },
164
182
  async select(title, choices, initial) {
165
183
  const at = initial === undefined ? -1 : choices.findIndex((ch) => ch.value === initial);
@@ -190,6 +208,117 @@ export function createPrompter(opts = {}) {
190
208
  write(`${answered(title, picked === true ? 'Yes' : 'No', c, g)}\n`);
191
209
  return picked;
192
210
  },
211
+ async text(title, opts = {}) {
212
+ const width = output.columns ?? DEFAULT_WIDTH;
213
+ const placeholder = opts.placeholder ?? '';
214
+ const hint = opts.hint ?? '';
215
+ let value = '';
216
+ const render = () => field({ title, value, placeholder, hint, palette: c, glyphs: g, width });
217
+ enterRaw();
218
+ let drawn = render();
219
+ write(`${drawn}\n`);
220
+ try {
221
+ const answer = await new Promise((resolve, reject) => {
222
+ const onData = (chunk) => {
223
+ const key = readKey(chunk.toString());
224
+ if (key === null)
225
+ return;
226
+ if (key === 'cancel') {
227
+ cleanup();
228
+ reject(new Cancelled());
229
+ return;
230
+ }
231
+ if (key === 'enter') {
232
+ cleanup();
233
+ resolve(value.trim());
234
+ return;
235
+ }
236
+ if (key === 'erase')
237
+ value = value.slice(0, -1);
238
+ else if (typeof key === 'object')
239
+ value += key.ch;
240
+ // A space is a space here, not a toggle: this is the one prompt where
241
+ // the list reducer's meaning for it would be wrong.
242
+ else if (key === 'space')
243
+ value += ' ';
244
+ else
245
+ return;
246
+ erase(drawn.split('\n').length);
247
+ drawn = render();
248
+ write(`${drawn}\n`);
249
+ };
250
+ const cleanup = () => {
251
+ input.off('data', onData);
252
+ erase(drawn.split('\n').length);
253
+ exitRaw();
254
+ };
255
+ input.on('data', onData);
256
+ });
257
+ write(`${answered(title, answer === '' ? placeholder : answer, c, g)}\n`);
258
+ return answer;
259
+ }
260
+ catch (error) {
261
+ if (active)
262
+ exitRaw();
263
+ throw error;
264
+ }
265
+ },
266
+ task(label) {
267
+ const width = output.columns ?? DEFAULT_WIDTH;
268
+ let current = label;
269
+ // No TTY, no animation: the frames would arrive as a column of near
270
+ // identical lines in a log file. The label still gets said once, because
271
+ // "what is it doing" is the question even a pipe wants answered.
272
+ if (output.isTTY !== true) {
273
+ write(`${spinnerDone(current, c, g, width)}\n`);
274
+ return {
275
+ update(next) {
276
+ current = next;
277
+ write(`${spinnerDone(next, c, g, width)}\n`);
278
+ },
279
+ done() { },
280
+ stop() { },
281
+ };
282
+ }
283
+ let tick = 0;
284
+ const draw = () => {
285
+ write(`\x1b[0G\x1b[2K${spinnerLine(current, tick, c, g, width)}`);
286
+ };
287
+ hideCursor();
288
+ draw();
289
+ // Unref'd: a timer this owns must never be the reason the process stays
290
+ // alive after the work it was describing has finished.
291
+ const timer = setInterval(() => {
292
+ tick += 1;
293
+ draw();
294
+ }, SPIN_MS);
295
+ timer.unref?.();
296
+ let running = true;
297
+ const halt = () => {
298
+ if (!running)
299
+ return;
300
+ running = false;
301
+ clearInterval(timer);
302
+ write('\x1b[0G\x1b[2K');
303
+ showCursor();
304
+ };
305
+ return {
306
+ update(next) {
307
+ if (!running)
308
+ return;
309
+ current = next;
310
+ draw();
311
+ },
312
+ done(final) {
313
+ if (!running)
314
+ return;
315
+ const last = final ?? current;
316
+ halt();
317
+ write(`${spinnerDone(last, c, g, width)}\n`);
318
+ },
319
+ stop: halt,
320
+ };
321
+ },
193
322
  note(message) {
194
323
  write(`${noteLine(message, c, g)}\n`);
195
324
  },
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/ui/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/ui/prompt.ts"],"names":[],"mappings":"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"}