import { createRequire as topLevelCreateRequire } from 'module';const require = topLevelCreateRequire(import.meta.url);import bannerUrl from 'url';const __dirname = bannerUrl.fileURLToPath(new URL('.', import.meta.url)); // node_modules/@opennextjs/cloudflare/dist/api/cloudflare-context.js var cloudflareContextSymbol = Symbol.for("__cloudflare-context__"); function getCloudflareContext(options = { async: false }) { return options.async ? getCloudflareContextAsync() : getCloudflareContextSync(); } function getCloudflareContextFromGlobalScope() { const global = globalThis; return global[cloudflareContextSymbol]; } function inSSG() { const global = globalThis; return global.__NEXT_DATA__?.nextExport === true; } function getCloudflareContextSync() { const cloudflareContext = getCloudflareContextFromGlobalScope(); if (cloudflareContext) { return cloudflareContext; } if (inSSG()) { throw new Error(` ERROR: \`getCloudflareContext\` has been called in sync mode in either a static route or at the top level of a non-static one, both cases are not allowed but can be solved by either: - make sure that the call is not at the top level and that the route is not static - call \`getCloudflareContext({async: true})\` to use the \`async\` mode - avoid calling \`getCloudflareContext\` in the route `); } throw new Error(initOpenNextCloudflareForDevErrorMsg); } async function getCloudflareContextAsync() { const cloudflareContext = getCloudflareContextFromGlobalScope(); if (cloudflareContext) { return cloudflareContext; } const inNodejsRuntime = process.env.NEXT_RUNTIME === "nodejs"; if (inNodejsRuntime || inSSG()) { const cloudflareContext2 = await getCloudflareContextFromWrangler(); addCloudflareContextToNodejsGlobal(cloudflareContext2); return cloudflareContext2; } throw new Error(initOpenNextCloudflareForDevErrorMsg); } function addCloudflareContextToNodejsGlobal(cloudflareContext) { const global = globalThis; global[cloudflareContextSymbol] = cloudflareContext; } async function getCloudflareContextFromWrangler(options) { const { getPlatformProxy } = await import( /* webpackIgnore: true */ `${"__wrangler".replaceAll("_", "")}` ); const environment = options?.environment ?? process.env.NEXT_DEV_WRANGLER_ENV; const { env, cf, ctx } = await getPlatformProxy({ ...options, environment }); return { env, cf, ctx }; } var initOpenNextCloudflareForDevErrorMsg = ` ERROR: \`getCloudflareContext\` has been called without having called \`initOpenNextCloudflareForDev\` from the Next.js config file. You should update your Next.js config file as shown below: \`\`\` // next.config.mjs import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare"; initOpenNextCloudflareForDev(); const nextConfig = { ... }; export default nextConfig; \`\`\` `; // node_modules/@opennextjs/cloudflare/dist/api/overrides/asset-resolver/index.js var resolver = { name: "cloudflare-asset-resolver", async maybeGetAssetResult(event) { const { ASSETS } = getCloudflareContext().env; if (!ASSETS || !isUserWorkerFirst(globalThis.__ASSETS_RUN_WORKER_FIRST__, event.rawPath)) { return void 0; } const { method, headers } = event; if (method !== "GET" && method != "HEAD") { return void 0; } const url = new URL(event.rawPath, "https://assets.local"); const response = await ASSETS.fetch(url, { headers, method }); if (response.status === 404) { await response.body?.cancel(); return void 0; } return { type: "core", statusCode: response.status, headers: Object.fromEntries(response.headers.entries()), // Workers and Node types differ. // eslint-disable-next-line @typescript-eslint/no-explicit-any body: response.body || new ReadableStream(), isBase64Encoded: false }; } }; function isUserWorkerFirst(runWorkerFirst, pathname) { if (!Array.isArray(runWorkerFirst)) { return runWorkerFirst ?? false; } let hasPositiveMatch = false; for (let rule of runWorkerFirst) { let isPositiveRule = true; if (rule.startsWith("!")) { rule = rule.slice(1); isPositiveRule = false; } else if (hasPositiveMatch) { continue; } const match = new RegExp(`^${rule.replace(/([[\]().*+?^$|{}\\])/g, "\\$1").replace("\\*", ".*")}$`).test(pathname); if (match) { if (isPositiveRule) { hasPositiveMatch = true; } else { return false; } } } return hasPositiveMatch; } var asset_resolver_default = resolver; // node_modules/@opennextjs/cloudflare/dist/api/config.js function defineCloudflareConfig(config = {}) { const { incrementalCache, tagCache, queue, cachePurge, enableCacheInterception = false, routePreloadingBehavior = "none" } = config; return { default: { override: { wrapper: "cloudflare-node", converter: "edge", proxyExternalRequest: "fetch", incrementalCache: resolveIncrementalCache(incrementalCache), tagCache: resolveTagCache(tagCache), queue: resolveQueue(queue), cdnInvalidation: resolveCdnInvalidation(cachePurge) }, routePreloadingBehavior }, // node:crypto is used to compute cache keys edgeExternals: ["node:crypto"], cloudflare: { useWorkerdCondition: true }, dangerous: { enableCacheInterception }, middleware: { external: true, override: { wrapper: "cloudflare-edge", converter: "edge", proxyExternalRequest: "fetch", incrementalCache: resolveIncrementalCache(incrementalCache), tagCache: resolveTagCache(tagCache), queue: resolveQueue(queue) }, assetResolver: () => asset_resolver_default } }; } function resolveIncrementalCache(value = "dummy") { if (typeof value === "string") { return value; } return typeof value === "function" ? value : () => value; } function resolveTagCache(value = "dummy") { if (typeof value === "string") { return value; } return typeof value === "function" ? value : () => value; } function resolveQueue(value = "dummy") { if (typeof value === "string") { return value; } return typeof value === "function" ? value : () => value; } function resolveCdnInvalidation(value = "dummy") { if (typeof value === "string") { return value; } return typeof value === "function" ? value : () => value; } // node_modules/@opennextjs/aws/dist/utils/error.js var IgnorableError = class extends Error { __openNextInternal = true; canIgnore = true; logLevel = 0; constructor(message) { super(message); this.name = "IgnorableError"; } }; function isOpenNextError(e) { try { return "__openNextInternal" in e; } catch { return false; } } // node_modules/@opennextjs/aws/dist/adapters/logger.js function debug(...args) { if (globalThis.openNextDebug) { console.log(...args); } } function warn(...args) { console.warn(...args); } var DOWNPLAYED_ERROR_LOGS = [ { clientName: "S3Client", commandName: "GetObjectCommand", errorName: "NoSuchKey" } ]; var isDownplayedErrorLog = (errorLog) => DOWNPLAYED_ERROR_LOGS.some((downplayedInput) => downplayedInput.clientName === errorLog?.clientName && downplayedInput.commandName === errorLog?.commandName && (downplayedInput.errorName === errorLog?.error?.name || downplayedInput.errorName === errorLog?.error?.Code)); function error(...args) { if (args.some((arg) => isDownplayedErrorLog(arg))) { return debug(...args); } if (args.some((arg) => isOpenNextError(arg))) { const error2 = args.find((arg) => isOpenNextError(arg)); if (error2.logLevel < getOpenNextErrorLogLevel()) { return; } if (error2.logLevel === 0) { return console.log(...args.map((arg) => isOpenNextError(arg) ? `${arg.name}: ${arg.message}` : arg)); } if (error2.logLevel === 1) { return warn(...args.map((arg) => isOpenNextError(arg) ? `${arg.name}: ${arg.message}` : arg)); } return console.error(...args); } console.error(...args); } function getOpenNextErrorLogLevel() { const strLevel = process.env.OPEN_NEXT_ERROR_LOG_LEVEL ?? "1"; switch (strLevel.toLowerCase()) { case "debug": case "0": return 0; case "error": case "2": return 2; default: return 1; } } // node_modules/@opennextjs/cloudflare/dist/api/overrides/internal.js import { createHash } from "node:crypto"; var debugCache = (name, ...args) => { if (process.env.NEXT_PRIVATE_DEBUG_CACHE) { console.log(`[${name}] `, ...args); } }; var FALLBACK_BUILD_ID = "no-build-id"; var DEFAULT_PREFIX = "incremental-cache"; function computeCacheKey(key, options) { const { cacheType = "cache", prefix = DEFAULT_PREFIX, buildId = FALLBACK_BUILD_ID } = options; const hash = createHash("sha256").update(key).digest("hex"); return `${prefix}/${buildId}/${hash}.${cacheType}`.replace(/\/+/g, "/"); } // node_modules/@opennextjs/cloudflare/dist/api/overrides/incremental-cache/r2-incremental-cache.js var NAME = "cf-r2-incremental-cache"; var BINDING_NAME = "NEXT_INC_CACHE_R2_BUCKET"; var PREFIX_ENV_NAME = "NEXT_INC_CACHE_R2_PREFIX"; var R2IncrementalCache = class { name = NAME; async get(key, cacheType) { const r2 = getCloudflareContext().env[BINDING_NAME]; if (!r2) throw new IgnorableError("No R2 bucket"); debugCache(`Get ${key}`); try { const r2Object = await r2.get(this.getR2Key(key, cacheType)); if (!r2Object) return null; return { value: await r2Object.json(), lastModified: r2Object.uploaded.getTime() }; } catch (e) { error("Failed to get from cache", e); return null; } } async set(key, value, cacheType) { const r2 = getCloudflareContext().env[BINDING_NAME]; if (!r2) throw new IgnorableError("No R2 bucket"); debugCache(`Set ${key}`); try { await r2.put(this.getR2Key(key, cacheType), JSON.stringify(value)); } catch (e) { error("Failed to set to cache", e); } } async delete(key) { const r2 = getCloudflareContext().env[BINDING_NAME]; if (!r2) throw new IgnorableError("No R2 bucket"); debugCache(`Delete ${key}`); try { await r2.delete(this.getR2Key(key)); } catch (e) { error("Failed to delete from cache", e); } } getR2Key(key, cacheType) { return computeCacheKey(key, { prefix: getCloudflareContext().env[PREFIX_ENV_NAME], buildId: process.env.NEXT_BUILD_ID, cacheType }); } }; var r2_incremental_cache_default = new R2IncrementalCache(); // open-next.config.ts var open_next_config_default = defineCloudflareConfig({ incrementalCache: r2_incremental_cache_default }); export { open_next_config_default as default };