@zohodesk/react-cli 0.0.1-beta.99 → 0.0.1-betaa.138.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. package/.eslintignore +7 -7
  2. package/.eslintrc.js +183 -183
  3. package/CHANGELOG.md +5 -0
  4. package/README.md +636 -491
  5. package/bin/cli.js +372 -367
  6. package/files/eslintrc.js +57 -0
  7. package/files/prettierrc.js +3 -0
  8. package/lib/babel/cmjs-plugins-presets.js +16 -9
  9. package/lib/babel/es-plugins-presets.js +26 -14
  10. package/lib/common/getEntries.js +31 -22
  11. package/lib/common/getPublicPathConfig.js +27 -13
  12. package/lib/common/index.js +21 -25
  13. package/lib/common/splitChunks.js +62 -53
  14. package/lib/common/templateParameters.js +10 -8
  15. package/lib/configs/jest.config.js +15 -25
  16. package/lib/configs/webpack.component.umd.config.js +31 -37
  17. package/lib/configs/webpack.css.umd.config.js +44 -47
  18. package/lib/configs/webpack.dev.config.js +70 -52
  19. package/lib/configs/webpack.docs.config.js +106 -106
  20. package/lib/configs/webpack.prod.config.js +95 -75
  21. package/lib/hooks/docsProptypeHook.js +32 -38
  22. package/lib/jest/commitedFilesResult.js +103 -74
  23. package/lib/jest/coverageCollector.js +41 -21
  24. package/lib/jest/jsonMaker.js +15 -16
  25. package/lib/jest/preProcessors/cssPreprocessor.js +16 -18
  26. package/lib/jest/preProcessors/jsPreprocessor.js +3 -5
  27. package/lib/jest/preProcessors/otherFilesPreprocessor.js +5 -6
  28. package/lib/jest/result.js +90 -45
  29. package/lib/jest/run.js +43 -43
  30. package/lib/jest/setup.js +102 -95
  31. package/lib/loaderUtils/getCSSLoaders.js +21 -22
  32. package/lib/loaderUtils/getDevJsLoaders.js +25 -23
  33. package/lib/loaderUtils/index.js +11 -13
  34. package/lib/loaders/docsLoader.js +15 -15
  35. package/lib/loaders/docsPropsLoader.js +14 -17
  36. package/lib/loaders/fileLoader.js +33 -35
  37. package/lib/loaders/scriptInstrumentLoader.js +21 -20
  38. package/lib/loaders/workerLoader.js +136 -0
  39. package/lib/middlewares/HMRMiddleware.js +54 -45
  40. package/lib/middlewares/SSTMiddleware.js +8 -5
  41. package/lib/pluginUtils/getDevPlugins.js +114 -52
  42. package/lib/pluginUtils/getDocsPlugins.js +25 -29
  43. package/lib/pluginUtils/getLibraryPlugins.js +8 -10
  44. package/lib/pluginUtils/getProdPlugins.js +163 -74
  45. package/lib/pluginUtils/getServerPlugins.js +8 -11
  46. package/lib/pluginUtils/getUMDCSSPlugins.js +11 -15
  47. package/lib/pluginUtils/getUMDComponentPlugins.js +11 -15
  48. package/lib/pluginUtils/index.js +36 -43
  49. package/lib/plugins/CdnChangePlugin.js +63 -0
  50. package/lib/plugins/CleanupStatsPlugin.js +18 -32
  51. package/lib/plugins/CustomAttributePlugin.js +79 -0
  52. package/lib/plugins/CustomAttributePlugin.md +35 -0
  53. package/lib/plugins/EFCPlugin.js +185 -0
  54. package/lib/plugins/I18NInjectIntoIndexPlugin.js +118 -52
  55. package/lib/plugins/I18nSplitPlugin/I18nDebugPlugin.js +60 -0
  56. package/lib/plugins/I18nSplitPlugin/I18nDependency.js +44 -0
  57. package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +266 -0
  58. package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +183 -0
  59. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +100 -0
  60. package/lib/plugins/I18nSplitPlugin/I18nSplit.md +86 -0
  61. package/lib/plugins/I18nSplitPlugin/README.md +25 -0
  62. package/lib/plugins/I18nSplitPlugin/index.js +185 -0
  63. package/lib/plugins/I18nSplitPlugin/utils/collectI18nKeys.js +64 -0
  64. package/lib/plugins/I18nSplitPlugin/utils/getI18nFileUrlPathTemplate.js +13 -0
  65. package/lib/plugins/I18nSplitPlugin/utils/getI18nKeysFormModules.js +26 -0
  66. package/lib/plugins/I18nSplitPlugin/utils/hashUtils.js +40 -0
  67. package/lib/plugins/I18nSplitPlugin/utils/index.js +31 -0
  68. package/lib/plugins/I18nSplitPlugin/utils/propertiesUtils.js +112 -0
  69. package/lib/plugins/ManifestPlugin.js +52 -63
  70. package/lib/plugins/ModuleStatsPlugin.js +83 -173
  71. package/lib/plugins/OptimizeJSPlugin.js +24 -41
  72. package/lib/plugins/PublicPathCallbackPlugin.js +42 -116
  73. package/lib/plugins/PublicPathChangePlugin.js +175 -284
  74. package/lib/plugins/ReportGeneratePlugin.js +150 -151
  75. package/lib/plugins/ResourceHintsPlugin.js +53 -35
  76. package/lib/plugins/ScriptInstrumentPlugin.js +22 -37
  77. package/lib/plugins/ServiceWorkerPlugin.js +81 -57
  78. package/lib/plugins/ShadowDOMSupportPlugin.js +153 -234
  79. package/lib/plugins/SourceMapHookPlugin.js +21 -33
  80. package/lib/plugins/TPHashMappingPlugin.js +67 -0
  81. package/lib/plugins/UglifyCSSPlugin.js +23 -30
  82. package/lib/plugins/UnusedFilesFindPlugin.js +137 -152
  83. package/lib/plugins/index.js +100 -91
  84. package/lib/plugins/webpackwatchrunplugin.js +18 -30
  85. package/lib/postcss-plugins/ExcludeRTLPlugin.js +14 -17
  86. package/lib/schemas/index.js +336 -81
  87. package/lib/servers/clusterHubServer.js +22 -26
  88. package/lib/servers/docsServer.js +3 -5
  89. package/lib/servers/docsServerCore.js +84 -91
  90. package/lib/servers/helpServer.js +19 -21
  91. package/lib/servers/impactServer.js +99 -92
  92. package/lib/servers/mockserver.js +24 -24
  93. package/lib/servers/scrServer.js +78 -98
  94. package/lib/servers/server.js +101 -122
  95. package/lib/servers/ssServer.js +63 -61
  96. package/lib/sh/pre-commit.sh +34 -34
  97. package/lib/sh/reportPublish.sh +45 -46
  98. package/lib/templates/CoverageScriptTemplate.js +45 -18
  99. package/lib/templates/WMSTemplate.js +17 -18
  100. package/lib/templates/linterConstant.js +6 -4
  101. package/lib/utils/babelPresets.js +12 -5
  102. package/lib/utils/buildstats.html +148 -148
  103. package/lib/utils/clean.js +12 -11
  104. package/lib/utils/copy.js +12 -34
  105. package/lib/utils/copyTimezones.js +9 -16
  106. package/lib/utils/createEventStream.js +24 -19
  107. package/lib/utils/cssClassNameGenerate.js +44 -73
  108. package/lib/utils/cssURLReplacer.js +60 -54
  109. package/lib/utils/dependencyPostPublish.js +20 -19
  110. package/lib/utils/fileUtils.js +66 -54
  111. package/lib/utils/folderIterator.js +20 -21
  112. package/lib/utils/getComponents.js +70 -27
  113. package/lib/utils/getCurrentBranch.js +11 -17
  114. package/lib/utils/getDependenciesImpactList.js +114 -187
  115. package/lib/utils/getHash.js +9 -13
  116. package/lib/utils/getIp.js +9 -9
  117. package/lib/utils/getOptions.js +26 -29
  118. package/lib/utils/getServerURL.js +19 -10
  119. package/lib/utils/index.js +147 -126
  120. package/lib/utils/init.js +2 -2
  121. package/lib/utils/initPreCommitHook.js +40 -32
  122. package/lib/utils/jsonHelper.js +37 -21
  123. package/lib/utils/lint/addScripts.js +27 -0
  124. package/lib/utils/lint/checkExistingConfig.js +67 -0
  125. package/lib/utils/lint/copyConfigs.js +24 -0
  126. package/lib/utils/lint/index.js +54 -0
  127. package/lib/utils/lint/lintScripts.js +11 -0
  128. package/lib/utils/lint/lintSetup.js +31 -0
  129. package/lib/utils/lint/lintStagedPreCommitHook.js +7 -0
  130. package/lib/utils/lint/question.js +30 -0
  131. package/lib/utils/lintReporter.js +70 -56
  132. package/lib/utils/mailSender.js +12 -27
  133. package/lib/utils/pullOrigin.js +21 -18
  134. package/lib/utils/reinstallDependencies.js +76 -85
  135. package/lib/utils/removeAttributes.js +25 -23
  136. package/lib/utils/repoClone.js +47 -45
  137. package/lib/utils/request.js +64 -77
  138. package/lib/utils/resultSchema.json +73 -73
  139. package/lib/utils/rtl.js +22 -29
  140. package/lib/utils/setEnvVariables.js +5 -6
  141. package/lib/utils/ssTestHack.js +21 -19
  142. package/lib/utils/switchBranch.js +21 -20
  143. package/lib/utils/urlConcat.js +22 -0
  144. package/package.json +141 -136
  145. package/templates/app/.eslintrc.js +140 -140
  146. package/templates/app/README.md +12 -12
  147. package/templates/app/app/index.html +24 -24
  148. package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
  149. package/templates/app/app/properties/i18nkeys.json +3 -3
  150. package/templates/app/docs/all.html +69 -69
  151. package/templates/app/mockapi/index.js +18 -18
  152. package/templates/app/package.json +37 -37
  153. package/templates/app/src/actions/SampleActions/index.js +37 -37
  154. package/templates/app/src/actions/index.js +65 -65
  155. package/templates/app/src/appUrls.js +19 -19
  156. package/templates/app/src/components/Alert/Alert.js +134 -134
  157. package/templates/app/src/components/Alert/Alert.module.css +79 -79
  158. package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
  159. package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
  160. package/templates/app/src/components/Sample/Sample.module.css +11 -11
  161. package/templates/app/src/components/Sample/SampleList.js +61 -61
  162. package/templates/app/src/components/Slider/Slider.css +41 -41
  163. package/templates/app/src/components/Slider/Slider.js +55 -55
  164. package/templates/app/src/containers/AlertContainer/index.js +15 -15
  165. package/templates/app/src/containers/AppContainer/index.js +96 -96
  166. package/templates/app/src/containers/AppContainer/index.module.css +27 -27
  167. package/templates/app/src/containers/CustomMatch/index.js +65 -65
  168. package/templates/app/src/containers/DevTools/index.js +10 -10
  169. package/templates/app/src/containers/Header/index.js +67 -67
  170. package/templates/app/src/containers/Header/index.module.css +43 -43
  171. package/templates/app/src/containers/Redirect/index.js +63 -63
  172. package/templates/app/src/containers/Redirector/index.js +47 -47
  173. package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
  174. package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
  175. package/templates/app/src/historyChange.js +5 -5
  176. package/templates/app/src/index.html +10 -10
  177. package/templates/app/src/index.js +24 -24
  178. package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
  179. package/templates/app/src/reducers/alertData.js +11 -11
  180. package/templates/app/src/reducers/index.js +6 -6
  181. package/templates/app/src/reducers/samples.js +19 -19
  182. package/templates/app/src/store/configureStore.dev.js +51 -51
  183. package/templates/app/src/store/configureStore.js +5 -5
  184. package/templates/app/src/store/configureStore.prod.js +26 -26
  185. package/templates/app/src/util/Common.js +5 -5
  186. package/templates/app/src/util/RequestAPI.js +132 -132
  187. package/templates/docs/all.html +249 -249
  188. package/templates/docs/component.html +178 -178
  189. package/templates/docs/components.html +221 -221
  190. package/templates/docs/css/b.min.css +6 -6
  191. package/templates/docs/css/component.css +42 -42
  192. package/templates/docs/css/componentTest.css +6 -6
  193. package/templates/docs/css/hopscotch.css +585 -585
  194. package/templates/docs/css/style.css +1022 -1022
  195. package/templates/docs/index.html +1493 -1493
  196. package/templates/docs/js/active-line.js +72 -72
  197. package/templates/docs/js/b.min.js +7 -7
  198. package/templates/docs/js/codemirror.js +9680 -9680
  199. package/templates/docs/js/designTokens.js +334 -334
  200. package/templates/docs/js/j.min.js +4 -4
  201. package/templates/docs/js/javascript.js +874 -874
  202. package/templates/docs/js/matchbrackets.js +145 -145
