UNPKG

9.21 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
5var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
6
7_Object$defineProperty(exports, "__esModule", {
8 value: true
9});
10
11exports.default = void 0;
12
13var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
14
15var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
16
17var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
18
19var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
20
21var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
22
23var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
24
25var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
26
27var _fs = _interopRequireDefault(require("fs"));
28
29var _path = _interopRequireDefault(require("path"));
30
31var _inquirer = _interopRequireDefault(require("inquirer"));
32
33var _handlebars = _interopRequireDefault(require("handlebars"));
34
35var _lodash = _interopRequireDefault(require("lodash.get"));
36
37var _resolve = _interopRequireDefault(require("resolve"));
38
39var _bakedInHelpers = _interopRequireDefault(require("./baked-in-helpers"));
40
41var _generatorRunner = _interopRequireDefault(require("./generator-runner"));
42
43function nodePlop(plopfilePath = '', plopCfg = {}) {
44 let pkgJson = {};
45 let defaultInclude = {
46 generators: true
47 };
48 let welcomeMessage;
49 const {
50 destBasePath,
51 force
52 } = plopCfg;
53 const generators = {};
54 const partials = {};
55 const actionTypes = {};
56 const helpers = (0, _assign.default)({
57 pkg: propertyPath => (0, _lodash.default)(pkgJson, propertyPath, '')
58 }, _bakedInHelpers.default);
59 const baseHelpers = (0, _keys.default)(helpers);
60 const setPrompt = _inquirer.default.registerPrompt;
61
62 const setWelcomeMessage = message => {
63 welcomeMessage = message;
64 };
65
66 const setHelper = (name, fn) => {
67 helpers[name] = fn;
68 };
69
70 const setPartial = (name, str) => {
71 partials[name] = str;
72 };
73
74 const setActionType = (name, fn) => {
75 actionTypes[name] = fn;
76 };
77
78 function renderString(template, data) {
79 var _context, _context2;
80
81 (0, _forEach.default)(_context = (0, _keys.default)(helpers)).call(_context, h => _handlebars.default.registerHelper(h, helpers[h]));
82 (0, _forEach.default)(_context2 = (0, _keys.default)(partials)).call(_context2, p => _handlebars.default.registerPartial(p, partials[p]));
83 return _handlebars.default.compile(template)(data);
84 }
85
86 const getWelcomeMessage = () => welcomeMessage;
87
88 const getHelper = name => helpers[name];
89
90 const getPartial = name => partials[name];
91
92 const getActionType = name => actionTypes[name];
93
94 const getGenerator = name => generators[name];
95
96 function setGenerator(name = '', config = {}) {
97 // if no name is provided, use a default
98 name = name || `generator-${(0, _keys.default)(generators).length + 1}`; // add the generator to this context
99
100 generators[name] = (0, _assign.default)(config, {
101 name: name,
102 basePath: plopfilePath
103 });
104 return generators[name];
105 }
106
107 const getHelperList = () => {
108 var _context3;
109
110 return (0, _filter.default)(_context3 = (0, _keys.default)(helpers)).call(_context3, h => !(0, _includes.default)(baseHelpers).call(baseHelpers, h));
111 };
112
113 const getPartialList = () => (0, _keys.default)(partials);
114
115 const getActionTypeList = () => (0, _keys.default)(actionTypes);
116
117 function getGeneratorList() {
118 var _context4;
119
120 return (0, _map.default)(_context4 = (0, _keys.default)(generators)).call(_context4, function (name) {
121 const {
122 description
123 } = generators[name];
124 return {
125 name,
126 description
127 };
128 });
129 }
130
131 const setDefaultInclude = inc => defaultInclude = inc;
132
133 const getDefaultInclude = () => defaultInclude;
134
135 const getDestBasePath = () => destBasePath || plopfilePath;
136
137 const getPlopfilePath = () => plopfilePath;
138
139 const setPlopfilePath = filePath => {
140 const pathStats = _fs.default.statSync(filePath);
141
142 if (pathStats.isFile()) {
143 plopfilePath = _path.default.dirname(filePath);
144 } else {
145 plopfilePath = filePath;
146 }
147 };
148
149 function load(targets, loadCfg = {}, includeOverride) {
150 if (typeof targets === 'string') {
151 targets = [targets];
152 }
153
154 const config = (0, _assign.default)({
155 destBasePath: getDestBasePath()
156 }, loadCfg);
157 (0, _forEach.default)(targets).call(targets, function (target) {
158 var _context5;
159
160 const targetPath = _resolve.default.sync(target, {
161 basedir: getPlopfilePath()
162 });
163
164 const proxy = nodePlop(targetPath, config);
165 const proxyDefaultInclude = proxy.getDefaultInclude() || {};
166 const includeCfg = includeOverride || proxyDefaultInclude;
167 const include = (0, _assign.default)({
168 generators: false,
169 helpers: false,
170 partials: false,
171 actionTypes: false
172 }, includeCfg);
173 const genNameList = (0, _map.default)(_context5 = proxy.getGeneratorList()).call(_context5, g => g.name);
174 loadAsset(genNameList, include.generators, setGenerator, proxyName => ({
175 proxyName,
176 proxy
177 }));
178 loadAsset(proxy.getPartialList(), include.partials, setPartial, proxy.getPartial);
179 loadAsset(proxy.getHelperList(), include.helpers, setHelper, proxy.getHelper);
180 loadAsset(proxy.getActionTypeList(), include.actionTypes, setActionType, proxy.getActionType);
181 });
182 }
183
184 function loadAsset(nameList, include, addFunc, getFunc) {
185 var incArr;
186
187 if (include === true) {
188 incArr = nameList;
189 }
190
191 if (include instanceof Array) {
192 incArr = (0, _filter.default)(include).call(include, n => typeof n === 'string');
193 }
194
195 if (incArr != null) {
196 include = (0, _reduce.default)(incArr).call(incArr, function (inc, name) {
197 inc[name] = name;
198 return inc;
199 }, {});
200 }
201
202 if (include instanceof Object) {
203 var _context6;
204
205 (0, _forEach.default)(_context6 = (0, _keys.default)(include)).call(_context6, i => addFunc(include[i], getFunc(i)));
206 }
207 }
208
209 function loadPackageJson() {
210 // look for a package.json file to use for the "pkg" helper
211 try {
212 pkgJson = require(_path.default.join(getDestBasePath(), 'package.json'));
213 } catch (error) {
214 pkgJson = {};
215 }
216 } /////////
217 // the API that is exposed to the plopfile when it is executed
218 // it differs from the nodePlopApi in that it does not include the
219 // generator runner methods
220 //
221
222
223 const plopfileApi = {
224 // main methods for setting and getting plop context things
225 setPrompt,
226 setWelcomeMessage,
227 getWelcomeMessage,
228 setGenerator,
229 getGenerator,
230 getGeneratorList,
231 setPartial,
232 getPartial,
233 getPartialList,
234 setHelper,
235 getHelper,
236 getHelperList,
237 setActionType,
238 getActionType,
239 getActionTypeList,
240 // path context methods
241 setPlopfilePath,
242 getPlopfilePath,
243 getDestBasePath,
244 // plop.load functionality
245 load,
246 setDefaultInclude,
247 getDefaultInclude,
248 // render a handlebars template
249 renderString,
250 // passthrough properties
251 inquirer: _inquirer.default,
252 handlebars: _handlebars.default,
253 // passthroughs for backward compatibility
254 addPrompt: setPrompt,
255 addPartial: setPartial,
256 addHelper: setHelper
257 }; // the runner for this instance of the nodePlop api
258
259 const runner = (0, _generatorRunner.default)(plopfileApi, {
260 force
261 });
262 const nodePlopApi = (0, _assign.default)({}, plopfileApi, {
263 getGenerator(name) {
264 var generator = plopfileApi.getGenerator(name);
265
266 if (generator == null) {
267 throw Error(`Generator "${name}" does not exist.`);
268 } // if this generator was loaded from an external plopfile, proxy the
269 // generator request through to the external plop instance
270
271
272 if (generator.proxy) {
273 return generator.proxy.getGenerator(generator.proxyName);
274 }
275
276 return (0, _assign.default)({}, generator, {
277 runActions: (data, hooks) => runner.runGeneratorActions(generator, data, hooks),
278 runPrompts: (bypassArr = []) => runner.runGeneratorPrompts(generator, bypassArr)
279 });
280 },
281
282 setGenerator(name, config) {
283 const g = plopfileApi.setGenerator(name, config);
284 return this.getGenerator(g.name);
285 }
286
287 });
288
289 if (plopfilePath) {
290 plopfilePath = _path.default.resolve(plopfilePath);
291
292 const plopFileName = _path.default.basename(plopfilePath);
293
294 setPlopfilePath(plopfilePath);
295 loadPackageJson();
296
297 const plopFileExport = require(_path.default.join(plopfilePath, plopFileName));
298
299 const plop = typeof plopFileExport === 'function' ? plopFileExport : plopFileExport.default;
300 plop(plopfileApi, plopCfg);
301 } else {
302 setPlopfilePath(process.cwd());
303 loadPackageJson();
304 }
305
306 return nodePlopApi;
307}
308
309var _default = nodePlop;
310exports.default = _default;
\No newline at end of file