Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: cloudflare/workers-sdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: miniflare@3.20240419.1
Choose a base ref
...
head repository: cloudflare/workers-sdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: miniflare@3.20240512.0
Choose a head ref
  • 11 commits
  • 55 files changed
  • 10 contributors

Commits on May 10, 2024

  1. docs: highlight contributing guide in PR template (#5796)

    petebacondarwin authored May 10, 2024

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    9258fa8 View commit details
  2. ci: don't run c3 checks on non-cloudflare repos (#5797)

    petebacondarwin authored May 10, 2024

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    fa045c9 View commit details
  3. chore: bump vitest to 1.5.0 and loosen version requirement for vitest…

    …-pool-workers (#5458)
    
    * chore: bump vitest to 1.4.0 for vitest-pool-workers
    
    * chore: bump to vitest v1.5.0
    
    * fix: loosen vitest version range
    
    * chore: rebuild pnpm lockfile
    
    * chore: rebuild pnpm lockfile
    
    * update c3 hello world templates to latest vitest integration
    
    * pin c3 hello world templates to old vitest integration
    
    ---------
    
    Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com>
    Cherry and petebacondarwin authored May 10, 2024

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    f520a71 View commit details
  4. skip header rules on asset handler error (#5750)

    * skip header rules on asset handler error
    
    * Update packages/pages-shared/asset-server/handler.ts
    
    Co-authored-by: Daniel Walsh <walshydev@gmail.com>
    
    * Update packages/pages-shared/asset-server/handler.ts
    
    Co-authored-by: Daniel Walsh <walshydev@gmail.com>
    
    * update test to include 404, 301
    
    * Only prevent attaching headers for 5XX errors
    
    ---------
    
    Co-authored-by: Daniel Walsh <walshydev@gmail.com>
    Co-authored-by: Greg Brimble <gbrimble@cloudflare.com>
    3 people authored May 10, 2024

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    f514934 View commit details

Commits on May 13, 2024

  1. Version Packages (#5803)

    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    workers-devprod and github-actions[bot] authored May 13, 2024
    Copy the full SHA
    9c31ea2 View commit details
  2. chore: remove no longer used ai dependency (#5763)

    Cherry authored May 13, 2024
    Copy the full SHA
    07733c7 View commit details
  3. Support mtls_certificate and browser bindings for Pages (#5712)

    * support mtls + browser
    
    * Update purple-terms-tell.md
    penalosa authored May 13, 2024
    Copy the full SHA
    151bc3d View commit details
  4. miniflare: compress responses more like Cloudflare FL (#5798)

    * chore: fix whitespace (use tabs within tempate literal strings)
    
    * fix: compress responses more like Cloudflare FL
    
    * add changeset
    
    * fix import order
    
    * nits
    
    * chore: refactor undici imports to use namespace
    
    * fix: remove Content-Encoding header in dispatchFetch
    since undici has already decompressed the response body
    
    * add test assertions + explanatory comments
    RamIdeas authored May 13, 2024
    Copy the full SHA
    89b6d7f View commit details

Commits on May 14, 2024

  1. Add gateway failure retries for Pages project uploads (#5813)

    GregBrimble authored May 14, 2024
    Copy the full SHA
    9627cef View commit details
  2. chore(deps): bump the workerd-and-workers-types group across 1 direct… (

    #5827)
    
    * chore(deps): bump the workerd-and-workers-types group across 1 directory with 2 updates
    
    Bumps the workerd-and-workers-types group with 2 updates in the / directory: [@cloudflare/workers-types](https://github.com/cloudflare/workerd) and [workerd](https://github.com/cloudflare/workerd).
    
    Updates `@cloudflare/workers-types` from 4.20240419.0 to 4.20240512.0
    - [Release notes](https://github.com/cloudflare/workerd/releases)
    - [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
    - [Commits](https://github.com/cloudflare/workerd/commits)
    
    Updates `workerd` from 1.20240419.0 to 1.20240512.0
    - [Release notes](https://github.com/cloudflare/workerd/releases)
    - [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
    - [Commits](cloudflare/workerd@v1.20240419.0...v1.20240512.0)
    
    ---
    updated-dependencies:
    - dependency-name: "@cloudflare/workers-types"
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: workerd-and-workers-types
    - dependency-name: workerd
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: workerd-and-workers-types
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    
    * chore: update dependencies of "miniflare" package
    
    The following dependency versions have been updated:
    
    | Dependency                | From          | To            |
    | ------------------------- | ------------- | ------------- |
    | workerd                   | 1.20240419.0  | 1.20240512.0  |
    | @cloudflare/workers-types | ^4.20240419.0 | ^4.20240512.0 |
    
    ---------
    
    Signed-off-by: dependabot[bot] <support@github.com>
    petebacondarwin authored May 14, 2024
    Copy the full SHA
    0725f6f View commit details
  3. Version Packages (#5811)

    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    workers-devprod and github-actions[bot] authored May 14, 2024
    Copy the full SHA
    38063d9 View commit details
Showing with 884 additions and 464 deletions.
  1. +5 −0 .github/pull_request_template.md
  2. +1 −1 .github/workflows/c3-e2e.yml
  3. +1 −1 fixtures/additional-modules/package.json
  4. +1 −2 fixtures/ai-app/package.json
  5. +1 −1 fixtures/external-durable-objects-app/package.json
  6. +1 −1 fixtures/external-service-bindings-app/package.json
  7. +1 −1 fixtures/get-bindings-proxy/package.json
  8. +1 −1 fixtures/get-platform-proxy/package.json
  9. +1 −1 fixtures/local-mode-tests/package.json
  10. +1 −1 fixtures/node-app-pages/package.json
  11. +1 −1 fixtures/pages-dev-proxy-with-script/package.json
  12. +1 −1 fixtures/pages-functions-app/package.json
  13. +1 −1 fixtures/pages-functions-with-routes-app/package.json
  14. +1 −1 fixtures/pages-plugin-mounted-on-root-app/package.json
  15. +1 −1 fixtures/pages-simple-assets/package.json
  16. +1 −1 fixtures/remix-pages-app/package.json
  17. +2 −2 fixtures/vitest-pool-workers-examples/package.json
  18. +1 −1 fixtures/worker-ts/package.json
  19. +1 −1 package.json
  20. +1 −1 packages/create-cloudflare/package.json
  21. +1 −1 packages/edge-preview-authenticated-proxy/package.json
  22. +1 −1 packages/format-errors/package.json
  23. +1 −1 packages/kv-asset-handler/package.json
  24. +15 −0 packages/miniflare/CHANGELOG.md
  25. +3 −3 packages/miniflare/package.json
  26. +9 −9 packages/miniflare/src/http/fetch.ts
  27. +16 −2 packages/miniflare/src/index.ts
  28. +59 −0 packages/miniflare/src/shared/mime-types.ts
  29. +7 −0 packages/miniflare/src/workers/core/entry.worker.ts
  30. +326 −265 packages/miniflare/test/index.spec.ts
  31. +16 −0 packages/pages-shared/CHANGELOG.md
  32. +74 −0 packages/pages-shared/__tests__/asset-server/handler.test.ts
  33. +5 −1 packages/pages-shared/asset-server/handler.ts
  34. +2 −2 packages/pages-shared/package.json
  35. +1 −1 packages/playground-preview-worker/package.json
  36. +1 −1 packages/prerelease-registry/package.json
  37. +1 −1 packages/quick-edit-extension/package.json
  38. +17 −0 packages/vitest-pool-workers/CHANGELOG.md
  39. +7 −5 packages/vitest-pool-workers/package.json
  40. +1 −1 packages/vitest-pool-workers/src/config/index.ts
  41. +1 −1 packages/vitest-pool-workers/src/pool/config.ts
  42. +6 −5 packages/vitest-pool-workers/src/pool/index.ts
  43. +0 −2 packages/vitest-pool-workers/src/worker/lib/cloudflare/test-runner.ts
  44. +1 −1 packages/vitest-pool-workers/vitest.workers.config.ts
  45. +1 −1 packages/workers.new/package.json
  46. +17 −0 packages/wrangler/CHANGELOG.md
  47. +3 −3 packages/wrangler/package.json
  48. +2 −0 packages/wrangler/src/__tests__/config-validation-pages.test.ts
  49. +74 −0 packages/wrangler/src/__tests__/pages/project-upload.test.ts
  50. +1 −0 packages/wrangler/src/cfetch/internal.ts
  51. +2 −0 packages/wrangler/src/config/validation-pages.ts
  52. +3 −2 packages/wrangler/src/pages/constants.ts
  53. +17 −1 packages/wrangler/src/pages/upload.tsx
  54. +14 −0 packages/wrangler/src/parse.ts
  55. +154 −133 pnpm-lock.yaml
5 changes: 5 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -21,6 +21,11 @@ Fixes #[insert GH or internal issue number(s)].
- [ ] Cloudflare docs PR(s): <https://github.com/cloudflare/cloudflare-docs/pull/>...
- [ ] Not necessary because:

<!--
Have you read our [Contributing guide](https://github.com/cloudflare/workers-sdk/blob/main/CONTRIBUTING.md)?
In particular, for non-trivial changes, please always engage on the issue or create a discussion or feature request issue first before writing your code.
-->

<!--
**Note for PR author:**
We want to celebrate and highlight awesome PR review!
2 changes: 1 addition & 1 deletion .github/workflows/c3-e2e.yml
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ jobs:
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-${{ matrix.pm }}
cancel-in-progress: true
name: ${{ format('E2E ({0} on {1})', matrix.pm, matrix.os) }}
if: ${{ github.repository_owner == 'cloudflare' && github.event.pull_request.user.login != 'dependabot[bot]' }}
if: github.repository_owner == 'cloudflare' && github.event.pull_request.user.login != 'dependabot[bot]'
strategy:
fail-fast: false
matrix:
2 changes: 1 addition & 1 deletion fixtures/additional-modules/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"undici": "^5.28.3",
"wrangler": "workspace:*"
}
3 changes: 1 addition & 2 deletions fixtures/ai-app/package.json
Original file line number Diff line number Diff line change
@@ -14,7 +14,6 @@
"devDependencies": {
"undici": "^5.28.3",
"wrangler": "workspace:*",
"@cloudflare/workers-tsconfig": "workspace:^",
"@cloudflare/ai": "^1.0.35"
"@cloudflare/workers-tsconfig": "workspace:^"
}
}
2 changes: 1 addition & 1 deletion fixtures/external-durable-objects-app/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
"devDependencies": {
"undici": "^5.28.3",
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"wrangler": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion fixtures/external-service-bindings-app/package.json
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@
"undici": "^5.28.3",
"concurrently": "^8.2.1",
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"wrangler": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion fixtures/get-bindings-proxy/package.json
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"wrangler": "workspace:*",
"undici": "^5.28.3"
}
2 changes: 1 addition & 1 deletion fixtures/get-platform-proxy/package.json
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"wrangler": "workspace:*",
"undici": "^5.28.3"
}
2 changes: 1 addition & 1 deletion fixtures/local-mode-tests/package.json
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@types/node": "^17.0.33",
"buffer": "^6.0.3",
"wrangler": "workspace:*"
2 changes: 1 addition & 1 deletion fixtures/node-app-pages/package.json
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"undici": "^5.28.3",
"wrangler": "workspace:*"
},
2 changes: 1 addition & 1 deletion fixtures/pages-dev-proxy-with-script/package.json
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"undici": "^5.28.3",
"wrangler": "workspace:*"
},
2 changes: 1 addition & 1 deletion fixtures/pages-functions-app/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"pages-plugin-example": "workspace:*",
"undici": "^5.28.3",
"wrangler": "workspace:*"
2 changes: 1 addition & 1 deletion fixtures/pages-functions-with-routes-app/package.json
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"undici": "^5.28.3",
"wrangler": "workspace:*"
},
2 changes: 1 addition & 1 deletion fixtures/pages-plugin-mounted-on-root-app/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"pages-plugin-example": "workspace:*",
"undici": "^5.28.3",
"wrangler": "workspace:*"
2 changes: 1 addition & 1 deletion fixtures/pages-simple-assets/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"undici": "^5.28.3",
"wrangler": "workspace:*"
},
2 changes: 1 addition & 1 deletion fixtures/remix-pages-app/package.json
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@
},
"devDependencies": {
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@remix-run/cloudflare": "^1.17.0",
"@remix-run/dev": "^1.17.0",
"@remix-run/eslint-config": "^1.17.0",
4 changes: 2 additions & 2 deletions fixtures/vitest-pool-workers-examples/package.json
Original file line number Diff line number Diff line change
@@ -9,13 +9,13 @@
},
"devDependencies": {
"@cloudflare/vitest-pool-workers": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@types/node": "20.8.3",
"jose": "^5.2.2",
"miniflare": "workspace:*",
"toucan-js": "^3.3.1",
"typescript": "^5.3.3",
"vitest": "1.3.0",
"vitest": "1.5.0",
"wrangler": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion fixtures/worker-ts/package.json
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
"start": "wrangler dev"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"wrangler": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@
"@changesets/changelog-github": "^0.5.0",
"@changesets/cli": "^2.27.1",
"@changesets/parse": "^0.4.0",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@turbo/gen": "^1.10.13",
"@vue/compiler-sfc": "^3.3.4",
"dotenv-cli": "^7.3.0",
2 changes: 1 addition & 1 deletion packages/create-cloudflare/package.json
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@
"@cloudflare/cli": "workspace:*",
"@cloudflare/eslint-config-worker": "*",
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@iarna/toml": "^3.0.0",
"@types/command-exists": "^1.2.0",
"@types/cross-spawn": "^6.0.2",
2 changes: 1 addition & 1 deletion packages/edge-preview-authenticated-proxy/package.json
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
},
"devDependencies": {
"@cloudflare/eslint-config-worker": "*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@types/cookie": "^0.6.0",
"cookie": "^0.6.0",
"promjs": "^0.4.2",
2 changes: 1 addition & 1 deletion packages/format-errors/package.json
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
},
"devDependencies": {
"@cloudflare/eslint-config-worker": "*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"mustache": "^4.2.0",
"promjs": "^0.4.2",
"toucan-js": "^3.2.3",
2 changes: 1 addition & 1 deletion packages/kv-asset-handler/package.json
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@
},
"devDependencies": {
"@ava/typescript": "^4.1.0",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@types/mime": "^3.0.4",
"@types/node": "^18.11.12",
"ava": "^6.0.1",
15 changes: 15 additions & 0 deletions packages/miniflare/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# miniflare

## 3.20240512.0

### Patch Changes

- [#5827](https://github.com/cloudflare/workers-sdk/pull/5827) [`0725f6f`](https://github.com/cloudflare/workers-sdk/commit/0725f6f73199daf7f11eec9830bc4d1f66c05d62) Thanks [@petebacondarwin](https://github.com/petebacondarwin)! - chore: update dependencies of "miniflare" package

The following dependency versions have been updated:

| Dependency | From | To |
| ------------------------- | ------------- | ------------- |
| workerd | 1.20240419.0 | 1.20240512.0 |
| @cloudflare/workers-types | ^4.20240419.0 | ^4.20240512.0 |

- [#5798](https://github.com/cloudflare/workers-sdk/pull/5798) [`89b6d7f`](https://github.com/cloudflare/workers-sdk/commit/89b6d7f3832b350b470a981eb3b4388517612363) Thanks [@RamIdeas](https://github.com/RamIdeas)! - fix: update miniflare's response compression to act more like Cloudflare platform

## 3.20240419.1

### Minor Changes
6 changes: 3 additions & 3 deletions packages/miniflare/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "miniflare",
"version": "3.20240419.1",
"version": "3.20240512.0",
"description": "Fun, full-featured, fully-local simulator for Cloudflare Workers",
"keywords": [
"cloudflare",
@@ -49,15 +49,15 @@
"glob-to-regexp": "^0.4.1",
"stoppable": "^1.1.0",
"undici": "^5.28.2",
"workerd": "1.20240419.0",
"workerd": "1.20240512.0",
"ws": "^8.11.0",
"youch": "^3.2.2",
"zod": "^3.20.6"
},
"devDependencies": {
"@ava/typescript": "^4.0.0",
"@cloudflare/kv-asset-handler": "workspace:*",
"@cloudflare/workers-types": "^4.20240419.0",
"@cloudflare/workers-types": "^4.20240512.0",
"@microsoft/api-extractor": "^7.36.3",
"@types/debug": "^4.1.7",
"@types/estree": "^1.0.0",
18 changes: 9 additions & 9 deletions packages/miniflare/src/http/fetch.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import http from "http";
import { IncomingRequestCfProperties } from "@cloudflare/workers-types/experimental";
import { Dispatcher, Headers, fetch as baseFetch } from "undici";
import * as undici from "undici";
import NodeWebSocket from "ws";
import { CoreHeaders, DeferredPromise } from "../workers";
import { Request, RequestInfo, RequestInit } from "./request";
import { Response } from "./response";
import { WebSocketPair, coupleWebSocket } from "./websocket";

const ignored = ["transfer-encoding", "connection", "keep-alive", "expect"];
function headersFromIncomingRequest(req: http.IncomingMessage): Headers {
function headersFromIncomingRequest(req: http.IncomingMessage): undici.Headers {
const entries = Object.entries(req.headers).filter(
(pair): pair is [string, string | string[]] => {
const [name, value] = pair;
return !ignored.includes(name) && value !== undefined;
}
);
return new Headers(Object.fromEntries(entries));
return new undici.Headers(Object.fromEntries(entries));
}

export async function fetch(
@@ -87,7 +87,7 @@ export async function fetch(
return responsePromise;
}

const response = await baseFetch(request, {
const response = await undici.fetch(request, {
dispatcher: requestInit?.dispatcher,
});
return new Response(response.body, response);
@@ -110,7 +110,7 @@ function addHeader(/* mut */ headers: AnyHeaders, key: string, value: string) {
* `workerd` server is listening on. Handles cases where `fetch()` redirects to
* same origin and different external origins.
*/
export class DispatchFetchDispatcher extends Dispatcher {
export class DispatchFetchDispatcher extends undici.Dispatcher {
private readonly cfBlobJson?: string;

/**
@@ -124,8 +124,8 @@ export class DispatchFetchDispatcher extends Dispatcher {
* @param cfBlob `request.cf` blob override for runtime requests
*/
constructor(
private readonly globalDispatcher: Dispatcher,
private readonly runtimeDispatcher: Dispatcher,
private readonly globalDispatcher: undici.Dispatcher,
private readonly runtimeDispatcher: undici.Dispatcher,
private readonly actualRuntimeOrigin: string,
private readonly userRuntimeOrigin: string,
cfBlob?: IncomingRequestCfProperties
@@ -149,8 +149,8 @@ export class DispatchFetchDispatcher extends Dispatcher {
}

dispatch(
/* mut */ options: Dispatcher.DispatchOptions,
handler: Dispatcher.DispatchHandlers
/* mut */ options: undici.Dispatcher.DispatchOptions,
handler: undici.Dispatcher.DispatchHandlers
): boolean {
let origin = String(options.origin);
// The first request in a redirect chain will always match the user origin
18 changes: 16 additions & 2 deletions packages/miniflare/src/index.ts
Original file line number Diff line number Diff line change
@@ -103,6 +103,7 @@ import {
parseWithRootPath,
stripAnsi,
} from "./shared";
import { isCompressedByCloudflareFL } from "./shared/mime-types";
import {
CoreBindings,
CoreHeaders,
@@ -546,9 +547,11 @@ const restrictedWebSocketUpgradeHeaders = [
"sec-websocket-accept",
];

export function _transformsForContentEncoding(encoding?: string): Transform[] {
export function _transformsForContentEncodingAndContentType(encoding: string | undefined, type: string | undefined | null): Transform[] {
const encoders: Transform[] = [];
if (!encoding) return encoders;
// if cloudflare's FL does not compress this mime-type, then don't compress locally either
if (!isCompressedByCloudflareFL(type)) return encoders;

// Reverse of https://github.com/nodejs/undici/blob/48d9578f431cbbd6e74f77455ba92184f57096cf/lib/fetch/index.js#L1660
const codings = encoding
@@ -587,7 +590,8 @@ async function writeResponse(response: Response, res: http.ServerResponse) {
// If a `Content-Encoding` header is set, we'll need to encode the body
// (likely only set by custom service bindings)
const encoding = headers["content-encoding"]?.toString();
const encoders = _transformsForContentEncoding(encoding);
const type = headers["content-type"]?.toString();
const encoders = _transformsForContentEncodingAndContentType(encoding, type);
if (encoders.length > 0) {
// `Content-Length` if set, will be wrong as it's for the decoded length
delete headers["content-length"];
@@ -1586,6 +1590,16 @@ export class Miniflare {
throw reviveError(this.#workerSrcOpts, caught);
}

// At this point, undici.fetch (used inside fetch, above)
// has decompressed the response body but retained the Content-Encoding header.
// This can cause problems for client implementations which rely
// on the Content-Encoding header rather than trying to infer it from the body.
// Technically, at this point, this a malformed response so let's remove the header
// Retain it as MF-Content-Encoding so we can tell the body was actually compressed.
const contentEncoding = response.headers.get('Content-Encoding');
if (contentEncoding) response.headers.set('MF-Content-Encoding', contentEncoding);
response.headers.delete('Content-Encoding');

if (
process.env.MINIFLARE_ASSERT_BODIES_CONSUMED === "true" &&
response.body !== null
Loading