import { readFile, writeFile, mkdir } from 'node:fs/promises'; import { dirname, join } from 'node:path'; const svelte = String.raw; /** * @param {string} value */ const asSlug = (value) => value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^-/, ''); /** * @param {string} filename */ const readTemplate = (filename) => readFile(join(import.meta.dirname, 'templates', filename)); /** * @param {string} component */ const getPageData = (component) => { return svelte` `; }; /** * @param {string} component */ const getExampleData = (component) => { return svelte` ${component} `; }; const create = async (component) => { const componentData = await readTemplate('Component.svelte'); const slug = asSlug(component); const files = [ { file: `src/lib/components/${component}/${component}.svelte`, data: componentData }, { file: `src/routes/components/${slug}/+page.svelte`, data: getPageData(component) }, { file: `src/routes/components/${slug}/BasicExample.svelte`, data: getExampleData(component) }, ]; for (const { file: filepath, data } of files) { console.log(`Writing ${filepath}`); const directory = dirname(filepath); await mkdir(directory, { recursive: true }); await writeFile(filepath, data); } }; const componentName = process.argv[2]; if (!componentName) { console.log(` usage: node scripts/create.js `); process.exit(1); } create(componentName) .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });