summaryrefslogtreecommitdiff
path: root/packages/create-astro/src/index.ts
diff options
context:
space:
mode:
authorGravatar Michael Rienstra <mrienstra@gmail.com> 2022-09-22 11:37:01 -0700
committerGravatar GitHub <noreply@github.com> 2022-09-22 14:37:01 -0400
commit7481ffda028d9028d8e28bc7c6e9960ab80acf0f (patch)
treef387438aabad2a3b4483fe1735c87fe71285fac6 /packages/create-astro/src/index.ts
parente5f71142eb62bd72456e889dad5774347c3753f2 (diff)
downloadastro-7481ffda028d9028d8e28bc7c6e9960ab80acf0f.tar.gz
astro-7481ffda028d9028d8e28bc7c6e9960ab80acf0f.tar.zst
astro-7481ffda028d9028d8e28bc7c6e9960ab80acf0f.zip
`create-astro`: always create `tsconfig.json` (#4810)
* `create-astro`: always create `tsconfig.json` Currently, we only make sure `tsconfig.json` exists when `strict` or `strictest` is selected. Both `default` & `optout` are intended to correspond to `base` -- and will do so for all [23 official templates](https://github.com/withastro/astro/tree/main/examples), but not necessarily for third-party templates. The [example command for installing a third-party template](https://github.com/withastro/astro/blob/a800bf7/packages/create-astro/README.md?plain=1#L31-L35) is (rather conveniently for the sake of this PR!) an example of a template without a `tsconfig.json` file, and installing it with the `default` ("Relaxed") Typescript option results in no `tsconfig.json` file, rather than a `tsconfig.json` file containing `{ "extends": "astro/tsconfigs/base" }` as would be expected. This PR addresses this scenario. It also explicitly sets the `tsconfig.json` file to `{ "extends": "astro/tsconfigs/base" }` when `default` (which I renamed to `base`, still presented to the user as "Relaxed") or `optout` is selected (`optout` has always printed a warning about the importance of `tsconfig.json` & `src/env.d.ts` but otherwise behaved identically to `default`). This is necessary in two scenarios: 1. When the `tsconfig.json` file was created by this script. 2. When it either didn't already include `"extends"`, or it extended a different config by default. For example, some third-party templates might default to `strict`, in which case I'm guessing we'd want to respect the user's choice and change that to `base`. * update `del` 6.1.1 --> 7.0.0 * test: prevent excess writes (without this it triggers many times) * test: create-astro typescript prompt * changeset * fix: recursive `mkdirSync` * test: longer timeout for `windows-latest` OS (see if this fixes failing tests) * better glob path creation, don't hardcode `/` * test: longer timeout for windows-latest OS (since I'm about to trigger another CI run by pushing a commit, might as well try this too) * create-astro test: show last CLI output on timeout * drop variable timeout Typescript tests are slower than directory tests, but they are all usually less than 5000 ms. Less complexity, easier to maintain. * DRY new error output * Update lockfile * Sync lockfile with main * Update lockfile Co-authored-by: Princesseuh <princssdev@gmail.com>
Diffstat (limited to 'packages/create-astro/src/index.ts')
-rw-r--r--packages/create-astro/src/index.ts54
1 files changed, 26 insertions, 28 deletions
diff --git a/packages/create-astro/src/index.ts b/packages/create-astro/src/index.ts
index ee548f59d..2337674ea 100644
--- a/packages/create-astro/src/index.ts
+++ b/packages/create-astro/src/index.ts
@@ -340,7 +340,7 @@ export async function main() {
choices: [
{
title: 'Relaxed',
- value: 'default',
+ value: 'base',
},
{
title: 'Strict (recommended)',
@@ -379,42 +379,40 @@ export async function main() {
console.log(` You can safely ignore these files, but don't delete them!`);
console.log(dim(' (ex: tsconfig.json, src/env.d.ts)'));
console.log(``);
- tsResponse.typescript = 'default';
+ tsResponse.typescript = 'base';
await wait(300);
}
if (args.dryRun) {
ora().info(dim(`--dry-run enabled, skipping.`));
} else if (tsResponse.typescript) {
- if (tsResponse.typescript !== 'default') {
- const templateTSConfigPath = path.join(cwd, 'tsconfig.json');
- fs.readFile(templateTSConfigPath, (err, data) => {
- if (err && err.code === 'ENOENT') {
- // If the template doesn't have a tsconfig.json, let's add one instead
- fs.writeFileSync(
- templateTSConfigPath,
- stringify({ extends: `astro/tsconfigs/${tsResponse.typescript}` }, null, 2)
- );
+ const templateTSConfigPath = path.join(cwd, 'tsconfig.json');
+ fs.readFile(templateTSConfigPath, (err, data) => {
+ if (err && err.code === 'ENOENT') {
+ // If the template doesn't have a tsconfig.json, let's add one instead
+ fs.writeFileSync(
+ templateTSConfigPath,
+ stringify({ extends: `astro/tsconfigs/${tsResponse.typescript}` }, null, 2)
+ );
- return;
- }
+ return;
+ }
- const templateTSConfig = parse(data.toString());
+ const templateTSConfig = parse(data.toString());
- if (templateTSConfig && typeof templateTSConfig === 'object') {
- const result = assign(templateTSConfig, {
- extends: `astro/tsconfigs/${tsResponse.typescript}`,
- });
+ if (templateTSConfig && typeof templateTSConfig === 'object') {
+ const result = assign(templateTSConfig, {
+ extends: `astro/tsconfigs/${tsResponse.typescript}`,
+ });
- fs.writeFileSync(templateTSConfigPath, stringify(result, null, 2));
- } else {
- console.log(
- yellow(
- "There was an error applying the requested TypeScript settings. This could be because the template's tsconfig.json is malformed"
- )
- );
- }
- });
- }
+ fs.writeFileSync(templateTSConfigPath, stringify(result, null, 2));
+ } else {
+ console.log(
+ yellow(
+ "There was an error applying the requested TypeScript settings. This could be because the template's tsconfig.json is malformed"
+ )
+ );
+ }
+ });
ora().succeed('TypeScript settings applied!');
}