summaryrefslogtreecommitdiff
path: root/packages/create-astro/src/utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/create-astro/src/utils.ts')
-rw-r--r--packages/create-astro/src/utils.ts93
1 files changed, 48 insertions, 45 deletions
diff --git a/packages/create-astro/src/utils.ts b/packages/create-astro/src/utils.ts
index 790a64cf9..52e56f5f0 100644
--- a/packages/create-astro/src/utils.ts
+++ b/packages/create-astro/src/utils.ts
@@ -6,8 +6,8 @@ import decompress from 'decompress';
const listeners = new Map();
-export async function addProcessListeners(handlers: [NodeJS.Signals|string, NodeJS.SignalsListener][]) {
- for (const [event,handler] of handlers) {
+export async function addProcessListeners(handlers: [NodeJS.Signals | string, NodeJS.SignalsListener][]) {
+ for (const [event, handler] of handlers) {
listeners.set(event, handler);
process.once(event as NodeJS.Signals, handler);
}
@@ -21,18 +21,20 @@ export async function cancelProcessListeners() {
}
export async function getTemplates() {
- const templatesRoot = fileURLToPath(new URL('./templates', import.meta.url));
- const templateFiles = await fs.readdir(templatesRoot, 'utf8');
- const templates = templateFiles.filter(t => t.endsWith('.tgz'));
- const metafile = templateFiles.find(t => t.endsWith('meta.json'));
+ const templatesRoot = fileURLToPath(new URL('./templates', import.meta.url));
+ const templateFiles = await fs.readdir(templatesRoot, 'utf8');
+ const templates = templateFiles.filter((t) => t.endsWith('.tgz'));
+ const metafile = templateFiles.find((t) => t.endsWith('meta.json'));
- const meta = await fs.readFile(resolve(templatesRoot, metafile)).then(r => JSON.parse(r.toString()));
+ const meta = await fs.readFile(resolve(templatesRoot, metafile)).then((r) => JSON.parse(r.toString()));
- return templates.map(template => {
+ return templates
+ .map((template) => {
const value = basename(template, '.tgz');
if (meta[value]) return { ...meta[value], value };
return { value };
- }).sort((a, b) => {
+ })
+ .sort((a, b) => {
const aRank = a.rank ?? 0;
const bRank = b.rank ?? 0;
if (aRank > bRank) return -1;
@@ -49,28 +51,29 @@ export async function rewriteFiles(projectName: string) {
const tasks = [];
tasks.push(fs.rename(resolve(dest, '_gitignore'), resolve(dest, '.gitignore')));
tasks.push(
- fs.readFile(resolve(dest, 'package.json'))
- .then(res => JSON.parse(res.toString()))
- .then(json => JSON.stringify({ ...json, name: getValidPackageName(projectName) }, null, 2))
- .then(res => fs.writeFile(resolve(dest, 'package.json'), res))
+ fs
+ .readFile(resolve(dest, 'package.json'))
+ .then((res) => JSON.parse(res.toString()))
+ .then((json) => JSON.stringify({ ...json, name: getValidPackageName(projectName) }, null, 2))
+ .then((res) => fs.writeFile(resolve(dest, 'package.json'), res))
);
return Promise.all(tasks);
}
-export async function prepareTemplate(use: 'npm'|'yarn', name: string, dest: string) {
- const projectName = dest;
- dest = resolve(dest);
- const template = fileURLToPath(new URL(`./templates/${name}.tgz`, import.meta.url));
- await decompress(template, dest);
- await rewriteFiles(projectName);
- try {
- await run(use, use === 'npm' ? 'i' : null, dest);
- } catch (e) {
- cleanup(true);
- }
- isDone = true;
- return;
+export async function prepareTemplate(use: 'npm' | 'yarn', name: string, dest: string) {
+ const projectName = dest;
+ dest = resolve(dest);
+ const template = fileURLToPath(new URL(`./templates/${name}.tgz`, import.meta.url));
+ await decompress(template, dest);
+ await rewriteFiles(projectName);
+ try {
+ await run(use, use === 'npm' ? 'i' : null, dest);
+ } catch (e) {
+ cleanup(true);
+ }
+ isDone = true;
+ return;
}
export function cleanup(didError = false) {
@@ -81,10 +84,10 @@ export function cleanup(didError = false) {
}
export function killChildren() {
- childrenProcesses.forEach(p => p.kill('SIGINT'));
+ childrenProcesses.forEach((p) => p.kill('SIGINT'));
}
-export function run(pkgManager: 'npm'|'yarn', command: string, projectPath: string, stdio: any = 'ignore'): Promise<void> {
+export function run(pkgManager: 'npm' | 'yarn', command: string, projectPath: string, stdio: any = 'ignore'): Promise<void> {
return new Promise((resolve, reject) => {
const p = spawn(pkgManager, command ? [command] : [], {
shell: true,
@@ -102,40 +105,40 @@ export function isWin() {
}
export function isEmpty(path) {
- try {
- const files = readdirSync(resolve(path));
- if (files.length > 0) {
- return false;
- } else {
- return true;
- }
- } catch (err) {
- if (err.code !== 'ENOENT') throw err;
+ try {
+ const files = readdirSync(resolve(path));
+ if (files.length > 0) {
+ return false;
+ } else {
+ return true;
}
- return true;
+ } catch (err) {
+ if (err.code !== 'ENOENT') throw err;
+ }
+ return true;
}
export function emptyDir(dir) {
dir = resolve(dir);
if (!existsSync(dir)) {
- return
+ return;
}
for (const file of readdirSync(dir)) {
- const abs = resolve(dir, file)
+ const abs = resolve(dir, file);
if (lstatSync(abs).isDirectory()) {
- emptyDir(abs)
- rmdirSync(abs)
+ emptyDir(abs);
+ rmdirSync(abs);
} else {
- unlinkSync(abs)
+ unlinkSync(abs);
}
}
}
export function getValidPackageName(projectName: string) {
- const packageNameRegExp = /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/
+ const packageNameRegExp = /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
if (packageNameRegExp.test(projectName)) {
- return projectName
+ return projectName;
}
return projectName