Skip to content

Commit 189fe23

Browse files
authored
feat(unenv-preset): shim debug package for cloudflare env support (#10014)
* feat(unenv-preset): shim debug package for cloudflare env support * update patch
1 parent e87198a commit 189fe23

File tree

11 files changed

+223
-121
lines changed

11 files changed

+223
-121
lines changed

.changeset/debug-shims-bundle.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cloudflare/unenv-preset": minor
3+
---
4+
5+
Shim `debug` npm package with patched version for cloudflare env support

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
},
8080
"patchedDependencies": {
8181
"@cloudflare/[email protected]": "patches/@[email protected]",
82+
8283
8384
8485

packages/unenv-preset/build.config.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,22 @@ export default defineBuildConfig({
44
declaration: true,
55
rollup: {
66
cjsBridge: true,
7+
inlineDependencies: true,
8+
resolve: {
9+
exportConditions: ["workerd"],
10+
},
711
},
12+
externals: [/^cloudflare:/],
813
entries: [
914
"src/index",
10-
{ input: "src/runtime/", outDir: "dist/runtime", format: "esm" },
15+
// Use rollup for debug file to inline the dependency
16+
"src/runtime/npm/debug",
17+
// Use mkdist for the rest to preserve structure
18+
{
19+
input: "src/runtime/",
20+
outDir: "dist/runtime",
21+
format: "esm",
22+
pattern: ["**", "!npm/debug.ts"],
23+
},
1124
],
1225
});

packages/unenv-preset/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@
4545
"test:watch": "vitest"
4646
},
4747
"devDependencies": {
48+
"@types/debug": "4.1.12",
4849
"@types/node-unenv": "npm:@types/node@^22.14.0",
50+
"debug": "4.4.1",
4951
"typescript": "catalog:default",
5052
"unbuild": "^3.2.0",
5153
"undici": "catalog:default",

packages/unenv-preset/src/preset.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ export const cloudflare: Preset = {
7979
[`node:${m}`, `@cloudflare/unenv-preset/node/${m}`],
8080
])
8181
),
82+
83+
// To override the npm shim from unenv
84+
debug: "@cloudflare/unenv-preset/npm/debug",
8285
},
8386
inject: {
8487
// Setting symbols implemented by workerd to `false` so that `inject`s defined in base presets are not used.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from "debug";

packages/unenv-preset/tests/index.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ describe(`@cloudflare/unenv-preset ${platform} ${workerdPath}`, () => {
3737
const body = await response.text();
3838
expect(body).toMatch("OK!");
3939
});
40-
} catch {
40+
} catch (e) {
41+
// Log the output before re-throwing the error
4142
console.log("OUTPUT", await getOutput());
43+
throw e;
4244
}
4345
});
4446
});

packages/unenv-preset/tests/worker/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const TESTS = {
1212
testTimers,
1313
testNet,
1414
testTls,
15+
testDebug,
1516
};
1617

1718
export default {
@@ -175,3 +176,20 @@ export async function testTls() {
175176
assert.strictEqual(typeof tls, "object");
176177
assert.strictEqual(typeof tls.convertALPNProtocols, "function");
177178
}
179+
180+
export async function testDebug() {
181+
const debug = await import("@cloudflare/unenv-preset/npm/debug");
182+
const logs: string[] = [];
183+
184+
// Append all logs to the array instead of logging to console
185+
debug.default.log = (...args) =>
186+
logs.push(args.map((arg) => arg.toString()).join(" "));
187+
188+
const exampleLog = debug.default("example");
189+
const testLog = exampleLog.extend("test");
190+
191+
exampleLog("This is an example log");
192+
testLog("This is a test log");
193+
194+
assert.deepEqual(logs, ["example This is an example log +0ms"]);
195+
}

packages/unenv-preset/tests/worker/wrangler.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22
"name": "cloudflare-unenv-preset-test",
33
"main": "./index.ts",
44
"compatibility_date": "2024-12-16",
5-
"compatibility_flags": ["nodejs_compat"]
5+
"compatibility_flags": ["nodejs_compat"],
6+
"vars": {
7+
"DEBUG": "example"
8+
}
69
}

patches/[email protected]

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
diff --git a/package.json b/package.json
2+
index afc2f8b615b2229c7b3b818c5f4b6f90dcc99f9a..a92870c2e9bda8dfe042ec48a0ed2669e8546e22 100644
3+
--- a/package.json
4+
+++ b/package.json
5+
@@ -53,6 +53,12 @@
6+
},
7+
"main": "./src/index.js",
8+
"browser": "./src/browser.js",
9+
+ "exports": {
10+
+ "workerd": "./src/workerd.js",
11+
+ "node": "./src/index.js",
12+
+ "browser": "./src/browser.js",
13+
+ "default": "./src/index.js"
14+
+ },
15+
"engines": {
16+
"node": ">=6.0"
17+
},
18+
diff --git a/src/workerd.js b/src/workerd.js
19+
new file mode 100644
20+
index 0000000000000000000000000000000000000000..ccc6e14bace87cc7bfccdf957c25f89a9e2df8ca
21+
--- /dev/null
22+
+++ b/src/workerd.js
23+
@@ -0,0 +1,17 @@
24+
+import { env } from "cloudflare:workers";
25+
+import humanize from "ms";
26+
+import setup from "./common";
27+
+
28+
+const createDebug = setup({
29+
+ log: console.debug.bind(console),
30+
+ load: () => env.DEBUG,
31+
+ save: () => {},
32+
+ colors: [],
33+
+ useColors: () => false,
34+
+ destroy: () => {},
35+
+ formatArgs(args) {
36+
+ args[0] = this.namespace + " " + args[0] + " +" + humanize(this.diff);
37+
+ }
38+
+});
39+
+
40+
+export default createDebug;

0 commit comments

Comments
 (0)