summaryrefslogtreecommitdiff
path: root/packages/create-astro/src/messages.ts
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2022-10-26 10:13:56 -0500
committerGravatar GitHub <noreply@github.com> 2022-10-26 10:13:56 -0500
commit04083762810a1a9e078a7e68edab945c8063b1ab (patch)
tree784baa969ba4f3a68f3420dc909135359a58f3cd /packages/create-astro/src/messages.ts
parentddf2f8390e8dcc64b44636524bdcddae977779f4 (diff)
downloadastro-04083762810a1a9e078a7e68edab945c8063b1ab.tar.gz
astro-04083762810a1a9e078a7e68edab945c8063b1ab.tar.zst
astro-04083762810a1a9e078a7e68edab945c8063b1ab.zip
[Create Astro] Improved prompts, template handling, Houston (#5088)
* feat(create-astro): add houston, improve prompts * refactor(create-astro): move to giget * chore: add changeset * chore: update lockfile * test(create-astro): update tests to match new output * chore: prefer named functions * fix: update template prompt * fix: update typescript message * chore: add explicit --skip-houston flag * test(create-astro): skip flaky typescript test Co-authored-by: Nate Moore <nate@astro.build>
Diffstat (limited to 'packages/create-astro/src/messages.ts')
-rw-r--r--packages/create-astro/src/messages.ts108
1 files changed, 108 insertions, 0 deletions
diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts
new file mode 100644
index 000000000..395a8b4c6
--- /dev/null
+++ b/packages/create-astro/src/messages.ts
@@ -0,0 +1,108 @@
+/* eslint no-console: 'off' */
+import { exec } from 'node:child_process';
+import { get } from 'node:https';
+import { color, label } from '@astrojs/cli-kit';
+import { sleep } from '@astrojs/cli-kit/utils';
+import stripAnsi from 'strip-ansi';
+
+export const welcome = [
+ `Let's claim your corner of the internet.`,
+ `I'll be your assistant today.`,
+ `Let's build something awesome!`,
+ `Let's build something great!`,
+ `Let's build something fast!`,
+ `Let's make the web weird!`,
+ `Let's make the web a better place!`,
+ `Let's create a new project!`,
+ `Let's create something unqiue!`,
+ `Time to build a new website.`,
+ `Time to build a faster website.`,
+ `Time to build a sweet new website.`,
+ `We're glad to have you on board.`,
+ `Keeping the internet weird since 2021.`,
+ `Initiating launch sequence...`,
+ `Initiating launch sequence... right... now!`,
+ `Awaiting further instructions.`,
+]
+
+export function getName() {
+ return new Promise((resolve) => {
+ exec('git config user.name', { encoding: 'utf-8' }, (_1, gitName, _2) => {
+ if (gitName.trim()) {
+ return resolve(gitName.split(' ')[0].trim());
+ }
+ exec('whoami', { encoding: 'utf-8' }, (_3, whoami, _4) => {
+ if (whoami.trim()) {
+ return resolve(whoami.split(' ')[0].trim());
+ }
+ return resolve('astronaut');
+ });
+ });
+ });
+}
+
+let v: string;
+export function getVersion() {
+ return new Promise<string>((resolve) => {
+ if (v)
+ return resolve(v);
+ get('https://registry.npmjs.org/astro/latest', (res) => {
+ let body = '';
+ res.on('data', chunk => body += chunk);
+ res.on('end', () => {
+ const { version } = JSON.parse(body);
+ v = version;
+ resolve(version);
+ });
+ });
+ });
+}
+
+export async function banner(version: string) {
+ return console.log(`\n${label('astro', color.bgGreen, color.black)} ${color.green(color.bold(`v${version}`))} ${color.bold('Launch sequence initiated.')}\n`);
+}
+
+export async function info(prefix: string, text: string) {
+ await sleep(100);
+ if (process.stdout.columns < 80) {
+ console.log(`${color.cyan('◼')} ${color.cyan(prefix)}`);
+ console.log(`${' '.repeat(3)}${color.dim(text)}\n`);
+ } else {
+ console.log(`${color.cyan('◼')} ${color.cyan(prefix)} ${color.dim(text)}\n`);
+ }
+}
+
+export async function error(prefix: string, text: string) {
+ if (process.stdout.columns < 80) {
+ console.log(`${' '.repeat(5)} ${color.red('▲')} ${color.red(prefix)}`);
+ console.log(`${' '.repeat(9)}${color.dim(text)}`);
+ } else {
+ console.log(`${' '.repeat(5)} ${color.red('▲')} ${color.red(prefix)} ${color.dim(text)}`);
+ }
+}
+
+export async function typescriptByDefault() {
+ await info(`Cool!`, 'Astro comes with TypeScript support enabled by default.');
+ console.log(`${' '.repeat(3)}${color.dim(`We'll default to the most relaxed settings for you.`)}`);
+ await sleep(300);
+}
+
+export async function nextSteps({ projectDir, devCmd }: { projectDir: string; devCmd: string; }) {
+ const max = process.stdout.columns;
+ const prefix = max < 80 ? ' ' : ' '.repeat(9);
+ await sleep(200);
+ console.log(`\n ${color.bgCyan(` ${color.black('next')} `)} ${color.bold('Liftoff confirmed. Explore your project!')}`);
+
+ await sleep(100);
+ if (projectDir !== '') {
+ const enter = [`\n${prefix}Enter your project directory using`, color.cyan(`cd ./${projectDir}`, '')];
+ const len = enter[0].length + stripAnsi(enter[1]).length;
+ console.log(enter.join((len > max) ? '\n' + prefix : ' '));
+ }
+ console.log(`${prefix}Run ${color.cyan(devCmd)} to start the dev server. ${color.cyan('CTRL+C')} to stop.`);
+ await sleep(100);
+ console.log(`${prefix}Add frameworks like ${color.cyan(`react`)} or ${color.cyan('tailwind')} using ${color.cyan('astro add')}.`);
+ await sleep(100);
+ console.log(`\n${prefix}Stuck? Join us at ${color.cyan(`https://astro.build/chat`)}`);
+ await sleep(200);
+}