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.
- package/README.md +2 -2
- package/dist/bin/redline.js +247 -42
- package/dist/bin/redline.js.map +1 -1
- package/dist/commands/init.js +274 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove.js +40 -0
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/status.js +94 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/redline-json.js +18 -1
- package/dist/config/redline-json.js.map +1 -1
- package/dist/core/git.js +50 -3
- package/dist/core/git.js.map +1 -1
- package/dist/core/version.js +6 -0
- package/dist/core/version.js.map +1 -1
- package/dist/detect/setup.js +200 -0
- package/dist/detect/setup.js.map +1 -0
- package/dist/detect/stack.js +56 -17
- package/dist/detect/stack.js.map +1 -1
- package/dist/metrics/options.js +0 -9
- package/dist/metrics/options.js.map +1 -1
- package/dist/platforms/azure/install.js +1 -5
- package/dist/platforms/azure/install.js.map +1 -1
- package/dist/platforms/azure/verify.js +4 -2
- package/dist/platforms/azure/verify.js.map +1 -1
- package/dist/platforms/github/install.js +110 -22
- package/dist/platforms/github/install.js.map +1 -1
- package/dist/platforms/github/vendor.js +81 -0
- package/dist/platforms/github/vendor.js.map +1 -0
- package/dist/platforms/github/verify.js +17 -2
- package/dist/platforms/github/verify.js.map +1 -1
- package/dist/platforms/types.js +4 -0
- package/dist/platforms/types.js.map +1 -1
- package/dist/render/standards.js +8 -1
- package/dist/render/standards.js.map +1 -1
- package/dist/render/vendors.js +9 -52
- package/dist/render/vendors.js.map +1 -1
- package/dist/rules/catalogue.js +127 -0
- package/dist/rules/catalogue.js.map +1 -0
- package/dist/ui/facts.js +30 -1
- package/dist/ui/facts.js.map +1 -1
- package/dist/ui/prompt.js +137 -8
- package/dist/ui/prompt.js.map +1 -1
- package/dist/ui/report.js +214 -0
- package/dist/ui/report.js.map +1 -0
- package/dist/ui/tty.js +358 -25
- package/dist/ui/tty.js.map +1 -1
- package/dist/ui/wizard.js +133 -19
- package/dist/ui/wizard.js.map +1 -1
- package/dist/verify/remote.js +33 -0
- package/dist/verify/remote.js.map +1 -1
- package/package.json +4 -1
- package/scripts/fetch-stars.mjs +92 -0
- package/scripts/lib/rules.d.mts +18 -0
- package/scripts/publish-local.mjs +183 -0
- package/standards/manifest.json +79 -8
- package/standards/stacks/angular.md +57 -0
- package/standards/stacks/dom.md +61 -0
- package/standards/stacks/svelte.md +45 -0
- package/standards/stacks/vue.md +54 -0
- package/templates/redline.yml +4 -0
- package/workflows/redline-gate.yml +28 -4
- package/scripts/measure-context.mjs +0 -101
package/dist/render/vendors.js
CHANGED
|
@@ -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
|
-
//
|
|
150
|
+
// OpenAI Codex reads AGENTS.md — the same file the `agents` vendor writes.
|
|
151
151
|
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AAEjC,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AA6CpD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE,CACrD,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;AAEtD,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAU,EAAE,CAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAE,MAAgB,EAAU,EAAE,CAC9D,iBAAiB,GAAG,CAAC,QAAQ,CAAC,OAAO,eAAe,GAAG,CAAC,OAAO,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAEvG,6EAA6E;AAC7E,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,UAAU,GAAG;IACjB,qDAAqD,gBAAgB,sBAAsB;IAC3F,4FAA4F;IAC5F,mEAAmE;CACpE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,UAAU,aAAa,OAAO,UAAU,OAAO,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAE,IAAY,EAAU,EAAE,CAChE,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAE7F,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,IAAY,EAAU,EAAE;IAC7D,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACjG,CAAC,CAAC;AAEF,2EAA2E;AAC3E,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,oBAAoB;AACpB,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACjG,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,cAAc,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAChE,IAAI,CACL,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAW,EAAE;IAC9C,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,GAAG,KAAK,KAAK,SAAS,KAAK,GAAG,IAAI,EAAE,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CACrC,IAAI;KACD,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;KACvD,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CACzB,WAAW,EACX,CAAC,MAAc,EAAE,MAAc,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAC9F,CAAC;IACF,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,OAAO,GAAmB,CAAC,GAAG,EAAE,EAAE;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,KAAK,CAAC,GAAG,CAAC,iCAAiC,EAAE;QAC3C,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KAClG,CAAC,CAAC;IACH,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,wBAAwB,MAAM,GAAG,EAAE,kBAAkB,EAAE;YAC/D,IAAI,EACF,iBAAiB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW;gBACjE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,KAAK;QACL,KAAK,EAAE;YACL;gBACE,GAAG,EAAE,sBAAsB;gBAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aACvE;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,GAAmB,CAAC,GAAG,EAAE,EAAE;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,oBAAoB,KAAK,GAAG,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG;QACX,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;QACvB,EAAE;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC,EAAE;QACF,KAAK;QACL,EAAE;QACF,eAAe;QACf,EAAE;QACF,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;QACL,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,IAAI,GAAG,CAAC;QACb;YACE,WAAW;YACX;gBACE,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,SAAS,CACb,GAAG,EACH;oBACE,mFAAmF;oBACnF,4EAA4E;oBAC5E,EAAE;oBACF,YAAY;iBACb,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;aACF;SACF;KACF,CAAC;IACF,KAAK,EAAE,EAAE;CACV,CAAC,CAAC;AAEH,MAAM,MAAM,GAAmB,CAAC,GAAG,EAAE,EAAE;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,UAAU,EAAE;QAC3C,UAAU,EAAE,IAAI;QAChB,IAAI,EACF,sEAAsE;YACtE,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KAC9F,CAAC,CAAC;IACH,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,GAAG,EAAE,MAAM,EAAE;YAC5C,IAAI,EACF,6BAA6B,KAAK,CAAC,KAAK,kBAAkB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;gBACnF,8BAA8B,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;KAC9F,CAAC;AACJ,CAAC,CAAC;AAEF,2EAA2E;AAC3E,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,wEAAwE;AACxE,+EAA+E;AAC/E,wEAAwE;AACxE,qDAAqD;AACrD,MAAM,KAAK,GAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAmC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAiB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAyBjD,MAAM,SAAS,GAAG,6DAA6D,CAAC;AAChF,MAAM,YAAY,GAChB,iHAAiH,CAAC;AACpH,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,iFAAiF;AACjF,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AACjF,oDAAoD;AACpD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAEtE,SAAS,UAAU,CAAC,OAAe,EAAE,IAAY;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAgB,CAAC;IAClD,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,WAAqB,YAAY,CAAC,IAAI,CAAC;IAC7E,MAAM,OAAO,GAAuB;QAClC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CACpC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CACtD;KACF,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,IAAI,QAAQ,GAAoB,IAAI,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;aACtC,KAAK,CAAC,IAAI,CAAC;aACX,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;YACjD,IAAI,OAAO;gBAAE,OAAO;YAEpB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO;YACxC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,EAAG,EAAE;gBACb,EAAE,EAAE,EAAG;gBACP,KAAK;gBACL,QAAQ;gBACR,IAAI,EAAE,IAAK,CAAC,IAAI,EAAE;gBAClB,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,KAAK,GAAG,CAAC;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,EAAU;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,YAAY,CACpB,OAAO,EACP,YAAY,EAAE,oBAAoB,EAClC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;QAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,KAAwB,EAAE,KAAK,GAAG,CAAC;IACrE,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhF,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,KAAK,MAAM;YAAE,KAAK,IAAI,GAAG,CAAC;QACnC,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK;YAAE,KAAK,IAAI,EAAE,CAAC;QACvD,IAAI,QAAQ,KAAK,IAAI;YAAE,KAAK,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,KAAK,IAAI,EAAE,CAAC;YACpE,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC;QACF,6EAA6E;QAC7E,yEAAyE;QACzE,oEAAoE;SACnE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,gEAAgE;AAChE,SAAS,MAAM,CAAC,CAAS,EAAE,CAAS;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;AACvF,CAAC"}
|
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
|
|
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
|
}
|
package/dist/ui/facts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facts.js","sourceRoot":"","sources":["../../cli/ui/facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,wEAAwE;AACxE,kBAAkB;AAClB,EAAE;AACF,8EAA8E;AAC9E,wEAAwE;AACxE,6EAA6E;AAC7E,2EAA2E;AAC3E,0DAA0D;AAE1D,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,cAAc,GAAG;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,4BAA4B;IAC5B,0BAA0B;CAC3B,CAAC;AAEF,4EAA4E;AAC5E,8EAA8E;AAC9E,8CAA8C;AAC9C,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAC7D,MAAM,SAAS,GAAG,kCAAkC,CAAC;AAErD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;IAC7C,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAWD,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;
|
|
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
|
|
115
|
+
for (let i = 0; i <= lines; i += 1) {
|
|
103
116
|
write('\x1b[2K');
|
|
104
|
-
if (i < lines
|
|
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
|
|
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
|
},
|
package/dist/ui/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/ui/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,MAAM,EACN,KAAK,IAAI,SAAS,EAClB,IAAI,IAAI,QAAQ,EAChB,KAAK,IAAI,SAAS,EAClB,OAAO,EACP,OAAO,EACP,UAAU,GAKX,MAAM,UAAU,CAAC;AAMlB,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,qBAAqB;AAErB;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,QAAQ,GAAG,GAAG,CAAC;IACxB;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAqBD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAyB,OAAO,CAAC,GAAG,EACpC,QAA2B,OAAO,CAAC,KAAK,EACxC,SAA6B,OAAO,CAAC,MAAM;IAE3C,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC/E,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,cAAc,CAAC,OAAwB,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAEpC,MAAM,CAAC,GAAY,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAQ,EAAE;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,eAAe,GAAwB,IAAI,CAAC;IAEhD,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,MAAM,GAAG,IAAI,CAAC;QAEd,yEAAyE;QACzE,yEAAyE;QACzE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,MAAM;gBAAE,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChC,eAAe,GAAG,GAAG,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,MAAM,GAAG,KAAK,CAAC;QACf,UAAU,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,eAAe,EAAE,EAAE,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,6EAA6E;IAC7E,wEAAwE;IACxE,yEAAyE;IACzE,6BAA6B;IAC7B,MAAM,KAAK,GAAG,CAAC,KAAa,EAAQ,EAAE;QACpC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO;QACxB,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,UAAU,IAAI,CACjB,KAAa,EACb,OAA6B,EAC7B,KAAc,EACd,WAAgC,EAChC,QAAgB;QAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,IAAI,KAAK,GAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC;QAC9C,MAAM,MAAM,GAAG,GAAW,EAAE,CAC1B,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAExE,QAAQ,EAAE,CAAC;QACX,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;oBAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACtC,IAAI,GAAG,KAAK,IAAI;wBAAE,OAAO;oBAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,EAAE,CAAC;wBACV,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;wBACxB,OAAO;oBACT,CAAC;oBACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,EAAE,CAAC;wBACV,MAAM,MAAM,GAAG,KAAK;4BAClB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;4BACzE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC,KAAK,CAAC,CAAC;wBACnC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChB,OAAO;oBACT,CAAC;oBACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrB,iEAAiE;oBACjE,iEAAiE;oBACjE,qEAAqE;oBACrE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBAChC,KAAK,GAAG,MAAM,EAAE,CAAC;oBACjB,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC;gBAEF,MAAM,OAAO,GAAG,GAAS,EAAE;oBACzB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBAChC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,IAAI,MAAM;gBAAE,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK;YACT,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,MAAM,CAAI,KAAa,EAAE,OAA6B,EAAE,OAAW;YACvE,MAAM,EAAE,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;YACxF,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3F,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YACjF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,MAAW,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,WAAW,CACf,KAAa,EACb,OAA6B,EAC7B,UAAwB,EAAE;YAE1B,uEAAuE;YACvE,uEAAuE;YACvE,yEAAyE;YACzE,uEAAuE;YACvE,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CACxB,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACnE,CACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CACvB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAC5E,CAAC;YACF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;YACjC,MAAM,OAAO,GAAsB;gBACjC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;aAC9B,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CACzB,KAAK,EACL,OAAO,EACP,KAAK,EACL,IAAI,GAAG,EAAE,EACT,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAChB,CAAC;YACF,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpE,OAAO,MAAiB,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO;YACV,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,OAAO;YACX,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/ui/prompt.ts"],"names":[],"mappings":"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"}
|