This repository was archived by the owner on Aug 7, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathbuildTemplates.js
66 lines (50 loc) · 1.59 KB
/
buildTemplates.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const { writeFileSync } = require("fs");
saveTemplate("js");
saveTemplate("ts");
saveTemplate("ng");
function saveTemplate(target) {
const content = buildTemplate(target);
writeFileSync(`./templates/webpack.config.js.${target}.template`, content);
}
function buildTemplate(target) {
let template = "";
template += getResource(target, "imports");
template += getResource(target, "exports");
template += getResource(target, "getPlatform");
const rules = getResource(target, "rules");
template += rulesBuilder(rules);
const plugins = getResource(target, "plugins");
template += pluginsBuilder(plugins);
template += require(`./${target}/getExtensions`);
return template;
};
function getResource(target, resourceName) {
const common = require(`./common/${resourceName}`);
const maybeSpecific = tryRequire(`./${target}/${resourceName}`);
return merge(resourceName, common, maybeSpecific);
}
function tryRequire(path) {
try {
return require(path);
} catch(e) { }
}
function merge(resource, common, specific) {
const allResources = specific ? `${common}\n${specific}\n` : `${common}\n`;
return isArray(resource) ? `[${allResources} ]` : allResources;
}
function isArray(resource) {
return ["rules", "plugins"].includes(resource);
}
function pluginsBuilder(plugins) {
const uglify = require("./common/uglify");
return `function getPlugins(platform, env) {
let plugins = ${plugins};
${uglify}
return plugins;
}\n`;
}
function rulesBuilder(rules) {
return `function getRules() {
return ${rules};
}\n\n`;
}