Skip to content

Commit

Permalink
Make extra/* compatible with TypeScript / ES 6
Browse files Browse the repository at this point in the history
  • Loading branch information
TimWolla committed Feb 8, 2021
1 parent 8a05012 commit 238a449
Show file tree
Hide file tree
Showing 5 changed files with 322 additions and 121 deletions.
200 changes: 99 additions & 101 deletions extra/_buildCore.js
Expand Up @@ -2,120 +2,118 @@ const childProcess = require("child_process");
const compiler = require("./compiler");
const fs = require("fs");

function compile(destination, files, overrides) {
let minifiedData = [];

files.forEach((filename) => {
minifiedData.push({
filename: filename,
content: compiler.compile(fs.readFileSync(process.cwd() + `/${filename}`, "utf-8"), overrides),
});
});

async function compile(destination, files, overrides) {
let content = `// ${destination} -- DO NOT EDIT\n\n`;

minifiedData.forEach((fileData) => {
content += `// ${fileData.filename}\n`;
content += `(function (window, undefined) { ${fileData.content.code} })(this);`;
for (const filename of files) {
const output = await compiler.compile(fs.readFileSync(process.cwd() + `/${filename}`, "utf-8"), overrides);

content += `// ${filename}\n`;
content += `(function (window, undefined) { ${output.code} })(this);`;
content += "\n\n";
});
};

fs.writeFileSync(destination, content);
}

//
// step 1) build `WCF.Combined.min.js` and `WCF.Combined.tiny.min.js`
//
process.chdir("../wcfsetup/install/files/js/");
[true, false].forEach((COMPILER_TARGET_DEFAULT) => {
let output = "WCF.Combined" + (COMPILER_TARGET_DEFAULT ? "" : ".tiny") + ".min.js";
console.time(output);
{
let data = fs.readFileSync(".buildOrder", "utf8");
let files = data
.trim()
.split(/\r?\n/)
.map((filename) => `${filename}.js`);

compile(output, files, {
compress: {
global_defs: {
COMPILER_TARGET_DEFAULT: COMPILER_TARGET_DEFAULT,
(async () => {
//
// step 1) build `WCF.Combined.min.js` and `WCF.Combined.tiny.min.js`
//
process.chdir("../wcfsetup/install/files/js/");
for (const COMPILER_TARGET_DEFAULT of [true, false]) {
let output = "WCF.Combined" + (COMPILER_TARGET_DEFAULT ? "" : ".tiny") + ".min.js";
console.time(output);
{
let data = fs.readFileSync(".buildOrder", "utf8");
let files = data
.trim()
.split(/\r?\n/)
.map((filename) => `${filename}.js`);

await compile(output, files, {
compress: {
global_defs: {
COMPILER_TARGET_DEFAULT: COMPILER_TARGET_DEFAULT,
},
},
},
});
}
console.timeEnd(output);
});

//
// step 2) Redactor II + plugins
//
const redactorCombined = "redactor.combined.min.js";
process.chdir("3rdParty/redactor2/");

console.time(redactorCombined);
{
let files = ["redactor.js"];
fs.readdirSync("./plugins/").forEach((file) => {
file = `plugins/${file}`;
let stat = fs.statSync(file);
if (stat.isFile() && !stat.isSymbolicLink()) {
files.push(file);
});
}
});
console.timeEnd(output);
}

compile(redactorCombined, files);
}
console.timeEnd(redactorCombined);

//
// step3) build rjs
//
const rjsCmd = process.platform === "win32" ? "r.js.cmd" : "r.js";
process.chdir("../../");

{
let configFile = "require.build.js";
let outFilename = require(process.cwd() + `/${configFile}`).out;

[true, false].forEach((COMPILER_TARGET_DEFAULT) => {
let overrides =
"uglify2.compress.global_defs.COMPILER_TARGET_DEFAULT=" +
(COMPILER_TARGET_DEFAULT ? "true" : "false");
if (!COMPILER_TARGET_DEFAULT) {
outFilename = outFilename.replace(/\.min\.js$/, ".tiny.min.js");
overrides += " out=" + outFilename;
}
//
// step 2) Redactor II + plugins
//
const redactorCombined = "redactor.combined.min.js";
process.chdir("3rdParty/redactor2/");

console.time(outFilename);
childProcess.execSync(`${rjsCmd} -o ${configFile} ${overrides}`, {
cwd: process.cwd(),
stdio: [0, 1, 2],
console.time(redactorCombined);
{
let files = ["redactor.js"];
fs.readdirSync("./plugins/").forEach((file) => {
file = `plugins/${file}`;
let stat = fs.statSync(file);
if (stat.isFile() && !stat.isSymbolicLink()) {
files.push(file);
}
});
console.timeEnd(outFilename);
});
}

//
// step 4) legacy ACP scripts
//
process.chdir("../acp/js/");
await compile(redactorCombined, files);
}
console.timeEnd(redactorCombined);

fs.readdirSync("./")
.filter((filename) => {
let stat = fs.statSync(filename);
if (stat.isFile() && !stat.isSymbolicLink()) {
return filename.match(/\.js$/) && !filename.match(/\.min\.js$/);
}
//
// step3) build rjs
//
const rjsCmd = process.platform === "win32" ? "r.js.cmd" : "r.js";
process.chdir("../../");

return false;
})
.forEach((filename) => {
console.time(filename);
{
let output = compiler.compile(fs.readFileSync(process.cwd() + `/${filename}`, "utf-8"));
fs.writeFileSync(filename.replace(/\.js$/, ".min.js"), output.code);
{
let configFile = "require.build.js";
let outFilename = require(process.cwd() + `/${configFile}`).out;

for (const COMPILER_TARGET_DEFAULT of [true, false]) {
let overrides = "";
if (!COMPILER_TARGET_DEFAULT) {
outFilename = outFilename.replace(/\.min\.js$/, ".tiny.min.js");
overrides += " out=" + outFilename;
}

console.time(outFilename);
{
childProcess.execSync(`${rjsCmd} -o ${configFile} ${overrides}`, {
cwd: process.cwd(),
stdio: [0, 1, 2],
});
const output = await compiler.compile(fs.readFileSync(outFilename, "utf-8"));
fs.writeFileSync(outFilename, output.code);
}
console.timeEnd(outFilename);
}
console.timeEnd(filename);
});
}

//
// step 4) legacy ACP scripts
//
process.chdir("../acp/js/");

await Promise.all(fs.readdirSync("./")
.filter((filename) => {
const stat = fs.statSync(filename);
if (stat.isFile() && !stat.isSymbolicLink()) {
return filename.match(/\.js$/) && !filename.match(/\.min\.js$/);
}

return false;
})
.map(async (filename) => {
console.time(filename);
{
const output = await compiler.compile(fs.readFileSync(process.cwd() + `/${filename}`, "utf-8"));
fs.writeFileSync(filename.replace(/\.js$/, ".min.js"), output.code);
}
console.timeEnd(filename);
}));

})();
18 changes: 10 additions & 8 deletions extra/_buildExternal.js
Expand Up @@ -39,12 +39,12 @@ fs.readdirSync("./")

return false;
})
.forEach(filename => {
[true, false].forEach(COMPILER_TARGET_DEFAULT => {
.forEach(async filename => {
for (const COMPILER_TARGET_DEFAULT of [true, false]) {
let outFilename = filename.replace(/\.js$/, (COMPILER_TARGET_DEFAULT ? "" : ".tiny") + ".min.js");
console.time(outFilename);
{
let output = compiler.compile(fs.readFileSync(path + filename, 'utf-8'), {
let output = await compiler.compile(fs.readFileSync(path + filename, 'utf-8'), {
compress: {
global_defs: {
COMPILER_TARGET_DEFAULT: COMPILER_TARGET_DEFAULT
Expand All @@ -55,18 +55,18 @@ fs.readdirSync("./")
fs.writeFileSync(path + outFilename, output.code);
}
console.timeEnd(outFilename);
});
};
});
}
});

const rjsCmd = (process.platform === "win32") ? "r.js.cmd" : "r.js";
rjsPaths.forEach(path => {
rjsPaths.forEach(async path => {
let buildConfig = `${path}require.build.js`;
let outFilename = require(process.cwd() + `/${buildConfig}`).out;

[true, false].forEach(COMPILER_TARGET_DEFAULT => {
let overrides = "uglify2.compress.global_defs.COMPILER_TARGET_DEFAULT=" + (COMPILER_TARGET_DEFAULT ? "true" : "false");
for (const COMPILER_TARGET_DEFAULT of [true, false]) {
let overrides = "";
if (!COMPILER_TARGET_DEFAULT) {
outFilename = outFilename.replace(/\.min\.js$/, '.tiny.min.js');
overrides += " out=" + outFilename;
Expand All @@ -77,6 +77,8 @@ rjsPaths.forEach(path => {
cwd: path,
stdio: [0, 1, 2]
});
const output = await compiler.compile(fs.readFileSync(path + '/' + outFilename, "utf-8"));
fs.writeFileSync(path + '/' + outFilename, output.code);
console.timeEnd(outFilename);
});
};
});
14 changes: 10 additions & 4 deletions extra/compiler.js
@@ -1,7 +1,8 @@
const fs = require("fs");
const uglify = require("uglify-js");
const terser = require("terser");
const merge = require('deepmerge')

const uglifyJsConfig = {
const terserConfig = {
compress: {
sequences: true,
properties: true,
Expand All @@ -18,15 +19,20 @@ const uglifyJsConfig = {
global_defs: {
COMPILER_TARGET_DEFAULT: false
}
},
format: {
comments: false,
}
};

module.exports = {
compile: (filename, overrides) => {
if (overrides === undefined) overrides = {};
const config = merge(terserConfig, overrides);

return uglify.minify(
return terser.minify(
filename,
Object.assign(uglifyJsConfig, overrides));
config
);
}
}

0 comments on commit 238a449

Please sign in to comment.