UNPKG

create-rspeedy-canary

Version:

Create Rspeedy-powered ReactLynx apps with one command

86 lines (85 loc) 2.54 kB
#!/usr/bin/env node import { createRequire } from "node:module"; import external_node_path_default from "node:path"; import { fileURLToPath } from "node:url"; import { checkCancel, create, multiselect, select as external_create_rstack_select } from "create-rstack"; const src_dirname = external_node_path_default.dirname(fileURLToPath(import.meta.url)); const src_require = createRequire(import.meta.url); const { devDependencies } = src_require('../package.json'); const composeTemplateName = ({ template, tools, lang })=>{ const toolsKeys = (tools ? Object.keys(tools) : []).sort(); const toolsStr = toolsKeys.length > 0 ? `-${toolsKeys.join('-')}` : ''; return `${template}${toolsStr}-${lang}`; }; const TEMPLATES = [ { template: 'react', tools: {}, lang: 'ts' }, { template: 'react', tools: {}, lang: 'js' } ]; async function getTemplateName({ template }) { if ('string' == typeof template) { const pair = template.split('-'); const lang = pair[pair.length - 1]; if (lang && [ 'js', 'ts' ].includes(lang)) return template; return `${template}-ts`; } const language = checkCancel(await external_create_rstack_select({ message: 'Select language', options: [ { value: 'ts', label: 'TypeScript', hint: 'recommended' }, { value: 'js', label: 'JavaScript' } ] })); const tools = checkCancel(await multiselect({ message: 'Select development tools (Use <space> to select, <enter> to continue)', required: false, options: [ { value: 'vitest-rltl', label: 'Add ReactLynx Testing Library for unit testing' } ], initialValues: [ 'vitest-rltl' ] })); return composeTemplateName({ template: 'react', lang: language, tools: Object.fromEntries(tools.map((tool)=>[ tool, tool ])) }); } create({ root: external_node_path_default.resolve(src_dirname, '..'), name: 'rspeedy', templates: TEMPLATES.map(({ template, tools, lang })=>composeTemplateName({ template, lang, tools })), version: devDependencies, getTemplateName, mapESLintTemplate () { return null; } });