react-plopjs
Version:
Generate boilerplate react components
196 lines (168 loc) • 8.44 kB
JavaScript
;
var _chalk = require("chalk");
var _formatter = require("./formatter");
var _helper = require("./helper");
var _prompts = require("./prompts");
require("@babel/polyfill");
var _fs = require("fs");
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
var path = require('path');
var camelcase = require('camelcase');
module.exports = function (plop) {
// helpers
plop.setHelper('lower', function (txt) {
return txt.toLowerCase();
});
plop.setHelper('camelcase', function (name) {
return camelcase(name, {
pascalCase: true,
preserveConsecutiveUppercase: true
});
});
plop.setGenerator('component', {
description: 'default generator',
prompts: _prompts.prompts,
// Actions
actions: function actions(_ref) {
var type = _ref.type,
isTs = _ref.isTs,
isFunction = _ref.isFunction,
options = _ref.options,
name = _ref.name,
containerOptions = _ref.containerOptions;
var dir = (0, _helper.dirType)(type === _prompts.COMPONENT);
var ext = (0, _helper.getExt)(isTs);
var outTarget = "".concat(path.join(process.cwd(), 'src'), "/").concat(dir);
var actions = [];
if (type === _prompts.CONTAINER) {
/************ CONTAINERS *************/
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}.").concat(ext),
templateFile: (0, _helper.getContainerTemplate)(isTs, isFunction),
data: {
state: containerOptions.includes('state'),
redux: containerOptions.includes('redux')
}
});
} else {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/index.").concat(ext),
templateFile: (0, _helper.getTemplate)(isFunction, isTs),
data: {
test: isTs && options.includes('test'),
css: options.includes('css') && !options.includes('scss') && !_helper.isReactNative
}
});
if (options.includes('append')) {
actions.push({
// type: 'append',
type: (0, _fs.existsSync)("".concat(outTarget, "/index.").concat(isTs ? 'ts' : 'js')) ? 'append' : 'add',
path: "".concat(outTarget, "/index.").concat(isTs ? 'ts' : 'js'),
template: "export { default as {{camelcase name}} } from './{{camelcase name}}'",
abortOnFail: false,
unique: true,
skip: function skip() {
return type === _prompts.CONTAINER;
}
});
}
if (options.includes('test')) {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/{{camelcase name}}.spec.").concat((0, _helper.getExt)(isTs)),
templateFile: (0, _helper.getTestTemplate)(isTs),
skip: function skip() {
return type === _prompts.CONTAINER;
}
});
}
if (!_helper.isReactNative) {
var value = options.includes('css') ? 'css' : 'scss';
if (value === 'css') {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/").concat(name.toLowerCase(), ".module.css"),
templateFile: "".concat(__dirname, "/templates/web/style.module.hbs"),
skip: function skip() {
return type === _prompts.CONTAINER && _helper.isReactNative;
}
});
} else {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/").concat(name.toLowerCase(), ".module.scss"),
templateFile: "".concat(__dirname, "/templates/web/style.module.hbs"),
skip: function skip() {
return type === _prompts.CONTAINER && _helper.isReactNative;
}
});
}
}
if (options.includes('readme')) {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/Readme.md"),
templateFile: "".concat(__dirname, "/templates/readme.md.hbs"),
skip: function skip() {
return type === _prompts.CONTAINER;
}
});
}
if (options.includes('story')) {
actions.push({
type: 'add',
path: "".concat(outTarget, "/{{camelcase name}}/{{camelcase name}}.stories.").concat((0, _helper.getExt)(isTs)),
templateFile: "".concat(__dirname, "/templates/stories.").concat((0, _helper.getExt)(isTs), ".hbs"),
skip: function skip() {
return type === _prompts.CONTAINER;
},
data: {
ext: (0, _helper.getExt)(isTs)
}
});
}
}
actions.push(function () {
var files = (0, _formatter.findFiles)(outTarget);
var _iterator = _createForOfIteratorHelper(files),
_step;
try {
var _loop = function _loop() {
var file = _step.value;
actions.push( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _formatter.prettierFormatter)(file);
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
})));
};
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_loop();
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
(0, _chalk.yellow)(">>>>>>>>>>>>>>>>>>> ".concat(files.length, " Found to format <<<<<<<<<<<<<<<<<<<"));
});
return actions;
}
});
};