import path from 'path'; import Generator from "yeoman-generator"; import mkdirp from "mkdirp"; import {fileURLToPath} from 'url'; import {capitalize} from "../../helpers.js"; import memFs from 'mem-fs'; import editor from 'mem-fs-editor'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const baseDir = path.join(__dirname, '../../'); // export const defaultGitRepo = 'git+https://roman-axe-web@bitbucket.org/axeweb/create-block-dev-tool.git#master'; export const defaultGitRepo = '@axe-web/create-block@1.0.8'; export default class extends Generator { async prompting() { this.data = await this.prompt([ { type: "input", name: "name", message: "Block Name", validate: (str) => { const matches = str.match(/\d+/g); if (matches != null) { return false; } return !!str; } }, { type: "input", name: "group", message: "Company/Organization Name", validate: (str) => { const matches = str.match(/\d+/g); if (matches != null) { return false; } return !!str; } }, { type: "list", name: "baseView", message: "View Template", default: 'container', choices: ['container', 'alignfull'], }, { type: "number", name: "remToPx", message: "Provide declaration of 1rem:", default: 16 }, { type: 'input', name: 'devToolSource', message: 'DevTool Version/Source (master)', default: defaultGitRepo } ]); } writing() { const title = capitalize(this.data.name); const group = capitalize(this.data.group); const data = Object.assign(this.data, { title, version: '1.0.0', blockFilename: title.toLowerCase().replace(/ /ig, '-'), blockGroupName: group.toLowerCase().replace(/ /ig, '-'), blockClassName: title.toLowerCase().replace(/ /ig, '_'), }); const pathDist = path.join(baseDir, 'blocks', data.blockFilename); this.fs.copyTpl( this.templatePath('config/default.cjs'), this.destinationPath(path.join(pathDist, 'config', 'default.cjs')), data ); // SRC Template files this.fs.copyTpl( this.templatePath('src/template.template.hbs'), this.destinationPath(path.join(pathDist, 'src', data.blockFilename + '.template.hbs')), data ); this.fs.copyTpl( this.templatePath('src/styles/template.scss'), this.destinationPath(path.join(pathDist, 'src', 'styles', data.blockFilename + '.scss')), data ); this.fs.copyTpl( this.templatePath('src/scripts/template.js'), this.destinationPath(path.join(pathDist, 'src', 'scripts', data.blockFilename + '.js')), data ); this.fs.copyTpl( this.templatePath('src/images/demo.jpeg'), this.destinationPath(path.join(pathDist, 'src', 'images', 'demo.jpeg')), data ); // Design Directory mkdirp.sync(path.join(pathDist, 'design')); // Data Files this.fs.copyTpl( this.templatePath('data/default.json'), this.destinationPath(path.join(pathDist, 'data', 'default.json')), data ); this.fs.copyTpl( this.templatePath('data/advanced.json'), this.destinationPath(path.join(pathDist, 'data', 'advanced.json')), data ); // Technical Project files. createTechnicalFiles(data, baseDir, `blocks/${data.name}`).then(); } } export async function createTechnicalFiles(data, baseDir, distPath) { const pathDist = distPath; //path.join(baseDir, distPath); const generatorsPath = path.join(baseDir, 'generators/block/templates'); const store = memFs.create(); const filesystem = editor.create(store); const files = ['package.json', 'README.md', '.editorconfig', {from: 'gitignore', to: '.gitignore'}, 'block.json']; for (let file of files) { const from = typeof file !== 'string' ? `${generatorsPath}/${file.from}` : `${generatorsPath}/${file}`; const to = typeof file !== 'string' ? `${pathDist}/${file.to}` : `${pathDist}/${file}`; await filesystem.copyTplAsync(from, to, data); } return filesystem.commit(); // Promise }