UNPKG

@captive/plop-config

Version:
44 lines (43 loc) 2.06 kB
import Path from 'node:path'; import { vueComponentGenerator } from './generator/vue-component/index.js'; import { piniaModuleGenerator } from './generator/pinia-module/index.js'; import { techDiveInGenerator } from './generator/tech-dive-in/index.js'; import { reactComponentGenerator } from './generator/react-component/index.js'; import { readPackageJSON } from './readPackageJSON.js'; export function plopPlugin(options) { return async (plop) => { const { vue: vueDefault, react: reactDefault, path = {}, styleSheet = 'css', test: testDefault } = options; const { component = 'src/components', docs = 'docs', store = 'src/store' } = path; const packagePath = path.package ?? Path.join(plop.getPlopfilePath(), 'package.json'); const packageData = await readPackageJSON(packagePath); const vue = vueDefault ?? Boolean(packageData?.dependencies?.['vue']); const react = reactDefault ?? Boolean(packageData?.dependencies?.['react']); const test = testDefault ?? (Boolean(packageData?.devDependencies?.['vitest']) ? 'vitest' : 'jest'); plop.setWelcomeMessage(`[Captive] What do you want to generate?`); [ techDiveInGenerator({ techDiveInPath: `${docs}/tech-dive-in`, }), ].forEach((generator) => plop.setGenerator(generator.name, generator.generator)); if (vue) { [ vueComponentGenerator({ styleSheet, componentPath: component, }), piniaModuleGenerator({ storePath: store, }), ].forEach((generator) => plop.setGenerator(generator.name, generator.generator)); } if (react) { [ reactComponentGenerator({ styleSheet, componentPath: component, test, }), ].forEach((generator) => plop.setGenerator(generator.name, generator.generator)); } }; }