UNPKG

awesome-cli

Version:

CLI for Awesome framework for CM Language

102 lines (87 loc) 5.04 kB
module.exports = new (function () { const path = require('path'), fs = require('fs'), snapperTemplate = path.join(__dirname, 'Snapper.txt'), productTemplate = path.join(__dirname, './Product.txt'), geometryTemplate = path.join(__dirname, './Geometry.txt'), configuratorTemplate = path.join(__dirname, './Configurator.txt'), packageTemplate = path.join(__dirname, './Package.txt'); this.scaffold = (name, package, location, callback) => { location = location || path.dirname(require.main.filename); package = package || extractPackage(location); createOrReplaceDirectory(location, err => { fs.readFile(snapperTemplate, 'utf-8', (err, snapperContent) => { if (err) return callback(err); fs.readFile(productTemplate, 'utf-8', (err, productContent) => { if (err) return callback(err); fs.readFile(geometryTemplate, 'utf-8', (err, geometryContent) => { if (err) return callback(err); fs.readFile(configuratorTemplate, 'utf-8', (err, configuratorContent) => { if (err) return callback(err); fs.readFile(packageTemplate, 'utf-8', (err, packageContent) => { if (err) return callback(err); snapperContent = snapperContent.replace(/##name##/g, name).replace(/##package##/g, package); productContent = productContent.replace(/##name##/g, name).replace(/##package##/g, package); geometryContent = geometryContent.replace(/##name##/g, name).replace(/##package##/g, package); configuratorContent = configuratorContent.replace(/##name##/g, name).replace(/##package##/g, package); packageContent = packageContent.replace(/##name##/g, name).replace(/##package##/g, package); let snapperFile = `${name}Snapper.cm`, productFile = `${name}Product.cm`, geometryFile = `${name}Geometry.cm`, configuratorFile = `${name}Configurator.cm`, packageFile = `package.cm`; saveFile(path.join(location, snapperFile), snapperContent, (err) => { if (err) return callback(err); saveFile(path.join(location, productFile), productContent, (err) => { if (err) return callback(err); saveFile(path.join(location, geometryFile), geometryContent, (err) => { if (err) return callback(err); saveFile(path.join(location, configuratorFile), configuratorContent, (err) => { if (err) return callback(err); saveFile(path.join(location, packageFile), packageContent, (err) => { if (err) return callback(err); callback(null); }); }); }); }); }); }); }); }); }); }); }); } function extractPackage(location) { const fullLoc = path.resolve(location); if(fullLoc.indexOf('custom') === -1) return 'custom'; let folders = fullLoc.split('custom'); var package = 'custom' + folders[1].replace(/\//g, '.').replace(/\\/g, '.'), segments = package.split('.'); package = package.replace(segments[segments.length - 1], firstToLowerCase(segments[segments.length - 1])); return package; } function firstToLowerCase(s) { return s[0].toLowerCase() + s.substring(1, s.length); } function createOrReplaceDirectory(dirName, callback) { fs.exists(dirName, (err, exists) => { if (err) return callback(err); if (exists) { callback(null); } else { fs.mkdir(dirName, (err) => { if (err) return callback(err); callback(null); }); } }); } function saveFile(file, content, callback) { fs.writeFile(file, content, 'utf-8', (err) => { if (err) return callback(err); callback(null); }); } })()