Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ Version 2.0.32

To be released.

### @fedify/cfworkers

- Fixed npm refusing to install `@fedify/cfworkers` alongside
`@cloudflare/workers-types` 5.x, which recent versions of Wrangler
require, unless `--legacy-peer-deps` or an override was used. The peer
dependency on `@cloudflare/workers-types` now accepts both 4.x and 5.x,
so you can drop such workarounds. [[#1255], [#1260]]

[#1255]: https://github.com/fedify-dev/fedify/issues/1255
[#1260]: https://github.com/fedify-dev/fedify/pull/1260


Version 2.0.31
--------------
Expand Down
10 changes: 10 additions & 0 deletions changes.d/cfworkers/workers-types-v5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
links:
'#1255': https://github.com/fedify-dev/fedify/issues/1255
'#1260': https://github.com/fedify-dev/fedify/pull/1260
---
- Fixed npm refusing to install `@fedify/cfworkers` alongside
`@cloudflare/workers-types` 5.x, which recent versions of Wrangler
require, unless `--legacy-peer-deps` or an override was used. The peer
dependency on `@cloudflare/workers-types` now accepts both 4.x and 5.x,
so you can drop such workarounds. [[#1255], [#1260]]
3 changes: 3 additions & 0 deletions deno.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions packages/cfworkers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@
],
"peerDependencies": {
"@fedify/fedify": "workspace:^",
"@cloudflare/workers-types": "catalog:"
"@cloudflare/workers-types": "^4.20250906.0 || ^5.0.0"
},
"devDependencies": {
"@cloudflare/vitest-pool-workers": "^0.8.31",
"@cloudflare/workers-types": "catalog:",
"semver": "^7.7.2",
"tsdown": "catalog:",
"typescript": "catalog:",
"vitest": "~3.2.0",
Expand All @@ -67,6 +69,6 @@
"prepack": "pnpm build",
"prepublish": "pnpm build",
"pretest": "pnpm build",
"test": "tsc -p test/typecheck/tsconfig.json --noEmit && vitest run"
"test": "tsc -p test/typecheck/tsconfig.json --noEmit && node --test test/peer-dependencies.check.mjs && vitest run"
}
}
56 changes: 56 additions & 0 deletions packages/cfworkers/test/peer-dependencies.check.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Checks the published peer dependency range on `@cloudflare/workers-types`.
// npm refuses to install packages whose peer ranges do not overlap, so the
// range has to accept every major version users can reasonably install
// alongside current Wrangler releases. See also:
// https://github.com/fedify-dev/fedify/issues/1255
import { ok } from "node:assert/strict";
import { readFile } from "node:fs/promises";
import { test } from "node:test";
import semver from "semver";

const PACKAGE_NAME = "@cloudflare/workers-types";

async function getPeerRange() {
const manifest = JSON.parse(
await readFile(new URL("../package.json", import.meta.url), "utf-8"),
);
const range = manifest.peerDependencies[PACKAGE_NAME];
if (range !== "catalog:") return range;
// pnpm replaces `catalog:` with the range from the default catalog when
// the package is published, so resolve it the same way:
const workspace = await readFile(
new URL("../../../pnpm-workspace.yaml", import.meta.url),
"utf-8",
);
const pattern = new RegExp(
`^\\s+["']?${PACKAGE_NAME.replaceAll("/", "\\/")}["']?:\\s*(.+?)\\s*$`,
"m",
);
const match = workspace.match(pattern);
ok(match != null, `${PACKAGE_NAME} is not found in the pnpm catalog.`);
return match[1].replace(/^(["'])(.*)\1$/, "$2");
}

test(`peer dependency on ${PACKAGE_NAME}`, async () => {
const range = await getPeerRange();
ok(semver.validRange(range) != null, `Invalid range: ${range}`);
for (
const version of [
"4.20250906.0", // The minimum version that we support.
"4.20260702.1", // The last v4 release.
"5.20260703.1", // The first v5 release.
"5.20261006.1",
]
) {
ok(
semver.satisfies(version, range),
`${PACKAGE_NAME}@${version} should satisfy ${range}.`,
);
}
for (const version of ["4.20250905.0", "6.0.0"]) {
ok(
!semver.satisfies(version, range),
`${PACKAGE_NAME}@${version} should not satisfy ${range}.`,
);
}
});
16 changes: 16 additions & 0 deletions packages/cfworkers/test/typecheck/workers-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { KVNamespace, Queue } from "@cloudflare/workers-types";
import type { KvStore, MessageQueue } from "@fedify/fedify/federation";
import { WorkersKvStore, WorkersMessageQueue } from "../../dist/mod.js";

// Checks that the public API accepts the KV and Queue bindings declared by
// `@cloudflare/workers-types` itself, in addition to the `wrangler types`
// declarations covered by wrangler-generated-kv.ts.

declare const kv: KVNamespace;
declare const queue: Queue;

export const store: KvStore = new WorkersKvStore(kv);
export const mq: MessageQueue = new WorkersMessageQueue(queue);
export const orderedMq: MessageQueue = new WorkersMessageQueue(queue, {
orderingKv: kv,
});
44 changes: 20 additions & 24 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading