Files
open-gsio/packages/server/services/AssetService.ts
2025-06-24 17:32:59 -04:00

44 lines
1.2 KiB
TypeScript

import renderPage from '@open-gsio/client/server';
import { types } from 'mobx-state-tree';
export default types
.model('StaticAssetStore', {})
.volatile(self => ({
env: {} as Env,
ctx: {} as ExecutionContext,
}))
.actions(self => ({
setEnv(env: Env) {
self.env = env;
},
setCtx(ctx: ExecutionContext) {
self.ctx = ctx;
},
async handleSsr(url: string, headers: Headers, env: Vike.PageContext.env) {
const pageContextInit = {
urlOriginal: url,
headersOriginal: headers,
fetch: (...args: Parameters<typeof fetch>) => fetch(...args),
env,
};
const pageContext = await renderPage(pageContextInit);
const { httpResponse } = pageContext;
if (!httpResponse) {
return null;
} else {
const { statusCode: status, headers } = httpResponse;
return new Response(httpResponse.pipe, { headers, status });
}
},
async handleStaticAssets(request: Request, env) {
try {
return await env.ASSETS.fetch(request);
} catch (error) {
console.error('Error serving static asset:', error);
return new Response('Asset not found', { status: 404 });
}
},
}));