fix: add force to rm script in create-astro (#729)

* fix: add force to rm script in create-astro

* add changeset

* edit overwrite prompt

* rm cannot remove '.' or '..' -- creating a helper function to empty the directory

* delete symlinks

* comments
This commit is contained in:
Bryan Pan 2021-07-19 18:55:35 -07:00 committed by GitHub
parent 3153306953
commit d45431d246
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 3 deletions

View file

@ -0,0 +1,5 @@
---
'create-astro': patch
---
create-astro does not fail when removing subdirectories

View file

@ -20,6 +20,24 @@ export function mkdirp(dir: string) {
}
}
/**
* Delete all files, subdirectories, and symlinks in a given
* directory.
*
* @param dir the directory to empty
* @returns a promise for emptying a given directory
*/
export async function emptyDir(dir: string) {
const items = await fs.promises.readdir(dir);
return Promise.all(items.map(async (item) => {
const itemPath = path.join(dir, item);
const stat = await fs.promises.stat(itemPath);
return stat.isDirectory()
? fs.promises.rm(itemPath, { recursive: true, force: true }) // To remove directories
: fs.promises.unlink(itemPath); // Remove files and symlinks
}));
}
const { version } = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
const POSTPROCESS_FILES = ['package.json', 'astro.config.mjs', 'CHANGELOG.md']; // some files need processing after copying.
@ -37,15 +55,14 @@ export async function main() {
const response = await prompts({
type: 'confirm',
name: 'forceOverwrite',
message: 'Directory not empty. Continue?',
message: `Directory not empty. Delete ${cwd} to continue?`,
initial: false,
});
if (!response.forceOverwrite) {
process.exit(1);
}
await fs.promises.rm(cwd, { recursive: true });
mkdirp(cwd);
await emptyDir(cwd);
}
} else {
mkdirp(cwd);