/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* Forked from https://microsoft.github.io/monaco-editor/ */
const gulp = require("gulp");
const es = require("event-stream");
const path = require("path");
const fs = require("fs");
const os = require('os');
const rimraf = require("rimraf");
const cp = require("child_process");
const CleanCSS = require("clean-css");
const uncss = require("uncss");
const VERSION = fs.readFileSync("../version.txt", "utf-8").trim();
allow_deploy_to_github = process.env.KTFMT_WEBSITE_ALLOW_DEPLOY_TO_GITHUB == '1';
outdir = process.env.KTFMT_WEBSITE_OUTPUT_DIR || path.join(__dirname, '../release-ktfmt-website');
console.log('Using output dir: ' + outdir)
// --- website
const cleanWebsiteTask = function (cb) {
rimraf(outdir, { maxBusyTries: 1 }, cb);
};
const buildWebsiteTask = function () {
function replaceWithRelativeResource(dataPath, contents, regex, callback) {
return contents.replace(regex, function (_, m0) {
var filePath = path.join(path.dirname(dataPath), m0);
return callback(m0, fs.readFileSync(filePath));
});
}
var waiting = 0;
var done = false;
return es
.merge(
gulp
.src(["**/*"], {
dot: true,
ignore: [
"package.json",
"package-lock.json",
"node_modules/**/*",
"gulpfile.js",
'.DS_Store',
],
})
.pipe(
es.through(
function (data) {
if (!data.contents || !/\.(html)$/.test(data.path)) {
return this.emit("data", data);
}
var contents = data.contents.toString();
contents = contents.replace(/{{version}}/g, VERSION);
contents = contents.replace(
/{{year}}/g,
new Date().getFullYear()
);
var allCSS = "";
var tmpcontents = replaceWithRelativeResource(
data.path,
contents,
/" + output + "";
}
return "";
}
);
}
// Inline javascript
contents = replaceWithRelativeResource(
data.path,
contents,
/"
);
}
);
data.contents = Buffer.from(
contents.split(/\r\n|\r|\n/).join("\n")
);
this.emit("data", data);
if (done && waiting === 0) {
this.emit("end");
}
}.bind(this)
);
},
function () {
done = true;
if (waiting === 0) {
this.emit("end");
}
}
)
)
.pipe(gulp.dest(outdir))
)
.pipe(
es.through(
function (data) {
this.emit("data", data);
},
function () {
// temporarily create package.json so that npm install doesn't bark
fs.writeFileSync(path.join(outdir, 'package.json'), '{}');
fs.writeFileSync(path.join(outdir, '.nojekyll'), '');
cp.execSync('npm install monaco-editor@0.23', {
cwd: outdir
});
rimraf.sync(path.join(outdir, 'node_modules/monaco-editor/dev'));
rimraf.sync(path.join(outdir, 'node_modules/monaco-editor/esm'));
fs.unlinkSync(path.join(outdir, 'package.json'));
this.emit("end");
}
)
);
}
buildWebsiteSeries = gulp.series(cleanWebsiteTask, buildWebsiteTask);
gulp.task("build-website", buildWebsiteSeries);