36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const projectRoot = path.resolve(__dirname, "..");
|
|
const environment = process.env.PLOTDIRECTOR_COMPANION_ENV || "development";
|
|
const configPath = path.join(projectRoot, "config", `${environment}.json`);
|
|
const templatePath = path.join(projectRoot, "manifest.template.xml");
|
|
const manifestPath = path.join(projectRoot, "manifest.xml");
|
|
|
|
if (!fs.existsSync(configPath)) {
|
|
throw new Error(`Missing Word Companion manifest config: ${configPath}`);
|
|
}
|
|
|
|
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
const requiredKeys = ["appDomain", "taskpaneUrl", "iconUrl"];
|
|
for (const key of requiredKeys) {
|
|
if (!config[key]) {
|
|
throw new Error(`Missing required Word Companion manifest config value: ${key}`);
|
|
}
|
|
}
|
|
|
|
const escapeXml = (value) =>
|
|
String(value)
|
|
.replace(/&/g, "&")
|
|
.replace(/</g, "<")
|
|
.replace(/>/g, ">")
|
|
.replace(/"/g, """);
|
|
|
|
let manifest = fs.readFileSync(templatePath, "utf8");
|
|
for (const [key, value] of Object.entries(config)) {
|
|
manifest = manifest.replaceAll(`{{${key}}}`, escapeXml(value));
|
|
}
|
|
|
|
fs.writeFileSync(manifestPath, manifest, "utf8");
|
|
console.log(`Rendered ${path.relative(projectRoot, manifestPath)} for ${environment}.`);
|