53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
import "#nitro-internal-pollyfills";
|
|
import {
|
|
getAssetFromKV,
|
|
mapRequestToAsset
|
|
} from "@cloudflare/kv-asset-handler";
|
|
import wsAdapter from "crossws/adapters/cloudflare";
|
|
import { withoutBase } from "ufo";
|
|
import { useNitroApp, useRuntimeConfig } from "nitropack/runtime";
|
|
import { getPublicAssetMeta } from "#nitro-internal-virtual/public-assets";
|
|
import { createHandler } from "./_module-handler.mjs";
|
|
import manifest from "__STATIC_CONTENT_MANIFEST";
|
|
const nitroApp = useNitroApp();
|
|
const ws = import.meta._websocket ? wsAdapter(nitroApp.h3App.websocket) : void 0;
|
|
export default createHandler({
|
|
async fetch(request, env, context) {
|
|
if (import.meta._websocket && request.headers.get("upgrade") === "websocket") {
|
|
return ws.handleUpgrade(request, env, context);
|
|
}
|
|
try {
|
|
return await getAssetFromKV(
|
|
{
|
|
request,
|
|
waitUntil(promise) {
|
|
return context.waitUntil(promise);
|
|
}
|
|
},
|
|
{
|
|
cacheControl: assetsCacheControl,
|
|
mapRequestToAsset: baseURLModifier,
|
|
ASSET_NAMESPACE: env.__STATIC_CONTENT,
|
|
ASSET_MANIFEST: JSON.parse(manifest)
|
|
}
|
|
);
|
|
} catch {
|
|
}
|
|
}
|
|
});
|
|
function assetsCacheControl(_request) {
|
|
const url = new URL(_request.url);
|
|
const meta = getPublicAssetMeta(url.pathname);
|
|
if (meta.maxAge) {
|
|
return {
|
|
browserTTL: meta.maxAge,
|
|
edgeTTL: meta.maxAge
|
|
};
|
|
}
|
|
return {};
|
|
}
|
|
const baseURLModifier = (request) => {
|
|
const url = withoutBase(request.url, useRuntimeConfig().app.baseURL);
|
|
return mapRequestToAsset(new Request(url, request));
|
|
};
|