-
Notifications
You must be signed in to change notification settings - Fork 734
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Workers Sites support for local mode (#336)
* chore: example-sites-app An example app with a Workers Sites definition. * feat: inline text-like files into the worker bundle We were adding text-like modules (i.e. `.txt`, `.html` and `.pem` files) as separate modules in the Worker definition, but this only really 'works' with the ES module Worker format. This commit changes that to inline the text-like files into the Worker bundle directly. We still have to do something similar with `.wasm` modules, but that requires a different fix, and we'll do so in a subsequent commit. * feat: Sites support for local mode `wrangler dev` This adds support for Workers Sites in local mode when running wrangler `dev`. Further, it fixes a bug where we were sending the `__STATIC_CONTENT_MANIFEST` definition as a separate module even with service worker format, and a bug where we weren't uploading the namespace binding when other kv namespaces weren't present. * Update packages/wrangler/src/api/form_data.ts Co-authored-by: Pete Bacon Darwin <[email protected]> Co-authored-by: Pete Bacon Darwin <[email protected]>
- Loading branch information
1 parent
a417cb0
commit ce61000
Showing
21 changed files
with
636 additions
and
129 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
--- | ||
"wrangler": patch | ||
--- | ||
|
||
feat: inline text-like files into the worker bundle | ||
|
||
We were adding text-like modules (i.e. `.txt`, `.html` and `.pem` files) as separate modules in the Worker definition, but this only really 'works' with the ES module Worker format. This commit changes that to inline the text-like files into the Worker bundle directly. | ||
|
||
We still have to do something similar with `.wasm` modules, but that requires a different fix, and we'll do so in a subsequent commit. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
--- | ||
"wrangler": patch | ||
--- | ||
|
||
feat: Sites support for local mode `wrangler dev` | ||
|
||
This adds support for Workers Sites in local mode when running wrangler `dev`. Further, it fixes a bug where we were sending the `__STATIC_CONTENT_MANIFEST` definition as a separate module even with service worker format, and a bug where we weren't uploading the namespace binding when other kv namespaces weren't present. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"name": "example-sites-app", | ||
"private": true, | ||
"version": "1.0.0", | ||
"dependencies": { | ||
"@cloudflare/kv-asset-handler": "~0.2.0" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<link rel="icon" type="image/x-icon" href="favicon.ico" /> | ||
<link | ||
href="https://fonts.googleapis.com/css?family=Pacifico&display=swap" | ||
rel="stylesheet" | ||
/> | ||
<link | ||
href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css" | ||
rel="stylesheet" | ||
/> | ||
<style> | ||
h1 { | ||
font-family: Pacifico, sans-serif; | ||
font-size: 4em; | ||
color: #3eb5f1; | ||
margin: 0; | ||
} | ||
|
||
h2 { | ||
font-weight: 300; | ||
font-family: sans-serif; | ||
} | ||
|
||
.centered { | ||
position: fixed; | ||
top: 50%; | ||
left: 50%; | ||
transform: translate(-50%, -50%); | ||
text-align: center; | ||
} | ||
|
||
#ferris { | ||
width: 75%; | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<div class="centered"> | ||
<h1>404 Not Found</h1> | ||
<h2>Oh dang! We couldn't find that page.</h2> | ||
<img | ||
id="ferris" | ||
alt="a sad crab is unable to unable to lasso a paper airplane. 404 not found." | ||
src="./img/404-wrangler-ferris.gif" | ||
/> | ||
</div> | ||
</body> | ||
</html> |
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<link rel="icon" type="image/x-icon" href="favicon.ico" /> | ||
<link | ||
href="https://fonts.googleapis.com/css?family=Pacifico&display=swap" | ||
rel="stylesheet" | ||
/> | ||
<link | ||
href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css" | ||
rel="stylesheet" | ||
/> | ||
<style> | ||
h1 { | ||
font-family: Pacifico, sans-serif; | ||
font-size: 4em; | ||
color: #3eb5f1; | ||
margin: 0; | ||
} | ||
|
||
h2 { | ||
font-weight: 300; | ||
font-family: sans-serif; | ||
} | ||
|
||
.centered { | ||
position: fixed; | ||
top: 50%; | ||
left: 50%; | ||
transform: translate(-50%, -50%); | ||
text-align: center; | ||
} | ||
|
||
#ferris { | ||
width: 75%; | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<div class="centered"> | ||
<h1>200 Success</h1> | ||
<h2>Hello World! Welcome to your Workers Site.</h2> | ||
<img | ||
id="ferris" | ||
alt="a happy crab is wearing a cowboy hat and holding a lasso. 200 success." | ||
src="./img/200-wrangler-ferris.gif" | ||
/> | ||
</div> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import { | ||
getAssetFromKV, | ||
mapRequestToAsset, | ||
} from "@cloudflare/kv-asset-handler"; | ||
|
||
/** | ||
* The DEBUG flag will do two things that help during development: | ||
* 1. we will skip caching on the edge, which makes it easier to | ||
* debug. | ||
* 2. we will return an error message on exception in your Response rather | ||
* than the default 404.html page. | ||
*/ | ||
const DEBUG = false; | ||
|
||
addEventListener("fetch", (event) => { | ||
event.respondWith(handleEvent(event)); | ||
}); | ||
|
||
async function handleEvent(event) { | ||
let options = {}; | ||
|
||
/** | ||
* You can add custom logic to how we fetch your assets | ||
* by configuring the function `mapRequestToAsset` | ||
*/ | ||
// options.mapRequestToAsset = handlePrefix(/^\/docs/) | ||
|
||
try { | ||
if (DEBUG) { | ||
// customize caching | ||
options.cacheControl = { | ||
bypassCache: true, | ||
}; | ||
} | ||
|
||
const page = await getAssetFromKV(event, 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 an error is thrown try to serve the asset at 404.html | ||
if (!DEBUG) { | ||
try { | ||
let notFoundResponse = await getAssetFromKV(event, { | ||
mapRequestToAsset: (req) => | ||
new Request(`${new URL(req.url).origin}/404.html`, req), | ||
}); | ||
|
||
return new Response(notFoundResponse.body, { | ||
...notFoundResponse, | ||
status: 404, | ||
}); | ||
} catch (e) {} | ||
} | ||
|
||
return new Response(e.message || e.toString(), { status: 500 }); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
name = "example-sites-app" | ||
site = { bucket = "./public" } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import { createFetchResult, setMockRawResponse } from "./mock-cfetch"; | ||
|
||
export function mockKeyListRequest( | ||
expectedNamespaceId: string, | ||
expectedKeys: string[], | ||
keysPerRequest = 1000, | ||
blankCursorValue: "" | undefined | null = undefined | ||
) { | ||
const requests = { count: 0 }; | ||
// See https://api.cloudflare.com/#workers-kv-namespace-list-a-namespace-s-keys | ||
const expectedKeyObjects = expectedKeys.map((name) => ({ | ||
name, | ||
expiration: 123456789, | ||
metadata: {}, | ||
})); | ||
setMockRawResponse( | ||
"/accounts/:accountId/storage/kv/namespaces/:namespaceId/keys", | ||
"GET", | ||
([_url, accountId, namespaceId], _init, query) => { | ||
requests.count++; | ||
expect(accountId).toEqual("some-account-id"); | ||
expect(namespaceId).toEqual(expectedNamespaceId); | ||
if (expectedKeyObjects.length <= keysPerRequest) { | ||
return createFetchResult(expectedKeyObjects); | ||
} else { | ||
const start = parseInt(query.get("cursor") ?? "0") || 0; | ||
const end = start + keysPerRequest; | ||
const cursor = end < expectedKeyObjects.length ? end : blankCursorValue; | ||
return createFetchResult( | ||
expectedKeyObjects.slice(start, end), | ||
true, | ||
[], | ||
[], | ||
{ cursor } | ||
); | ||
} | ||
} | ||
); | ||
return requests; | ||
} |
Oops, something went wrong.