66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
import { registerPwaManifestRoute } from './pwa-manifest-routes.js';
|
|
|
|
export const createStaticRoutesRuntime = (dependencies) => {
|
|
const {
|
|
fs,
|
|
path,
|
|
process,
|
|
__dirname,
|
|
express,
|
|
resolveProjectDirectory,
|
|
buildOpenCodeUrl,
|
|
getOpenCodeAuthHeaders,
|
|
readSettingsFromDiskMigrated,
|
|
normalizePwaAppName,
|
|
normalizePwaOrientation,
|
|
} = dependencies;
|
|
|
|
const resolveDistPath = () => {
|
|
const env = typeof process.env.OPENCHAMBER_DIST_DIR === 'string' ? process.env.OPENCHAMBER_DIST_DIR.trim() : '';
|
|
if (env) {
|
|
return path.resolve(env);
|
|
}
|
|
return path.join(__dirname, '..', 'dist');
|
|
};
|
|
|
|
const registerStaticRoutes = (app) => {
|
|
const distPath = resolveDistPath();
|
|
|
|
if (fs.existsSync(distPath)) {
|
|
console.log(`Serving static files from ${distPath}`);
|
|
app.use(express.static(distPath, {
|
|
setHeaders(res, filePath) {
|
|
// Service workers should never be long-cached; iOS is especially sensitive.
|
|
if (typeof filePath === 'string' && filePath.endsWith(`${path.sep}sw.js`)) {
|
|
res.setHeader('Cache-Control', 'no-store');
|
|
}
|
|
},
|
|
}));
|
|
|
|
registerPwaManifestRoute(app, {
|
|
process,
|
|
resolveProjectDirectory,
|
|
buildOpenCodeUrl,
|
|
getOpenCodeAuthHeaders,
|
|
readSettingsFromDiskMigrated,
|
|
normalizePwaAppName,
|
|
normalizePwaOrientation,
|
|
});
|
|
|
|
app.get(/^(?!\/api|.*\.(js|css|svg|png|jpg|jpeg|gif|ico|woff|woff2|ttf|eot|map)).*$/, (_req, res) => {
|
|
res.sendFile(path.join(distPath, 'index.html'));
|
|
});
|
|
return;
|
|
}
|
|
|
|
console.warn(`Warning: ${distPath} not found, static files will not be served`);
|
|
app.get(/^(?!\/api|.*\.(js|css|svg|png|jpg|jpeg|gif|ico|woff|woff2|ttf|eot|map)).*$/, (_req, res) => {
|
|
res.status(404).send('Static files not found. Please build the application first.');
|
|
});
|
|
};
|
|
|
|
return {
|
|
registerStaticRoutes,
|
|
};
|
|
};
|