Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -230,3 +230,5 @@ dist/**
.env*
!.env.example
.node-cache/

.opencode/plans
14 changes: 2 additions & 12 deletions fixtures/get-platform-proxy/tests/get-platform-proxy.env.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
import path from "path";
import { D1Database, R2Bucket } from "@cloudflare/workers-types";
import { toMatchImageSnapshot } from "jest-image-snapshot";
import {
afterEach,
beforeEach,
describe,
expect,
it,
MockInstance,
vi,
} from "vitest";
import { beforeEach, describe, expect, it, MockInstance, vi } from "vitest";
import { getPlatformProxy } from "./shared";
import type {
Fetcher,
Expand All @@ -18,7 +10,6 @@ import type {
KVNamespace,
Workflow,
} from "@cloudflare/workers-types";
import type { Unstable_DevWorker } from "wrangler";

type Env = {
MY_VAR: string;
Expand All @@ -39,7 +30,6 @@ type Env = {
const wranglerConfigFilePath = path.join(__dirname, "..", "wrangler.jsonc");

describe("getPlatformProxy - env", () => {
let devWorkers: Unstable_DevWorker[];
let warn = {} as MockInstance<typeof console.warn>;

beforeEach(() => {
Expand Down Expand Up @@ -276,7 +266,7 @@ describe("getPlatformProxy - env", () => {
"▲ [WARNING]  You have defined bindings to the following internal Durable Objects:
- {"class_name":"MyDurableObject","name":"MY_DURABLE_OBJECT"}
These will not work in local development, but they should work in production.

If you want to develop these locally, you can define your DO in a separate Worker, with a separate configuration file.
For detailed instructions, refer to the Durable Objects section here: https://developers.cloudflare.com/workers/wrangler/api#supported-bindings
"
Expand Down
28 changes: 12 additions & 16 deletions fixtures/local-mode-tests/tests/logging.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import path from "node:path";
import { setTimeout } from "node:timers/promises";
import util from "node:util";
import { afterEach, beforeEach, expect, it, Mock, vi } from "vitest";
import { unstable_dev } from "wrangler";
import { unstable_startWorker } from "wrangler";

let output = "";
function spyOnConsoleMethod(name: keyof typeof console) {
Expand All @@ -25,21 +25,17 @@ afterEach(() => {
it("logs startup errors", async () => {
let caughtError: unknown;
try {
const worker = await unstable_dev(
path.resolve(__dirname, "..", "src", "nodejs-compat.ts"),
{
config: path.resolve(__dirname, "..", "wrangler.logging.jsonc"),
// Intentionally omitting `compatibilityFlags: ["nodejs_compat"]`
ip: "127.0.0.1",
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
},
}
);
await worker.stop();
expect.fail("Expected unstable_dev() to fail");
const worker = await unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "nodejs-compat.ts"),
config: path.resolve(__dirname, "..", "wrangler.logging.jsonc"),
// Intentionally omitting `compatibilityFlags: ["nodejs_compat"]`
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
});
await worker.dispose();
expect.fail("Expected unstable_startWorker() to fail");
} catch (e) {
caughtError = e;
}
Expand Down
62 changes: 35 additions & 27 deletions fixtures/local-mode-tests/tests/module.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import path from "path";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import { unstable_dev } from "wrangler";
import type { Unstable_DevWorker } from "wrangler";
import { unstable_startWorker } from "wrangler";

describe("module worker", () => {
let worker: Unstable_DevWorker;
let worker: Awaited<ReturnType<typeof unstable_startWorker>>;

let originalNodeEnv: string | undefined;

Expand All @@ -14,33 +13,30 @@ describe("module worker", () => {

process.env.NODE_ENV = "local-testing";

worker = await unstable_dev(
path.resolve(__dirname, "..", "src", "module.ts"),
{
config: path.resolve(__dirname, "..", "wrangler.module.jsonc"),
vars: { VAR4: "https://google.com" },
ip: "127.0.0.1",
port: 0,
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
},
}
);
worker = await unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "module.ts"),
config: path.resolve(__dirname, "..", "wrangler.module.jsonc"),
bindings: {
VAR4: { type: "plain_text", value: "https://google.com" },
},
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
});
});

afterAll(async () => {
try {
await worker.stop();
await worker.dispose();
} catch (e) {
console.error("Failed to stop worker", e);
}
process.env.NODE_ENV = originalNodeEnv;
});

it("renders variables", async () => {
const resp = await worker.fetch("/vars");
const resp = await worker.fetch("http://example.com/vars");
expect(resp).not.toBe(undefined);

const text = await resp.text();
Expand All @@ -60,13 +56,15 @@ describe("module worker", () => {
});

it("should return Hi by default", async () => {
const resp = await worker.fetch("/");
const resp = await worker.fetch("http://example.com/");
expect(resp).not.toBe(undefined);
const respJson = await resp.text();
expect(respJson).toBe(JSON.stringify({ greeting: "Hi!" }));
});
it("should return Bonjour when French", async () => {
const resp = await worker.fetch("/", { headers: { lang: "fr-FR" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "fr-FR" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -75,7 +73,9 @@ describe("module worker", () => {
});

it("should return G'day when Australian", async () => {
const resp = await worker.fetch("/", { headers: { lang: "en-AU" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "en-AU" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -84,7 +84,9 @@ describe("module worker", () => {
});

it("should return Good day when British", async () => {
const resp = await worker.fetch("/", { headers: { lang: "en-GB" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "en-GB" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -93,7 +95,9 @@ describe("module worker", () => {
});

it("should return Howdy when Texan", async () => {
const resp = await worker.fetch("/", { headers: { lang: "en-TX" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "en-TX" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -102,7 +106,9 @@ describe("module worker", () => {
});

it("should return Hello when American", async () => {
const resp = await worker.fetch("/", { headers: { lang: "en-US" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "en-US" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -111,7 +117,9 @@ describe("module worker", () => {
});

it("should return Hola when Spanish", async () => {
const resp = await worker.fetch("/", { headers: { lang: "es-ES" } });
const resp = await worker.fetch("http://example.com/", {
headers: { lang: "es-ES" },
});
expect(resp).not.toBe(undefined);
if (resp) {
const respJson = await resp.text();
Expand All @@ -120,7 +128,7 @@ describe("module worker", () => {
});

it("returns hex string", async () => {
const resp = await worker.fetch("/buffer");
const resp = await worker.fetch("http://example.com/buffer");
expect(resp).not.toBe(undefined);

const text = await resp.text();
Expand Down
42 changes: 19 additions & 23 deletions fixtures/local-mode-tests/tests/ports.test.ts
Original file line number Diff line number Diff line change
@@ -1,49 +1,45 @@
import path from "path";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import { unstable_dev } from "wrangler";
import type { Unstable_DevWorker } from "wrangler";
import { unstable_startWorker } from "wrangler";

describe("multiple workers", () => {
let workers: Unstable_DevWorker[];
let workers: Awaited<ReturnType<typeof unstable_startWorker>>[];

beforeAll(async () => {
//since the script is invoked from the directory above, need to specify index.js is in src/

workers = await Promise.all([
unstable_dev(path.resolve(__dirname, "..", "src", "module.ts"), {
ip: "127.0.0.1",
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "module.ts"),
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
}),
unstable_dev(path.resolve(__dirname, "..", "src", "module.ts"), {
ip: "127.0.0.1",
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "module.ts"),
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
}),
unstable_dev(path.resolve(__dirname, "..", "src", "module.ts"), {
ip: "127.0.0.1",
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "module.ts"),
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
}),
]);
});

afterAll(async () => {
await Promise.all(workers.map(async (worker) => await worker.stop()));
await Promise.all(workers.map(async (worker) => await worker.dispose()));
});

it.concurrent("all workers should be fetchable", async () => {
const responses = await Promise.all(
workers.map(async (worker) => await worker.fetch())
workers.map(async (worker) => await worker.fetch("http://example.com/"))
);
const parsedResponses = await Promise.all(
responses.map(async (resp) => await resp.text())
Expand Down
30 changes: 12 additions & 18 deletions fixtures/local-mode-tests/tests/specified-port.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import assert from "node:assert";
import nodeNet from "node:net";
import path from "path";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import { unstable_dev } from "wrangler";
import type { Unstable_DevWorker } from "wrangler";
import { unstable_startWorker } from "wrangler";

function getPort() {
return new Promise<number>((resolve, reject) => {
Expand All @@ -20,30 +19,25 @@ function getPort() {
}

describe("specific port", () => {
let worker: Unstable_DevWorker;
let worker: Awaited<ReturnType<typeof unstable_startWorker>>;

beforeAll(async () => {
worker = await unstable_dev(
path.resolve(__dirname, "..", "src", "module.ts"),
{
config: path.resolve(__dirname, "..", "wrangler.module.jsonc"),
port: await getPort(),
ip: "127.0.0.1",
experimental: {
disableExperimentalWarning: true,
disableDevRegistry: true,
devEnv: true,
},
}
);
worker = await unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "module.ts"),
config: path.resolve(__dirname, "..", "wrangler.module.jsonc"),
dev: {
server: { hostname: "127.0.0.1", port: await getPort() },
inspector: false,
},
});
});

afterAll(async () => {
await worker?.stop();
await worker?.dispose();
});

it("fetches worker", async () => {
const resp = await worker.fetch("/");
const resp = await worker.fetch("http://example.com/");
expect(resp.status).toBe(200);
});
});
20 changes: 9 additions & 11 deletions fixtures/local-mode-tests/tests/sw.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import path from "path";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import { unstable_dev } from "wrangler";
import type { Unstable_DevWorker } from "wrangler";
import { unstable_startWorker } from "wrangler";

describe("service worker", () => {
let worker: Unstable_DevWorker;
let worker: Awaited<ReturnType<typeof unstable_startWorker>>;

let originalNodeEnv: string | undefined;

Expand All @@ -14,24 +13,23 @@ describe("service worker", () => {
process.env.NODE_ENV = "local-testing";

//since the script is invoked from the directory above, need to specify index.js is in src/
worker = await unstable_dev(path.resolve(__dirname, "..", "src", "sw.ts"), {
worker = await unstable_startWorker({
entrypoint: path.resolve(__dirname, "..", "src", "sw.ts"),
config: path.resolve(__dirname, "..", "wrangler.sw.jsonc"),
ip: "127.0.0.1",
experimental: {
disableDevRegistry: true,
disableExperimentalWarning: true,
devEnv: true,
dev: {
server: { hostname: "127.0.0.1", port: 0 },
inspector: false,
},
});
});

afterAll(async () => {
await worker.stop();
await worker.dispose();
process.env.NODE_ENV = originalNodeEnv;
});

it("renders", async () => {
const resp = await worker.fetch();
const resp = await worker.fetch("http://example.com/");
expect(resp).not.toBe(undefined);

const text = await resp.text();
Expand Down
Loading