summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/astro/types.d.ts5
-rw-r--r--packages/create-astro/src/index.ts39
-rw-r--r--packages/create-astro/src/messages.ts80
-rw-r--r--packages/create-astro/test/utils.js4
4 files changed, 84 insertions, 44 deletions
diff --git a/packages/astro/types.d.ts b/packages/astro/types.d.ts
index ae56cd2dc..d3e30c12e 100644
--- a/packages/astro/types.d.ts
+++ b/packages/astro/types.d.ts
@@ -4,7 +4,10 @@ import { AstroBuiltinAttributes } from './dist/@types/astro';
/** Any supported HTML or SVG element name, as defined by the HTML specification */
export type HTMLTag = keyof astroHTML.JSX.DefinedIntrinsicElements;
/** The built-in attributes for any known HTML or SVG element name */
-export type HTMLAttributes<Tag extends HTMLTag> = Omit<astroHTML.JSX.IntrinsicElements[Tag], keyof AstroBuiltinAttributes>;
+export type HTMLAttributes<Tag extends HTMLTag> = Omit<
+ astroHTML.JSX.IntrinsicElements[Tag],
+ keyof AstroBuiltinAttributes
+>;
// TODO: Enable generic/polymorphic types once compiler output stabilizes in the Language Server
// type PolymorphicAttributes<P extends { as: HTMLTag }> = Omit<(P & HTMLAttributes<P['as']>), 'as'> & { as?: P['as'] };
diff --git a/packages/create-astro/src/index.ts b/packages/create-astro/src/index.ts
index 78036716f..2c9da9d66 100644
--- a/packages/create-astro/src/index.ts
+++ b/packages/create-astro/src/index.ts
@@ -1,20 +1,28 @@
/* eslint no-console: 'off' */
+import { color, generateProjectName, label, say } from '@astrojs/cli-kit';
+import { random } from '@astrojs/cli-kit/utils';
import { assign, parse, stringify } from 'comment-json';
-import { downloadTemplate } from 'giget';
import { execa, execaCommand } from 'execa';
import fs from 'fs';
-import { say, label, color, generateProjectName } from '@astrojs/cli-kit';
-import { random } from '@astrojs/cli-kit/utils';
-import { bold, dim, green, red, reset, yellow } from 'kleur/colors';
+import { downloadTemplate } from 'giget';
+import { bold, dim, green, reset, yellow } from 'kleur/colors';
import ora from 'ora';
import path from 'path';
import prompts from 'prompts';
import detectPackageManager from 'which-pm-runs';
import yargs from 'yargs-parser';
import { loadWithRocketGradient, rocketAscii } from './gradient.js';
-import { defaultLogLevel, logger } from './logger.js';
+import { logger } from './logger.js';
+import {
+ banner,
+ getName,
+ getVersion,
+ info,
+ nextSteps,
+ typescriptByDefault,
+ welcome,
+} from './messages.js';
import { TEMPLATES } from './templates.js';
-import { getName, getVersion, welcome, banner, typescriptByDefault, nextSteps, info } from './messages.js';
// NOTE: In the v7.x version of npm, the default behavior of `npm init` was changed
// to no longer require `--` to pass args and instead pass `--` directly to us. This
@@ -83,9 +91,15 @@ export async function main() {
logger.debug('Verbose logging turned on');
if (!args.skipHouston) {
await say([
- ['Welcome', 'to', label('astro', color.bgGreen, color.black), color.green(`v${version}`) + ',', `${username}!`],
+ [
+ 'Welcome',
+ 'to',
+ label('astro', color.bgGreen, color.black),
+ color.green(`v${version}`) + ',',
+ `${username}!`,
+ ],
random(welcome),
- ]);
+ ]);
await banner(version);
}
@@ -225,7 +239,7 @@ export async function main() {
installSpinner.text = green('Packages installed!');
installSpinner.succeed();
} else {
- await info('No problem!', 'Remember to install dependencies after setup.')
+ await info('No problem!', 'Remember to install dependencies after setup.');
}
const gitResponse = await prompts(
@@ -251,7 +265,10 @@ export async function main() {
await execaCommand('git init', { cwd });
ora().succeed('Git repository created!');
} else {
- await info('Sounds good!', `You can come back and run ${color.reset(`git init`)}${color.dim(' later.')}`)
+ await info(
+ 'Sounds good!',
+ `You can come back and run ${color.reset(`git init`)}${color.dim(' later.')}`
+ );
}
const tsResponse = await prompts(
@@ -315,7 +332,7 @@ export async function main() {
});
ora().succeed('TypeScript settings applied!');
}
-
+
let projectDir = path.relative(process.cwd(), cwd);
const devCmd = pkgManager === 'npm' ? 'npm run dev' : `${pkgManager} dev`;
await nextSteps({ projectDir, devCmd });
diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts
index 395a8b4c6..9a3bee571 100644
--- a/packages/create-astro/src/messages.ts
+++ b/packages/create-astro/src/messages.ts
@@ -1,29 +1,29 @@
/* 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 { exec } from 'node:child_process';
+import { get } from 'node:https';
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.`,
-]
+ `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) => {
@@ -44,11 +44,10 @@ export function getName() {
let v: string;
export function getVersion() {
return new Promise<string>((resolve) => {
- if (v)
- return resolve(v);
+ if (v) return resolve(v);
get('https://registry.npmjs.org/astro/latest', (res) => {
let body = '';
- res.on('data', chunk => body += chunk);
+ res.on('data', (chunk) => (body += chunk));
res.on('end', () => {
const { version } = JSON.parse(body);
v = version;
@@ -59,7 +58,11 @@ export function getVersion() {
}
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`);
+ 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) {
@@ -83,25 +86,40 @@ export async function error(prefix: string, text: string) {
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.`)}`);
+ 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; }) {
+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!')}`);
+ 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 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(enter.join(len > max ? '\n' + prefix : ' '));
}
- console.log(`${prefix}Run ${color.cyan(devCmd)} to start the dev server. ${color.cyan('CTRL+C')} to stop.`);
+ 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')}.`);
+ 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);
diff --git a/packages/create-astro/test/utils.js b/packages/create-astro/test/utils.js
index dc161163b..46a671def 100644
--- a/packages/create-astro/test/utils.js
+++ b/packages/create-astro/test/utils.js
@@ -42,7 +42,9 @@ export const PROMPT_MESSAGES = {
};
export function setup(args = []) {
- const { stdout, stdin } = execa('../create-astro.mjs', [...args, '--skip-houston', '--dryrun'], { cwd: testDir });
+ const { stdout, stdin } = execa('../create-astro.mjs', [...args, '--skip-houston', '--dryrun'], {
+ cwd: testDir,
+ });
return {
stdin,
stdout,