summaryrefslogtreecommitdiff
path: root/packages/create-astro/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/create-astro/src')
-rw-r--r--packages/create-astro/src/actions/template.ts22
1 files changed, 17 insertions, 5 deletions
diff --git a/packages/create-astro/src/actions/template.ts b/packages/create-astro/src/actions/template.ts
index 4f7e751e9..aa0363694 100644
--- a/packages/create-astro/src/actions/template.ts
+++ b/packages/create-astro/src/actions/template.ts
@@ -35,8 +35,13 @@ export async function template(ctx: Pick<Context, 'template' | 'prompt' | 'dryRu
while: () =>
copyTemplate(ctx.template!, ctx as Context).catch((e) => {
// eslint-disable-next-line no-console
- error('error', e);
- process.exit(1);
+ if (e instanceof Error) {
+ error('error', e.message);
+ process.exit(1);
+ } else {
+ error('error', 'Unable to clone template.');
+ process.exit(1);
+ }
}),
});
} else {
@@ -81,11 +86,18 @@ export default async function copyTemplate(tmpl: string, ctx: Context) {
} catch (err: any) {
fs.rmdirSync(ctx.cwd);
if (err.message.includes('404')) {
- await error('Error', `Template ${color.reset(tmpl)} ${color.dim('does not exist!')}`);
+ throw new Error(`Template ${color.reset(tmpl)} ${color.dim('does not exist!')}`);
} else {
- console.error(err.message);
+ throw new Error(err.message);
}
- ctx.exit(1);
+ }
+
+ // It's possible the repo exists (ex. `withastro/astro`),
+ // But the template route is invalid (ex. `withastro/astro/examples/DNE`).
+ // `giget` doesn't throw for this case,
+ // so check if the directory is still empty as a heuristic.
+ if (fs.readdirSync(ctx.cwd).length === 0) {
+ throw new Error(`Template ${color.reset(tmpl)} ${color.dim('is empty!')}`);
}
// Post-process in parallel