/** * Patches zotero-plugin-scaffold's parseRepoUrl to accept non-.com domains. * * The upstream regex hardcodes `.com` in the URL pattern, which breaks builds * when the repository is hosted on a self-hosted Gitea instance (any other TLD). * This script runs automatically via the `postinstall` npm hook after every * `npm install` / `npm ci`. */ import { readFileSync, writeFileSync } from "fs"; import { resolve, dirname } from "path"; import { fileURLToPath } from "url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const target = resolve( __dirname, "../node_modules/zotero-plugin-scaffold/dist/shared/zotero-plugin-scaffold.Lk5EW_9z.mjs" ); let content; try { content = readFileSync(target, "utf8"); } catch { console.warn("[patch-scaffold] Target file not found, skipping patch."); process.exit(0); } // Original: matches only .com hosts // /:\/\/.+com\/([^/]+)\/([^.]+)\.git$/ // Replacement: matches any host and makes .git suffix optional // /:\/\/.+?\/([^/]+)\/([^/.]+)(?:\.git)?$/ const SEARCH = String.raw`url.match(/:\/\/.+com\/([^/]+)\/([^.]+)\.git$/)`; const REPLACE = String.raw`url.match(/:\/\/.+?\/([^/]+)\/([^/.]+)(?:\.git)?$/)`; if (content.includes(SEARCH)) { writeFileSync(target, content.replace(SEARCH, REPLACE), "utf8"); console.log("[patch-scaffold] Applied: parseRepoUrl now accepts any TLD."); } else if (content.includes(REPLACE)) { console.log("[patch-scaffold] Already patched, nothing to do."); } else { console.warn( "[patch-scaffold] Could not find target string — scaffold may have been updated. " + "Check scripts/patch-scaffold.mjs and update SEARCH/REPLACE strings." ); }