addMany.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  3. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  4. _Object$defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = _default;
  8. var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
  9. var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
  10. var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"));
  11. var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
  12. var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
  13. var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
  14. var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
  15. var _path = _interopRequireDefault(require("path"));
  16. var _fs = _interopRequireDefault(require("fs"));
  17. var _globby = _interopRequireDefault(require("globby"));
  18. var _commonActionInterfaceCheck = _interopRequireDefault(require("./_common-action-interface-check"));
  19. var _commonActionAddFile = _interopRequireDefault(require("./_common-action-add-file"));
  20. var _commonActionUtils = require("./_common-action-utils");
  21. const defaultConfig = {
  22. verbose: true,
  23. stripExtensions: ['hbs']
  24. };
  25. async function _default(data, userConfig, plop) {
  26. var _context, _context2;
  27. // shallow-merge default config and input config
  28. const cfg = (0, _assign.default)({}, defaultConfig, userConfig); // check the common action interface attributes. skip path check because it's NA
  29. const interfaceTestResult = (0, _commonActionInterfaceCheck.default)(cfg, {
  30. checkPath: false
  31. });
  32. if (interfaceTestResult !== true) {
  33. throw interfaceTestResult;
  34. } // check that destination (instead of path) is a string value
  35. const dest = cfg.destination;
  36. if (typeof dest !== 'string' || dest.length === 0) {
  37. throw `Invalid destination "${dest}"`;
  38. }
  39. if (cfg.base) {
  40. cfg.base = plop.renderString(cfg.base, data);
  41. }
  42. if (typeof cfg.templateFiles === 'function') {
  43. cfg.templateFiles = cfg.templateFiles();
  44. }
  45. cfg.templateFiles = (0, _map.default)(_context = (0, _concat.default)(_context2 = []).call(_context2, cfg.templateFiles) // Ensure `cfg.templateFiles` is an array, even if a string is passed.
  46. ).call(_context, file => plop.renderString(file, data)); // render the paths as hbs templates
  47. const templateFiles = resolveTemplateFiles(cfg.templateFiles, cfg.base, cfg.globOptions, plop);
  48. const filesAdded = [];
  49. for (let templateFile of templateFiles) {
  50. const absTemplatePath = _path.default.resolve(plop.getPlopfilePath(), templateFile);
  51. const fileCfg = (0, _assign.default)({}, cfg, {
  52. path: stripExtensions(cfg.stripExtensions, resolvePath(cfg.destination, templateFile, cfg.base)),
  53. templateFile: absTemplatePath
  54. });
  55. const addedPath = await (0, _commonActionAddFile.default)(data, fileCfg, plop);
  56. filesAdded.push(addedPath);
  57. }
  58. const summary = `${filesAdded.length} files added`;
  59. if (!cfg.verbose) return summary;else return `${summary}\n -> ${filesAdded.join('\n -> ')}`;
  60. }
  61. function resolveTemplateFiles(templateFilesGlob, basePath, globOptions, plop) {
  62. var _context3, _context4;
  63. globOptions = (0, _assign.default)({
  64. cwd: plop.getPlopfilePath()
  65. }, globOptions);
  66. return (0, _filter.default)(_context3 = (0, _filter.default)(_context4 = _globby.default.sync(templateFilesGlob, (0, _assign.default)({
  67. braceExpansion: false
  68. }, globOptions))).call(_context4, isUnder(basePath))).call(_context3, isAbsoluteOrRelativeFileTo(plop.getPlopfilePath()));
  69. }
  70. function isAbsoluteOrRelativeFileTo(relativePath) {
  71. const isFile = file => _fs.default.existsSync(file) && _fs.default.lstatSync(file).isFile();
  72. return file => isFile(file) || isFile(_path.default.join(relativePath, file));
  73. }
  74. function isUnder(basePath = '') {
  75. return path => (0, _startsWith.default)(path).call(path, basePath);
  76. }
  77. function resolvePath(destination, file, rootPath) {
  78. return (0, _commonActionUtils.normalizePath)(_path.default.join(destination, dropFileRootPath(file, rootPath)));
  79. }
  80. function dropFileRootPath(file, rootPath) {
  81. return rootPath ? file.replace(rootPath, '') : dropFileRootFolder(file);
  82. }
  83. function dropFileRootFolder(file) {
  84. const fileParts = _path.default.normalize(file).split(_path.default.sep);
  85. fileParts.shift();
  86. return fileParts.join(_path.default.sep);
  87. }
  88. function stripExtensions(shouldStrip, fileName) {
  89. var _context5;
  90. const maybeFile = _path.default.parse(fileName);
  91. if ((0, _isArray.default)(shouldStrip) && !(0, _includes.default)(_context5 = (0, _map.default)(shouldStrip).call(shouldStrip, item => `.${item}`)).call(_context5, maybeFile.ext)) return fileName;
  92. return _path.default.parse(maybeFile.name).ext !== '' ? _path.default.join(maybeFile.dir, maybeFile.name) : fileName;
  93. }