[astro add] Move config update to final step (#4682)
* feat: move astro.config update to end * chore: changeset
This commit is contained in:
parent
80ae62ad99
commit
d1e6959147
2 changed files with 73 additions and 66 deletions
5
.changeset/clever-taxis-smell.md
Normal file
5
.changeset/clever-taxis-smell.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
astro add - move configuration updates to final step
|
|
@ -95,17 +95,77 @@ export default async function add(names: string[], { cwd, flags, logging, teleme
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let configURL: URL | undefined;
|
|
||||||
|
// Some packages might have a common alias! We normalize those here.
|
||||||
|
const integrationNames = names.map((name) => (ALIASES.has(name) ? ALIASES.get(name)! : name));
|
||||||
|
const integrations = await validateIntegrations(integrationNames);
|
||||||
|
let installResult = await tryToInstallIntegrations({ integrations, cwd, flags, logging });
|
||||||
const root = pathToFileURL(cwd ? path.resolve(cwd) : process.cwd());
|
const root = pathToFileURL(cwd ? path.resolve(cwd) : process.cwd());
|
||||||
|
// Append forward slash to compute relative paths
|
||||||
|
root.href = appendForwardSlash(root.href);
|
||||||
|
|
||||||
|
switch (installResult) {
|
||||||
|
case UpdateResult.updated: {
|
||||||
|
if (integrations.find((integration) => integration.id === 'tailwind')) {
|
||||||
|
const possibleConfigFiles = [
|
||||||
|
'./tailwind.config.cjs',
|
||||||
|
'./tailwind.config.mjs',
|
||||||
|
'./tailwind.config.js',
|
||||||
|
].map((p) => fileURLToPath(new URL(p, root)));
|
||||||
|
let alreadyConfigured = false;
|
||||||
|
for (const possibleConfigPath of possibleConfigFiles) {
|
||||||
|
if (existsSync(possibleConfigPath)) {
|
||||||
|
alreadyConfigured = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!alreadyConfigured) {
|
||||||
|
info(
|
||||||
|
logging,
|
||||||
|
null,
|
||||||
|
`\n ${magenta(
|
||||||
|
`Astro will generate a minimal ${bold('./tailwind.config.cjs')} file.`
|
||||||
|
)}\n`
|
||||||
|
);
|
||||||
|
if (await askToContinue({ flags })) {
|
||||||
|
await fs.writeFile(
|
||||||
|
fileURLToPath(new URL('./tailwind.config.cjs', root)),
|
||||||
|
TAILWIND_CONFIG_STUB,
|
||||||
|
{ encoding: 'utf-8' }
|
||||||
|
);
|
||||||
|
debug('add', `Generated default ./tailwind.config.cjs file`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug('add', `Using existing Tailwind configuration`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UpdateResult.cancelled: {
|
||||||
|
info(
|
||||||
|
logging,
|
||||||
|
null,
|
||||||
|
msg.cancelled(
|
||||||
|
`Dependencies ${bold('NOT')} installed.`,
|
||||||
|
`Be sure to install them manually before continuing!`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UpdateResult.failure: {
|
||||||
|
throw createPrettyError(new Error(`Unable to install dependencies`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const rawConfigPath = await resolveConfigPath({ cwd, flags });
|
const rawConfigPath = await resolveConfigPath({ cwd, flags });
|
||||||
configURL = rawConfigPath ? pathToFileURL(rawConfigPath) : undefined;
|
let configURL = rawConfigPath ? pathToFileURL(rawConfigPath) : undefined;
|
||||||
applyPolyfill();
|
applyPolyfill();
|
||||||
|
|
||||||
if (configURL) {
|
if (configURL) {
|
||||||
debug('add', `Found config at ${configURL}`);
|
debug('add', `Found config at ${configURL}`);
|
||||||
} else {
|
} else {
|
||||||
info(logging, 'add', `Unable to locate a config file, generating one for you.`);
|
info(logging, 'add', `Unable to locate a config file, generating one for you.`);
|
||||||
configURL = new URL('./astro.config.mjs', appendForwardSlash(root.href));
|
configURL = new URL('./astro.config.mjs', root);
|
||||||
await fs.writeFile(fileURLToPath(configURL), ASTRO_CONFIG_STUB, { encoding: 'utf-8' });
|
await fs.writeFile(fileURLToPath(configURL), ASTRO_CONFIG_STUB, { encoding: 'utf-8' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,11 +175,6 @@ export default async function add(names: string[], { cwd, flags, logging, teleme
|
||||||
`Unable to use "astro add" with package.json configuration. Try migrating to \`astro.config.mjs\` and try again.`
|
`Unable to use "astro add" with package.json configuration. Try migrating to \`astro.config.mjs\` and try again.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some packages might have a common alias! We normalize those here.
|
|
||||||
const integrationNames = names.map((name) => (ALIASES.has(name) ? ALIASES.get(name)! : name));
|
|
||||||
const integrations = await validateIntegrations(integrationNames);
|
|
||||||
|
|
||||||
let ast: t.File | null = null;
|
let ast: t.File | null = null;
|
||||||
try {
|
try {
|
||||||
ast = await parseAstroConfig(configURL);
|
ast = await parseAstroConfig(configURL);
|
||||||
|
@ -165,7 +220,6 @@ export default async function add(names: string[], { cwd, flags, logging, teleme
|
||||||
}
|
}
|
||||||
|
|
||||||
let configResult: UpdateResult | undefined;
|
let configResult: UpdateResult | undefined;
|
||||||
let installResult: UpdateResult | undefined;
|
|
||||||
|
|
||||||
if (ast) {
|
if (ast) {
|
||||||
try {
|
try {
|
||||||
|
@ -204,71 +258,19 @@ export default async function add(names: string[], { cwd, flags, logging, teleme
|
||||||
}
|
}
|
||||||
|
|
||||||
info(logging, null, msg.success(`Configuration up-to-date.`));
|
info(logging, null, msg.success(`Configuration up-to-date.`));
|
||||||
break;
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
installResult = await tryToInstallIntegrations({ integrations, cwd, flags, logging });
|
|
||||||
|
|
||||||
switch (installResult) {
|
|
||||||
case UpdateResult.updated: {
|
|
||||||
const len = integrations.length;
|
|
||||||
if (integrations.find((integration) => integration.id === 'tailwind')) {
|
|
||||||
const possibleConfigFiles = [
|
|
||||||
'./tailwind.config.cjs',
|
|
||||||
'./tailwind.config.mjs',
|
|
||||||
'./tailwind.config.js',
|
|
||||||
].map((p) => fileURLToPath(new URL(p, configURL)));
|
|
||||||
let alreadyConfigured = false;
|
|
||||||
for (const possibleConfigPath of possibleConfigFiles) {
|
|
||||||
if (existsSync(possibleConfigPath)) {
|
|
||||||
alreadyConfigured = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!alreadyConfigured) {
|
|
||||||
info(
|
|
||||||
logging,
|
|
||||||
null,
|
|
||||||
`\n ${magenta(
|
|
||||||
`Astro will generate a minimal ${bold('./tailwind.config.cjs')} file.`
|
|
||||||
)}\n`
|
|
||||||
);
|
|
||||||
if (await askToContinue({ flags })) {
|
|
||||||
await fs.writeFile(
|
|
||||||
fileURLToPath(new URL('./tailwind.config.cjs', configURL)),
|
|
||||||
TAILWIND_CONFIG_STUB,
|
|
||||||
{ encoding: 'utf-8' }
|
|
||||||
);
|
|
||||||
debug('add', `Generated default ./tailwind.config.cjs file`);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
debug('add', `Using existing Tailwind configuration`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
default: {
|
||||||
const list = integrations.map((integration) => ` - ${integration.packageName}`).join('\n');
|
const list = integrations.map((integration) => ` - ${integration.packageName}`).join('\n');
|
||||||
info(
|
info(
|
||||||
logging,
|
logging,
|
||||||
null,
|
null,
|
||||||
msg.success(
|
msg.success(
|
||||||
`Added the following integration${len === 1 ? '' : 's'} to your project:\n${list}`
|
`Added the following integration${
|
||||||
|
integrations.length === 1 ? '' : 's'
|
||||||
|
} to your project:\n${list}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return;
|
|
||||||
}
|
|
||||||
case UpdateResult.cancelled: {
|
|
||||||
info(
|
|
||||||
logging,
|
|
||||||
null,
|
|
||||||
msg.cancelled(
|
|
||||||
`Dependencies ${bold('NOT')} installed.`,
|
|
||||||
`Be sure to install them manually before continuing!`
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case UpdateResult.failure: {
|
|
||||||
throw createPrettyError(new Error(`Unable to install dependencies`));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue