64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
|
import esbuild from "esbuild";
|
||
|
import { readFile, unlink, writeFile } from "fs/promises";
|
||
|
import path from "path";
|
||
|
|
||
|
import yargs from "yargs";
|
||
|
import { hideBin } from "yargs/helpers";
|
||
|
import { Manifest } from "../../webapp/src/plugins/types";
|
||
|
|
||
|
async function compile(filePath: string, sourceMap: string) {
|
||
|
let tempFile = "out.js";
|
||
|
let js = await esbuild.build({
|
||
|
entryPoints: [filePath],
|
||
|
bundle: true,
|
||
|
format: "iife",
|
||
|
globalName: "mod",
|
||
|
platform: "neutral",
|
||
|
sourcemap: sourceMap ? "inline" : false,
|
||
|
minify: true,
|
||
|
outfile: tempFile,
|
||
|
});
|
||
|
|
||
|
let jsCode = (await readFile(tempFile)).toString();
|
||
|
jsCode = jsCode.replace(/^var mod ?= ?/, "");
|
||
|
await unlink(tempFile);
|
||
|
return jsCode;
|
||
|
}
|
||
|
|
||
|
async function bundle(manifestPath, sourceMaps) {
|
||
|
const rootPath = path.dirname(manifestPath);
|
||
|
const manifest = JSON.parse(
|
||
|
(await readFile(manifestPath)).toString()
|
||
|
) as Manifest;
|
||
|
|
||
|
for (let [name, def] of Object.entries(manifest.functions)) {
|
||
|
let jsFunctionName = def.functionName,
|
||
|
filePath = path.join(rootPath, def.path);
|
||
|
if (filePath.indexOf(":") !== -1) {
|
||
|
[filePath, jsFunctionName] = filePath.split(":");
|
||
|
} else if (!jsFunctionName) {
|
||
|
jsFunctionName = "default";
|
||
|
}
|
||
|
|
||
|
def.code = await compile(filePath, sourceMaps);
|
||
|
def.path = filePath;
|
||
|
def.functionName = jsFunctionName;
|
||
|
}
|
||
|
return manifest;
|
||
|
}
|
||
|
async function run() {
|
||
|
let args = await yargs(hideBin(process.argv))
|
||
|
.option("debug", {
|
||
|
type: "boolean",
|
||
|
})
|
||
|
.parse();
|
||
|
|
||
|
let generatedManifest = await bundle(args._[0], !!args.debug);
|
||
|
writeFile(args._[1] as string, JSON.stringify(generatedManifest, null, 2));
|
||
|
}
|
||
|
|
||
|
run().catch((e) => {
|
||
|
console.error(e);
|
||
|
process.exit(1);
|
||
|
});
|