1 const childProcess
= require("child_process");
2 const compiler
= require("./compiler");
3 const fs
= require("fs");
5 function compile(destination
, files
, overrides
) {
8 files
.forEach(filename
=> {
11 content
: compiler
.compile(filename
, overrides
)
15 let content
= `// ${destination} -- DO NOT EDIT\n\n`;
17 minifiedData
.forEach(fileData
=> {
18 content
+= `// ${fileData.filename}\n`;
19 content
+= `(function (window, undefined) { ${fileData.content.code} })(this);`;
23 fs
.writeFileSync(destination
, content
);
27 // step 1) build `WCF.Combined.min.js` and `WCF.Combined.tiny.min.js`
29 process
.chdir("../wcfsetup/install/files/js/");
30 [true, false].forEach(COMPILER_TARGET_DEFAULT
=> {
31 let output
= "WCF.Combined" + (COMPILER_TARGET_DEFAULT
? "" : ".tiny") + ".min.js";
34 let data
= fs
.readFileSync(".buildOrder", "utf8");
38 .map(filename
=> `${filename}.js`);
40 compile(output
, files
, {
43 COMPILER_TARGET_DEFAULT
: COMPILER_TARGET_DEFAULT
48 console
.timeEnd(output
);
52 // step 2) Redactor II + plugins
54 const redactorCombined
= "redactor.combined.min.js";
55 process
.chdir("3rdParty/redactor2/");
57 console
.time(redactorCombined
);
59 let files
= ['redactor.js'];
60 fs
.readdirSync("./plugins/").forEach(file
=> {
61 file
= `plugins/${file}`;
62 let stat
= fs
.statSync(file
);
63 if (stat
.isFile() && !stat
.isSymbolicLink()) {
68 compile(redactorCombined
, files
);
70 console
.timeEnd(redactorCombined
);
75 const rjsCmd
= (process
.platform
=== "win32") ? "r.js.cmd" : "r.js";
76 process
.chdir("../../");
79 let configFile
= "require.build.js";
80 let outFilename
= require(process
.cwd() + `/${configFile}`).out
;
82 const promisePolyfill
= fs
.readFileSync("./3rdParty/polyfill/promise.min.js");
84 [true, false].forEach(COMPILER_TARGET_DEFAULT
=> {
85 let overrides
= "uglify2.compress.global_defs.COMPILER_TARGET_DEFAULT=" + (COMPILER_TARGET_DEFAULT
? "true" : "false");
86 if (!COMPILER_TARGET_DEFAULT
) {
87 outFilename
= outFilename
.replace(/\.min\.js$/, '.tiny.min.js');
88 overrides
+= " out=" + outFilename
;
91 console
.time(outFilename
);
92 childProcess
.execSync(`${rjsCmd} -o ${configFile} ${overrides}`, {
96 console
.timeEnd(outFilename
);
98 // prepend the promise polyfill
99 let content
= `// promise.min.js\n${promisePolyfill}\n\n// ${outFilename}\n` + fs
.readFileSync(outFilename
);
100 fs
.writeFileSync(outFilename
, content
);
105 // step 4) legacy ACP scripts
107 process
.chdir("../acp/js/");
110 .filter(filename
=> {
111 let stat
= fs
.statSync(filename
);
112 if (stat
.isFile() && !stat
.isSymbolicLink()) {
113 return filename
.match(/\.js$/) && !filename
.match(/\.min\.js$/);
118 .forEach(filename
=> {
119 console
.time(filename
);
121 let output
= compiler
.compile(process
.cwd() + `/${filename}`);
122 fs
.writeFileSync(filename
.replace(/\.js$/, '.min.js'), output
.code
);
124 console
.timeEnd(filename
);