diff --git a/.changeset/short-cougars-approve.md b/.changeset/short-cougars-approve.md new file mode 100644 index 0000000000000..73a093420f75b --- /dev/null +++ b/.changeset/short-cougars-approve.md @@ -0,0 +1,7 @@ +--- +"wrangler": patch +--- + +`text_blobs`/Text module support for service worker format in local mode + +This adds support for `text_blobs`/Text module support in local mode. Now that https://github.com/cloudflare/miniflare/pull/228 has landed in miniflare (thanks @caass!), we can use that in wrangler as well. diff --git a/packages/wrangler/src/__tests__/configuration.test.ts b/packages/wrangler/src/__tests__/configuration.test.ts index ec5d5b8219add..4a2dec0332206 100644 --- a/packages/wrangler/src/__tests__/configuration.test.ts +++ b/packages/wrangler/src/__tests__/configuration.test.ts @@ -354,7 +354,7 @@ describe("normalizeAndValidateConfig()", () => { expect(diagnostics.hasWarnings()).toBe(false); }); - it("should error on invalid `wasm_module` paths", () => { + it("should error on invalid `wasm_modules` paths", () => { const expectedConfig = { wasm_modules: { MODULE_1: 111, diff --git a/packages/wrangler/src/dev/local.tsx b/packages/wrangler/src/dev/local.tsx index 74d9ad884f59f..359bb3123bf75 100644 --- a/packages/wrangler/src/dev/local.tsx +++ b/packages/wrangler/src/dev/local.tsx @@ -82,6 +82,7 @@ function useLocalWorker({ const scriptPath = realpathSync(bundle.path); const wasmBindings = { ...bindings.wasm_modules }; + const textBlobBindings = { ...bindings.text_blobs }; if (format === "service-worker") { for (const { type, name } of bundle.modules) { if (type === "compiled-wasm") { @@ -91,6 +92,13 @@ function useLocalWorker({ // characters with an underscore. const identifier = name.replace(/[^a-zA-Z0-9_$]/g, "_"); wasmBindings[identifier] = name; + } else if (type === "text") { + // In service-worker format, text modules are referenced by global identifiers, + // so we convert it here. + // This identifier has to be a valid JS identifier, so we replace all non alphanumeric + // characters with an underscore. + const identifier = name.replace(/[^a-zA-Z0-9_$]/g, "_"); + textBlobBindings[identifier] = name; } } } @@ -130,6 +138,7 @@ function useLocalWorker({ : undefined, bindings: bindings.vars, wasmBindings, + textBlobBindings, sourceMap: true, logUnhandledRejections: true, }; @@ -227,6 +236,7 @@ function useLocalWorker({ publicDirectory, rules, bindings.wasm_modules, + bindings.text_blobs, ]); return { inspectorUrl }; } diff --git a/packages/wrangler/src/module-collection.ts b/packages/wrangler/src/module-collection.ts index 00fff432c5933..f979bb2826cb3 100644 --- a/packages/wrangler/src/module-collection.ts +++ b/packages/wrangler/src/module-collection.ts @@ -102,7 +102,7 @@ export default function createModuleCollector(props: { modules.splice(0); }); - // ~ start legacy module specifier support ~ + // ~ start legacy module specifier support ~ // This section detects usage of "legacy" 1.x style module specifiers // and modifies them so they "work" in wrangler v2, but with a warning