summaryrefslogtreecommitdiff
path: root/node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts')
-rw-r--r--node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts b/node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts
new file mode 100644
index 0000000..4f72f40
--- /dev/null
+++ b/node_modules/wrangler/templates/middleware/middleware-serve-static-assets.ts
@@ -0,0 +1,56 @@
+/// <reference path="middleware-serve-static-assets.d.ts"/>
+
+import {
+ getAssetFromKV,
+ NotFoundError,
+ MethodNotAllowedError,
+ serveSinglePageApp,
+} from "@cloudflare/kv-asset-handler";
+import type { Options } from "@cloudflare/kv-asset-handler";
+import { spaMode, cacheControl } from "config:middleware/serve-static-assets";
+import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
+import manifest from "__STATIC_CONTENT_MANIFEST";
+const ASSET_MANIFEST = JSON.parse(manifest);
+
+import type { Middleware } from "./common";
+
+const staticAssets: Middleware = async (request, env, _ctx, middlewareCtx) => {
+ let options: Partial<Options> = {
+ ASSET_MANIFEST,
+ ASSET_NAMESPACE: env.__STATIC_CONTENT,
+ cacheControl: cacheControl,
+ mapRequestToAsset: spaMode ? serveSinglePageApp : undefined,
+ };
+
+ try {
+ const page = await (getAssetFromKV as typeof kvAssetHandler.getAssetFromKV)(
+ {
+ request,
+ waitUntil(promise) {
+ return _ctx.waitUntil(promise);
+ },
+ },
+ options
+ );
+
+ // allow headers to be altered
+ const response = new Response(page.body, page);
+
+ response.headers.set("X-XSS-Protection", "1; mode=block");
+ response.headers.set("X-Content-Type-Options", "nosniff");
+ response.headers.set("X-Frame-Options", "DENY");
+ response.headers.set("Referrer-Policy", "unsafe-url");
+ response.headers.set("Feature-Policy", "none");
+
+ return response;
+ } catch (e) {
+ if (e instanceof NotFoundError || e instanceof MethodNotAllowedError) {
+ // if a known error is thrown then serve from actual worker
+ return await middlewareCtx.next(request, env);
+ }
+ // otherwise it's a real error, so throw it
+ throw e;
+ }
+};
+
+export default staticAssets;