UNPKG

3.06 kBJavaScriptView Raw
1var path = require('path');
2
3var paths = require('../config/paths');
4var names = require('../config/names');
5
6/**
7 * TODO
8 *
9 * @param {object} config
10 * @param {string} config.context
11 * @param {object} config.input
12 * @param {string} config.input.src
13 * @param {string} config.input.script
14 * @param {string} config.input.html
15 * @param {object} config.output
16 * @param {string} config.output.dll
17 * @param {string} config.output.build
18 * @param {string} config.output.public
19 * @param {object} config.server
20 * @param {string} config.server.host
21 * @param {string} config.server.port
22 * @param {string} config.server.proxy
23 * @param {object} config.names
24 * @param {string} config.names.js
25 * @param {string} config.names.css
26 * @param {string} config.names.media
27 * @param {string} config.names.manifest
28 * @param {string} config.names.library
29 * @param {string} mode development|production|dll
30 */
31function configProcess(config, mode) {
32 // extract config
33 var context = (config && config.context) || paths.context;
34 var input = config && config.input;
35 var output = Object.assign({}, paths.output, config && config.output);
36 var server;
37 if (config && config.server === false) {
38 server = false;
39 } else {
40 server = Object.assign({}, paths.server, config && config.server);
41 }
42 var defaultFilenames = names[process.env.NODE_ENV];
43 var filenames = Object.assign({}, defaultFilenames, config && config.filenames);
44 var chunks = config.chunks;
45 // input transform as array
46 if (!Array.isArray(input)) {
47 input = [Object.assign({}, paths.input, input)];
48 } else {
49 input = input.map(function (item) {
50 return Object.assign({}, paths.input, item);
51 });
52 }
53 // server address
54 var realServer = '';
55 if (server) {
56 realServer = (server.protocol ? (server.protocol + '://') : '//')
57 + server.host
58 + (server.port ? (':' + server.port) : '');
59 }
60 // resolve default chunks
61 if (chunks === undefined || typeof chunks === 'string') {
62 chunks = [{
63 name: chunks || 'dev',
64 dependencies: Object.keys(require(path.resolve(context, 'package.json')).dependencies),
65 }];
66 } else if (chunks === false || !Array.isArray(chunks)) {
67 chunks = [];
68 }
69 return Object.assign({}, config, {
70 context: context,
71 input: input.map(function (i) {
72 return {
73 name: i.name,
74 src: path.resolve(context, i.src),
75 script: path.resolve(context, i.script),
76 html: path.resolve(context, i.html),
77 };
78 }),
79 output: {
80 dll: path.resolve(context, output.dll),
81 build: path.resolve(context, output.build),
82 public: output.public, // absolute path
83 publicUrl: realServer + '/', // server url
84 publicPath: realServer + output.public, // server url + absolute path
85 },
86 server: server,
87 filenames: Object.keys(filenames).reduce(function (names, key) {
88 names[key] = filenames[key].replace('[default]', defaultFilenames[key]);
89 return names;
90 }, {}),
91 chunks,
92 options: config.options,
93 });
94}
95
96module.exports = configProcess;