package/bin/cli.js CHANGED
@@ -1,367 +1,372 @@
1
- #!/usr/bin/env node
2
-
3
- let path = require('path');
4
- let os = require('os');
5
- let { spawnSync } = require('child_process');
6
- let { getOptions } = require('../lib/utils/index.js');
7
-
8
- let { log } = require('../lib/utils');
9
- //initPreCommitHook();
10
-
11
- let options = getOptions();
12
-
13
- let { esLint: esLintOptions } = options || {};
14
- let {
15
- ignoreFilePaths: esLintIgnorePaths,
16
- fix: esLintFix,
17
- isCI: isCI,
18
- reportPath: reportPath
19
- } = esLintOptions || {};
20
-
21
- let isWindows = os.platform().toLowerCase() === 'win32';
22
-
23
- let [, , option] = process.argv;
24
- let args = process.argv.slice(3);
25
- let appPath = process.cwd();
26
-
27
- let isNodeModuleUnderAppFolder = __dirname.indexOf(appPath) !== -1;
28
-
29
- let webpack = !isNodeModuleUnderAppFolder
30
- ? path.join(__dirname, '..', 'node_modules', '.bin', 'webpack')
31
- : 'webpack';
32
- let nodemon = !isNodeModuleUnderAppFolder
33
- ? path.join(__dirname, '..', 'node_modules', '.bin', 'nodemon')
34
- : 'nodemon';
35
- let babel = !isNodeModuleUnderAppFolder
36
- ? path.join(__dirname, '..', 'node_modules', '.bin', 'babel')
37
- : 'babel';
38
-
39
- let propertyToJson = !isNodeModuleUnderAppFolder
40
- ? path.join(__dirname, '..', 'node_modules', '.bin', 'propertyToJson')
41
- : 'propertyToJson';
42
-
43
- let esLint = !isNodeModuleUnderAppFolder
44
- ? path.join(__dirname, '..', 'node_modules', '.bin', 'eslint')
45
- : 'eslint';
46
-
47
- if (isWindows) {
48
- webpack += '.cmd';
49
- babel += '.cmd';
50
- propertyToJson += '.cmd';
51
- esLint += '.cmd';
52
- nodemon += '.cmd';
53
- }
54
-
55
- let result;
56
- switch (option) {
57
- case 'postpublish':
58
- result = spawnSync(
59
- 'node',
60
- [require.resolve('../lib/utils/dependencyPostPublish')].concat(args),
61
- { stdio: 'inherit' }
62
- );
63
-
64
- process.exit(result.status);
65
- break;
66
- case 'rtl':
67
- result = spawnSync(
68
- 'node',
69
- [require.resolve('../lib/utils/rtl')].concat(args),
70
- { stdio: 'inherit' }
71
- );
72
-
73
- process.exit(result.status);
74
- break;
75
- case 'app':
76
- result = spawnSync(
77
- 'cp',
78
- ['-r', path.join(__dirname, '..', 'templates', 'app')].concat(args),
79
- { stdio: 'inherit' }
80
- );
81
- process.exit(result.status);
82
- break;
83
-
84
- case 'library':
85
- result = spawnSync(
86
- 'cp',
87
- ['-r', path.join(__dirname, '..', 'templates', 'library')].concat(args),
88
- { stdio: 'inherit' }
89
- );
90
- process.exit(result.status);
91
- break;
92
-
93
- case 'move':
94
- result = spawnSync(
95
- 'node',
96
- [require.resolve('../lib/utils/copy')].concat(args.concat(false)),
97
- { stdio: 'inherit' }
98
- );
99
- process.exit(result.status);
100
- break;
101
-
102
- case 'copy':
103
- result = spawnSync(
104
- 'node',
105
- [require.resolve('../lib/utils/copy')].concat(args),
106
- { stdio: 'inherit' }
107
- );
108
- process.exit(result.status);
109
- break;
110
-
111
- case 'copyTimezones':
112
- result = spawnSync(
113
- 'node',
114
- [require.resolve('../lib/utils/copyTimezones')].concat(args),
115
- { stdio: 'inherit' }
116
- );
117
- process.exit(result.status);
118
- break;
119
-
120
- case 'clone':
121
- result = spawnSync(
122
- 'node',
123
- [require.resolve('../lib/utils/repoClone')].concat(args.concat(args)),
124
- { stdio: 'inherit' }
125
- );
126
- process.exit(result.status);
127
- break;
128
-
129
- case 'propertyToJson':
130
- result = spawnSync(
131
- propertyToJson,
132
- args.map(arg => path.join(appPath, arg)),
133
- {
134
- stdio: 'inherit'
135
- }
136
- );
137
- process.exit(result.status);
138
- break;
139
-
140
- case 'clean':
141
- args = args.map(arg => path.join(appPath, arg));
142
- result = spawnSync(
143
- 'node',
144
- [require.resolve('../lib/utils/clean')].concat(args),
145
- { stdio: 'inherit' }
146
- );
147
- process.exit(result.status);
148
- break;
149
-
150
- case 'start':
151
- result = spawnSync(
152
- 'node',
153
- [require.resolve('../lib/servers/server'), '--expose-http2'].concat(args),
154
- { stdio: 'inherit' }
155
- );
156
- process.exit(result.status);
157
- break;
158
- case 'mockserver':
159
- result = spawnSync(
160
- nodemon,
161
- [
162
- require.resolve('../lib/servers/mockserver.js'),
163
- '--delay',
164
- '2500ms',
165
- 'watch',
166
- `${appPath + path.sep}mockapi`
167
- ].concat(args),
168
- { stdio: 'inherit' }
169
- );
170
- process.exit(result.status);
171
- break;
172
-
173
- case 'docs':
174
- result = spawnSync(
175
- 'node',
176
- [require.resolve('../lib/servers/docsServer')].concat(args),
177
- { stdio: 'inherit' }
178
- );
179
- process.exit(result.status);
180
- break;
181
-
182
- case 'build':
183
- result = spawnSync(
184
- webpack,
185
- [
186
- '--config',
187
- require.resolve('../lib/configs/webpack.prod.config.js')
188
- ].concat(args),
189
- { stdio: 'inherit' }
190
- );
191
-
192
- process.exit(result.status);
193
- break;
194
-
195
- case 'build:library:umd':
196
- case 'build:component:umd':
197
- result = spawnSync(
198
- webpack,
199
- [
200
- '--config',
201
- require.resolve('../lib/configs/webpack.component.umd.config.js')
202
- ],
203
- { stdio: 'inherit' }
204
- );
205
- process.exit(result.status);
206
- break;
207
- case 'build:css:umd':
208
- result = spawnSync(
209
- webpack,
210
- ['--config', require.resolve('../lib/configs/webpack.css.umd.config.js')],
211
- { stdio: 'inherit' }
212
- );
213
- process.exit(result.status);
214
- break;
215
- case 'build:component:server':
216
- result = spawnSync(
217
- webpack,
218
- ['--config', require.resolve('../lib/configs/webpack.server.config.js')],
219
- { stdio: 'inherit' }
220
- );
221
- process.exit(result.status);
222
- break;
223
-
224
- case 'build:library:cmjs':
225
- case 'build:component:cmjs':
226
- result = spawnSync(
227
- babel,
228
- [
229
- 'src',
230
- '-d',
231
- 'lib',
232
- `--presets=${require.resolve('../lib/babel/cmjs-plugins-presets.js')}`,
233
- '--copy-files'
234
- ].concat(args),
235
- { stdio: 'inherit' }
236
- );
237
- process.exit(result.status);
238
- break;
239
-
240
- case 'build:library:es':
241
- case 'build:component:es':
242
- result = spawnSync(
243
- babel,
244
- [
245
- 'src',
246
- '--out-dir',
247
- 'es',
248
- `--presets=${require.resolve('../lib/babel/es-plugins-presets.js')}`,
249
- '--copy-files'
250
- ].concat(args),
251
- { stdio: 'inherit' }
252
- );
253
- process.exit(result.status);
254
- break;
255
-
256
- case 'test':
257
- result = spawnSync(
258
- 'node',
259
- [require.resolve('../lib/jest/run.js')].concat(args),
260
- { stdio: 'inherit' }
261
- );
262
- process.exit(result.status);
263
- break;
264
-
265
- case 'sstest':
266
- result = spawnSync(
267
- 'node',
268
- [require.resolve('../lib/servers/scrServer')].concat(args),
269
- { stdio: 'inherit' }
270
- );
271
- process.exit(result.status);
272
- break;
273
-
274
- case 'publish:report':
275
- result = spawnSync(
276
- 'sh',
277
- [path.join(__dirname, '..', 'lib', 'sh', 'reportPublish.sh')].concat(
278
- args
279
- ),
280
- { stdio: 'inherit' }
281
- );
282
- process.exit(result.status);
283
- break;
284
-
285
- case 'impact':
286
- result = spawnSync(
287
- 'node',
288
- [require.resolve('../lib/server/impactServer')].concat(args),
289
- { stdio: 'inherit' }
290
- );
291
- process.exit(result.status);
292
- break;
293
-
294
- case 'cluster:monitor':
295
- result = spawnSync(
296
- 'node',
297
- [require.resolve('../lib/servers/clusterHubServer')].concat(args),
298
- { stdio: 'inherit' }
299
- );
300
- process.exit(result.status);
301
- break;
302
-
303
- case 'lint':
304
- result = spawnSync(
305
- esLint,
306
- [
307
- '-c',
308
- path.join(__dirname, '..', '.eslintrc.js'),
309
- isCI ? '--no-eslintrc' : false,
310
- '--ignore-path',
311
- esLintIgnorePaths
312
- ? path.join(appPath, esLintIgnorePaths)
313
- : path.join(__dirname, '..', '.eslintignore'),
314
- esLintFix ? '--fix' : false,
315
- isCI ? '-f' : false,
316
- isCI ? path.join(__dirname, './../lib/utils/lintReporter.js') : false
317
- ]
318
- .filter(Boolean)
319
- .concat(args.map(arg => path.join(appPath, arg))),
320
- {
321
- stdio: 'inherit'
322
- }
323
- );
324
- isCI ? log(`You can see the eslint result from ${reportPath}`) : false;
325
- break;
326
-
327
- case 'set:config':
328
- result = spawnSync(
329
- 'node',
330
- [require.resolve('../lib/utils/setEnvVariables')].concat(args),
331
- { stdio: 'inherit' }
332
- );
333
- process.exit(result.status);
334
- break;
335
-
336
- case 'help':
337
- result = spawnSync(
338
- 'node',
339
- [require.resolve('../lib/servers/helpServer')].concat(args),
340
- { stdio: 'inherit' }
341
- );
342
- process.exit(result.status);
343
- break;
344
-
345
- case '--version':
346
- case '-version':
347
- case '--v':
348
- case '-v':
349
- log(`@zohodesk/react-cli v${require('../package.json').version}`);
350
- break;
351
-
352
- default:
353
- log(`react-cli > Unknown option "${option}"`);
354
- log('react-cli app <appName>');
355
- log('react-cli library <libraryName>');
356
- log('react-cli start');
357
- log('react-cli build');
358
- log('react-cli sstest');
359
- log('react-cli test');
360
- log('react-cli publish:report');
361
- log('react-cli build:library:es');
362
- log('react-cli gitclone <last argument clone folder>');
363
- log('react-cli hgclone <last argument clone folder>');
364
-
365
- process.exit(0);
366
- break;
367
- }
1
+ #!/usr/bin/env node
2
+
3
+ let path = require('path');
4
+ let os = require('os');
5
+ let { spawnSync } = require('child_process');
6
+ let { getOptions } = require('../lib/utils/index.js');
7
+
8
+ let { log } = require('../lib/utils');
9
+ //initPreCommitHook();
10
+
11
+ let options = getOptions();
12
+
13
+ let { esLint: esLintOptions } = options || {};
14
+ let {
15
+ ignoreFilePaths: esLintIgnorePaths,
16
+ fix: esLintFix,
17
+ isCI: isCI,
18
+ reportPath: reportPath
19
+ } = esLintOptions || {};
20
+
21
+ let isWindows = os.platform().toLowerCase() === 'win32';
22
+
23
+ let [, , option] = process.argv;
24
+ let args = process.argv.slice(3);
25
+ let appPath = process.cwd();
26
+
27
+ const isNodeModuleUnderAppFolder = __dirname.indexOf(appPath) !== -1;
28
+
29
+ const _getCliPath = !isNodeModuleUnderAppFolder
30
+ ? libName => path.join(__dirname, '..', 'node_modules', '.bin', libName)
31
+ : libName => libName;
32
+ const suffixExt = isWindows ? '.cmd' : '';
33
+
34
+ function getCliPath(libName) {
35
+ return _getCliPath(libName) + suffixExt;
36
+ }
37
+
38
+ let webpack = getCliPath('webpack');
39
+ let nodemon = getCliPath('nodemon');
40
+ let babel = getCliPath('babel');
41
+ let propertyToJson = getCliPath('propertyToJson');
42
+ let esLint = getCliPath('eslint');
43
+
44
+ let result;
45
+ switch (option) {
46
+ case 'lint-setup': {
47
+ result = spawnSync(
48
+ 'node',
49
+ [require.resolve('../lib/utils/lint/index.js')].concat(args),
50
+ { stdio: 'inherit' }
51
+ );
52
+ process.exit(result.status);
53
+ break;
54
+ }
55
+ case 'add-lint-scripts': {
56
+ result = spawnSync(
57
+ 'node',
58
+ [require.resolve('../lib/utils/lint/lintScripts.js')].concat(args),
59
+ { stdio: 'inherit' }
60
+ );
61
+ process.exit(result.status);
62
+ break;
63
+ }
64
+ case 'postpublish':
65
+ result = spawnSync(
66
+ 'node',
67
+ [require.resolve('../lib/utils/dependencyPostPublish')].concat(args),
68
+ { stdio: 'inherit' }
69
+ );
70
+
71
+ process.exit(result.status);
72
+ break;
73
+ case 'rtl':
74
+ result = spawnSync(
75
+ 'node',
76
+ [require.resolve('../lib/utils/rtl')].concat(args),
77
+ { stdio: 'inherit' }
78
+ );
79
+
80
+ process.exit(result.status);
81
+ break;
82
+ case 'app':
83
+ result = spawnSync(
84
+ 'cp',
85
+ ['-r', path.join(__dirname, '..', 'templates', 'app')].concat(args),
86
+ { stdio: 'inherit' }
87
+ );
88
+ process.exit(result.status);
89
+ break;
90
+
91
+ case 'library':
92
+ result = spawnSync(
93
+ 'cp',
94
+ ['-r', path.join(__dirname, '..', 'templates', 'library')].concat(args),
95
+ { stdio: 'inherit' }
96
+ );
97
+ process.exit(result.status);
98
+ break;
99
+
100
+ case 'move':
101
+ result = spawnSync(
102
+ 'node',
103
+ [require.resolve('../lib/utils/copy')].concat(args.concat(false)),
104
+ { stdio: 'inherit' }
105
+ );
106
+ process.exit(result.status);
107
+ break;
108
+
109
+ case 'copy':
110
+ result = spawnSync(
111
+ 'node',
112
+ [require.resolve('../lib/utils/copy')].concat(args),
113
+ { stdio: 'inherit' }
114
+ );
115
+ process.exit(result.status);
116
+ break;
117
+
118
+ case 'copyTimezones':
119
+ result = spawnSync(
120
+ 'node',
121
+ [require.resolve('../lib/utils/copyTimezones')].concat(args),
122
+ { stdio: 'inherit' }
123
+ );
124
+ process.exit(result.status);
125
+ break;
126
+
127
+ case 'clone':
128
+ result = spawnSync(
129
+ 'node',
130
+ [require.resolve('../lib/utils/repoClone')].concat(args.concat(args)),
131
+ { stdio: 'inherit' }
132
+ );
133
+ process.exit(result.status);
134
+ break;
135
+
136
+ case 'propertyToJson':
137
+ result = spawnSync(
138
+ propertyToJson,
139
+ args.map(arg => path.join(appPath, arg)),
140
+ {
141
+ stdio: 'inherit'
142
+ }
143
+ );
144
+ process.exit(result.status);
145
+ break;
146
+
147
+ case 'clean':
148
+ args = args.map(arg => path.join(appPath, arg));
149
+ result = spawnSync(
150
+ 'node',
151
+ [require.resolve('../lib/utils/clean')].concat(args),
152
+ { stdio: 'inherit' }
153
+ );
154
+ process.exit(result.status);
155
+ break;
156
+
157
+ case 'start':
158
+ result = spawnSync(
159
+ 'node',
160
+ [require.resolve('../lib/servers/server'), '--expose-http2'].concat(args),
161
+ { stdio: 'inherit' }
162
+ );
163
+ process.exit(result.status);
164
+ break;
165
+ case 'mockserver':
166
+ result = spawnSync(
167
+ nodemon,
168
+ [
169
+ require.resolve('../lib/servers/mockserver.js'),
170
+ '--delay',
171
+ '2500ms',
172
+ 'watch',
173
+ `${appPath + path.sep}mockapi`
174
+ ].concat(args),
175
+ { stdio: 'inherit' }
176
+ );
177
+ process.exit(result.status);
178
+ break;
179
+
180
+ case 'docs':
181
+ result = spawnSync(
182
+ 'node',
183
+ [require.resolve('../lib/servers/docsServer')].concat(args),
184
+ { stdio: 'inherit' }
185
+ );
186
+ process.exit(result.status);
187
+ break;
188
+
189
+ case 'build':
190
+ result = spawnSync(
191
+ webpack,
192
+ [
193
+ '--config',
194
+ require.resolve('../lib/configs/webpack.prod.config.js')
195
+ ].concat(args),
196
+ { stdio: 'inherit' }
197
+ );
198
+
199
+ process.exit(result.status);
200
+ break;
201
+
202
+ case 'build:library:umd':
203
+ case 'build:component:umd':
204
+ result = spawnSync(
205
+ webpack,
206
+ [
207
+ '--config',
208
+ require.resolve('../lib/configs/webpack.component.umd.config.js')
209
+ ],
210
+ { stdio: 'inherit' }
211
+ );
212
+ process.exit(result.status);
213
+ break;
214
+ case 'build:css:umd':
215
+ result = spawnSync(
216
+ webpack,
217
+ ['--config', require.resolve('../lib/configs/webpack.css.umd.config.js')],
218
+ { stdio: 'inherit' }
219
+ );
220
+ process.exit(result.status);
221
+ break;
222
+ case 'build:component:server':
223
+ result = spawnSync(
224
+ webpack,
225
+ ['--config', require.resolve('../lib/configs/webpack.server.config.js')],
226
+ { stdio: 'inherit' }
227
+ );
228
+ process.exit(result.status);
229
+ break;
230
+
231
+ case 'build:library:cmjs':
232
+ case 'build:component:cmjs':
233
+ result = spawnSync(
234
+ babel,
235
+ [
236
+ 'src',
237
+ '-d',
238
+ 'lib',
239
+ `--presets=${require.resolve('../lib/babel/cmjs-plugins-presets.js')}`,
240
+ '--copy-files'
241
+ ].concat(args),
242
+ { stdio: 'inherit' }
243
+ );
244
+ process.exit(result.status);
245
+ break;
246
+
247
+ case 'build:library:es':
248
+ case 'build:component:es':
249
+ result = spawnSync(
250
+ babel,
251
+ [
252
+ 'src',
253
+ '--out-dir',
254
+ 'es',
255
+ `--presets=${require.resolve('../lib/babel/es-plugins-presets.js')}`,
256
+ '--copy-files'
257
+ ].concat(args),
258
+ { stdio: 'inherit' }
259
+ );
260
+ process.exit(result.status);
261
+ break;
262
+
263
+ case 'test':
264
+ result = spawnSync(
265
+ 'node',
266
+ [require.resolve('../lib/jest/run.js')].concat(args),
267
+ { stdio: 'inherit' }
268
+ );
269
+ process.exit(result.status);
270
+ break;
271
+
272
+ case 'sstest':
273
+ result = spawnSync(
274
+ 'node',
275
+ [require.resolve('../lib/servers/scrServer')].concat(args),
276
+ { stdio: 'inherit' }
277
+ );
278
+ process.exit(result.status);
279
+ break;
280
+
281
+ case 'publish:report':
282
+ result = spawnSync(
283
+ 'sh',
284
+ [path.join(__dirname, '..', 'lib', 'sh', 'reportPublish.sh')].concat(args),
285
+ { stdio: 'inherit' }
286
+ );
287
+ process.exit(result.status);
288
+ break;
289
+
290
+ case 'impact':
291
+ result = spawnSync(
292
+ 'node',
293
+ [require.resolve('../lib/server/impactServer')].concat(args),
294
+ { stdio: 'inherit' }
295
+ );
296
+ process.exit(result.status);
297
+ break;
298
+
299
+ case 'cluster:monitor':
300
+ result = spawnSync(
301
+ 'node',
302
+ [require.resolve('../lib/servers/clusterHubServer')].concat(args),
303
+ { stdio: 'inherit' }
304
+ );
305
+ process.exit(result.status);
306
+ break;
307
+
308
+ case 'lint':
309
+ result = spawnSync(
310
+ esLint,
311
+ [
312
+ '-c',
313
+ path.join(__dirname, '..', '.eslintrc.js'),
314
+ isCI ? '--no-eslintrc' : false,
315
+ '--ignore-path',
316
+ esLintIgnorePaths
317
+ ? path.join(appPath, esLintIgnorePaths)
318
+ : path.join(__dirname, '..', '.eslintignore'),
319
+ esLintFix ? '--fix' : false,
320
+ isCI ? '-f' : false,
321
+ isCI ? path.join(__dirname, './../lib/utils/lintReporter.js') : false
322
+ ]
323
+ .filter(Boolean)
324
+ .concat(args.map(arg => path.join(appPath, arg))),
325
+ {
326
+ stdio: 'inherit'
327
+ }
328
+ );
329
+ isCI ? log(`You can see the eslint result from ${reportPath}`) : false;
330
+ break;
331
+
332
+ case 'set:config':
333
+ result = spawnSync(
334
+ 'node',
335
+ [require.resolve('../lib/utils/setEnvVariables')].concat(args),
336
+ { stdio: 'inherit' }
337
+ );
338
+ process.exit(result.status);
339
+ break;
340
+
341
+ case 'help':
342
+ result = spawnSync(
343
+ 'node',
344
+ [require.resolve('../lib/servers/helpServer')].concat(args),
345
+ { stdio: 'inherit' }
346
+ );
347
+ process.exit(result.status);
348
+ break;
349
+
350
+ case '--version':
351
+ case '-version':
352
+ case '--v':
353
+ case '-v':
354
+ log(`@zohodesk/react-cli v${require('../package.json').version}`);
355
+ break;
356
+
357
+ default:
358
+ log(`react-cli > Unknown option "${option}"`);
359
+ log('react-cli app <appName>');
360
+ log('react-cli library <libraryName>');
361
+ log('react-cli start');
362
+ log('react-cli build');
363
+ log('react-cli sstest');
364
+ log('react-cli test');
365
+ log('react-cli publish:report');
366
+ log('react-cli build:library:es');
367
+ log('react-cli gitclone <last argument clone folder>');
368
+ log('react-cli hgclone <last argument clone folder>');
369
+
370
+ process.exit(0);
371
+ break;
372
+ }