Files
openchamber/packages/web/server/lib/opencode/static-routes-runtime.js
T

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,
};
};