Files
Wegwichtel/src/services/offline-manifest.js
T
Florian Zumpe 607e5450e1
Sonarqube Scanner / Prepare environment (push) Successful in 7s
Sonarqube Scanner / Build and test (push) Successful in 20s
Sonarqube Scanner / SonarQube analysis (push) Successful in 52s
Sonarqube Scanner / Deploy to Server (push) Successful in 5s
fix sonarqube findings
2026-09-30 23:34:26 +02:00

21 lines
1.1 KiB
JavaScript

import fs from 'node:fs';
import path from 'node:path';
/** Only the app shell; route data is downloaded separately on explicit request. */
export function offlineManifest(publicDirectory) {
const resources = new Set(['/']);
const appDirectories = new Set(['css', 'js', 'vendor', 'assets', 'images']);
function visit(directory, prefix = '') {
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
if (entry.name.startsWith('.')) continue;
if (!prefix && entry.isDirectory() && !appDirectories.has(entry.name)) continue;
if (prefix === '/images' && entry.isDirectory() && !['icons', 'group-symbols'].includes(entry.name)) continue;
const relative = `${prefix}/${encodeURIComponent(entry.name)}`;
if (entry.isDirectory()) visit(path.join(directory, entry.name), relative);
else if (entry.isFile() && /\.(?:html|css|js|svg|png|webp|jpg|jpeg|gif|ico|woff2?)$/i.test(entry.name)) resources.add(relative);
}
}
visit(publicDirectory);
return { resources: [...resources].sort((left, right) => left.localeCompare(right, 'en')) };
}