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