40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import "dotenv/config";
|
|
|
|
import { readFile } from "node:fs/promises";
|
|
|
|
function fail(msg: string): never {
|
|
// eslint-disable-next-line no-console
|
|
console.error(`[verify:umami] ${msg}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
function info(msg: string) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`[verify:umami] ${msg}`);
|
|
}
|
|
|
|
async function main() {
|
|
const html = await readFile("dist/index.html", "utf8");
|
|
|
|
const scriptUrl = process.env.PUBLIC_UMAMI_SCRIPT_URL || "";
|
|
const websiteId = process.env.PUBLIC_UMAMI_WEBSITE_ID || "";
|
|
|
|
const expectsEnabled = Boolean(scriptUrl && websiteId);
|
|
const hasWebsiteId = html.includes('data-website-id="');
|
|
const hasScriptUrl = scriptUrl ? html.includes(`src="${scriptUrl}"`) : false;
|
|
|
|
if (expectsEnabled) {
|
|
if (!hasWebsiteId) fail(`expected Umami enabled, but data-website-id not found in dist/index.html`);
|
|
if (!hasScriptUrl)
|
|
fail(`expected Umami enabled, but src="${scriptUrl}" not found in dist/index.html`);
|
|
info("ok (umami script present)");
|
|
return;
|
|
}
|
|
|
|
// When not configured, the site should not render a script tag.
|
|
if (hasWebsiteId) fail("expected Umami disabled, but data-website-id was found in dist/index.html");
|
|
info("ok (umami disabled, no script rendered)");
|
|
}
|
|
|
|
main().catch((e) => fail(String(e)));
|