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:
parent
3153306953
commit
d45431d246
2 changed files with 25 additions and 3 deletions
5
.changeset/odd-cameras-wave.md
Normal file
5
.changeset/odd-cameras-wave.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'create-astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
create-astro does not fail when removing subdirectories
|
|
@ -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 { 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.
|
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({
|
const response = await prompts({
|
||||||
type: 'confirm',
|
type: 'confirm',
|
||||||
name: 'forceOverwrite',
|
name: 'forceOverwrite',
|
||||||
message: 'Directory not empty. Continue?',
|
message: `Directory not empty. Delete ${cwd} to continue?`,
|
||||||
initial: false,
|
initial: false,
|
||||||
});
|
});
|
||||||
if (!response.forceOverwrite) {
|
if (!response.forceOverwrite) {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
await fs.promises.rm(cwd, { recursive: true });
|
await emptyDir(cwd);
|
||||||
mkdirp(cwd);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mkdirp(cwd);
|
mkdirp(cwd);
|
||||||
|
|
Loading…
Reference in a new issue