UNPKG

@cloudflare/unenv-preset

Version:
161 lines (155 loc) 4.62 kB
// -- Unbuild CommonJS Shims -- import __cjs_url__ from 'url'; import __cjs_path__ from 'path'; import __cjs_mod__ from 'module'; const __filename = __cjs_url__.fileURLToPath(import.meta.url); const __dirname = __cjs_path__.dirname(__filename); const require = __cjs_mod__.createRequire(import.meta.url); const version = "2.6.3"; const nativeModules = [ "_stream_duplex", "_stream_passthrough", "_stream_readable", "_stream_transform", "_stream_writable", "_tls_common", "_tls_wrap", "assert", "assert/strict", "async_hooks", "buffer", "diagnostics_channel", "dns", "dns/promises", "events", "net", "path", "path/posix", "path/win32", "querystring", "stream", "stream/consumers", "stream/promises", "stream/web", "string_decoder", "timers", "timers/promises", "tls", "url", "util/types", "zlib" ]; const hybridModules = ["console", "crypto", "module", "process", "util"]; function getCloudflarePreset({ compatibilityDate = "2024-09-03", compatibilityFlags = [] }) { const httpOverrides = getHttpOverrides({ compatibilityDate, compatibilityFlags }); const osOverrides = getOsOverrides({ compatibilityDate, compatibilityFlags }); const dynamicNativeModules = [ ...nativeModules, ...httpOverrides.nativeModules, ...osOverrides.nativeModules ]; const dynamicHybridModules = [ ...hybridModules, ...httpOverrides.hybridModules, ...osOverrides.hybridModules ]; return { meta: { name: "unenv:cloudflare", version, url: __filename }, alias: { // `nodeCompatModules` are implemented in workerd. // Create aliases to override polyfills defined in based environments. ...Object.fromEntries( dynamicNativeModules.flatMap((p) => [ [p, p], [`node:${p}`, `node:${p}`] ]) ), // The `node:sys` module is just a deprecated alias for `node:util` which we implemented using a hybrid polyfill sys: "@cloudflare/unenv-preset/node/util", "node:sys": "@cloudflare/unenv-preset/node/util", // `hybridNodeCompatModules` are implemented by the cloudflare preset. ...Object.fromEntries( dynamicHybridModules.flatMap((m) => [ [m, `@cloudflare/unenv-preset/node/${m}`], [`node:${m}`, `@cloudflare/unenv-preset/node/${m}`] ]) ) }, inject: { // Setting symbols implemented by workerd to `false` so that `inject`s defined in base presets are not used. Buffer: false, global: false, clearImmediate: false, setImmediate: false, console: "@cloudflare/unenv-preset/node/console", process: "@cloudflare/unenv-preset/node/process" }, polyfill: ["@cloudflare/unenv-preset/polyfill/performance"], external: dynamicNativeModules.flatMap((p) => [p, `node:${p}`]) }; } function getHttpOverrides({ compatibilityDate, compatibilityFlags }) { const httpDisabledByFlag = compatibilityFlags.includes( "disable_nodejs_http_modules" ); const httpEnabledByFlag = compatibilityFlags.includes( "enable_nodejs_http_modules" ); const httpEnabledByDate = compatibilityDate >= "2025-08-15"; const httpEnabled = (httpEnabledByFlag || httpEnabledByDate) && !httpDisabledByFlag; if (!httpEnabled) { return { nativeModules: [], hybridModules: [] }; } const httpServerEnabledByFlag = compatibilityFlags.includes("enable_nodejs_http_server_modules") && compatibilityFlags.includes("experimental"); const httpServerDisabledByFlag = compatibilityFlags.includes( "disable_nodejs_http_server_modules" ); const httpServerEnabled = httpServerEnabledByFlag && !httpServerDisabledByFlag; return { nativeModules: [ "_http_agent", "_http_client", "_http_common", "_http_incoming", "_http_outgoing", ...httpServerEnabled ? ["_http_server", "https"] : [] ], hybridModules: httpServerEnabled ? ["http"] : ["http", "https"] }; } function getOsOverrides({ // eslint-disable-next-line unused-imports/no-unused-vars compatibilityDate, compatibilityFlags }) { const disabledByFlag = compatibilityFlags.includes( "disable_nodejs_os_module" ); const enabledByFlag = compatibilityFlags.includes("enable_nodejs_os_module") && compatibilityFlags.includes("experimental"); const enabled = enabledByFlag && !disabledByFlag; return enabled ? { nativeModules: ["os"], hybridModules: [] } : { nativeModules: [], hybridModules: [] }; } const cloudflare = getCloudflarePreset({}); export { cloudflare, getCloudflarePreset };