1 | 'use strict';
|
2 |
|
3 | const path = require('path');
|
4 | const fs = require('fs-extra');
|
5 |
|
6 | const mapValues = (obj, iterator) => {
|
7 | const keys = Object.keys(obj);
|
8 | const mapped = {};
|
9 | keys.forEach(key => {
|
10 | mapped[key] = iterator(obj[key], key, obj);
|
11 | });
|
12 | return mapped;
|
13 | };
|
14 |
|
15 | const createServerStrategyCode = strategy => {
|
16 | const variableName = 'strategy';
|
17 |
|
18 | const requires = mapValues(strategy, (value, key) => {
|
19 | if (key === 'libs') return;
|
20 | if (typeof value === 'string') {
|
21 | const requireFile = path.resolve(__dirname, 'libs', value);
|
22 | return `${variableName}['${key}'] = require('${requireFile}').${key}.fn;`;
|
23 | } else if (Array.isArray(value)) {
|
24 | const requireArray = value.map(module => {
|
25 | const requireFile = path.resolve(__dirname, 'libs', module);
|
26 | return `require('${requireFile}').${key}.fn`;
|
27 | });
|
28 | return `${variableName}['${key}'] = [
|
29 | ${requireArray.join(',\n')}
|
30 | ]`;
|
31 | }
|
32 | });
|
33 |
|
34 | const requireCode = Object.keys(requires).map(e => requires[e]);
|
35 | return `const ${variableName} = {};
|
36 | ${requireCode.join('\n')};
|
37 | ${variableName}.strategy = ${JSON.stringify(strategy)}
|
38 |
|
39 | module.exports = ${variableName};
|
40 | `;
|
41 | };
|
42 |
|
43 | const writeServerStrategy = (filename, strategy) => {
|
44 | const code = createServerStrategyCode(strategy);
|
45 | return fs.writeFile(filename, code);
|
46 | };
|
47 |
|
48 | module.exports = writeServerStrategy;
|
49 |
|
\ | No newline at end of file |