1 | var program = require('commander');
|
2 | var appRoot = require('app-root-path');
|
3 | var fs = require('fs');
|
4 |
|
5 | var componentTemplate = require('./templates/component');
|
6 | var specComponentTemplate = require('./templates/spec-component');
|
7 | var classComponentTemplate = require('./templates/class-component');
|
8 | var containerTemplate = require('./templates/container');
|
9 | var storeTemplate = require('./templates/store');
|
10 | var specStoreTemplate = require('./templates/spec-store');
|
11 | var componentMobxTemplate = require('./templates/component-mobx');
|
12 | var specComponentMobxTemplate = require('./templates/spec-component-mobx');
|
13 | var classComponentMobxTemplate = require('./templates/class-component-mobx');
|
14 | var containerMobxTemplate = require('./templates/container-mobx');
|
15 |
|
16 | var utils = require('./utils');
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | program
|
22 | .option('-g, --generate <type>, generate a new application element')
|
23 | .option('-n, --name <name>, name for new file')
|
24 | .option('-m, --mock <mock>, random shit')
|
25 | .parse(process.argv)
|
26 |
|
27 | const LOWER = utils.snakeToCamelCase(program.name.toLowerCase());
|
28 | const CAPITAL = utils.toCapitalCase(LOWER);
|
29 |
|
30 | switch (program.generate) {
|
31 | case 'component':
|
32 | createAsset('components', CAPITAL, componentTemplate, specComponentTemplate);
|
33 | break;
|
34 | case 'component:mobx':
|
35 | createAsset('components', CAPITAL, componentMobxTemplate, specComponentMobxTemplate);
|
36 | break;
|
37 | case 'class-component':
|
38 | createAsset('components', CAPITAL, classComponentTemplate, specComponentTemplate);
|
39 | break;
|
40 | case 'class-component:mobx':
|
41 | createAsset('components', CAPITAL, classComponentMobxTemplate, specComponentMobxTemplate);
|
42 | break;
|
43 | case 'container':
|
44 | createAsset('containers', CAPITAL, containerTemplate, specComponentTemplate);
|
45 | break;
|
46 | case 'container:mobx':
|
47 | createAsset('containers', CAPITAL, containerMobxTemplate, specComponentMobxTemplate);
|
48 | break;
|
49 | case 'store':
|
50 | createAsset('stores', LOWER + 'Store', storeTemplate, specStoreTemplate);
|
51 | break;
|
52 | case 'test':
|
53 | var typeOptions = {
|
54 | container: 'containers',
|
55 | store: 'stores',
|
56 | component: 'components'
|
57 | };
|
58 | console.log('program', program);
|
59 | console.log('type', program.mock);
|
60 | var invalidType = !program.mock && !Object.hasOwnProperty(program.mock.toLowerCase());
|
61 |
|
62 | if(invalidType){
|
63 | console.error('Please enter a valid type. Store, Container, or Component');
|
64 | return null;
|
65 | }
|
66 |
|
67 | createTest(typeOptions[program.mock.toLowerCase()], CAPITAL);
|
68 | break;
|
69 | default:
|
70 | console.error(program.generate + ' is not a valid element that can be created');
|
71 | break;
|
72 | }
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | function createAsset(type, fileName, fileTemplate, specTemplate){
|
81 | const assetPath = appRoot + '/src/' + type + '/' + fileName + '/';
|
82 |
|
83 |
|
84 | try {
|
85 | if(!fs.existsSync(appRoot + '/src/')) {
|
86 | fs.mkdirSync(appRoot + '/src/');
|
87 | };
|
88 |
|
89 | if(!fs.existsSync(appRoot + '/src/' + type + '/')){
|
90 | fs.mkdirSync(appRoot + '/src/' + type + '/');
|
91 | }
|
92 |
|
93 | if(fs.existsSync(assetPath)){
|
94 | throw `${type.toUpperCase()} PATH COLLISION`;
|
95 | } else {
|
96 | fs.mkdirSync(assetPath);
|
97 | console.info(fileName + ' was successfully created!');
|
98 | }
|
99 | } catch(err){
|
100 | console.error(err);
|
101 | console.error(`That ${type} already exists. Delete existing file or choose another name.`);
|
102 | return null;
|
103 | }
|
104 |
|
105 | fs.writeFile(assetPath + fileName + '.js', fileTemplate(LOWER, CAPITAL), function(err){
|
106 | if(err){
|
107 | console.error(err);
|
108 | }
|
109 |
|
110 | console.info(`${fileName}.js was successfully created!`)
|
111 | });
|
112 |
|
113 | fs.writeFile(assetPath + 'spec.js', specTemplate(LOWER, CAPITAL), function(err){
|
114 | if(err){
|
115 | console.error(err);
|
116 | }
|
117 |
|
118 | console.info(`${CAPITAL} test file was successfully created!`);
|
119 | });
|
120 |
|
121 |
|
122 | }
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 | function createTest(type, directoryName){
|
130 | const assetPath = appRoot + '/src/' + type + '/' + directoryName + '/' + 'spec.js';
|
131 | let template = specComponentTemplate;
|
132 |
|
133 | if(type === 'stores'){
|
134 | template = specStoreTemplate;
|
135 | }
|
136 |
|
137 | try {
|
138 | if(fs.existsSync(assetPath)){
|
139 | throw `${type.toUpperCase()} PATH COLLISION`;
|
140 | }
|
141 | } catch(err){
|
142 | console.error(err);
|
143 | return null;
|
144 | }
|
145 |
|
146 | fs.writeFile(assetPath, template(LOWER, CAPITAL), function(err){
|
147 | if(err){
|
148 | console.error(err);
|
149 | }
|
150 |
|
151 | console.info(`${CAPITAL} test file was successfully created!`);
|
152 | });
|
153 | } |
\ | No newline at end of file |