create-component-template
Version:
Generates react components from templates
135 lines (103 loc) • 4.34 kB
JavaScript
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
This is a React component generator script. It will generate the basic layout of a component for you.
For ease of use this should run via the package.json scripts section.
This will output the resulting folder structure:
a) ComponentName
b) ├── ComponentName.js
c) ├── __fixtures__
d) │ └── ComponentName.fixture.js
e) ├── __tests__
f) │ └── ComponentName.test.js
g) ├── __themes__
h) │ └── ComponentName.scss
i) └── index.js
a: Component Folder
b: '' Class
c: '' Fixtures Folder -> For React cosmos
d: '' Fixture code for cosmos to render component
e: '' Tests Folder -> For Jest
f: '' Test Code
g: '' Themes Folder -> Should contain scss files
h: '' The default scss style sheet
i: '' Index file for importing / exporting the component
j: '' Components package.json
*/
var fs = require('fs');
var util = require('util');
var mkdirp = require('mkdirp-promise');
var _require = require('./lib/utils/logger'),
logInfo = _require.logInfo,
logSuccess = _require.logSuccess,
logError = _require.logError;
var cliArgs = require('./lib/args/parser');
var promptUser = require('./lib/user-prompt/prompt');
var mapConfigWithTemplates = require('./lib/config/map-paths');
var writeFile = util.promisify(fs.writeFile);
(function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var componentName, componentPath, configPath, userResponse, _ref2, folderPaths, templatePaths;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
componentName = void 0;
componentPath = void 0;
_context.prev = 2;
configPath = cliArgs.configPath;
_context.next = 6;
return promptUser(cliArgs);
case 6:
userResponse = _context.sent;
componentName = userResponse.componentName;
componentPath = userResponse.componentPath;
_context.next = 11;
return mapConfigWithTemplates(configPath, componentName, componentPath);
case 11:
_ref2 = _context.sent;
folderPaths = _ref2.folderPaths;
templatePaths = _ref2.templatePaths;
logInfo('Generating Component: ' + componentName);
// Make all directories
_context.next = 17;
return _promise2.default.all(folderPaths.map(function (folderName) {
return mkdirp(folderName);
}));
case 17:
_context.next = 19;
return _promise2.default.all(templatePaths.map(function (_ref3) {
var templatePath = _ref3.templatePath,
filePath = _ref3.filePath;
return writeFile(filePath, require(templatePath)(componentName));
}));
case 19:
_context.next = 26;
break;
case 21:
_context.prev = 21;
_context.t0 = _context['catch'](2);
logError(_context.t0);
logError('Component ' + componentName + ' could not be built! Please check the above error log.\n');
process.exit(1);
case 26:
logSuccess('Component ' + componentName + ' was created succesfully! \nIt can be found at: \'' + componentPath + '/' + componentName + '\'.');
case 27:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[2, 21]]);
}));
function createComponent() {
return _ref.apply(this, arguments);
}
return createComponent;
})()();
;