|
@@ -1,10 +1,6 @@
|
|
|
-import type { Package } from '@vben/node-utils';
|
|
|
+import { execaCommand, getPackages } from '@vben/node-utils';
|
|
|
|
|
|
-import { join } from 'node:path';
|
|
|
-
|
|
|
-import { $, fs, getPackages } from '@vben/node-utils';
|
|
|
-
|
|
|
-import { cancel, isCancel, multiselect } from '@clack/prompts';
|
|
|
+import { cancel, isCancel, select } from '@clack/prompts';
|
|
|
|
|
|
interface RunOptions {
|
|
|
command?: string;
|
|
@@ -12,35 +8,45 @@ interface RunOptions {
|
|
|
|
|
|
export async function run(options: RunOptions) {
|
|
|
const { command } = options;
|
|
|
+ if (!command) {
|
|
|
+ console.error('Please enter the command to run');
|
|
|
+ process.exit(1);
|
|
|
+ }
|
|
|
const { packages } = await getPackages();
|
|
|
- const appPkgs = await findApps(process.cwd(), packages);
|
|
|
+ // const appPkgs = await findApps(process.cwd(), packages);
|
|
|
+ // const websitePkg = packages.find(
|
|
|
+ // (item) => item.packageJson.name === '@vben/website',
|
|
|
+ // );
|
|
|
+
|
|
|
+ // 只显示有对应命令的包
|
|
|
+ const selectPkgs = packages.filter((pkg) => {
|
|
|
+ return (pkg?.packageJson as Record<string, any>).scripts?.[command];
|
|
|
+ });
|
|
|
|
|
|
- const selectApps = await multiselect<any, string>({
|
|
|
+ const selectPkg = await select<any, string>({
|
|
|
message: `Select the app you need to run [${command}]:`,
|
|
|
- options: appPkgs.map((item) => ({ label: item, value: item })),
|
|
|
- required: true,
|
|
|
+ options: selectPkgs.map((item) => ({
|
|
|
+ label: item?.packageJson.name,
|
|
|
+ value: item?.packageJson.name,
|
|
|
+ })),
|
|
|
});
|
|
|
|
|
|
- if (isCancel(selectApps)) {
|
|
|
+ if (isCancel(selectPkg) || !selectPkg) {
|
|
|
cancel('👋 Has cancelled');
|
|
|
process.exit(0);
|
|
|
}
|
|
|
|
|
|
- if (selectApps.length === 1) {
|
|
|
- $.verbose = true;
|
|
|
- // 让控制台显示颜色
|
|
|
- process.env.FORCE_COLOR = '1';
|
|
|
- await $`pnpm --filter=${selectApps[0]} run ${command} `;
|
|
|
- return;
|
|
|
- }
|
|
|
- const filters = [];
|
|
|
- for (const app of selectApps) {
|
|
|
- filters.push(`--filter=${app}`);
|
|
|
- }
|
|
|
- $.verbose = true;
|
|
|
- // 让控制台显示颜色
|
|
|
- process.env.FORCE_COLOR = '1';
|
|
|
- await $`turbo run ${command} ${filters}`;
|
|
|
+ execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
|
|
|
+ stdio: 'inherit',
|
|
|
+ });
|
|
|
+ // const filters = [];
|
|
|
+ // for (const app of selectApps) {
|
|
|
+ // filters.push(`--filter=${app}`);
|
|
|
+ // }
|
|
|
+ // $.verbose = true;
|
|
|
+ // execaCommand(`turbo run ${command} ${filters}`, {
|
|
|
+ // stdio: 'inherit',
|
|
|
+ // });
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -48,16 +54,12 @@ export async function run(options: RunOptions) {
|
|
|
* @param root
|
|
|
* @param packages
|
|
|
*/
|
|
|
-async function findApps(root: string, packages: Package[]) {
|
|
|
- // apps内的
|
|
|
- const appPackages = packages
|
|
|
- .filter((pkg) => {
|
|
|
- const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
|
|
|
- return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
|
|
|
- })
|
|
|
- .map((pkg) => {
|
|
|
- return pkg.packageJson.name;
|
|
|
- });
|
|
|
-
|
|
|
- return appPackages;
|
|
|
-}
|
|
|
+// async function findApps(root: string, packages: Package[]) {
|
|
|
+// // apps内的
|
|
|
+// const appPackages = packages.filter((pkg) => {
|
|
|
+// const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
|
|
|
+// return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
|
|
|
+// });
|
|
|
+
|
|
|
+// return appPackages;
|
|
|
+// }
|