refactor(projects): use enquirer replace prompts

This commit is contained in:
Soybean 2024-03-03 20:43:21 +08:00
parent 14aa856a0f
commit b546ff8625
4 changed files with 131 additions and 36 deletions

View File

@ -14,15 +14,14 @@
}, },
"devDependencies": { "devDependencies": {
"@soybeanjs/changelog": "0.3.15", "@soybeanjs/changelog": "0.3.15",
"@types/prompts": "2.4.9",
"bumpp": "9.3.0", "bumpp": "9.3.0",
"c12": "1.9.0", "c12": "1.9.0",
"cac": "6.7.14", "cac": "6.7.14",
"consola": "3.2.3", "consola": "3.2.3",
"enquirer": "2.4.1",
"execa": "8.0.1", "execa": "8.0.1",
"kolorist": "1.8.0", "kolorist": "1.8.0",
"npm-check-updates": "16.14.15", "npm-check-updates": "16.14.15",
"prompts": "2.4.2",
"rimraf": "5.0.5" "rimraf": "5.0.5"
} }
} }

View File

@ -1,10 +1,16 @@
import path from 'node:path'; import path from 'node:path';
import { readFileSync } from 'node:fs'; import { readFileSync } from 'node:fs';
import prompts from 'prompts'; import { prompt } from 'enquirer';
import { bgRed, green, red, yellow } from 'kolorist'; import { bgRed, green, red, yellow } from 'kolorist';
import { execCommand } from '../shared'; import { execCommand } from '../shared';
import type { CliOption } from '../types'; import type { CliOption } from '../types';
interface PromptObject {
types: string;
scopes: string;
description: string;
}
/** /**
* Git commit with Conventional Commits standard * Git commit with Conventional Commits standard
* *
@ -18,20 +24,20 @@ export async function gitCommit(
const typesChoices = gitCommitTypes.map(([value, msg]) => { const typesChoices = gitCommitTypes.map(([value, msg]) => {
const nameWithSuffix = `${value}:`; const nameWithSuffix = `${value}:`;
const title = `${nameWithSuffix.padEnd(12)}${msg}`; const message = `${nameWithSuffix.padEnd(12)}${msg}`;
return { return {
value, name: value,
title message
}; };
}); });
const scopesChoices = gitCommitScopes.map(([value, msg]) => ({ const scopesChoices = gitCommitScopes.map(([value, msg]) => ({
value, name: value,
title: `${value.padEnd(30)} (${msg})` message: `${value.padEnd(30)} (${msg})`
})); }));
const result = await prompts([ const result = await prompt<PromptObject>([
{ {
name: 'types', name: 'types',
type: 'select', type: 'select',

View File

@ -2,32 +2,43 @@ import process from 'node:process';
import path from 'node:path'; import path from 'node:path';
import { writeFile } from 'node:fs/promises'; import { writeFile } from 'node:fs/promises';
import { existsSync, mkdirSync } from 'node:fs'; import { existsSync, mkdirSync } from 'node:fs';
import prompts from 'prompts'; import { prompt } from 'enquirer';
import { green, red } from 'kolorist'; import { green, red } from 'kolorist';
interface PromptObject {
routeName: string;
addRouteParams: boolean;
routeParams: string;
}
/** generate route */ /** generate route */
export async function generateRoute() { export async function generateRoute() {
const result = await prompts([ const result = await prompt<PromptObject>([
{ {
type: 'text',
name: 'routeName', name: 'routeName',
type: 'text',
message: 'please enter route name', message: 'please enter route name',
initial: 'demo-route_child' initial: 'demo-route_child'
}, },
{ {
type: 'confirm',
name: 'addRouteParams', name: 'addRouteParams',
type: 'confirm',
message: 'add route params?', message: 'add route params?',
initial: false initial: false
},
{
type: pre => (pre ? 'text' : null),
name: 'routeParams',
message: 'please enter route params',
initial: 'id'
} }
]); ]);
if (result.addRouteParams) {
const answers = await prompt<PromptObject>({
name: 'routeParams',
type: 'text',
message: 'please enter route params',
initial: 'id'
});
Object.assign(result, answers);
}
const PAGE_DIR_NAME_PATTERN = /^[\w-]+[0-9a-zA-Z]+$/; const PAGE_DIR_NAME_PATTERN = /^[\w-]+[0-9a-zA-Z]+$/;
if (!PAGE_DIR_NAME_PATTERN.test(result.routeName)) { if (!PAGE_DIR_NAME_PATTERN.test(result.routeName)) {
@ -42,7 +53,7 @@ For example:
const PARAM_REG = /^\w+$/g; const PARAM_REG = /^\w+$/g;
if (!PARAM_REG.test(result.routeParams)) { if (result.routeParams && !PARAM_REG.test(result.routeParams)) {
throw new Error(red('route params is invalid, it only allow letters, numbers or "_".')); throw new Error(red('route params is invalid, it only allow letters, numbers or "_".'));
} }

View File

@ -214,10 +214,7 @@ importers:
devDependencies: devDependencies:
'@soybeanjs/changelog': '@soybeanjs/changelog':
specifier: 0.3.15 specifier: 0.3.15
version: 0.3.15(@unocss/eslint-config@0.58.5)(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3)(vue-eslint-parser@9.4.2) version: 0.3.15(eslint@8.57.0)(typescript@5.3.3)
'@types/prompts':
specifier: 2.4.9
version: 2.4.9
bumpp: bumpp:
specifier: 9.3.0 specifier: 9.3.0
version: 9.3.0 version: 9.3.0
@ -230,6 +227,9 @@ importers:
consola: consola:
specifier: 3.2.3 specifier: 3.2.3
version: 3.2.3 version: 3.2.3
enquirer:
specifier: 2.4.1
version: 2.4.1
execa: execa:
specifier: 8.0.1 specifier: 8.0.1
version: 8.0.1 version: 8.0.1
@ -239,9 +239,6 @@ importers:
npm-check-updates: npm-check-updates:
specifier: 16.14.15 specifier: 16.14.15
version: 16.14.15 version: 16.14.15
prompts:
specifier: 2.4.2
version: 2.4.2
rimraf: rimraf:
specifier: 5.0.5 specifier: 5.0.5
version: 5.0.5 version: 5.0.5
@ -1383,11 +1380,11 @@ packages:
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
dev: true dev: true
/@soybeanjs/changelog@0.3.15(@unocss/eslint-config@0.58.5)(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3)(vue-eslint-parser@9.4.2): /@soybeanjs/changelog@0.3.15(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-DnRx5MSiOxrwcfdfoAD8WByiKOPMVmI5ABlm8KcAlRHiFw0jDK4IfU0K2PfVba9lK/ZCpzplMcjC7Fn2qqt5Vg==} resolution: {integrity: sha512-DnRx5MSiOxrwcfdfoAD8WByiKOPMVmI5ABlm8KcAlRHiFw0jDK4IfU0K2PfVba9lK/ZCpzplMcjC7Fn2qqt5Vg==}
engines: {node: '>=14'} engines: {node: '>=14'}
dependencies: dependencies:
'@soybeanjs/eslint-config': 1.2.3(@unocss/eslint-config@0.58.5)(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3)(vue-eslint-parser@9.4.2) '@soybeanjs/eslint-config': 1.2.3(eslint@8.57.0)(typescript@5.3.3)
cli-progress: 3.12.0 cli-progress: 3.12.0
convert-gitmoji: 0.1.5 convert-gitmoji: 0.1.5
dayjs: 1.11.10 dayjs: 1.11.10
@ -1495,6 +1492,82 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@soybeanjs/eslint-config@1.2.3(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-OEBHuhpfDZU/DMcku5kQo0fu/42lOQaKstRUZMTZcMbKpQIfQ4I3KhruRrtfAflCBJ35NPeF4mN1LhxumMBKjg==}
peerDependencies:
'@toml-tools/parser': '*'
'@unocss/eslint-config': '>=0.58.0'
eslint: '>=8.40.0'
eslint-plugin-astro: '>=0.30.0'
eslint-plugin-react: '>=7.0.0'
eslint-plugin-react-hooks: '>=4.0.0'
eslint-plugin-react-native: '>=4.0.0'
eslint-plugin-react-refresh: '>=0.4.0'
eslint-plugin-solid: '>=0.10.0'
eslint-plugin-svelte: '>=2.0.0'
eslint-plugin-vue: '>=9.19.0'
prettier-plugin-astro: '>=0.12.0'
prettier-plugin-svelte: '>=3.0.0'
prettier-plugin-toml: '>=2.0.0'
typescript: '>=5.0.0'
vue-eslint-parser: '>=9.3.2'
peerDependenciesMeta:
'@toml-tools/parser':
optional: true
'@unocss/eslint-config':
optional: true
eslint-plugin-astro:
optional: true
eslint-plugin-react:
optional: true
eslint-plugin-react-hooks:
optional: true
eslint-plugin-react-native:
optional: true
eslint-plugin-react-refresh:
optional: true
eslint-plugin-solid:
optional: true
eslint-plugin-svelte:
optional: true
eslint-plugin-vue:
optional: true
prettier-plugin-astro:
optional: true
prettier-plugin-svelte:
optional: true
prettier-plugin-toml:
optional: true
vue-eslint-parser:
optional: true
dependencies:
'@antfu/eslint-define-config': 1.23.0-2
'@antfu/install-pkg': 0.3.1
'@eslint/eslintrc': 3.0.2
'@eslint/js': 8.57.0
'@typescript-eslint/eslint-plugin': 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3)
eslint: 8.57.0
eslint-config-prettier: 9.1.0(eslint@8.57.0)
eslint-parser-plain: 0.1.0
eslint-plugin-i: 2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)
eslint-plugin-n: 16.6.2(eslint@8.57.0)
eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
eslint-plugin-unicorn: 51.0.1(eslint@8.57.0)
globals: 14.0.0
local-pkg: 0.5.0
prettier: 3.2.5
prettier-plugin-jsdoc: 1.3.0(prettier@3.2.5)
prettier-plugin-json-sort: 0.0.2(prettier@3.2.5)
prompts: 2.4.2
typescript: 5.3.3
transitivePeerDependencies:
- '@types/eslint'
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
dev: true
/@szmarczak/http-timer@5.0.1: /@szmarczak/http-timer@5.0.1:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
@ -1587,13 +1660,6 @@ packages:
resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==}
dev: true dev: true
/@types/prompts@2.4.9:
resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==}
dependencies:
'@types/node': 20.11.24
kleur: 3.0.3
dev: true
/@types/qs@6.9.12: /@types/qs@6.9.12:
resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==}
dev: true dev: true
@ -2240,6 +2306,11 @@ packages:
string-width: 4.2.3 string-width: 4.2.3
dev: true dev: true
/ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
dev: true
/ansi-escapes@6.2.0: /ansi-escapes@6.2.0:
resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
@ -3352,6 +3423,14 @@ packages:
dev: true dev: true
optional: true optional: true
/enquirer@2.4.1:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
dependencies:
ansi-colors: 4.1.3
strip-ansi: 6.0.1
dev: true
/entities@1.1.2: /entities@1.1.2:
resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
dev: true dev: true