Skip to content

Commit 5bcc9b0

Browse files
Use the native node:domain module when available
Co-Authored-By: [email protected] <[email protected]>
1 parent ee640d4 commit 5bcc9b0

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

.changeset/funny-terms-scream.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@cloudflare/unenv-preset": patch
3+
"wrangler": patch
4+
---
5+
6+
Use the native `node:domain` module when available

packages/unenv-preset/src/preset.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export function getCloudflarePreset({
7474
const fsOverrides = getFsOverrides(compat);
7575
const punycodeOverrides = getPunycodeOverrides(compat);
7676
const clusterOverrides = getClusterOverrides(compat);
77+
const domainOverrides = getDomainOverrides(compat);
7778

7879
// "dynamic" as they depend on the compatibility date and flags
7980
const dynamicNativeModules = [
@@ -84,6 +85,7 @@ export function getCloudflarePreset({
8485
...fsOverrides.nativeModules,
8586
...punycodeOverrides.nativeModules,
8687
...clusterOverrides.nativeModules,
88+
...domainOverrides.nativeModules,
8789
];
8890

8991
// "dynamic" as they depend on the compatibility date and flags
@@ -95,6 +97,7 @@ export function getCloudflarePreset({
9597
...fsOverrides.hybridModules,
9698
...punycodeOverrides.hybridModules,
9799
...clusterOverrides.hybridModules,
100+
...domainOverrides.hybridModules,
98101
];
99102

100103
return {
@@ -387,3 +390,41 @@ function getClusterOverrides({
387390
hybridModules: [],
388391
};
389392
}
393+
394+
/**
395+
* Returns the overrides for `node:domain` (unenv or workerd)
396+
*
397+
* The native domain implementation:
398+
* - is experimental
399+
* - can be enabled with the "enable_nodejs_domain_module" flag
400+
* - can be disabled with the "disable_nodejs_domain_module" flag
401+
*/
402+
function getDomainOverrides({
403+
// eslint-disable-next-line unused-imports/no-unused-vars
404+
compatibilityDate,
405+
compatibilityFlags,
406+
}: {
407+
compatibilityDate: string;
408+
compatibilityFlags: string[];
409+
}): { nativeModules: string[]; hybridModules: string[] } {
410+
const disabledByFlag = compatibilityFlags.includes(
411+
"disable_nodejs_domain_module"
412+
);
413+
414+
// TODO: add `enabledByDate` when a date is defined in workerd
415+
const enabledByFlag =
416+
compatibilityFlags.includes("enable_nodejs_domain_module") &&
417+
compatibilityFlags.includes("experimental");
418+
419+
const enabled = enabledByFlag && !disabledByFlag;
420+
421+
return enabled
422+
? {
423+
nativeModules: ["domain"],
424+
hybridModules: [],
425+
}
426+
: {
427+
nativeModules: [],
428+
hybridModules: [],
429+
};
430+
}

packages/wrangler/e2e/unenv-preset/preset.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,27 @@ const localTestConfigs: TestConfig[] = [
278278
},
279279
},
280280
],
281+
[
282+
// TODO: add test for disabled by date (no date defined yet)
283+
// TODO: add test for enabled by date (no date defined yet)
284+
{
285+
name: "domain enabled by flag",
286+
compatibilityDate: "2024-09-23",
287+
compatibilityFlags: ["enable_nodejs_domain_module", "experimental"],
288+
expectRuntimeFlags: {
289+
enable_nodejs_domain_module: true,
290+
},
291+
},
292+
// TODO: update the date past the default enable date (when defined)
293+
{
294+
name: "domain disabled by flag",
295+
compatibilityDate: "2024-09-23",
296+
compatibilityFlags: ["disable_nodejs_domain_module", "experimental"],
297+
expectRuntimeFlags: {
298+
enable_nodejs_domain_module: false,
299+
},
300+
},
301+
],
281302
].flat() as TestConfig[];
282303

283304
describe.each(localTestConfigs)(

0 commit comments

Comments
 (0)