mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-07 04:12:04 +00:00
Output of `node scripts/strip-planning-tags.mjs --write`: 3,157 comment lines in 1,308 files lose the work-item identifier at their head. Release versions and issue references stay; nothing outside comment text changes, which the script checks per file against a comment-free printout. healthlog/no-planning-tags is enabled at error level with this commit, so the tree it lands on is clean.
59 lines
2.4 KiB
JavaScript
59 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* v1.4.43 — write the active package.json version into
|
|
* `public/sw-version.js`. The Service Worker (`public/sw.js`) loads
|
|
* this file via `importScripts('/sw-version.js')` and reads
|
|
* `self.__APP_VERSION__` to key its `CACHE_VERSION`.
|
|
*
|
|
* Pre-fix the SW carried a hand-bumped literal that drifted four
|
|
* releases stale; the `activate`-step's old-cache eviction became
|
|
* a no-op for every deploy in v1.4.38.4 → v1.4.42. Running this
|
|
* script as a `prebuild` step re-anchors the version on every build,
|
|
* so the eviction now fires reliably.
|
|
*
|
|
* Idempotent: writes the file unconditionally. Safe to commit the
|
|
* generated file or `.gitignore` it — either way `pnpm build` reruns
|
|
* the generator.
|
|
*/
|
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
import { join, dirname } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const repoRoot = join(__dirname, "..");
|
|
const pkgPath = join(repoRoot, "package.json");
|
|
const outPath = join(repoRoot, "public", "sw-version.js");
|
|
const swPath = join(repoRoot, "public", "sw.js");
|
|
|
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
const version = `v${pkg.version}`;
|
|
|
|
const banner =
|
|
"// AUTO-GENERATED by scripts/generate-sw-version.mjs — do not edit.\n";
|
|
const body = `self.__APP_VERSION__ = ${JSON.stringify(version)};\n`;
|
|
|
|
writeFileSync(outPath, banner + body, "utf8");
|
|
|
|
// Also re-anchor the in-`sw.js` fallback literal to the current version, so
|
|
// the literal used when `/sw-version.js` is missing (dev, or a 404 on the
|
|
// generated file) can never drift stale — it bit v1.4.38.4 → v1.4.42. The
|
|
// `/* @sw-version-fallback */` marker is the rewrite anchor; the literal that
|
|
// follows it is replaced in place. If the marker is gone the SW source has
|
|
// been restructured and the build must surface that rather than silently skip
|
|
// the re-anchor.
|
|
const sw = readFileSync(swPath, "utf8");
|
|
const fallbackPattern = /(\/\* @sw-version-fallback \*\/\s*)"v[^"]*"/;
|
|
if (!fallbackPattern.test(sw)) {
|
|
process.stderr.write(
|
|
"generate-sw-version: @sw-version-fallback marker not found in public/sw.js\n",
|
|
);
|
|
process.exit(1);
|
|
}
|
|
const rewritten = sw.replace(fallbackPattern, `$1${JSON.stringify(version)}`);
|
|
if (rewritten !== sw) writeFileSync(swPath, rewritten, "utf8");
|
|
|
|
// One-line log so the build output shows the version we baked in.
|
|
process.stdout.write(
|
|
`sw-version.js → ${version} (sw.js fallback re-anchored)\n`,
|
|
);
|