2023-09-20 03:38:55 -04:00
|
|
|
import fs from "node:fs";
|
|
|
|
import path from "node:path";
|
|
|
|
// import {fileURLToPath} from "node:url";
|
|
|
|
|
|
|
|
import dotenv from "dotenv";
|
|
|
|
import tepi from "trilium-etapi";
|
|
|
|
import * as esbuild from "esbuild";
|
|
|
|
|
|
|
|
|
|
|
|
// const fileURL = fileURLToPath(import.meta.url);
|
|
|
|
// let baseDir = path.dirname(fileURL);
|
|
|
|
// if (fileURL.includes("esrun-")) baseDir = path.join(baseDir, "..", "..", "scripts");
|
|
|
|
// const rootDir = path.join(baseDir, "..");
|
|
|
|
// console.log(process.env.npm_package_json);
|
|
|
|
const rootDir = path.dirname(process.env.npm_package_json!);
|
|
|
|
|
|
|
|
|
|
|
|
dotenv.config();
|
|
|
|
if (process.env.TRILIUM_ETAPI_TOKEN) tepi.token(process.env.TRILIUM_ETAPI_TOKEN);
|
|
|
|
|
|
|
|
const bundleMap = {
|
|
|
|
"main.js": process.env.JS_NOTE_ID,
|
|
|
|
"styles.css": process.env.CSS_NOTE_ID
|
|
|
|
};
|
|
|
|
|
|
|
|
const triliumPlugin: esbuild.Plugin = {
|
|
|
|
name: "Trilium",
|
|
|
|
setup(build) {
|
|
|
|
build.onEnd(async result => {
|
|
|
|
if (!result.metafile) return;
|
|
|
|
|
|
|
|
const bundles = Object.keys(result.metafile.outputs);
|
|
|
|
for (const bundle of bundles) {
|
|
|
|
const filename = path.basename(bundle);
|
|
|
|
const noteId = bundleMap[filename as keyof typeof bundleMap];
|
|
|
|
if (!noteId) {
|
|
|
|
console.info(`No note id found for bundle ${bundle}`);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
const bundlePath = path.join(rootDir, bundle);
|
|
|
|
if (!fs.existsSync(bundlePath)) {
|
|
|
|
console.error(`Could not find bundle ${bundle}`);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
const contents = fs.readFileSync(bundlePath).toString();
|
|
|
|
await tepi.putNoteContentById(noteId, contents);
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const modules = ["main", "styles"];
|
|
|
|
const entryPoints: {in: string, out: string}[] = [];
|
|
|
|
const makeEntry = (mod: string) => ({"in": path.join(rootDir, "src", mod, mod === "styles" ? "index.css" : "index.ts"), "out": mod});
|
|
|
|
|
|
|
|
const modulesRequested = process.argv.filter(a => a.startsWith("--module="));
|
|
|
|
for (const mod of modulesRequested) {
|
|
|
|
const module = mod?.replace("--module=", "") ?? "";
|
|
|
|
if (modules.includes(module)) entryPoints.push(makeEntry(module));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!entryPoints.length) for (const mod of modules) entryPoints.push(makeEntry(mod));
|
|
|
|
|
|
|
|
|
|
|
|
async function runBuild() {
|
|
|
|
const before = performance.now();
|
|
|
|
await esbuild.build({
|
|
|
|
entryPoints: entryPoints,
|
|
|
|
bundle: true,
|
|
|
|
outdir: path.join(rootDir, "dist"),
|
|
|
|
format: "cjs",
|
2023-09-22 23:57:17 -04:00
|
|
|
target: ["chrome96"],
|
2023-09-20 03:38:55 -04:00
|
|
|
loader: {
|
|
|
|
".png": "dataurl",
|
|
|
|
".gif": "dataurl",
|
|
|
|
".woff": "dataurl",
|
|
|
|
".woff2": "dataurl",
|
|
|
|
".ttf": "dataurl",
|
|
|
|
".html": "text",
|
|
|
|
".css": "css"
|
|
|
|
},
|
|
|
|
plugins: [triliumPlugin],
|
|
|
|
logLevel: "info",
|
|
|
|
metafile: true,
|
|
|
|
minify: process.argv.includes("--minify")
|
|
|
|
});
|
|
|
|
const after = performance.now();
|
|
|
|
console.log(`Build actually took ${(after - before).toFixed(2)}ms`);
|
|
|
|
}
|
|
|
|
|
|
|
|
runBuild().catch(console.error);
|