Files
2026-07-03 21:05:07 +02:00

33 lines
1.7 KiB
JavaScript

import { readFile, writeFile } from 'node:fs/promises';
import { resolve } from 'node:path';
const repoRoot = process.cwd();
const publicSwPath = resolve(repoRoot, 'public', 'sw.js');
const distSwPath = resolve(repoRoot, 'dist', 'sw.js');
const distIndexHtmlPath = resolve(repoRoot, 'dist', 'index.html');
const radioConfigPath = resolve(repoRoot, 'src', 'radio', 'radioConfig.json');
const serviceWorkerConfigPath = resolve(repoRoot, 'src', 'shared', 'serviceWorkerConfig.json');
const distIndexHtml = await readFile(distIndexHtmlPath, 'utf8');
const buildStampMatch = distIndexHtml.match(/assets\/(?:main|player)-(\d+)-/);
if (!buildStampMatch) {
throw new Error('Unable to infer build stamp from dist/index.html.');
}
const buildStamp = buildStampMatch[1];
const radioConfig = JSON.parse(await readFile(radioConfigPath, 'utf8'));
const serviceWorkerConfig = JSON.parse(await readFile(serviceWorkerConfigPath, 'utf8'));
const swTemplate = await readFile(publicSwPath, 'utf8');
const stampedSource = swTemplate
.replaceAll('__APP_BUILD_ID__', buildStamp)
.replace('__RADIO_COUNTRIES_JSON__', JSON.stringify(radioConfig.radioCountries))
.replaceAll('__MANAGED_COUNTRY_CODE__', String(radioConfig.managedCountryCode ?? 'SI'))
.replaceAll('__SW_STATION_SYNC_TAG__', serviceWorkerConfig.stationSyncTag)
.replaceAll('__SW_STATION_PERIODIC_SYNC_TAG__', serviceWorkerConfig.stationPeriodicSyncTag)
.replaceAll('__SW_MANAGED_CATALOG_PERIODIC_SYNC_TAG__', serviceWorkerConfig.managedCatalogPeriodicSyncTag)
.replaceAll('__SW_STATION_SYNC_META_PATH__', serviceWorkerConfig.stationSyncMetaPath);
await writeFile(distSwPath, stampedSource, 'utf8');
console.log(`[stamp-dist-sw] Updated dist/sw.js with build stamp ${buildStamp}`);