Replace enquirer with @clack/prompts (#19975)

This commit is contained in:
fisker Cheung authored and GitHub committed 2026-09-04 02:43:26 +08:00
1 parent 3903c6a4eb
commit 338310e438
3 files changed
+87 -50

No files matched your search

+1 -1
View File
@@ -135,6 +135,7 @@
},
"devDependencies": {
"@babel/generator": "8.0.0",
"@clack/prompts": "1.7.0",
"@eslint/js": "10.0.1",
"@stylistic/eslint-plugin": "5.10.0",
"@types/jsesc": "3.0.3",
@@ -149,7 +150,6 @@
"commonmark-test-suite": "0.1.0",
"cross-env": "10.1.0",
"cspell": "10.1.1",
"enquirer": "2.4.1",
"esbuild": "0.28.2",
"esbuild-visualizer": "0.7.0",
"eslint": "10.9.1",
+47 -31
View File
@@ -10,27 +10,46 @@
*/
import fs from "node:fs/promises";
import enquirer from "enquirer";
import * as prompts from "@clack/prompts";
import openEditor from "open-editor";
import { CHANGELOG_CATEGORIES } from "./utilities/changelog.js";
import { categories } from "./utilities/changelog.js";
const prNumberPrompt = new enquirer.NumberPrompt({
message: "Input your Pull Request number:",
});
const prNumber = await prNumberPrompt.run();
async function generateChangelog() {
let prNumber = await prompts.text({
message: "Pull request number:",
initialValue: "",
validate(value) {
value = value.trim();
const categoryPrompt = new enquirer.AutoComplete({
message: "Input category of your Pull Request:",
limit: CHANGELOG_CATEGORIES.length,
// The array passed to `choices` will be broken, so copy it.
choices: [...CHANGELOG_CATEGORIES],
});
const category = (await categoryPrompt.run()).trim();
if (!prNumber || !category) {
throw new Error("Two args are required.");
if (!value) {
return "Pull request number is required.";
}
assertCategory(category);
if (!/^\d{4,}$/.test(value)) {
return "Invalid pull request number.";
}
},
withGuide: false,
});
if (prompts.isCancel(prNumber)) {
return;
}
const category = await prompts.autocomplete({
message: "Category:",
options: categories.map((category) => ({
value: category.dir,
label: category.title,
})),
withGuide: false,
});
if (prompts.isCancel(category)) {
return;
}
prNumber = prNumber.trim();
const { title, user } = await getPr(prNumber);
@@ -44,12 +63,17 @@ const relativePath = file.href.slice(
console.log("Generated changelog file: " + relativePath);
const shouldOpenChangelog = await new enquirer.Confirm({
const shouldOpenChangelog = await prompts.confirm({
message: "Open changelog file?",
initial: true,
}).run();
initialValue: true,
vertical: true,
withGuide: false,
});
if (prompts.isCancel(shouldOpenChangelog) || !shouldOpenChangelog) {
return;
}
if (shouldOpenChangelog) {
try {
openEditor([file]);
} catch (error) {
@@ -58,7 +82,7 @@ if (shouldOpenChangelog) {
}
/**
* @param {number} prNumber
* @param {string} prNumber
* @returns {Promise<{ title: string; user: string }>}
*/
async function getPr(prNumber) {
@@ -199,12 +223,4 @@ function generateComment(syntax, comment) {
}
}
/**
* @param {unknown}
* @returns {void}
*/
function assertCategory(category) {
if (!CHANGELOG_CATEGORIES.includes(category)) {
throw new Error(`${category} is invalid category`);
}
}
await generateChangelog();
+39 -18
View File
@@ -507,6 +507,28 @@ __metadata:
languageName: node
linkType: hard
"@clack/core@npm:1.4.3":
version: 1.4.3
resolution: "@clack/core@npm:1.4.3"
dependencies:
fast-wrap-ansi: "npm:^0.2.0"
sisteransi: "npm:^1.0.5"
checksum: 10/9d875718cb161e0eca97c3ed3ba3063211436c4224a04556b840e045f18505c8fdb645754d9459181069b3a3b6699962d0f47e38e2502cb0acfef1649b3557b3
languageName: node
linkType: hard
"@clack/prompts@npm:1.7.0":
version: 1.7.0
resolution: "@clack/prompts@npm:1.7.0"
dependencies:
"@clack/core": "npm:1.4.3"
fast-string-width: "npm:^3.0.2"
fast-wrap-ansi: "npm:^0.2.0"
sisteransi: "npm:^1.0.5"
checksum: 10/2bfc89d6755a1e10166a3b7a6cc883a09c1d4d82c08fbe98763284d522f256a58ed20c5ee4ab36f2a6e06bc1b3f0c16b02657159f7d593dab12c55260755f0c2
languageName: node
linkType: hard
"@cspell/cspell-bundled-dicts@npm:10.1.1":
version: 10.1.1
resolution: "@cspell/cspell-bundled-dicts@npm:10.1.1"
@@ -3309,13 +3331,6 @@ __metadata:
languageName: node
linkType: hard
"ansi-colors@npm:^4.1.1":
version: 4.1.3
resolution: "ansi-colors@npm:4.1.3"
checksum: 10/43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2
languageName: node
linkType: hard
"ansi-escapes@npm:^4.3.2":
version: 4.3.2
resolution: "ansi-escapes@npm:4.3.2"
@@ -4414,16 +4429,6 @@ __metadata:
languageName: node
linkType: hard
"enquirer@npm:2.4.1":
version: 2.4.1
resolution: "enquirer@npm:2.4.1"
dependencies:
ansi-colors: "npm:^4.1.1"
strip-ansi: "npm:^6.0.1"
checksum: 10/b3726486cd98f0d458a851a03326a2a5dd4d84f37ff94ff2a2960c915e0fc865865da3b78f0877dc36ac5c1189069eca603e82ec63d5bc6b0dd9985bf6426d7a
languageName: node
linkType: hard
"entities@npm:^8.0.0":
version: 8.0.0
resolution: "entities@npm:8.0.0"
@@ -5052,6 +5057,15 @@ __metadata:
languageName: node
linkType: hard
"fast-wrap-ansi@npm:^0.2.0":
version: 0.2.2
resolution: "fast-wrap-ansi@npm:0.2.2"
dependencies:
fast-string-width: "npm:^3.0.2"
checksum: 10/c72272e4ee9c047ec4609adea9beb779f058e0aaee37d9e99d2306c401b34ad2b158ba6969860e35f8be7a0b0ba7512b71315d403e58a45a9f0eba0dc5b4befd
languageName: node
linkType: hard
"fastq@npm:^1.6.0":
version: 1.20.2
resolution: "fastq@npm:1.20.2"
@@ -8285,6 +8299,7 @@ __metadata:
"@braindb/mdast-util-wiki-link": "npm:0.2.0"
"@braindb/micromark-extension-wiki-link": "npm:0.1.0"
"@bybrave/json5": "npm:3.1.0"
"@clack/prompts": "npm:1.7.0"
"@eslint/js": "npm:10.0.1"
"@glimmer/syntax": "npm:0.95.0"
"@prettier/cli": "npm:0.12.0"
@@ -8321,7 +8336,6 @@ __metadata:
diff: "npm:9.0.0"
editorconfig-without-wasm: "npm:0.0.7"
emoji-regex: "npm:10.6.0"
enquirer: "npm:2.4.1"
esbuild: "npm:0.28.2"
esbuild-visualizer: "npm:0.7.0"
escape-string-regexp: "npm:5.0.0"
@@ -8816,6 +8830,13 @@ __metadata:
languageName: node
linkType: hard
"sisteransi@npm:^1.0.5":
version: 1.0.5
resolution: "sisteransi@npm:1.0.5"
checksum: 10/aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4
languageName: node
linkType: hard
"slash@npm:^3.0.0":
version: 3.0.0
resolution: "slash@npm:3.0.0"