-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplopfile.js
More file actions
96 lines (82 loc) · 2.99 KB
/
plopfile.js
File metadata and controls
96 lines (82 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const promptDirectory = require('inquirer-directory');
const path = require('path');
const finder = require('find-package-json');
const pluralize = require('pluralize');
const packageJson = finder(process.cwd()).next().value;
module.exports = function (plop) {
const customPath = (packageJson.reactStateRxJsCli && packageJson.reactStateRxJsCli.basePath) || '';
const folderName = (packageJson.reactStateRxJsCli && packageJson.reactStateRxJsCli.actionsFolderName) || 'actions';
const userConfig = path.resolve(process.cwd(), customPath);
const basePath = userConfig || process.cwd();
plop.setPrompt('directory', promptDirectory);
const chooseDirAction = {
type: 'directory',
name: 'directory',
message: 'Choose a directory',
basePath: basePath
};
const statePathAction = {
type: 'input',
name: 'statePath',
message: 'Enter state path',
default: ''
};
const addOrEdit = {
type: 'list',
name: 'extends',
message: 'What component should extend?',
default: 'add',
choices: [
{ name: 'ReactComponentWithStateActions', value: 'reactStateComponent' },
{ name: 'React.Component', value: 'plainComponent' },
],
};
plop.setGenerator('react-staterx-js add', {
description: 'Create new stack',
prompts: [
{
type: 'input',
name: 'name',
message: 'What is the name of component?'
}
].concat(chooseDirAction, statePathAction, addOrEdit),
actions: function (data) {
return getAddActions(data);
}
});
function getAddActions(data) {
const actions = {
type: 'add',
skipIfExists: true,
path: buildPath('{{ \'dashCase\' name}}.actions.ts', data.directory, folderName),
templateFile: `./templates/actions.tpl`
};
const specFile = {
type: 'add',
skipIfExists: true,
path: buildPath('{{ \'dashCase\' name}}.spec.ts', data.directory),
templateFile: `./templates/spec.tpl`,
data: {
folderName: folderName
}
};
const component = {
type: 'add',
skipIfExists: true,
path: buildPath('{{ \'dashCase\' name}}.tsx', data.directory),
templateFile: data.extends === 'reactStateComponent' ? './templates/component.tpl' : './templates/component-plain.tpl',
data: {
folderName: folderName
}
};
return [actions, component, specFile];
}
plop.setHelper('singular', function (value) {
return pluralize.singular(value);
});
function buildPath(name, chosenDir, folderName) {
const basePath = customPath ? userConfig : process.cwd();
folderName = folderName ? `${folderName}/` : '';
return `${basePath}/${chosenDir}/${folderName}/${name}`;
}
}