familyfedie-website/scripts/clean-wordpress-residue.mjs
Loyyd 7ce6a3c9d2
All checks were successful
Publish static bundles / publish (push) Successful in 3m16s
Version modernized assets for edge caches
2026-07-15 10:34:24 +02:00

65 lines
3.8 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
const repoRoot = process.cwd();
const legacyHtmlRoot = path.join(repoRoot, "archive-source");
function walkHtml(dir) {
return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
return walkHtml(fullPath);
}
return entry.isFile() && entry.name.endsWith(".html") ? [fullPath] : [];
});
}
function removeWordPressResidue(html) {
const securityMeta = `<meta http-equiv="Content-Security-Policy" content="default-src 'self'; base-uri 'self'; object-src 'none'; img-src 'self' data: https:; font-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://static.cloudflareinsights.com; connect-src 'self' https:; frame-src https://www.youtube.com https://www.youtube-nocookie.com https://player.vimeo.com; form-action 'self' mailto: https:; upgrade-insecure-requests" />
<meta name="referrer" content="strict-origin-when-cross-origin" />`;
const bannerPicture = `<picture class="site-banner">
<source type="image/avif" srcset="/assets/uploads/2013/10/BannerFamilyFed_23_10c1-481.avif 481w, /assets/uploads/2013/10/BannerFamilyFed_23_10c1-768.avif 768w, /assets/uploads/2013/10/BannerFamilyFed_23_10c1-1050.avif 1050w" sizes="(max-width: 1050px) 100vw, 1050px" />
<source type="image/webp" srcset="/assets/uploads/2013/10/BannerFamilyFed_23_10c1-481.webp 481w, /assets/uploads/2013/10/BannerFamilyFed_23_10c1-768.webp 768w, /assets/uploads/2013/10/BannerFamilyFed_23_10c1-1050.webp 1050w" sizes="(max-width: 1050px) 100vw, 1050px" />
<img id="bg_image" alt="Family Federation for World Peace and Unification Ireland" src="/assets/uploads/2013/10/BannerFamilyFed_23_10c1.jpg" width="1050" height="120" fetchpriority="high" />
</picture>`;
let cleaned = html
.replace(/\n?<!--\[if lt IE 9\]>\s*<script>[\s\S]*?<\/script>\s*<!\[endif\]-->\s*/g, "\n")
.replace(
/\n?\s*<script>\s*\/\* <!\[CDATA\[ \*\/var tribe_l10n_datatables = [\s\S]*?<\/script>/g,
""
)
.replace(/\n?<!-- Shortcodes Ultimate custom CSS - start -->\s*<!-- Shortcodes Ultimate custom CSS - end -->\s*/g, "\n")
.replace(/\s*<script\b[^>]*\bsrc=["'][^"']*(?:\/js\/(?:jquery\.min|site)\.js[^"']*|\/assets\/theme\/parabola\/js\/[^"']+|\/assets\/vendor\/[^"']+\.js[^"']*)["'][^>]*>\s*<\/script>/gi, "")
.replace(/\s*<script\b[^>]*id=["']parabola-frontend-js-extra["'][^>]*>[\s\S]*?<\/script>/gi, "")
.replace(/\s*<script\b[^>]*>[\s\S]*?jQuery\(document\)\.ready[\s\S]*?<\/script>/gi, "")
.replace(/\s*<script>\s*\( function \( body \)[\s\S]*?<\/script>/gi, "")
.replace(/\s*<script[^>]*>\s*var cryout_global_content_width = 800;\s*<\/script>/gi, "")
.replace(/href=(["'])\/css\/site\.css(?:\?ver=[^"']*)?\1/gi, 'href=$1/css/site.css?ver=20260715-1$1')
.replace(/<div id="toTop">\s*<\/div>/g, '<button id="toTop" type="button" aria-label="Back to top"></button>')
.replace(/(?:<picture class="site-banner">\s*<source\b[^>]*>\s*<source\b[^>]*>\s*)*<img id="bg_image"[^>]*BannerFamilyFed_23_10c1\.jpg[^>]*>(?:\s*<\/picture>)*/g, bannerPicture);
if (!cleaned.includes("/js/site-20260715.js") && cleaned.includes("</body>")) {
cleaned = cleaned.replace(/\s*<\/body>/i, '\n<script defer src="/js/site-20260715.js"></script>\n</body>');
}
if (!cleaned.includes('http-equiv="Content-Security-Policy"') && cleaned.includes("</head>")) {
cleaned = cleaned.replace(/\s*<\/head>/i, `\n${securityMeta}\n</head>`);
}
return cleaned;
}
let updated = 0;
for (const filePath of walkHtml(legacyHtmlRoot)) {
const original = fs.readFileSync(filePath, "utf8");
const cleaned = removeWordPressResidue(original);
if (cleaned !== original) {
fs.writeFileSync(filePath, cleaned);
updated += 1;
}
}
console.log(`Cleaned WordPress residue in ${updated} HTML files.`);