Files
browser-scripts-builder/lib/build.js

133 lines
4.1 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const esbuild_1 = require("esbuild");
const fs_1 = require("fs");
const paths_1 = require("./paths");
const readmeta_1 = __importDefault(require("./readmeta"));
const prettier_1 = require("prettier");
const main_1 = require("./main");
function default_1(name, watchCallback) {
//read meta file
let [metaJson, metaString] = (0, readmeta_1.default)(name);
let pathDist = (0, paths_1.DistPath)(name);
let result = runEsbuild({
entryPoints: [(0, paths_1.ScriptPath)(name).main],
outfile: pathDist,
target: 'esnext',
platform: 'node',
format: 'esm',
bundle: true,
minify: main_1.CLIArgs.minify,
define: {
UserScriptName: `'${metaJson.name}'`,
UserScriptNamespace: `'${metaJson.namespace}'`,
UserScriptVersion: `'${metaJson.version}'`,
UserScriptDownloadURL: `'${metaJson.downloadURL}'`,
UserScriptSupportURL: `'${metaJson.supportURL}'`,
UserScriptHomepageURL: `'${metaJson.homepageURL}'`,
},
}, result => {
let error = postBuild(name, result, metaString);
watchCallback(metaJson, error);
});
let error = postBuild(name, result, metaString);
return [metaJson, error];
}
exports.default = default_1;
function runEsbuild(opts, watchCallback) {
opts.write = false;
if (main_1.CLIArgs.watch) {
opts.watch = {
onRebuild(err, res) {
watchCallback(getResult(err, res));
},
};
}
try {
let res = (0, esbuild_1.buildSync)(opts);
return getResult(null, res);
}
catch (err) {
return getResult(err, null);
}
}
function getResult(error, result) {
if (error) {
return {
content: null,
error: error.message,
errorRaw: error,
};
}
else if (result) {
let content = '';
if (result.outputFiles && result.outputFiles.length > 0) {
content = result.outputFiles[0].text;
if (!main_1.CLIArgs.srccomment)
content = clearFilenameComments(content);
}
if (content === '') {
return {
content: null,
error: 'No output',
};
}
return {
content,
error: null,
};
}
else {
return {
content: null,
error: 'No result',
};
}
}
function clearFilenameComments(content) {
let regexp = new RegExp(`//\\s*${paths_1.ScriptBase}/.*(?:\\n|$)`, 'g');
return content.replace(regexp, '');
}
function postBuild(name, result, metaString) {
let error = null;
let path = (0, paths_1.ScriptPath)(name);
let pathDist = (0, paths_1.DistPath)(name);
let PrettierConfig = prettier_1.resolveConfig.sync(path.dir) || {};
if (result.error) {
console.error(name, result.errorRaw || result.error);
error = result.error;
}
else if (result.content) {
let content = metaString + result.content;
if (main_1.CLIArgs.prettier) {
content = (0, prettier_1.format)(content, {
...PrettierConfig,
parser: 'babel',
});
}
(0, fs_1.writeFileSync)(pathDist, content);
}
else {
console.error(name, 'No output');
}
doErrorFile(name, error);
return error;
}
function doErrorFile(name, error) {
let path = (0, paths_1.ScriptPath)(name);
let outfile = (0, paths_1.DistPath)(name);
let content = `${new Date().toISOString()}\n\n${error}`;
if (error !== null) {
(0, fs_1.writeFileSync)(path.error, content);
if ((0, fs_1.existsSync)(outfile)) {
(0, fs_1.unlinkSync)(outfile);
}
}
else if ((0, fs_1.existsSync)(path.error)) {
(0, fs_1.unlinkSync)(path.error);
}
}
//# sourceMappingURL=build.js.map