UNPKG

2.55 kBJavaScriptView Raw
1'use strict';
2
3const semver = require('semver');
4
5const pickInits = deps => {
6 const inits = [];
7 if (deps['react-loadable']) {
8 inits.push('react-loadable');
9 }
10 return inits;
11};
12
13const pickRouter = deps => {
14 if (deps['react-router']) {
15 if (semver.lt(deps['react-router'], '4.0.0')) {
16 return 'react-router-v3';
17 } else {
18 return 'react-router-v4';
19 }
20 } else if (deps['react-router-dom']) {
21 return 'react-router-v4';
22 } else {
23 return 'config-router';
24 }
25};
26
27const pickStatePromise = deps => {
28 if (deps['redux']) {
29 return 'promiseCounter';
30 } else {
31 return 'config-state';
32 }
33};
34
35const pickPreRenders = deps => {
36 const preRenders = [];
37 if (deps['react-loadable']) {
38 preRenders.push('react-loadable');
39 }
40 if (deps['react-redux']) {
41 preRenders.push('react-redux');
42 }
43 if (deps['styled-components']) {
44 if (deps['babel-plugin-styled-components']) {
45 preRenders.push('styled-components');
46 } else {
47 throw new Error('Need to install "babel-plugin-styled-components" to be able to Server-Side Render styled-components');
48 }
49 }
50 return preRenders;
51};
52
53const pickRenderer = deps => {
54 if (deps['react']) {
55 if (semver.lt(deps['react'], '16.0.0')) {
56 return 'react15';
57 } else {
58 return 'react16';
59 }
60 } else {
61 throw new Error('Only support react in this profile for now');
62 }
63};
64
65const pickAfterRenders = deps => {
66 const afterRenders = [];
67 if (deps['react-loadable']) {
68 afterRenders.push('react-loadable');
69 }
70 if (deps['styled-components']) {
71 afterRenders.push('styled-components');
72 }
73 if (deps['react-helmet']) {
74 afterRenders.push('react-helmet');
75 }
76 return afterRenders;
77};
78
79const getLibs = strategy => {
80 const list = Object.keys(strategy).reduce((list, elem) => {
81 return list.concat(strategy[elem]);
82 }, []);
83 return list.filter((item, pos, self) => self.indexOf(item) == pos);
84};
85
86const createStrategy = deps => {
87 try {
88 const strategy = {};
89 strategy.inits = pickInits(deps);
90 strategy.router = pickRouter(deps);
91 strategy.render = pickRenderer(deps);
92 strategy.getStatePromise = pickStatePromise(deps);
93 strategy.preRenders = pickPreRenders(deps);
94 strategy.afterRenders = pickAfterRenders(deps);
95 strategy.libs = getLibs(strategy);
96 return strategy;
97 } catch (e) {
98 console.error("We couldn't automatically figure out what plugins to use");
99 console.error(e.message);
100 process.exit(-1);
101 }
102};
103
104module.exports = createStrategy;
105//# sourceMappingURL=strategy.js.map
\No newline at end of file