diff --git a/packages/cli/bin/sh1pt.js b/packages/cli/bin/sh1pt.js index b1d5c53a..4e768895 100755 --- a/packages/cli/bin/sh1pt.js +++ b/packages/cli/bin/sh1pt.js @@ -1,2 +1,7 @@ #!/usr/bin/env node -import('../dist/index.js'); +import('../dist/index.js') + .then(({ run }) => run(process.argv.slice(2))) + .catch((err) => { + console.error(err?.message || err); + process.exit(1); + }); diff --git a/packages/cli/package.json b/packages/cli/package.json index 87ea6292..f8f2f0a2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,6 +35,7 @@ "scripts": { "build": "tsc -p tsconfig.json", "dev": "tsx src/index.ts", + "test": "cd ../.. && pnpm exec vitest run packages/cli/src/**/*.test.ts", "typecheck": "tsc -p tsconfig.json --noEmit", "prepublishOnly": "pnpm build" }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 0f14db17..3bc0dc4a 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,9 @@ import { Command } from 'commander'; import kleur from 'kleur'; import { createRequire } from 'node:module'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { logError } from './lib/logger.js'; import { buildCmd } from './commands/build.js'; import { createActionsCmd } from './commands/build-actions.js'; import { promoteCmd } from './commands/promote.js'; @@ -66,7 +69,17 @@ for (const cat of CATEGORIES) { program.addCommand(makeCategoryCmd(cat)); } -program.parseAsync(process.argv).catch((err) => { - console.error(kleur.red(`error: ${err.message}`)); - process.exit(1); -}); +export async function run(argv = process.argv.slice(2)): Promise { + await program.parseAsync(argv, { from: 'user' }); +} + +const invokedPath = process.argv[1] ? resolve(process.argv[1]) : ''; +const modulePath = fileURLToPath(import.meta.url); +const isDirectExecution = invokedPath !== '' && invokedPath === modulePath; +if (isDirectExecution) { + run().catch((err) => { + const message = err instanceof Error ? err.message : String(err); + logError(kleur.red(`error: ${message}`)); + process.exit(1); + }); +} diff --git a/packages/cli/src/lib/logger.ts b/packages/cli/src/lib/logger.ts new file mode 100644 index 00000000..20f9ff67 --- /dev/null +++ b/packages/cli/src/lib/logger.ts @@ -0,0 +1,3 @@ +export function logError(message: string): void { + console.error(message); +}