UNPKG

create-rspeedy

Version:

Create Rspeedy-powered ReactLynx apps with one command

113 lines (112 loc) 3.49 kB
#!/usr/bin/env node import { createRequire } from "node:module"; import node_path from "node:path"; import { fileURLToPath } from "node:url"; import { checkCancel, copyFolder, create, select as external_create_rstack_select } from "create-rstack"; const src_dirname = node_path.dirname(fileURLToPath(import.meta.url)); const src_require = createRequire(import.meta.url); const { devDependencies: devDependencies } = src_require('../package.json'); const composeTemplateName = ({ template, lang })=>`${template}-${lang}`; const TEMPLATES = [ { template: 'react', lang: 'ts' }, { template: 'react', 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)) { if ('react' === pair[0]) return `react-${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' } ] })); return composeTemplateName({ template: 'react', lang: language }); } create({ root: node_path.resolve(src_dirname, '..'), name: 'rspeedy', templates: TEMPLATES.map(({ template, lang })=>composeTemplateName({ template, lang })), version: devDependencies, getTemplateName: getTemplateName, extraTools: [ { value: 'vitest-rltl', label: 'Vitest', order: 'pre', when: (templateName)=>'react-js' === templateName || 'react-ts' === templateName, action: ({ distFolder, addAgentsMdSearchDirs })=>{ const from = node_path.resolve(src_dirname, '..', 'template-react-vitest-rltl'); copyFolder({ from, to: distFolder, isMergePackageJson: true }); addAgentsMdSearchDirs(from); } }, { value: 'rstest-rltl', label: 'Rstest', order: 'pre', when: (templateName)=>'react-js' === templateName || 'react-ts' === templateName, action: ({ distFolder, addAgentsMdSearchDirs })=>{ const from = node_path.resolve(src_dirname, '..', 'template-react-rstest-rltl'); copyFolder({ from, to: distFolder, isMergePackageJson: true }); addAgentsMdSearchDirs(from); } } ], extraSkills: [ { label: 'Lynx DevTool', source: 'lynx-community/skills', value: 'lynx-devtool' } ], mapESLintTemplate (templateName) { const lang = templateName.split('-').at(-1); if ('js' !== lang && 'ts' !== lang) return null; switch(lang){ case 'js': return 'react-js'; case 'ts': return 'react-ts'; default: return null; } } });