diff options
Diffstat (limited to 'packages/create-astro/src/utils.ts')
-rw-r--r-- | packages/create-astro/src/utils.ts | 93 |
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 |