@gigadrive/network-config 3.4.14 → 3.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,33 @@ var CACHE_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_HANDLER_P
44
44
  var CACHE_COMPONENTS_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_COMPONENTS_HANDLER_PATH", "nextjs-cache-components-handler.js");
45
45
  var IMAGE_LOADER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_IMAGE_LOADER_PATH", "nextjs-image-loader.js");
46
46
  var PPR_RUNTIME_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_PPR_RUNTIME_PATH", "nextjs-ppr-runtime.js");
47
+ var TEMPLATE_DIRECTORY = import_node_path.default.join(runtimeDirectory, "nextjs-entrypoint-templates");
48
+ var templateCache = /* @__PURE__ */ new Map();
49
+ var loadWrapperTemplate = (name) => {
50
+ let template = templateCache.get(name);
51
+ if (!template) {
52
+ template = (0, import_promises.readFile)(import_node_path.default.join(TEMPLATE_DIRECTORY, name), "utf8");
53
+ templateCache.set(name, template);
54
+ }
55
+ return template;
56
+ };
57
+ var renderWrapperTemplate = (templateName, template, substitutions) => {
58
+ let rendered = template.replace(/^(?:\/\/[^\n]*\n)+\n?/, "");
59
+ for (const [token, value] of Object.entries(substitutions.strings ?? {})) {
60
+ const pattern = new RegExp(`(['"])${token}\\1`, "g");
61
+ if (!pattern.test(rendered)) throw new Error(`Wrapper template ${templateName} is missing placeholder ${token}`);
62
+ rendered = rendered.replace(pattern, JSON.stringify(value).replaceAll("$", "$$$$"));
63
+ }
64
+ for (const [token, value] of Object.entries(substitutions.blocks ?? {})) {
65
+ const marker = `/* ${token} */`;
66
+ if (!rendered.includes(marker)) throw new Error(`Wrapper template ${templateName} is missing marker ${token}`);
67
+ rendered = rendered.replace(marker, value.replaceAll("$", "$$$$"));
68
+ }
69
+ if (rendered.includes("__GIGADRIVE_")) {
70
+ throw new Error(`Wrapper template ${templateName} has unsubstituted placeholders`);
71
+ }
72
+ return rendered;
73
+ };
47
74
  var toJsonValue = (value) => {
48
75
  const serialized = JSON.stringify(value);
49
76
  return serialized === void 0 ? null : JSON.parse(serialized);
@@ -70,7 +97,7 @@ async function resolveReadablePath(repoRoot, filePath) {
70
97
  const portablePath = toPortableRelativePath(repoRoot, absolutePath);
71
98
  await (0, import_promises.access)(absolutePath);
72
99
  const resolvedPath = await (0, import_promises.realpath)(absolutePath);
73
- toPortableRelativePath(repoRoot, resolvedPath);
100
+ void toPortableRelativePath(repoRoot, resolvedPath);
74
101
  const fileStat = await (0, import_promises.stat)(absolutePath);
75
102
  return { portablePath, fileStat };
76
103
  }
@@ -202,7 +229,7 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
202
229
  const pprRuntimeSpecifier = relativePprRuntimePath.startsWith(".") ? relativePprRuntimePath : `./${relativePprRuntimePath}`;
203
230
  const relativeProjectDirectory = import_node_path.default.posix.relative(
204
231
  portableWrapperDirectory,
205
- toPortableRelativePath(repoRoot, projectDir)
232
+ toPortableRelativePath(repoRoot, projectDir, true)
206
233
  );
207
234
  const projectDirectorySpecifier = relativeProjectDirectory.startsWith(".") ? relativeProjectDirectory : `./${relativeProjectDirectory}`;
208
235
  await Promise.all(
@@ -212,7 +239,8 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
212
239
  const relativeImport = import_node_path.default.relative(wrapperDirectory, executablePath).replaceAll(import_node_path.default.sep, "/");
213
240
  const importSpecifier = relativeImport.startsWith(".") ? relativeImport : `./${relativeImport}`;
214
241
  const isMiddleware = middlewareOutputId !== void 0 && entrypoint.outputIds.includes(middlewareOutputId);
215
- const webHandlerPrelude = entrypoint.runtime === "edge" && entrypoint.edgeRuntime ? (() => {
242
+ let source;
243
+ if (entrypoint.runtime === "edge" && entrypoint.edgeRuntime) {
216
244
  const edgeMarker = "/server/edge/";
217
245
  const markerIndex = entrypoint.edgeRuntime.modulePath.indexOf(edgeMarker);
218
246
  const distDirectory = markerIndex >= 0 ? entrypoint.edgeRuntime.modulePath.slice(0, markerIndex) : import_node_path.default.dirname(entrypoint.edgeRuntime.modulePath);
@@ -225,83 +253,30 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
225
253
  const runtimeTargetPath = sourcePath === entrypoint.edgeRuntime?.modulePath ? entrypoint.edgeRuntime.modulePath : targetPath;
226
254
  const relativeAssetPath = import_node_path.default.posix.relative(portableWrapperDirectory, runtimeTargetPath);
227
255
  const assetSpecifier = relativeAssetPath.startsWith(".") ? relativeAssetPath : `./${relativeAssetPath}`;
228
- return ` await import(${JSON.stringify(assetSpecifier)});`;
256
+ return `await import(${JSON.stringify(assetSpecifier)});`;
229
257
  }).join("\n");
230
- return `import { AsyncLocalStorage } from "node:async_hooks";
231
-
232
- const resolveHandler = async () => {
233
- globalThis.self ??= globalThis;
234
- globalThis.AsyncLocalStorage ??= AsyncLocalStorage;
235
- ${imports}
236
- const registry = globalThis._ENTRIES;
237
- if (!registry) throw new Error('Next.js edge entry registry is unavailable');
238
- const entry = await registry[${JSON.stringify(entrypoint.edgeRuntime.entryKey)}];
239
- const handler = entry?.[${JSON.stringify(entrypoint.edgeRuntime.handlerExport)}];
240
- if (typeof handler !== 'function') throw new Error('Next.js edge handler is unavailable');
241
- return handler;
242
- };`;
243
- })() : `import { fileURLToPath } from "node:url";
244
-
245
- const resolveHandler = async () => {
246
- process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));
247
- const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});
248
- const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);
249
- const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;
250
- if (typeof handler !== 'function') throw new Error('Next.js middleware handler is unavailable');
251
- return handler;
252
- };`;
253
- const source = entrypoint.runtime === "edge" && entrypoint.edgeRuntime || isMiddleware ? `import { persistPprCacheEntry } from ${JSON.stringify(pprRuntimeSpecifier)};
254
- ${webHandlerPrelude}
255
-
256
- export async function fetch(request) {
257
- const pending = [];
258
- const handler = await resolveHandler();
259
- const url = new URL(request.url);
260
- const response = await handler(request, {
261
- signal: request.signal,
262
- waitUntil(promise) { pending.push(Promise.resolve(promise)); },
263
- requestMeta: { hostname: url.hostname, invocationTarget: request.headers.get('x-gigadrive-next-invocation-target') ?? url.pathname, routeMatches: Object.fromEntries(new URLSearchParams(request.headers.get('x-now-route-matches') ?? '')), relativeProjectDir: ${JSON.stringify(
264
- entrypoint.runtime === "nodejs" ? "." : toPortableRelativePath(repoRoot, projectDir, true)
265
- )}, onCacheEntryV2(cacheEntry, meta) { pending.push(persistPprCacheEntry(request.headers.get('x-gigadrive-next-cache-key') ?? meta.url ?? request.headers.get('x-matched-path') ?? url.pathname, cacheEntry)); return false; } },
266
- });
267
- if (!response.body) { await Promise.allSettled(pending); return response; }
268
- const reader = response.body.getReader();
269
- const body = new ReadableStream({
270
- async pull(controller) {
271
- const result = await reader.read();
272
- if (result.done) { await Promise.allSettled(pending); controller.close(); return; }
273
- controller.enqueue(result.value);
274
- },
275
- async cancel(reason) { try { await reader.cancel(reason); } finally { await Promise.allSettled(pending); } },
276
- });
277
- return new Response(body, response);
278
- }
279
- ` : `import "next/dist/build/adapter/setup-node-env.external.js";
280
- import { fileURLToPath } from "node:url";
281
- import { persistPprCacheEntry, revalidateNextPath } from ${JSON.stringify(pprRuntimeSpecifier)};
282
-
283
- const resolveHandler = async () => {
284
- process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));
285
- const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});
286
- const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);
287
- const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;
288
- if (typeof handler !== 'function') throw new Error('Next.js Node handler is unavailable');
289
- return handler;
290
- };
291
-
292
- export default async function handler(req, res) {
293
- const pending = [];
294
- const nextHandler = await resolveHandler();
295
- const hostname = Array.isArray(req.headers.host) ? req.headers.host[0] : req.headers.host;
296
- await nextHandler(req, res, {
297
- waitUntil(promise) { pending.push(Promise.resolve(promise)); },
298
- requestMeta: { hostname, invocationTarget: req.headers['x-gigadrive-next-invocation-target'] ?? req.url, routeMatches: Object.fromEntries(new URLSearchParams(req.headers['x-now-route-matches'] ?? '')), relativeProjectDir: ${JSON.stringify(
299
- "."
300
- )}, revalidate(input) { return revalidateNextPath({ ...input, hostname }); }, onCacheEntryV2(cacheEntry, meta) { const cacheKey = req.headers['x-gigadrive-next-cache-key']; const matchedPath = req.headers['x-matched-path']; pending.push(persistPprCacheEntry((Array.isArray(cacheKey) ? cacheKey[0] : cacheKey) ?? meta.url ?? (Array.isArray(matchedPath) ? matchedPath[0] : matchedPath) ?? req.url ?? '/', cacheEntry)); return false; } },
301
- });
302
- await Promise.allSettled(pending);
303
- }
304
- `;
258
+ source = renderWrapperTemplate("edge-web.mjs", await loadWrapperTemplate("edge-web.mjs"), {
259
+ strings: {
260
+ __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,
261
+ __GIGADRIVE_EDGE_ENTRY_KEY__: entrypoint.edgeRuntime.entryKey,
262
+ __GIGADRIVE_EDGE_HANDLER_EXPORT__: entrypoint.edgeRuntime.handlerExport,
263
+ __GIGADRIVE_RELATIVE_PROJECT_DIR__: toPortableRelativePath(repoRoot, projectDir, true)
264
+ },
265
+ blocks: { __GIGADRIVE_EDGE_IMPORTS__: imports }
266
+ });
267
+ } else {
268
+ const templateName = isMiddleware ? "node-middleware-web.mjs" : "node-route.mjs";
269
+ source = renderWrapperTemplate(templateName, await loadWrapperTemplate(templateName), {
270
+ strings: {
271
+ __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,
272
+ __GIGADRIVE_PROJECT_DIR__: projectDirectorySpecifier,
273
+ __GIGADRIVE_ENTRYPOINT__: importSpecifier,
274
+ // The Node wrappers chdir into the project directory, so Next
275
+ // resolves everything relative to ".".
276
+ __GIGADRIVE_RELATIVE_PROJECT_DIR__: "."
277
+ }
278
+ });
279
+ }
305
280
  await (0, import_promises.writeFile)(wrapperPath, source, "utf8");
306
281
  const portableWrapperPath = toPortableRelativePath(repoRoot, wrapperPath);
307
282
  entrypoint.assets[portableWrapperPath] = portableWrapperPath;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nextjs-adapter.ts"],"sourcesContent":["import type { NextAdapter } from 'next';\nimport { access, mkdir, realpath, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { NormalizedImagePolicy } from './image-policy';\nimport type {\n GigadriveNextBuildManifestV1,\n GigadriveNextBuildManifestV2,\n GigadriveNextEntrypoint,\n GigadriveNextRouteOutput,\n GigadriveNextStaticOutput,\n JsonValue,\n} from './nextjs-manifest';\n\ntype BuildCompleteContext = Parameters<NonNullable<NextAdapter['onBuildComplete']>>[0];\ntype NextRouteOutput =\n | BuildCompleteContext['outputs']['pages'][number]\n | BuildCompleteContext['outputs']['pagesApi'][number]\n | BuildCompleteContext['outputs']['appPages'][number]\n | BuildCompleteContext['outputs']['appRoutes'][number]\n | NonNullable<BuildCompleteContext['outputs']['middleware']>;\ntype NextStaticOutput = BuildCompleteContext['outputs']['staticFiles'][number];\n\nconst PRODUCTION_BUILD_PHASE = 'phase-production-build';\nconst runtimeDirectory = typeof __dirname === 'string' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n\nconst runtimeModulePath = (environmentName: string, fileName: string): string =>\n process.env[environmentName] ?? path.join(runtimeDirectory, fileName);\n\nconst CACHE_HANDLER_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_CACHE_HANDLER_PATH', 'nextjs-cache-handler.js');\nconst CACHE_COMPONENTS_HANDLER_PATH = () =>\n runtimeModulePath('GIGADRIVE_NEXT_CACHE_COMPONENTS_HANDLER_PATH', 'nextjs-cache-components-handler.js');\nconst IMAGE_LOADER_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_IMAGE_LOADER_PATH', 'nextjs-image-loader.js');\nconst PPR_RUNTIME_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_PPR_RUNTIME_PATH', 'nextjs-ppr-runtime.js');\n\nconst toJsonValue = (value: unknown): JsonValue => {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : (JSON.parse(serialized) as JsonValue);\n};\n\nconst supportsAdapterV2 = (nextVersion: string | undefined): boolean => {\n if (!nextVersion) return false;\n const [majorPart, minorPart] = nextVersion.split('.');\n const major = Number.parseInt(majorPart ?? '', 10);\n const minor = Number.parseInt(minorPart ?? '', 10);\n return Number.isFinite(major) && Number.isFinite(minor) && (major > 16 || (major === 16 && minor >= 2));\n};\n\nconst toPortableRelativePath = (from: string, to: string, allowCurrentDirectory = false): string => {\n const resolvedFrom = path.resolve(from);\n const resolvedTo = path.resolve(path.isAbsolute(to) ? to : path.join(from, to));\n const relativePath = path.relative(resolvedFrom, resolvedTo).replaceAll(path.sep, '/');\n const normalized = relativePath === '' ? '.' : relativePath;\n if (\n (!allowCurrentDirectory && normalized === '.') ||\n normalized.startsWith('/') ||\n /^[A-Za-z]:/.test(normalized) ||\n normalized.split('/').some((segment) => segment === '..')\n ) {\n throw new Error(`Next.js adapter output is outside the repository root: ${to}`);\n }\n return normalized;\n};\n\nasync function resolveReadablePath(repoRoot: string, filePath: string) {\n const absolutePath = path.resolve(path.isAbsolute(filePath) ? filePath : path.join(repoRoot, filePath));\n const portablePath = toPortableRelativePath(repoRoot, absolutePath);\n await access(absolutePath);\n const resolvedPath = await realpath(absolutePath);\n toPortableRelativePath(repoRoot, resolvedPath);\n const fileStat = await stat(absolutePath);\n return { portablePath, fileStat };\n}\n\nasync function requireReadableFile(repoRoot: string, filePath: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);\n if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);\n return portablePath;\n}\n\nasync function requireReadableAsset(repoRoot: string, filePath: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);\n if (!fileStat.isFile() && !fileStat.isDirectory()) {\n throw new Error(`Next.js adapter asset is not a readable file or directory: ${filePath}`);\n }\n return portablePath;\n}\n\nasync function serializeFileMap(repoRoot: string, files: Record<string, string>): Promise<Record<string, string>> {\n const entries = await Promise.all(\n Object.entries(files).map(async ([targetPath, sourcePath]) => [\n toPortableRelativePath(repoRoot, targetPath),\n await requireReadableAsset(repoRoot, sourcePath),\n ])\n );\n return Object.fromEntries(entries);\n}\n\nconst serializeRuntimeConfigAssets = async (\n projectDir: string,\n repoRoot: string,\n config: BuildCompleteContext['config']\n): Promise<Record<string, string>> => {\n const configuredPaths = new Set([\n config.cacheHandler,\n ...Object.values(config.cacheHandlers ?? {}),\n config.images.loaderFile,\n PPR_RUNTIME_PATH(),\n ]);\n const assets: Record<string, string> = {};\n for (const configuredPath of configuredPaths) {\n if (!configuredPath) continue;\n const absolutePath = path.resolve(\n path.isAbsolute(configuredPath) ? configuredPath : path.join(projectDir, configuredPath)\n );\n const portablePath = await requireReadableFile(repoRoot, absolutePath);\n assets[portablePath] = portablePath;\n }\n return assets;\n};\n\nconst serializeRouteOutput = async (repoRoot: string, output: NextRouteOutput): Promise<GigadriveNextRouteOutput> => {\n const matchers = (\n output.config as typeof output.config & {\n matchers?: Array<{\n source: string;\n sourceRegex: string;\n has?: unknown[];\n missing?: unknown[];\n }>;\n }\n ).matchers;\n return {\n id: output.id,\n type: String(output.type) as GigadriveNextRouteOutput['type'],\n filePath: await requireReadableFile(repoRoot, output.filePath),\n pathname: output.pathname,\n sourcePage: output.sourcePage,\n runtime: output.runtime,\n assets: await serializeFileMap(repoRoot, output.assets),\n ...(output.wasmAssets ? { wasmAssets: await serializeFileMap(repoRoot, output.wasmAssets) } : {}),\n ...(output.edgeRuntime\n ? {\n edgeRuntime: {\n modulePath: await requireReadableFile(repoRoot, output.edgeRuntime.modulePath),\n entryKey: output.edgeRuntime.entryKey,\n handlerExport: output.edgeRuntime.handlerExport,\n },\n }\n : {}),\n config: {\n maxDuration: output.config.maxDuration,\n preferredRegion: output.config.preferredRegion,\n env: output.config.env,\n ...(matchers\n ? {\n matchers: matchers.map((matcher) => ({\n source: matcher.source,\n sourceRegex: matcher.sourceRegex,\n ...(matcher.has ? { has: toJsonValue(matcher.has) as JsonValue[] } : {}),\n ...(matcher.missing ? { missing: toJsonValue(matcher.missing) as JsonValue[] } : {}),\n })),\n }\n : {}),\n },\n };\n};\n\nconst serializeStaticOutput = async (\n repoRoot: string,\n output: NextStaticOutput\n): Promise<GigadriveNextStaticOutput> => ({\n id: output.id,\n type: 'STATIC_FILE',\n filePath: await requireReadableFile(repoRoot, output.filePath),\n pathname: output.pathname,\n ...(output.immutableHash ? { immutableHash: output.immutableHash } : {}),\n});\n\nconst buildEntrypointPlan = (\n outputs: GigadriveNextRouteOutput[]\n): Pick<GigadriveNextBuildManifestV2, 'entrypoints' | 'outputEntrypoints'> => {\n const byIdentity = new Map<string, GigadriveNextEntrypoint>();\n const outputEntrypoints: Record<string, string> = {};\n\n for (const output of outputs) {\n const identity = JSON.stringify([\n output.type === 'MIDDLEWARE' ? 'middleware-web' : 'route',\n output.runtime,\n output.filePath,\n output.edgeRuntime?.modulePath,\n output.edgeRuntime?.entryKey,\n output.edgeRuntime?.handlerExport,\n ]);\n const existingEntrypoint = byIdentity.get(identity);\n const entrypoint: GigadriveNextEntrypoint = existingEntrypoint ?? {\n id: `next-${byIdentity.size}`,\n runtime: output.runtime,\n filePath: output.filePath,\n outputIds: [],\n assets: { ...output.assets },\n ...(output.wasmAssets ? { wasmAssets: { ...output.wasmAssets } } : {}),\n ...(output.edgeRuntime ? { edgeRuntime: { ...output.edgeRuntime } } : {}),\n config: {\n maxDuration: output.config.maxDuration,\n preferredRegion: output.config.preferredRegion,\n env: output.config.env,\n },\n };\n if (!existingEntrypoint) {\n byIdentity.set(identity, entrypoint);\n } else {\n Object.assign(entrypoint.assets, output.assets);\n if (output.wasmAssets) entrypoint.wasmAssets = { ...entrypoint.wasmAssets, ...output.wasmAssets };\n if (output.config.maxDuration !== undefined) {\n entrypoint.config.maxDuration = Math.max(entrypoint.config.maxDuration ?? 0, output.config.maxDuration);\n }\n }\n entrypoint.outputIds.push(output.id);\n outputEntrypoints[output.id] = entrypoint.id;\n }\n\n return { entrypoints: [...byIdentity.values()], outputEntrypoints };\n};\n\nconst writeEntrypointWrappers = async (\n projectDir: string,\n repoRoot: string,\n entrypoints: GigadriveNextEntrypoint[],\n pprRuntimePath: string,\n middlewareOutputId?: string\n): Promise<void> => {\n const wrapperDirectory = path.join(projectDir, '.gigadrive', 'nextjs', 'entrypoints');\n await mkdir(wrapperDirectory, { recursive: true });\n const portableWrapperDirectory = toPortableRelativePath(repoRoot, wrapperDirectory);\n const relativePprRuntimePath = path.posix.relative(portableWrapperDirectory, pprRuntimePath);\n const pprRuntimeSpecifier = relativePprRuntimePath.startsWith('.')\n ? relativePprRuntimePath\n : `./${relativePprRuntimePath}`;\n const relativeProjectDirectory = path.posix.relative(\n portableWrapperDirectory,\n toPortableRelativePath(repoRoot, projectDir)\n );\n const projectDirectorySpecifier = relativeProjectDirectory.startsWith('.')\n ? relativeProjectDirectory\n : `./${relativeProjectDirectory}`;\n\n await Promise.all(\n entrypoints.map(async (entrypoint) => {\n const wrapperPath = path.join(wrapperDirectory, `${entrypoint.id}.mjs`);\n const executablePath = path.join(repoRoot, entrypoint.edgeRuntime?.modulePath ?? entrypoint.filePath);\n const relativeImport = path.relative(wrapperDirectory, executablePath).replaceAll(path.sep, '/');\n const importSpecifier = relativeImport.startsWith('.') ? relativeImport : `./${relativeImport}`;\n const isMiddleware = middlewareOutputId !== undefined && entrypoint.outputIds.includes(middlewareOutputId);\n const webHandlerPrelude =\n entrypoint.runtime === 'edge' && entrypoint.edgeRuntime\n ? (() => {\n const edgeMarker = '/server/edge/';\n const markerIndex = entrypoint.edgeRuntime.modulePath.indexOf(edgeMarker);\n const distDirectory =\n markerIndex >= 0\n ? entrypoint.edgeRuntime.modulePath.slice(0, markerIndex)\n : path.dirname(entrypoint.edgeRuntime.modulePath);\n const edgeRuntimeAssets = Object.entries(entrypoint.assets)\n .filter(([, sourcePath]) => sourcePath.startsWith(`${distDirectory}/`) && sourcePath.endsWith('.js'))\n .sort(([, leftSource], [, rightSource]) => {\n if (leftSource === entrypoint.edgeRuntime?.modulePath) return 1;\n if (rightSource === entrypoint.edgeRuntime?.modulePath) return -1;\n return leftSource.localeCompare(rightSource);\n });\n const imports = edgeRuntimeAssets\n .map(([targetPath, sourcePath]) => {\n // Next includes the executable Edge module in `assets` under a\n // deployment-relative target such as `server/edge/chunks/*`,\n // while `modulePath` retains its canonical `.next/server/*`\n // location. Function packaging installs the executable at the\n // canonical path, so the wrapper must import it there as well.\n const runtimeTargetPath =\n sourcePath === entrypoint.edgeRuntime?.modulePath ? entrypoint.edgeRuntime.modulePath : targetPath;\n const relativeAssetPath = path.posix.relative(portableWrapperDirectory, runtimeTargetPath);\n const assetSpecifier = relativeAssetPath.startsWith('.')\n ? relativeAssetPath\n : `./${relativeAssetPath}`;\n return ` await import(${JSON.stringify(assetSpecifier)});`;\n })\n .join('\\n');\n return `import { AsyncLocalStorage } from \"node:async_hooks\";\\n\\nconst resolveHandler = async () => {\\n globalThis.self ??= globalThis;\\n globalThis.AsyncLocalStorage ??= AsyncLocalStorage;\\n${imports}\\n const registry = globalThis._ENTRIES;\\n if (!registry) throw new Error('Next.js edge entry registry is unavailable');\\n const entry = await registry[${JSON.stringify(entrypoint.edgeRuntime.entryKey)}];\\n const handler = entry?.[${JSON.stringify(entrypoint.edgeRuntime.handlerExport)}];\\n if (typeof handler !== 'function') throw new Error('Next.js edge handler is unavailable');\\n return handler;\\n};`;\n })()\n : `import { fileURLToPath } from \"node:url\";\\n\\nconst resolveHandler = async () => {\\n process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));\\n const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});\\n const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);\\n const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;\\n if (typeof handler !== 'function') throw new Error('Next.js middleware handler is unavailable');\\n return handler;\\n};`;\n const source =\n (entrypoint.runtime === 'edge' && entrypoint.edgeRuntime) || isMiddleware\n ? `import { persistPprCacheEntry } from ${JSON.stringify(pprRuntimeSpecifier)};\\n${webHandlerPrelude}\\n\\nexport async function fetch(request) {\\n const pending = [];\\n const handler = await resolveHandler();\\n const url = new URL(request.url);\\n const response = await handler(request, {\\n signal: request.signal,\\n waitUntil(promise) { pending.push(Promise.resolve(promise)); },\\n requestMeta: { hostname: url.hostname, invocationTarget: request.headers.get('x-gigadrive-next-invocation-target') ?? url.pathname, routeMatches: Object.fromEntries(new URLSearchParams(request.headers.get('x-now-route-matches') ?? '')), relativeProjectDir: ${JSON.stringify(\n entrypoint.runtime === 'nodejs' ? '.' : toPortableRelativePath(repoRoot, projectDir, true)\n )}, onCacheEntryV2(cacheEntry, meta) { pending.push(persistPprCacheEntry(request.headers.get('x-gigadrive-next-cache-key') ?? meta.url ?? request.headers.get('x-matched-path') ?? url.pathname, cacheEntry)); return false; } },\\n });\\n if (!response.body) { await Promise.allSettled(pending); return response; }\\n const reader = response.body.getReader();\\n const body = new ReadableStream({\\n async pull(controller) {\\n const result = await reader.read();\\n if (result.done) { await Promise.allSettled(pending); controller.close(); return; }\\n controller.enqueue(result.value);\\n },\\n async cancel(reason) { try { await reader.cancel(reason); } finally { await Promise.allSettled(pending); } },\\n });\\n return new Response(body, response);\\n}\\n`\n : `import \"next/dist/build/adapter/setup-node-env.external.js\";\\nimport { fileURLToPath } from \"node:url\";\\nimport { persistPprCacheEntry, revalidateNextPath } from ${JSON.stringify(pprRuntimeSpecifier)};\\n\\nconst resolveHandler = async () => {\\n process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));\\n const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});\\n const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);\\n const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;\\n if (typeof handler !== 'function') throw new Error('Next.js Node handler is unavailable');\\n return handler;\\n};\\n\\nexport default async function handler(req, res) {\\n const pending = [];\\n const nextHandler = await resolveHandler();\\n const hostname = Array.isArray(req.headers.host) ? req.headers.host[0] : req.headers.host;\\n await nextHandler(req, res, {\\n waitUntil(promise) { pending.push(Promise.resolve(promise)); },\\n requestMeta: { hostname, invocationTarget: req.headers['x-gigadrive-next-invocation-target'] ?? req.url, routeMatches: Object.fromEntries(new URLSearchParams(req.headers['x-now-route-matches'] ?? '')), relativeProjectDir: ${JSON.stringify(\n '.'\n )}, revalidate(input) { return revalidateNextPath({ ...input, hostname }); }, onCacheEntryV2(cacheEntry, meta) { const cacheKey = req.headers['x-gigadrive-next-cache-key']; const matchedPath = req.headers['x-matched-path']; pending.push(persistPprCacheEntry((Array.isArray(cacheKey) ? cacheKey[0] : cacheKey) ?? meta.url ?? (Array.isArray(matchedPath) ? matchedPath[0] : matchedPath) ?? req.url ?? '/', cacheEntry)); return false; } },\\n });\\n await Promise.allSettled(pending);\\n}\\n`;\n await writeFile(wrapperPath, source, 'utf8');\n const portableWrapperPath = toPortableRelativePath(repoRoot, wrapperPath);\n entrypoint.assets[portableWrapperPath] = portableWrapperPath;\n entrypoint.filePath = portableWrapperPath;\n })\n );\n};\n\nconst normalizeImages = (config: BuildCompleteContext['config']): NormalizedImagePolicy | undefined => {\n if (config.images.unoptimized) return undefined;\n return {\n localPatterns: config.images.localPatterns ?? [{ pathname: '/**' }],\n remotePatterns: config.images.remotePatterns.map((pattern) => {\n if (pattern instanceof URL) {\n return {\n protocol: pattern.protocol === 'http:' ? ('http' as const) : ('https' as const),\n hostname: pattern.hostname,\n port: pattern.port,\n pathname: pattern.pathname,\n search: pattern.search,\n };\n }\n return { ...pattern };\n }),\n widths: [...new Set([...config.images.deviceSizes, ...config.images.imageSizes])].sort((a, b) => a - b),\n heights: [],\n qualities: config.images.qualities ?? [75],\n formats: config.images.formats,\n minimumCacheTTL: config.images.minimumCacheTTL,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n contentSecurityPolicy: config.images.contentSecurityPolicy,\n contentDispositionType: config.images.contentDispositionType,\n maximumRedirects: config.images.maximumRedirects,\n maximumResponseBody: config.images.maximumResponseBody,\n variants: {},\n };\n};\n\n/**\n * Next.js deployment adapter used automatically by Gigadrive Network build workers.\n *\n * Next 16.2 and newer emit a portable, versioned runtime plan. Older releases retain\n * the standalone-server behavior because their experimental adapter context does not\n * expose the routing and runtime metadata required by the v2 contract.\n */\nconst gigadriveNextAdapter: NextAdapter = {\n name: 'Gigadrive Network',\n\n modifyConfig(config, { phase, nextVersion }) {\n if (phase !== PRODUCTION_BUILD_PHASE) return config;\n\n const deploymentId = config.deploymentId ?? process.env.GIGADRIVE_DEPLOYMENT_ID;\n if (!supportsAdapterV2(nextVersion)) {\n return {\n ...config,\n ...(deploymentId ? { deploymentId } : {}),\n output: config.output === 'export' ? 'export' : 'standalone',\n };\n }\n if (config.output === 'export') {\n return { ...config, ...(deploymentId ? { deploymentId } : {}) };\n }\n\n const injectCacheHandler = config.cacheHandler === undefined;\n const injectCacheComponentHandlers = config.cacheHandlers === undefined;\n const images = config.images;\n const injectImageLoader =\n images !== undefined && images.unoptimized !== true && images.loader === 'default' && !images.loaderFile;\n\n return {\n ...config,\n ...(deploymentId ? { deploymentId } : {}),\n ...(injectCacheHandler ? { cacheHandler: CACHE_HANDLER_PATH() } : {}),\n ...(injectCacheComponentHandlers\n ? {\n cacheHandlers: {\n default: CACHE_COMPONENTS_HANDLER_PATH(),\n remote: CACHE_COMPONENTS_HANDLER_PATH(),\n },\n }\n : {}),\n ...(injectCacheHandler || injectCacheComponentHandlers ? { cacheMaxMemorySize: 0 } : {}),\n ...(injectImageLoader\n ? {\n images: {\n ...images,\n loader: 'custom',\n loaderFile: IMAGE_LOADER_PATH(),\n },\n }\n : {}),\n };\n },\n\n async onBuildComplete({ projectDir, repoRoot, distDir, config, nextVersion, buildId, routing, outputs }) {\n const metadataDirectory = path.join(projectDir, '.gigadrive');\n if (!supportsAdapterV2(nextVersion)) {\n const manifest: GigadriveNextBuildManifestV1 = {\n version: 1,\n output: config.output === 'export' ? 'export' : 'standalone',\n distDir: toPortableRelativePath(projectDir, distDir),\n repoRootToProject: toPortableRelativePath(repoRoot, projectDir, true),\n nextVersion,\n buildId,\n };\n await mkdir(metadataDirectory, { recursive: true });\n await writeFile(path.join(metadataDirectory, 'nextjs.json'), `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n return;\n }\n const portableOutputs = {\n pages: await Promise.all(outputs.pages.map((output) => serializeRouteOutput(repoRoot, output))),\n ...(outputs.middleware ? { middleware: await serializeRouteOutput(repoRoot, outputs.middleware) } : {}),\n appPages: await Promise.all(outputs.appPages.map((output) => serializeRouteOutput(repoRoot, output))),\n pagesApi: await Promise.all(outputs.pagesApi.map((output) => serializeRouteOutput(repoRoot, output))),\n appRoutes: await Promise.all(outputs.appRoutes.map((output) => serializeRouteOutput(repoRoot, output))),\n prerenders: await Promise.all(\n outputs.prerenders.map(async (output) => {\n const { bypassFor, ...prerenderConfig } = output.config;\n return {\n id: output.id,\n type: 'PRERENDER' as const,\n pathname: output.pathname,\n parentOutputId: output.parentOutputId,\n groupId: output.groupId,\n ...(output.pprChain ? { pprChain: output.pprChain } : {}),\n ...(output.parentFallbackMode !== undefined\n ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) }\n : {}),\n ...(output.fallback\n ? {\n fallback: {\n ...(output.fallback.filePath\n ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath) }\n : {}),\n ...(output.fallback.initialStatus !== undefined\n ? { initialStatus: output.fallback.initialStatus }\n : {}),\n ...(output.fallback.initialHeaders ? { initialHeaders: output.fallback.initialHeaders } : {}),\n ...(output.fallback.initialExpiration !== undefined\n ? { initialExpiration: output.fallback.initialExpiration }\n : {}),\n ...(output.fallback.initialRevalidate !== undefined\n ? { initialRevalidate: output.fallback.initialRevalidate }\n : {}),\n ...(output.fallback.postponedState !== undefined\n ? { postponedState: output.fallback.postponedState }\n : {}),\n },\n }\n : {}),\n config: {\n ...prerenderConfig,\n ...(bypassFor ? { bypassFor: toJsonValue(bypassFor) as JsonValue[] } : {}),\n },\n };\n })\n ),\n staticFiles: await Promise.all(outputs.staticFiles.map((output) => serializeStaticOutput(repoRoot, output))),\n };\n const executableOutputs = [\n ...portableOutputs.pages,\n ...portableOutputs.pagesApi,\n ...portableOutputs.appPages,\n ...portableOutputs.appRoutes,\n ...(portableOutputs.middleware ? [portableOutputs.middleware] : []),\n ];\n const entrypointPlan = buildEntrypointPlan(executableOutputs);\n const runtimeConfigAssets = await serializeRuntimeConfigAssets(projectDir, repoRoot, config);\n for (const entrypoint of entrypointPlan.entrypoints) Object.assign(entrypoint.assets, runtimeConfigAssets);\n const pprRuntimePath = await requireReadableFile(repoRoot, PPR_RUNTIME_PATH());\n await writeEntrypointWrappers(\n projectDir,\n repoRoot,\n entrypointPlan.entrypoints,\n pprRuntimePath,\n portableOutputs.middleware?.id\n );\n const images = normalizeImages(config);\n const manifest: GigadriveNextBuildManifestV2 = {\n version: 2,\n mode: config.output === 'export' ? 'export' : 'adapter-v2',\n distDir: toPortableRelativePath(projectDir, distDir),\n repoRootToProject: toPortableRelativePath(repoRoot, projectDir, true),\n nextVersion,\n buildId,\n config: {\n basePath: config.basePath,\n trailingSlash: config.trailingSlash,\n cacheComponents: config.cacheComponents,\n ...(config.i18n ? { i18n: toJsonValue(config.i18n) } : {}),\n ...(images ? { images } : {}),\n },\n routing: {\n beforeMiddleware: toJsonValue(routing.beforeMiddleware) as JsonValue[],\n beforeFiles: toJsonValue(routing.beforeFiles) as JsonValue[],\n afterFiles: toJsonValue(routing.afterFiles) as JsonValue[],\n dynamicRoutes: toJsonValue(routing.dynamicRoutes) as JsonValue[],\n onMatch: toJsonValue(routing.onMatch) as JsonValue[],\n fallback: toJsonValue(routing.fallback) as JsonValue[],\n shouldNormalizeNextData: routing.shouldNormalizeNextData,\n rsc: toJsonValue(routing.rsc),\n },\n outputs: portableOutputs,\n ...entrypointPlan,\n };\n\n await mkdir(metadataDirectory, { recursive: true });\n await writeFile(path.join(metadataDirectory, 'nextjs.json'), `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n },\n};\n\nexport default gigadriveNextAdapter;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAyD;AACzD,uBAAiB;AACjB,sBAA8B;AAH9B;AAuBA,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB,OAAO,cAAc,WAAW,YAAY,iBAAAA,QAAK,YAAQ,+BAAc,YAAY,GAAG,CAAC;AAEhH,IAAM,oBAAoB,CAAC,iBAAyB,aAClD,QAAQ,IAAI,eAAe,KAAK,iBAAAA,QAAK,KAAK,kBAAkB,QAAQ;AAEtE,IAAM,qBAAqB,MAAM,kBAAkB,qCAAqC,yBAAyB;AACjH,IAAM,gCAAgC,MACpC,kBAAkB,gDAAgD,oCAAoC;AACxG,IAAM,oBAAoB,MAAM,kBAAkB,oCAAoC,wBAAwB;AAC9G,IAAM,mBAAmB,MAAM,kBAAkB,mCAAmC,uBAAuB;AAE3G,IAAM,cAAc,CAAC,UAA8B;AACjD,QAAM,aAAa,KAAK,UAAU,KAAK;AACvC,SAAO,eAAe,SAAY,OAAQ,KAAK,MAAM,UAAU;AACjE;AAEA,IAAM,oBAAoB,CAAC,gBAA6C;AACtE,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,CAAC,WAAW,SAAS,IAAI,YAAY,MAAM,GAAG;AACpD,QAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,QAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,SAAO,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,KAAK,MAAM,QAAQ,MAAO,UAAU,MAAM,SAAS;AACtG;AAEA,IAAM,yBAAyB,CAAC,MAAc,IAAY,wBAAwB,UAAkB;AAClG,QAAM,eAAe,iBAAAA,QAAK,QAAQ,IAAI;AACtC,QAAM,aAAa,iBAAAA,QAAK,QAAQ,iBAAAA,QAAK,WAAW,EAAE,IAAI,KAAK,iBAAAA,QAAK,KAAK,MAAM,EAAE,CAAC;AAC9E,QAAM,eAAe,iBAAAA,QAAK,SAAS,cAAc,UAAU,EAAE,WAAW,iBAAAA,QAAK,KAAK,GAAG;AACrF,QAAM,aAAa,iBAAiB,KAAK,MAAM;AAC/C,MACG,CAAC,yBAAyB,eAAe,OAC1C,WAAW,WAAW,GAAG,KACzB,aAAa,KAAK,UAAU,KAC5B,WAAW,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,YAAY,IAAI,GACxD;AACA,UAAM,IAAI,MAAM,0DAA0D,EAAE,EAAE;AAAA,EAChF;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,UAAkB,UAAkB;AACrE,QAAM,eAAe,iBAAAA,QAAK,QAAQ,iBAAAA,QAAK,WAAW,QAAQ,IAAI,WAAW,iBAAAA,QAAK,KAAK,UAAU,QAAQ,CAAC;AACtG,QAAM,eAAe,uBAAuB,UAAU,YAAY;AAClE,YAAM,wBAAO,YAAY;AACzB,QAAM,eAAe,UAAM,0BAAS,YAAY;AAChD,yBAAuB,UAAU,YAAY;AAC7C,QAAM,WAAW,UAAM,sBAAK,YAAY;AACxC,SAAO,EAAE,cAAc,SAAS;AAClC;AAEA,eAAe,oBAAoB,UAAkB,UAAmC;AACtF,QAAM,EAAE,cAAc,SAAS,IAAI,MAAM,oBAAoB,UAAU,QAAQ;AAC/E,MAAI,CAAC,SAAS,OAAO,EAAG,OAAM,IAAI,MAAM,kDAAkD,QAAQ,EAAE;AACpG,SAAO;AACT;AAEA,eAAe,qBAAqB,UAAkB,UAAmC;AACvF,QAAM,EAAE,cAAc,SAAS,IAAI,MAAM,oBAAoB,UAAU,QAAQ;AAC/E,MAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAS,YAAY,GAAG;AACjD,UAAM,IAAI,MAAM,8DAA8D,QAAQ,EAAE;AAAA,EAC1F;AACA,SAAO;AACT;AAEA,eAAe,iBAAiB,UAAkB,OAAgE;AAChH,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,OAAO,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,YAAY,UAAU,MAAM;AAAA,MAC5D,uBAAuB,UAAU,UAAU;AAAA,MAC3C,MAAM,qBAAqB,UAAU,UAAU;AAAA,IACjD,CAAC;AAAA,EACH;AACA,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,IAAM,+BAA+B,OACnC,YACA,UACA,WACoC;AACpC,QAAM,kBAAkB,oBAAI,IAAI;AAAA,IAC9B,OAAO;AAAA,IACP,GAAG,OAAO,OAAO,OAAO,iBAAiB,CAAC,CAAC;AAAA,IAC3C,OAAO,OAAO;AAAA,IACd,iBAAiB;AAAA,EACnB,CAAC;AACD,QAAM,SAAiC,CAAC;AACxC,aAAW,kBAAkB,iBAAiB;AAC5C,QAAI,CAAC,eAAgB;AACrB,UAAM,eAAe,iBAAAA,QAAK;AAAA,MACxB,iBAAAA,QAAK,WAAW,cAAc,IAAI,iBAAiB,iBAAAA,QAAK,KAAK,YAAY,cAAc;AAAA,IACzF;AACA,UAAM,eAAe,MAAM,oBAAoB,UAAU,YAAY;AACrE,WAAO,YAAY,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAEA,IAAM,uBAAuB,OAAO,UAAkB,WAA+D;AACnH,QAAM,WACJ,OAAO,OAQP;AACF,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,MAAM,OAAO,OAAO,IAAI;AAAA,IACxB,UAAU,MAAM,oBAAoB,UAAU,OAAO,QAAQ;AAAA,IAC7D,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,IAChB,QAAQ,MAAM,iBAAiB,UAAU,OAAO,MAAM;AAAA,IACtD,GAAI,OAAO,aAAa,EAAE,YAAY,MAAM,iBAAiB,UAAU,OAAO,UAAU,EAAE,IAAI,CAAC;AAAA,IAC/F,GAAI,OAAO,cACP;AAAA,MACE,aAAa;AAAA,QACX,YAAY,MAAM,oBAAoB,UAAU,OAAO,YAAY,UAAU;AAAA,QAC7E,UAAU,OAAO,YAAY;AAAA,QAC7B,eAAe,OAAO,YAAY;AAAA,MACpC;AAAA,IACF,IACA,CAAC;AAAA,IACL,QAAQ;AAAA,MACN,aAAa,OAAO,OAAO;AAAA,MAC3B,iBAAiB,OAAO,OAAO;AAAA,MAC/B,KAAK,OAAO,OAAO;AAAA,MACnB,GAAI,WACA;AAAA,QACE,UAAU,SAAS,IAAI,CAAC,aAAa;AAAA,UACnC,QAAQ,QAAQ;AAAA,UAChB,aAAa,QAAQ;AAAA,UACrB,GAAI,QAAQ,MAAM,EAAE,KAAK,YAAY,QAAQ,GAAG,EAAiB,IAAI,CAAC;AAAA,UACtE,GAAI,QAAQ,UAAU,EAAE,SAAS,YAAY,QAAQ,OAAO,EAAiB,IAAI,CAAC;AAAA,QACpF,EAAE;AAAA,MACJ,IACA,CAAC;AAAA,IACP;AAAA,EACF;AACF;AAEA,IAAM,wBAAwB,OAC5B,UACA,YACwC;AAAA,EACxC,IAAI,OAAO;AAAA,EACX,MAAM;AAAA,EACN,UAAU,MAAM,oBAAoB,UAAU,OAAO,QAAQ;AAAA,EAC7D,UAAU,OAAO;AAAA,EACjB,GAAI,OAAO,gBAAgB,EAAE,eAAe,OAAO,cAAc,IAAI,CAAC;AACxE;AAEA,IAAM,sBAAsB,CAC1B,YAC4E;AAC5E,QAAM,aAAa,oBAAI,IAAqC;AAC5D,QAAM,oBAA4C,CAAC;AAEnD,aAAW,UAAU,SAAS;AAC5B,UAAM,WAAW,KAAK,UAAU;AAAA,MAC9B,OAAO,SAAS,eAAe,mBAAmB;AAAA,MAClD,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,IACtB,CAAC;AACD,UAAM,qBAAqB,WAAW,IAAI,QAAQ;AAClD,UAAM,aAAsC,sBAAsB;AAAA,MAChE,IAAI,QAAQ,WAAW,IAAI;AAAA,MAC3B,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,WAAW,CAAC;AAAA,MACZ,QAAQ,EAAE,GAAG,OAAO,OAAO;AAAA,MAC3B,GAAI,OAAO,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO,WAAW,EAAE,IAAI,CAAC;AAAA,MACpE,GAAI,OAAO,cAAc,EAAE,aAAa,EAAE,GAAG,OAAO,YAAY,EAAE,IAAI,CAAC;AAAA,MACvE,QAAQ;AAAA,QACN,aAAa,OAAO,OAAO;AAAA,QAC3B,iBAAiB,OAAO,OAAO;AAAA,QAC/B,KAAK,OAAO,OAAO;AAAA,MACrB;AAAA,IACF;AACA,QAAI,CAAC,oBAAoB;AACvB,iBAAW,IAAI,UAAU,UAAU;AAAA,IACrC,OAAO;AACL,aAAO,OAAO,WAAW,QAAQ,OAAO,MAAM;AAC9C,UAAI,OAAO,WAAY,YAAW,aAAa,EAAE,GAAG,WAAW,YAAY,GAAG,OAAO,WAAW;AAChG,UAAI,OAAO,OAAO,gBAAgB,QAAW;AAC3C,mBAAW,OAAO,cAAc,KAAK,IAAI,WAAW,OAAO,eAAe,GAAG,OAAO,OAAO,WAAW;AAAA,MACxG;AAAA,IACF;AACA,eAAW,UAAU,KAAK,OAAO,EAAE;AACnC,sBAAkB,OAAO,EAAE,IAAI,WAAW;AAAA,EAC5C;AAEA,SAAO,EAAE,aAAa,CAAC,GAAG,WAAW,OAAO,CAAC,GAAG,kBAAkB;AACpE;AAEA,IAAM,0BAA0B,OAC9B,YACA,UACA,aACA,gBACA,uBACkB;AAClB,QAAM,mBAAmB,iBAAAA,QAAK,KAAK,YAAY,cAAc,UAAU,aAAa;AACpF,YAAM,uBAAM,kBAAkB,EAAE,WAAW,KAAK,CAAC;AACjD,QAAM,2BAA2B,uBAAuB,UAAU,gBAAgB;AAClF,QAAM,yBAAyB,iBAAAA,QAAK,MAAM,SAAS,0BAA0B,cAAc;AAC3F,QAAM,sBAAsB,uBAAuB,WAAW,GAAG,IAC7D,yBACA,KAAK,sBAAsB;AAC/B,QAAM,2BAA2B,iBAAAA,QAAK,MAAM;AAAA,IAC1C;AAAA,IACA,uBAAuB,UAAU,UAAU;AAAA,EAC7C;AACA,QAAM,4BAA4B,yBAAyB,WAAW,GAAG,IACrE,2BACA,KAAK,wBAAwB;AAEjC,QAAM,QAAQ;AAAA,IACZ,YAAY,IAAI,OAAO,eAAe;AACpC,YAAM,cAAc,iBAAAA,QAAK,KAAK,kBAAkB,GAAG,WAAW,EAAE,MAAM;AACtE,YAAM,iBAAiB,iBAAAA,QAAK,KAAK,UAAU,WAAW,aAAa,cAAc,WAAW,QAAQ;AACpG,YAAM,iBAAiB,iBAAAA,QAAK,SAAS,kBAAkB,cAAc,EAAE,WAAW,iBAAAA,QAAK,KAAK,GAAG;AAC/F,YAAM,kBAAkB,eAAe,WAAW,GAAG,IAAI,iBAAiB,KAAK,cAAc;AAC7F,YAAM,eAAe,uBAAuB,UAAa,WAAW,UAAU,SAAS,kBAAkB;AACzG,YAAM,oBACJ,WAAW,YAAY,UAAU,WAAW,eACvC,MAAM;AACL,cAAM,aAAa;AACnB,cAAM,cAAc,WAAW,YAAY,WAAW,QAAQ,UAAU;AACxE,cAAM,gBACJ,eAAe,IACX,WAAW,YAAY,WAAW,MAAM,GAAG,WAAW,IACtD,iBAAAA,QAAK,QAAQ,WAAW,YAAY,UAAU;AACpD,cAAM,oBAAoB,OAAO,QAAQ,WAAW,MAAM,EACvD,OAAO,CAAC,CAAC,EAAE,UAAU,MAAM,WAAW,WAAW,GAAG,aAAa,GAAG,KAAK,WAAW,SAAS,KAAK,CAAC,EACnG,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,MAAM;AACzC,cAAI,eAAe,WAAW,aAAa,WAAY,QAAO;AAC9D,cAAI,gBAAgB,WAAW,aAAa,WAAY,QAAO;AAC/D,iBAAO,WAAW,cAAc,WAAW;AAAA,QAC7C,CAAC;AACH,cAAM,UAAU,kBACb,IAAI,CAAC,CAAC,YAAY,UAAU,MAAM;AAMjC,gBAAM,oBACJ,eAAe,WAAW,aAAa,aAAa,WAAW,YAAY,aAAa;AAC1F,gBAAM,oBAAoB,iBAAAA,QAAK,MAAM,SAAS,0BAA0B,iBAAiB;AACzF,gBAAM,iBAAiB,kBAAkB,WAAW,GAAG,IACnD,oBACA,KAAK,iBAAiB;AAC1B,iBAAO,kBAAkB,KAAK,UAAU,cAAc,CAAC;AAAA,QACzD,CAAC,EACA,KAAK,IAAI;AACZ,eAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAA4L,OAAO;AAAA;AAAA;AAAA,iCAA8J,KAAK,UAAU,WAAW,YAAY,QAAQ,CAAC;AAAA,4BAAiC,KAAK,UAAU,WAAW,YAAY,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA,MAC9e,GAAG,IACH;AAAA;AAAA;AAAA,wCAA4H,KAAK,UAAU,yBAAyB,CAAC;AAAA,wCAAgE,KAAK,UAAU,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAC1Q,YAAM,SACH,WAAW,YAAY,UAAU,WAAW,eAAgB,eACzD,wCAAwC,KAAK,UAAU,mBAAmB,CAAC;AAAA,EAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uQAA0iB,KAAK;AAAA,QAC/oB,WAAW,YAAY,WAAW,MAAM,uBAAuB,UAAU,YAAY,IAAI;AAAA,MAC3F,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACD;AAAA;AAAA,2DAAqK,KAAK,UAAU,mBAAmB,CAAC;AAAA;AAAA;AAAA,wCAAoF,KAAK,UAAU,yBAAyB,CAAC;AAAA,wCAAgE,KAAK,UAAU,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oOAAy5B,KAAK;AAAA,QACh0C;AAAA,MACF,CAAC;AAAA;AAAA;AAAA;AAAA;AACP,gBAAM,2BAAU,aAAa,QAAQ,MAAM;AAC3C,YAAM,sBAAsB,uBAAuB,UAAU,WAAW;AACxE,iBAAW,OAAO,mBAAmB,IAAI;AACzC,iBAAW,WAAW;AAAA,IACxB,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAkB,CAAC,WAA8E;AACrG,MAAI,OAAO,OAAO,YAAa,QAAO;AACtC,SAAO;AAAA,IACL,eAAe,OAAO,OAAO,iBAAiB,CAAC,EAAE,UAAU,MAAM,CAAC;AAAA,IAClE,gBAAgB,OAAO,OAAO,eAAe,IAAI,CAAC,YAAY;AAC5D,UAAI,mBAAmB,KAAK;AAC1B,eAAO;AAAA,UACL,UAAU,QAAQ,aAAa,UAAW,SAAoB;AAAA,UAC9D,UAAU,QAAQ;AAAA,UAClB,MAAM,QAAQ;AAAA,UACd,UAAU,QAAQ;AAAA,UAClB,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AACA,aAAO,EAAE,GAAG,QAAQ;AAAA,IACtB,CAAC;AAAA,IACD,QAAQ,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,OAAO,OAAO,aAAa,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IACtG,SAAS,CAAC;AAAA,IACV,WAAW,OAAO,OAAO,aAAa,CAAC,EAAE;AAAA,IACzC,SAAS,OAAO,OAAO;AAAA,IACvB,iBAAiB,OAAO,OAAO;AAAA,IAC/B,qBAAqB,OAAO,OAAO;AAAA,IACnC,uBAAuB,OAAO,OAAO;AAAA,IACrC,wBAAwB,OAAO,OAAO;AAAA,IACtC,kBAAkB,OAAO,OAAO;AAAA,IAChC,qBAAqB,OAAO,OAAO;AAAA,IACnC,UAAU,CAAC;AAAA,EACb;AACF;AASA,IAAM,uBAAoC;AAAA,EACxC,MAAM;AAAA,EAEN,aAAa,QAAQ,EAAE,OAAO,YAAY,GAAG;AAC3C,QAAI,UAAU,uBAAwB,QAAO;AAE7C,UAAM,eAAe,OAAO,gBAAgB,QAAQ,IAAI;AACxD,QAAI,CAAC,kBAAkB,WAAW,GAAG;AACnC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,QACvC,QAAQ,OAAO,WAAW,WAAW,WAAW;AAAA,MAClD;AAAA,IACF;AACA,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAO,EAAE,GAAG,QAAQ,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC,EAAG;AAAA,IAChE;AAEA,UAAM,qBAAqB,OAAO,iBAAiB;AACnD,UAAM,+BAA+B,OAAO,kBAAkB;AAC9D,UAAM,SAAS,OAAO;AACtB,UAAM,oBACJ,WAAW,UAAa,OAAO,gBAAgB,QAAQ,OAAO,WAAW,aAAa,CAAC,OAAO;AAEhG,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,MACvC,GAAI,qBAAqB,EAAE,cAAc,mBAAmB,EAAE,IAAI,CAAC;AAAA,MACnE,GAAI,+BACA;AAAA,QACE,eAAe;AAAA,UACb,SAAS,8BAA8B;AAAA,UACvC,QAAQ,8BAA8B;AAAA,QACxC;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,sBAAsB,+BAA+B,EAAE,oBAAoB,EAAE,IAAI,CAAC;AAAA,MACtF,GAAI,oBACA;AAAA,QACE,QAAQ;AAAA,UACN,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,YAAY,kBAAkB;AAAA,QAChC;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,EAAE,YAAY,UAAU,SAAS,QAAQ,aAAa,SAAS,SAAS,QAAQ,GAAG;AACvG,UAAM,oBAAoB,iBAAAA,QAAK,KAAK,YAAY,YAAY;AAC5D,QAAI,CAAC,kBAAkB,WAAW,GAAG;AACnC,YAAMC,YAAyC;AAAA,QAC7C,SAAS;AAAA,QACT,QAAQ,OAAO,WAAW,WAAW,WAAW;AAAA,QAChD,SAAS,uBAAuB,YAAY,OAAO;AAAA,QACnD,mBAAmB,uBAAuB,UAAU,YAAY,IAAI;AAAA,QACpE;AAAA,QACA;AAAA,MACF;AACA,gBAAM,uBAAM,mBAAmB,EAAE,WAAW,KAAK,CAAC;AAClD,gBAAM,2BAAU,iBAAAD,QAAK,KAAK,mBAAmB,aAAa,GAAG,GAAG,KAAK,UAAUC,WAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAC7G;AAAA,IACF;AACA,UAAM,kBAAkB;AAAA,MACtB,OAAO,MAAM,QAAQ,IAAI,QAAQ,MAAM,IAAI,CAAC,WAAW,qBAAqB,UAAU,MAAM,CAAC,CAAC;AAAA,MAC9F,GAAI,QAAQ,aAAa,EAAE,YAAY,MAAM,qBAAqB,UAAU,QAAQ,UAAU,EAAE,IAAI,CAAC;AAAA,MACrG,UAAU,MAAM,QAAQ,IAAI,QAAQ,SAAS,IAAI,CAAC,WAAW,qBAAqB,UAAU,MAAM,CAAC,CAAC;AAAA,MACpG,UAAU,MAAM,QAAQ,IAAI,QAAQ,SAAS,IAAI,CAAC,WAAW,qBAAqB,UAAU,MAAM,CAAC,CAAC;AAAA,MACpG,WAAW,MAAM,QAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC,WAAW,qBAAqB,UAAU,MAAM,CAAC,CAAC;AAAA,MACtG,YAAY,MAAM,QAAQ;AAAA,QACxB,QAAQ,WAAW,IAAI,OAAO,WAAW;AACvC,gBAAM,EAAE,WAAW,GAAG,gBAAgB,IAAI,OAAO;AACjD,iBAAO;AAAA,YACL,IAAI,OAAO;AAAA,YACX,MAAM;AAAA,YACN,UAAU,OAAO;AAAA,YACjB,gBAAgB,OAAO;AAAA,YACvB,SAAS,OAAO;AAAA,YAChB,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,YACvD,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,YAAY,OAAO,kBAAkB,EAAE,IAC7D,CAAC;AAAA,YACL,GAAI,OAAO,WACP;AAAA,cACE,UAAU;AAAA,gBACR,GAAI,OAAO,SAAS,WAChB,EAAE,UAAU,MAAM,oBAAoB,UAAU,OAAO,SAAS,QAAQ,EAAE,IAC1E,CAAC;AAAA,gBACL,GAAI,OAAO,SAAS,kBAAkB,SAClC,EAAE,eAAe,OAAO,SAAS,cAAc,IAC/C,CAAC;AAAA,gBACL,GAAI,OAAO,SAAS,iBAAiB,EAAE,gBAAgB,OAAO,SAAS,eAAe,IAAI,CAAC;AAAA,gBAC3F,GAAI,OAAO,SAAS,sBAAsB,SACtC,EAAE,mBAAmB,OAAO,SAAS,kBAAkB,IACvD,CAAC;AAAA,gBACL,GAAI,OAAO,SAAS,sBAAsB,SACtC,EAAE,mBAAmB,OAAO,SAAS,kBAAkB,IACvD,CAAC;AAAA,gBACL,GAAI,OAAO,SAAS,mBAAmB,SACnC,EAAE,gBAAgB,OAAO,SAAS,eAAe,IACjD,CAAC;AAAA,cACP;AAAA,YACF,IACA,CAAC;AAAA,YACL,QAAQ;AAAA,cACN,GAAG;AAAA,cACH,GAAI,YAAY,EAAE,WAAW,YAAY,SAAS,EAAiB,IAAI,CAAC;AAAA,YAC1E;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM,QAAQ,IAAI,QAAQ,YAAY,IAAI,CAAC,WAAW,sBAAsB,UAAU,MAAM,CAAC,CAAC;AAAA,IAC7G;AACA,UAAM,oBAAoB;AAAA,MACxB,GAAG,gBAAgB;AAAA,MACnB,GAAG,gBAAgB;AAAA,MACnB,GAAG,gBAAgB;AAAA,MACnB,GAAG,gBAAgB;AAAA,MACnB,GAAI,gBAAgB,aAAa,CAAC,gBAAgB,UAAU,IAAI,CAAC;AAAA,IACnE;AACA,UAAM,iBAAiB,oBAAoB,iBAAiB;AAC5D,UAAM,sBAAsB,MAAM,6BAA6B,YAAY,UAAU,MAAM;AAC3F,eAAW,cAAc,eAAe,YAAa,QAAO,OAAO,WAAW,QAAQ,mBAAmB;AACzG,UAAM,iBAAiB,MAAM,oBAAoB,UAAU,iBAAiB,CAAC;AAC7E,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA,gBAAgB,YAAY;AAAA,IAC9B;AACA,UAAM,SAAS,gBAAgB,MAAM;AACrC,UAAM,WAAyC;AAAA,MAC7C,SAAS;AAAA,MACT,MAAM,OAAO,WAAW,WAAW,WAAW;AAAA,MAC9C,SAAS,uBAAuB,YAAY,OAAO;AAAA,MACnD,mBAAmB,uBAAuB,UAAU,YAAY,IAAI;AAAA,MACpE;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,QACN,UAAU,OAAO;AAAA,QACjB,eAAe,OAAO;AAAA,QACtB,iBAAiB,OAAO;AAAA,QACxB,GAAI,OAAO,OAAO,EAAE,MAAM,YAAY,OAAO,IAAI,EAAE,IAAI,CAAC;AAAA,QACxD,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B;AAAA,MACA,SAAS;AAAA,QACP,kBAAkB,YAAY,QAAQ,gBAAgB;AAAA,QACtD,aAAa,YAAY,QAAQ,WAAW;AAAA,QAC5C,YAAY,YAAY,QAAQ,UAAU;AAAA,QAC1C,eAAe,YAAY,QAAQ,aAAa;AAAA,QAChD,SAAS,YAAY,QAAQ,OAAO;AAAA,QACpC,UAAU,YAAY,QAAQ,QAAQ;AAAA,QACtC,yBAAyB,QAAQ;AAAA,QACjC,KAAK,YAAY,QAAQ,GAAG;AAAA,MAC9B;AAAA,MACA,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,cAAM,uBAAM,mBAAmB,EAAE,WAAW,KAAK,CAAC;AAClD,cAAM,2BAAU,iBAAAD,QAAK,KAAK,mBAAmB,aAAa,GAAG,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAAA,EAC/G;AACF;AAEA,IAAO,yBAAQ;","names":["path","manifest"]}
1
+ {"version":3,"sources":["../src/nextjs-adapter.ts"],"sourcesContent":["import type { NextAdapter } from 'next';\nimport { access, mkdir, readFile, realpath, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { NormalizedImagePolicy } from './image-policy';\nimport type {\n GigadriveNextBuildManifestV1,\n GigadriveNextBuildManifestV2,\n GigadriveNextEntrypoint,\n GigadriveNextRouteOutput,\n GigadriveNextStaticOutput,\n JsonValue,\n} from './nextjs-manifest';\n\ntype BuildCompleteContext = Parameters<NonNullable<NextAdapter['onBuildComplete']>>[0];\ntype NextRouteOutput =\n | BuildCompleteContext['outputs']['pages'][number]\n | BuildCompleteContext['outputs']['pagesApi'][number]\n | BuildCompleteContext['outputs']['appPages'][number]\n | BuildCompleteContext['outputs']['appRoutes'][number]\n | NonNullable<BuildCompleteContext['outputs']['middleware']>;\ntype NextStaticOutput = BuildCompleteContext['outputs']['staticFiles'][number];\n\nconst PRODUCTION_BUILD_PHASE = 'phase-production-build';\nconst runtimeDirectory = typeof __dirname === 'string' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n\nconst runtimeModulePath = (environmentName: string, fileName: string): string =>\n process.env[environmentName] ?? path.join(runtimeDirectory, fileName);\n\nconst CACHE_HANDLER_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_CACHE_HANDLER_PATH', 'nextjs-cache-handler.js');\nconst CACHE_COMPONENTS_HANDLER_PATH = () =>\n runtimeModulePath('GIGADRIVE_NEXT_CACHE_COMPONENTS_HANDLER_PATH', 'nextjs-cache-components-handler.js');\nconst IMAGE_LOADER_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_IMAGE_LOADER_PATH', 'nextjs-image-loader.js');\nconst PPR_RUNTIME_PATH = () => runtimeModulePath('GIGADRIVE_NEXT_PPR_RUNTIME_PATH', 'nextjs-ppr-runtime.js');\n\nconst TEMPLATE_DIRECTORY = path.join(runtimeDirectory, 'nextjs-entrypoint-templates');\nconst templateCache = new Map<string, Promise<string>>();\n\nconst loadWrapperTemplate = (name: string): Promise<string> => {\n let template = templateCache.get(name);\n if (!template) {\n template = readFile(path.join(TEMPLATE_DIRECTORY, name), 'utf8');\n templateCache.set(name, template);\n }\n return template;\n};\n\n/**\n * Replaces quoted `__GIGADRIVE_*__` tokens with JSON-encoded values and the\n * `__GIGADRIVE_EDGE_IMPORTS__` marker comment with raw source lines. Throws if\n * a substitution never matched or a placeholder survives, so template and\n * generator cannot drift apart silently.\n */\nconst renderWrapperTemplate = (\n templateName: string,\n template: string,\n substitutions: { strings?: Record<string, string>; blocks?: Record<string, string> }\n): string => {\n // Drop the top-of-file header comment: it documents the template mechanics\n // (including placeholder names, which would trip the leak check below) and\n // is not meant for the generated wrapper.\n let rendered = template.replace(/^(?:\\/\\/[^\\n]*\\n)+\\n?/, '');\n for (const [token, value] of Object.entries(substitutions.strings ?? {})) {\n const pattern = new RegExp(`(['\"])${token}\\\\1`, 'g');\n if (!pattern.test(rendered)) throw new Error(`Wrapper template ${templateName} is missing placeholder ${token}`);\n rendered = rendered.replace(pattern, JSON.stringify(value).replaceAll('$', '$$$$'));\n }\n for (const [token, value] of Object.entries(substitutions.blocks ?? {})) {\n const marker = `/* ${token} */`;\n if (!rendered.includes(marker)) throw new Error(`Wrapper template ${templateName} is missing marker ${token}`);\n rendered = rendered.replace(marker, value.replaceAll('$', '$$$$'));\n }\n if (rendered.includes('__GIGADRIVE_')) {\n throw new Error(`Wrapper template ${templateName} has unsubstituted placeholders`);\n }\n return rendered;\n};\n\nconst toJsonValue = (value: unknown): JsonValue => {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : (JSON.parse(serialized) as JsonValue);\n};\n\nconst supportsAdapterV2 = (nextVersion: string | undefined): boolean => {\n if (!nextVersion) return false;\n const [majorPart, minorPart] = nextVersion.split('.');\n const major = Number.parseInt(majorPart ?? '', 10);\n const minor = Number.parseInt(minorPart ?? '', 10);\n return Number.isFinite(major) && Number.isFinite(minor) && (major > 16 || (major === 16 && minor >= 2));\n};\n\nconst toPortableRelativePath = (from: string, to: string, allowCurrentDirectory = false): string => {\n const resolvedFrom = path.resolve(from);\n const resolvedTo = path.resolve(path.isAbsolute(to) ? to : path.join(from, to));\n const relativePath = path.relative(resolvedFrom, resolvedTo).replaceAll(path.sep, '/');\n const normalized = relativePath === '' ? '.' : relativePath;\n if (\n (!allowCurrentDirectory && normalized === '.') ||\n normalized.startsWith('/') ||\n /^[A-Za-z]:/.test(normalized) ||\n normalized.split('/').some((segment) => segment === '..')\n ) {\n throw new Error(`Next.js adapter output is outside the repository root: ${to}`);\n }\n return normalized;\n};\n\nasync function resolveReadablePath(repoRoot: string, filePath: string) {\n const absolutePath = path.resolve(path.isAbsolute(filePath) ? filePath : path.join(repoRoot, filePath));\n const portablePath = toPortableRelativePath(repoRoot, absolutePath);\n await access(absolutePath);\n // Validate the symlink-resolved location as well; the call throws when the\n // real path escapes the repository root.\n const resolvedPath = await realpath(absolutePath);\n void toPortableRelativePath(repoRoot, resolvedPath);\n const fileStat = await stat(absolutePath);\n return { portablePath, fileStat };\n}\n\nasync function requireReadableFile(repoRoot: string, filePath: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);\n if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);\n return portablePath;\n}\n\nasync function requireReadableAsset(repoRoot: string, filePath: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);\n if (!fileStat.isFile() && !fileStat.isDirectory()) {\n throw new Error(`Next.js adapter asset is not a readable file or directory: ${filePath}`);\n }\n return portablePath;\n}\n\nasync function serializeFileMap(repoRoot: string, files: Record<string, string>): Promise<Record<string, string>> {\n const entries = await Promise.all(\n Object.entries(files).map(async ([targetPath, sourcePath]) => [\n toPortableRelativePath(repoRoot, targetPath),\n await requireReadableAsset(repoRoot, sourcePath),\n ])\n );\n return Object.fromEntries(entries);\n}\n\nconst serializeRuntimeConfigAssets = async (\n projectDir: string,\n repoRoot: string,\n config: BuildCompleteContext['config']\n): Promise<Record<string, string>> => {\n const configuredPaths = new Set([\n config.cacheHandler,\n ...Object.values(config.cacheHandlers ?? {}),\n config.images.loaderFile,\n PPR_RUNTIME_PATH(),\n ]);\n const assets: Record<string, string> = {};\n for (const configuredPath of configuredPaths) {\n if (!configuredPath) continue;\n const absolutePath = path.resolve(\n path.isAbsolute(configuredPath) ? configuredPath : path.join(projectDir, configuredPath)\n );\n const portablePath = await requireReadableFile(repoRoot, absolutePath);\n assets[portablePath] = portablePath;\n }\n return assets;\n};\n\nconst serializeRouteOutput = async (repoRoot: string, output: NextRouteOutput): Promise<GigadriveNextRouteOutput> => {\n const matchers = (\n output.config as typeof output.config & {\n matchers?: Array<{\n source: string;\n sourceRegex: string;\n has?: unknown[];\n missing?: unknown[];\n }>;\n }\n ).matchers;\n return {\n id: output.id,\n type: String(output.type) as GigadriveNextRouteOutput['type'],\n filePath: await requireReadableFile(repoRoot, output.filePath),\n pathname: output.pathname,\n sourcePage: output.sourcePage,\n runtime: output.runtime,\n assets: await serializeFileMap(repoRoot, output.assets),\n ...(output.wasmAssets ? { wasmAssets: await serializeFileMap(repoRoot, output.wasmAssets) } : {}),\n ...(output.edgeRuntime\n ? {\n edgeRuntime: {\n modulePath: await requireReadableFile(repoRoot, output.edgeRuntime.modulePath),\n entryKey: output.edgeRuntime.entryKey,\n handlerExport: output.edgeRuntime.handlerExport,\n },\n }\n : {}),\n config: {\n maxDuration: output.config.maxDuration,\n preferredRegion: output.config.preferredRegion,\n env: output.config.env,\n ...(matchers\n ? {\n matchers: matchers.map((matcher) => ({\n source: matcher.source,\n sourceRegex: matcher.sourceRegex,\n ...(matcher.has ? { has: toJsonValue(matcher.has) as JsonValue[] } : {}),\n ...(matcher.missing ? { missing: toJsonValue(matcher.missing) as JsonValue[] } : {}),\n })),\n }\n : {}),\n },\n };\n};\n\nconst serializeStaticOutput = async (\n repoRoot: string,\n output: NextStaticOutput\n): Promise<GigadriveNextStaticOutput> => ({\n id: output.id,\n type: 'STATIC_FILE',\n filePath: await requireReadableFile(repoRoot, output.filePath),\n pathname: output.pathname,\n ...(output.immutableHash ? { immutableHash: output.immutableHash } : {}),\n});\n\nconst buildEntrypointPlan = (\n outputs: GigadriveNextRouteOutput[]\n): Pick<GigadriveNextBuildManifestV2, 'entrypoints' | 'outputEntrypoints'> => {\n const byIdentity = new Map<string, GigadriveNextEntrypoint>();\n const outputEntrypoints: Record<string, string> = {};\n\n for (const output of outputs) {\n const identity = JSON.stringify([\n output.type === 'MIDDLEWARE' ? 'middleware-web' : 'route',\n output.runtime,\n output.filePath,\n output.edgeRuntime?.modulePath,\n output.edgeRuntime?.entryKey,\n output.edgeRuntime?.handlerExport,\n ]);\n const existingEntrypoint = byIdentity.get(identity);\n const entrypoint: GigadriveNextEntrypoint = existingEntrypoint ?? {\n id: `next-${byIdentity.size}`,\n runtime: output.runtime,\n filePath: output.filePath,\n outputIds: [],\n assets: { ...output.assets },\n ...(output.wasmAssets ? { wasmAssets: { ...output.wasmAssets } } : {}),\n ...(output.edgeRuntime ? { edgeRuntime: { ...output.edgeRuntime } } : {}),\n config: {\n maxDuration: output.config.maxDuration,\n preferredRegion: output.config.preferredRegion,\n env: output.config.env,\n },\n };\n if (!existingEntrypoint) {\n byIdentity.set(identity, entrypoint);\n } else {\n Object.assign(entrypoint.assets, output.assets);\n if (output.wasmAssets) entrypoint.wasmAssets = { ...entrypoint.wasmAssets, ...output.wasmAssets };\n if (output.config.maxDuration !== undefined) {\n entrypoint.config.maxDuration = Math.max(entrypoint.config.maxDuration ?? 0, output.config.maxDuration);\n }\n }\n entrypoint.outputIds.push(output.id);\n outputEntrypoints[output.id] = entrypoint.id;\n }\n\n return { entrypoints: [...byIdentity.values()], outputEntrypoints };\n};\n\nconst writeEntrypointWrappers = async (\n projectDir: string,\n repoRoot: string,\n entrypoints: GigadriveNextEntrypoint[],\n pprRuntimePath: string,\n middlewareOutputId?: string\n): Promise<void> => {\n const wrapperDirectory = path.join(projectDir, '.gigadrive', 'nextjs', 'entrypoints');\n await mkdir(wrapperDirectory, { recursive: true });\n const portableWrapperDirectory = toPortableRelativePath(repoRoot, wrapperDirectory);\n const relativePprRuntimePath = path.posix.relative(portableWrapperDirectory, pprRuntimePath);\n const pprRuntimeSpecifier = relativePprRuntimePath.startsWith('.')\n ? relativePprRuntimePath\n : `./${relativePprRuntimePath}`;\n const relativeProjectDirectory = path.posix.relative(\n portableWrapperDirectory,\n toPortableRelativePath(repoRoot, projectDir, true)\n );\n const projectDirectorySpecifier = relativeProjectDirectory.startsWith('.')\n ? relativeProjectDirectory\n : `./${relativeProjectDirectory}`;\n\n await Promise.all(\n entrypoints.map(async (entrypoint) => {\n const wrapperPath = path.join(wrapperDirectory, `${entrypoint.id}.mjs`);\n const executablePath = path.join(repoRoot, entrypoint.edgeRuntime?.modulePath ?? entrypoint.filePath);\n const relativeImport = path.relative(wrapperDirectory, executablePath).replaceAll(path.sep, '/');\n const importSpecifier = relativeImport.startsWith('.') ? relativeImport : `./${relativeImport}`;\n const isMiddleware = middlewareOutputId !== undefined && entrypoint.outputIds.includes(middlewareOutputId);\n\n let source: string;\n if (entrypoint.runtime === 'edge' && entrypoint.edgeRuntime) {\n const edgeMarker = '/server/edge/';\n const markerIndex = entrypoint.edgeRuntime.modulePath.indexOf(edgeMarker);\n const distDirectory =\n markerIndex >= 0\n ? entrypoint.edgeRuntime.modulePath.slice(0, markerIndex)\n : path.dirname(entrypoint.edgeRuntime.modulePath);\n const edgeRuntimeAssets = Object.entries(entrypoint.assets)\n .filter(([, sourcePath]) => sourcePath.startsWith(`${distDirectory}/`) && sourcePath.endsWith('.js'))\n .sort(([, leftSource], [, rightSource]) => {\n if (leftSource === entrypoint.edgeRuntime?.modulePath) return 1;\n if (rightSource === entrypoint.edgeRuntime?.modulePath) return -1;\n return leftSource.localeCompare(rightSource);\n });\n const imports = edgeRuntimeAssets\n .map(([targetPath, sourcePath]) => {\n // Next includes the executable Edge module in `assets` under a\n // deployment-relative target such as `server/edge/chunks/*`,\n // while `modulePath` retains its canonical `.next/server/*`\n // location. Function packaging installs the executable at the\n // canonical path, so the wrapper must import it there as well.\n const runtimeTargetPath =\n sourcePath === entrypoint.edgeRuntime?.modulePath ? entrypoint.edgeRuntime.modulePath : targetPath;\n const relativeAssetPath = path.posix.relative(portableWrapperDirectory, runtimeTargetPath);\n const assetSpecifier = relativeAssetPath.startsWith('.') ? relativeAssetPath : `./${relativeAssetPath}`;\n return `await import(${JSON.stringify(assetSpecifier)});`;\n })\n .join('\\n');\n source = renderWrapperTemplate('edge-web.mjs', await loadWrapperTemplate('edge-web.mjs'), {\n strings: {\n __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,\n __GIGADRIVE_EDGE_ENTRY_KEY__: entrypoint.edgeRuntime.entryKey,\n __GIGADRIVE_EDGE_HANDLER_EXPORT__: entrypoint.edgeRuntime.handlerExport,\n __GIGADRIVE_RELATIVE_PROJECT_DIR__: toPortableRelativePath(repoRoot, projectDir, true),\n },\n blocks: { __GIGADRIVE_EDGE_IMPORTS__: imports },\n });\n } else {\n const templateName = isMiddleware ? 'node-middleware-web.mjs' : 'node-route.mjs';\n source = renderWrapperTemplate(templateName, await loadWrapperTemplate(templateName), {\n strings: {\n __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,\n __GIGADRIVE_PROJECT_DIR__: projectDirectorySpecifier,\n __GIGADRIVE_ENTRYPOINT__: importSpecifier,\n // The Node wrappers chdir into the project directory, so Next\n // resolves everything relative to \".\".\n __GIGADRIVE_RELATIVE_PROJECT_DIR__: '.',\n },\n });\n }\n await writeFile(wrapperPath, source, 'utf8');\n const portableWrapperPath = toPortableRelativePath(repoRoot, wrapperPath);\n entrypoint.assets[portableWrapperPath] = portableWrapperPath;\n entrypoint.filePath = portableWrapperPath;\n })\n );\n};\n\nconst normalizeImages = (config: BuildCompleteContext['config']): NormalizedImagePolicy | undefined => {\n if (config.images.unoptimized) return undefined;\n return {\n localPatterns: config.images.localPatterns ?? [{ pathname: '/**' }],\n remotePatterns: config.images.remotePatterns.map((pattern) => {\n if (pattern instanceof URL) {\n return {\n protocol: pattern.protocol === 'http:' ? ('http' as const) : ('https' as const),\n hostname: pattern.hostname,\n port: pattern.port,\n pathname: pattern.pathname,\n search: pattern.search,\n };\n }\n return { ...pattern };\n }),\n widths: [...new Set([...config.images.deviceSizes, ...config.images.imageSizes])].sort((a, b) => a - b),\n heights: [],\n qualities: config.images.qualities ?? [75],\n formats: config.images.formats,\n minimumCacheTTL: config.images.minimumCacheTTL,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n contentSecurityPolicy: config.images.contentSecurityPolicy,\n contentDispositionType: config.images.contentDispositionType,\n maximumRedirects: config.images.maximumRedirects,\n maximumResponseBody: config.images.maximumResponseBody,\n variants: {},\n };\n};\n\n/**\n * Next.js deployment adapter used automatically by Gigadrive Network build workers.\n *\n * Next 16.2 and newer emit a portable, versioned runtime plan. Older releases retain\n * the standalone-server behavior because their experimental adapter context does not\n * expose the routing and runtime metadata required by the v2 contract.\n */\nconst gigadriveNextAdapter: NextAdapter = {\n name: 'Gigadrive Network',\n\n modifyConfig(config, { phase, nextVersion }) {\n if (phase !== PRODUCTION_BUILD_PHASE) return config;\n\n const deploymentId = config.deploymentId ?? process.env.GIGADRIVE_DEPLOYMENT_ID;\n if (!supportsAdapterV2(nextVersion)) {\n return {\n ...config,\n ...(deploymentId ? { deploymentId } : {}),\n output: config.output === 'export' ? 'export' : 'standalone',\n };\n }\n if (config.output === 'export') {\n return { ...config, ...(deploymentId ? { deploymentId } : {}) };\n }\n\n const injectCacheHandler = config.cacheHandler === undefined;\n const injectCacheComponentHandlers = config.cacheHandlers === undefined;\n const images = config.images;\n const injectImageLoader =\n images !== undefined && images.unoptimized !== true && images.loader === 'default' && !images.loaderFile;\n\n return {\n ...config,\n ...(deploymentId ? { deploymentId } : {}),\n ...(injectCacheHandler ? { cacheHandler: CACHE_HANDLER_PATH() } : {}),\n ...(injectCacheComponentHandlers\n ? {\n cacheHandlers: {\n default: CACHE_COMPONENTS_HANDLER_PATH(),\n remote: CACHE_COMPONENTS_HANDLER_PATH(),\n },\n }\n : {}),\n ...(injectCacheHandler || injectCacheComponentHandlers ? { cacheMaxMemorySize: 0 } : {}),\n ...(injectImageLoader\n ? {\n images: {\n ...images,\n loader: 'custom',\n loaderFile: IMAGE_LOADER_PATH(),\n },\n }\n : {}),\n };\n },\n\n async onBuildComplete({ projectDir, repoRoot, distDir, config, nextVersion, buildId, routing, outputs }) {\n const metadataDirectory = path.join(projectDir, '.gigadrive');\n if (!supportsAdapterV2(nextVersion)) {\n const manifest: GigadriveNextBuildManifestV1 = {\n version: 1,\n output: config.output === 'export' ? 'export' : 'standalone',\n distDir: toPortableRelativePath(projectDir, distDir),\n repoRootToProject: toPortableRelativePath(repoRoot, projectDir, true),\n nextVersion,\n buildId,\n };\n await mkdir(metadataDirectory, { recursive: true });\n await writeFile(path.join(metadataDirectory, 'nextjs.json'), `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n return;\n }\n const portableOutputs = {\n pages: await Promise.all(outputs.pages.map((output) => serializeRouteOutput(repoRoot, output))),\n ...(outputs.middleware ? { middleware: await serializeRouteOutput(repoRoot, outputs.middleware) } : {}),\n appPages: await Promise.all(outputs.appPages.map((output) => serializeRouteOutput(repoRoot, output))),\n pagesApi: await Promise.all(outputs.pagesApi.map((output) => serializeRouteOutput(repoRoot, output))),\n appRoutes: await Promise.all(outputs.appRoutes.map((output) => serializeRouteOutput(repoRoot, output))),\n prerenders: await Promise.all(\n outputs.prerenders.map(async (output) => {\n const { bypassFor, ...prerenderConfig } = output.config;\n return {\n id: output.id,\n type: 'PRERENDER' as const,\n pathname: output.pathname,\n parentOutputId: output.parentOutputId,\n groupId: output.groupId,\n ...(output.pprChain ? { pprChain: output.pprChain } : {}),\n ...(output.parentFallbackMode !== undefined\n ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) }\n : {}),\n ...(output.fallback\n ? {\n fallback: {\n ...(output.fallback.filePath\n ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath) }\n : {}),\n ...(output.fallback.initialStatus !== undefined\n ? { initialStatus: output.fallback.initialStatus }\n : {}),\n ...(output.fallback.initialHeaders ? { initialHeaders: output.fallback.initialHeaders } : {}),\n ...(output.fallback.initialExpiration !== undefined\n ? { initialExpiration: output.fallback.initialExpiration }\n : {}),\n ...(output.fallback.initialRevalidate !== undefined\n ? { initialRevalidate: output.fallback.initialRevalidate }\n : {}),\n ...(output.fallback.postponedState !== undefined\n ? { postponedState: output.fallback.postponedState }\n : {}),\n },\n }\n : {}),\n config: {\n ...prerenderConfig,\n ...(bypassFor ? { bypassFor: toJsonValue(bypassFor) as JsonValue[] } : {}),\n },\n };\n })\n ),\n staticFiles: await Promise.all(outputs.staticFiles.map((output) => serializeStaticOutput(repoRoot, output))),\n };\n const executableOutputs = [\n ...portableOutputs.pages,\n ...portableOutputs.pagesApi,\n ...portableOutputs.appPages,\n ...portableOutputs.appRoutes,\n ...(portableOutputs.middleware ? [portableOutputs.middleware] : []),\n ];\n const entrypointPlan = buildEntrypointPlan(executableOutputs);\n const runtimeConfigAssets = await serializeRuntimeConfigAssets(projectDir, repoRoot, config);\n for (const entrypoint of entrypointPlan.entrypoints) Object.assign(entrypoint.assets, runtimeConfigAssets);\n const pprRuntimePath = await requireReadableFile(repoRoot, PPR_RUNTIME_PATH());\n await writeEntrypointWrappers(\n projectDir,\n repoRoot,\n entrypointPlan.entrypoints,\n pprRuntimePath,\n portableOutputs.middleware?.id\n );\n const images = normalizeImages(config);\n const manifest: GigadriveNextBuildManifestV2 = {\n version: 2,\n mode: config.output === 'export' ? 'export' : 'adapter-v2',\n distDir: toPortableRelativePath(projectDir, distDir),\n repoRootToProject: toPortableRelativePath(repoRoot, projectDir, true),\n nextVersion,\n buildId,\n config: {\n basePath: config.basePath,\n trailingSlash: config.trailingSlash,\n cacheComponents: config.cacheComponents,\n ...(config.i18n ? { i18n: toJsonValue(config.i18n) } : {}),\n ...(images ? { images } : {}),\n },\n routing: {\n beforeMiddleware: toJsonValue(routing.beforeMiddleware) as JsonValue[],\n beforeFiles: toJsonValue(routing.beforeFiles) as JsonValue[],\n afterFiles: toJsonValue(routing.afterFiles) as JsonValue[],\n dynamicRoutes: toJsonValue(routing.dynamicRoutes) as JsonValue[],\n onMatch: toJsonValue(routing.onMatch) as JsonValue[],\n fallback: toJsonValue(routing.fallback) as JsonValue[],\n shouldNormalizeNextData: routing.shouldNormalizeNextData,\n rsc: toJsonValue(routing.rsc),\n },\n outputs: portableOutputs,\n ...entrypointPlan,\n };\n\n await mkdir(metadataDirectory, { recursive: true });\n await writeFile(path.join(metadataDirectory, 'nextjs.json'), `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n },\n};\n\nexport default gigadriveNextAdapter;\n"],"mappings":"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","names":["path","manifest"]}
@@ -1,5 +1,5 @@
1
1
  // src/nextjs-adapter.ts
2
- import { access, mkdir, realpath, stat, writeFile } from "fs/promises";
2
+ import { access, mkdir, readFile, realpath, stat, writeFile } from "fs/promises";
3
3
  import path from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  var PRODUCTION_BUILD_PHASE = "phase-production-build";
@@ -9,6 +9,33 @@ var CACHE_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_HANDLER_P
9
9
  var CACHE_COMPONENTS_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_COMPONENTS_HANDLER_PATH", "nextjs-cache-components-handler.js");
10
10
  var IMAGE_LOADER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_IMAGE_LOADER_PATH", "nextjs-image-loader.js");
11
11
  var PPR_RUNTIME_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_PPR_RUNTIME_PATH", "nextjs-ppr-runtime.js");
12
+ var TEMPLATE_DIRECTORY = path.join(runtimeDirectory, "nextjs-entrypoint-templates");
13
+ var templateCache = /* @__PURE__ */ new Map();
14
+ var loadWrapperTemplate = (name) => {
15
+ let template = templateCache.get(name);
16
+ if (!template) {
17
+ template = readFile(path.join(TEMPLATE_DIRECTORY, name), "utf8");
18
+ templateCache.set(name, template);
19
+ }
20
+ return template;
21
+ };
22
+ var renderWrapperTemplate = (templateName, template, substitutions) => {
23
+ let rendered = template.replace(/^(?:\/\/[^\n]*\n)+\n?/, "");
24
+ for (const [token, value] of Object.entries(substitutions.strings ?? {})) {
25
+ const pattern = new RegExp(`(['"])${token}\\1`, "g");
26
+ if (!pattern.test(rendered)) throw new Error(`Wrapper template ${templateName} is missing placeholder ${token}`);
27
+ rendered = rendered.replace(pattern, JSON.stringify(value).replaceAll("$", "$$$$"));
28
+ }
29
+ for (const [token, value] of Object.entries(substitutions.blocks ?? {})) {
30
+ const marker = `/* ${token} */`;
31
+ if (!rendered.includes(marker)) throw new Error(`Wrapper template ${templateName} is missing marker ${token}`);
32
+ rendered = rendered.replace(marker, value.replaceAll("$", "$$$$"));
33
+ }
34
+ if (rendered.includes("__GIGADRIVE_")) {
35
+ throw new Error(`Wrapper template ${templateName} has unsubstituted placeholders`);
36
+ }
37
+ return rendered;
38
+ };
12
39
  var toJsonValue = (value) => {
13
40
  const serialized = JSON.stringify(value);
14
41
  return serialized === void 0 ? null : JSON.parse(serialized);
@@ -35,7 +62,7 @@ async function resolveReadablePath(repoRoot, filePath) {
35
62
  const portablePath = toPortableRelativePath(repoRoot, absolutePath);
36
63
  await access(absolutePath);
37
64
  const resolvedPath = await realpath(absolutePath);
38
- toPortableRelativePath(repoRoot, resolvedPath);
65
+ void toPortableRelativePath(repoRoot, resolvedPath);
39
66
  const fileStat = await stat(absolutePath);
40
67
  return { portablePath, fileStat };
41
68
  }
@@ -167,7 +194,7 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
167
194
  const pprRuntimeSpecifier = relativePprRuntimePath.startsWith(".") ? relativePprRuntimePath : `./${relativePprRuntimePath}`;
168
195
  const relativeProjectDirectory = path.posix.relative(
169
196
  portableWrapperDirectory,
170
- toPortableRelativePath(repoRoot, projectDir)
197
+ toPortableRelativePath(repoRoot, projectDir, true)
171
198
  );
172
199
  const projectDirectorySpecifier = relativeProjectDirectory.startsWith(".") ? relativeProjectDirectory : `./${relativeProjectDirectory}`;
173
200
  await Promise.all(
@@ -177,7 +204,8 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
177
204
  const relativeImport = path.relative(wrapperDirectory, executablePath).replaceAll(path.sep, "/");
178
205
  const importSpecifier = relativeImport.startsWith(".") ? relativeImport : `./${relativeImport}`;
179
206
  const isMiddleware = middlewareOutputId !== void 0 && entrypoint.outputIds.includes(middlewareOutputId);
180
- const webHandlerPrelude = entrypoint.runtime === "edge" && entrypoint.edgeRuntime ? (() => {
207
+ let source;
208
+ if (entrypoint.runtime === "edge" && entrypoint.edgeRuntime) {
181
209
  const edgeMarker = "/server/edge/";
182
210
  const markerIndex = entrypoint.edgeRuntime.modulePath.indexOf(edgeMarker);
183
211
  const distDirectory = markerIndex >= 0 ? entrypoint.edgeRuntime.modulePath.slice(0, markerIndex) : path.dirname(entrypoint.edgeRuntime.modulePath);
@@ -190,83 +218,30 @@ var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRunti
190
218
  const runtimeTargetPath = sourcePath === entrypoint.edgeRuntime?.modulePath ? entrypoint.edgeRuntime.modulePath : targetPath;
191
219
  const relativeAssetPath = path.posix.relative(portableWrapperDirectory, runtimeTargetPath);
192
220
  const assetSpecifier = relativeAssetPath.startsWith(".") ? relativeAssetPath : `./${relativeAssetPath}`;
193
- return ` await import(${JSON.stringify(assetSpecifier)});`;
221
+ return `await import(${JSON.stringify(assetSpecifier)});`;
194
222
  }).join("\n");
195
- return `import { AsyncLocalStorage } from "node:async_hooks";
196
-
197
- const resolveHandler = async () => {
198
- globalThis.self ??= globalThis;
199
- globalThis.AsyncLocalStorage ??= AsyncLocalStorage;
200
- ${imports}
201
- const registry = globalThis._ENTRIES;
202
- if (!registry) throw new Error('Next.js edge entry registry is unavailable');
203
- const entry = await registry[${JSON.stringify(entrypoint.edgeRuntime.entryKey)}];
204
- const handler = entry?.[${JSON.stringify(entrypoint.edgeRuntime.handlerExport)}];
205
- if (typeof handler !== 'function') throw new Error('Next.js edge handler is unavailable');
206
- return handler;
207
- };`;
208
- })() : `import { fileURLToPath } from "node:url";
209
-
210
- const resolveHandler = async () => {
211
- process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));
212
- const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});
213
- const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);
214
- const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;
215
- if (typeof handler !== 'function') throw new Error('Next.js middleware handler is unavailable');
216
- return handler;
217
- };`;
218
- const source = entrypoint.runtime === "edge" && entrypoint.edgeRuntime || isMiddleware ? `import { persistPprCacheEntry } from ${JSON.stringify(pprRuntimeSpecifier)};
219
- ${webHandlerPrelude}
220
-
221
- export async function fetch(request) {
222
- const pending = [];
223
- const handler = await resolveHandler();
224
- const url = new URL(request.url);
225
- const response = await handler(request, {
226
- signal: request.signal,
227
- waitUntil(promise) { pending.push(Promise.resolve(promise)); },
228
- requestMeta: { hostname: url.hostname, invocationTarget: request.headers.get('x-gigadrive-next-invocation-target') ?? url.pathname, routeMatches: Object.fromEntries(new URLSearchParams(request.headers.get('x-now-route-matches') ?? '')), relativeProjectDir: ${JSON.stringify(
229
- entrypoint.runtime === "nodejs" ? "." : toPortableRelativePath(repoRoot, projectDir, true)
230
- )}, onCacheEntryV2(cacheEntry, meta) { pending.push(persistPprCacheEntry(request.headers.get('x-gigadrive-next-cache-key') ?? meta.url ?? request.headers.get('x-matched-path') ?? url.pathname, cacheEntry)); return false; } },
231
- });
232
- if (!response.body) { await Promise.allSettled(pending); return response; }
233
- const reader = response.body.getReader();
234
- const body = new ReadableStream({
235
- async pull(controller) {
236
- const result = await reader.read();
237
- if (result.done) { await Promise.allSettled(pending); controller.close(); return; }
238
- controller.enqueue(result.value);
239
- },
240
- async cancel(reason) { try { await reader.cancel(reason); } finally { await Promise.allSettled(pending); } },
241
- });
242
- return new Response(body, response);
243
- }
244
- ` : `import "next/dist/build/adapter/setup-node-env.external.js";
245
- import { fileURLToPath } from "node:url";
246
- import { persistPprCacheEntry, revalidateNextPath } from ${JSON.stringify(pprRuntimeSpecifier)};
247
-
248
- const resolveHandler = async () => {
249
- process.chdir(fileURLToPath(new URL(${JSON.stringify(projectDirectorySpecifier)}, import.meta.url)));
250
- const nextEntrypoint = await import(${JSON.stringify(importSpecifier)});
251
- const loadedEntrypoint = await Promise.resolve(nextEntrypoint.default ?? nextEntrypoint);
252
- const handler = nextEntrypoint.handler ?? loadedEntrypoint?.handler ?? loadedEntrypoint?.default?.handler ?? loadedEntrypoint?.default ?? loadedEntrypoint;
253
- if (typeof handler !== 'function') throw new Error('Next.js Node handler is unavailable');
254
- return handler;
255
- };
256
-
257
- export default async function handler(req, res) {
258
- const pending = [];
259
- const nextHandler = await resolveHandler();
260
- const hostname = Array.isArray(req.headers.host) ? req.headers.host[0] : req.headers.host;
261
- await nextHandler(req, res, {
262
- waitUntil(promise) { pending.push(Promise.resolve(promise)); },
263
- requestMeta: { hostname, invocationTarget: req.headers['x-gigadrive-next-invocation-target'] ?? req.url, routeMatches: Object.fromEntries(new URLSearchParams(req.headers['x-now-route-matches'] ?? '')), relativeProjectDir: ${JSON.stringify(
264
- "."
265
- )}, revalidate(input) { return revalidateNextPath({ ...input, hostname }); }, onCacheEntryV2(cacheEntry, meta) { const cacheKey = req.headers['x-gigadrive-next-cache-key']; const matchedPath = req.headers['x-matched-path']; pending.push(persistPprCacheEntry((Array.isArray(cacheKey) ? cacheKey[0] : cacheKey) ?? meta.url ?? (Array.isArray(matchedPath) ? matchedPath[0] : matchedPath) ?? req.url ?? '/', cacheEntry)); return false; } },
266
- });
267
- await Promise.allSettled(pending);
268
- }
269
- `;
223
+ source = renderWrapperTemplate("edge-web.mjs", await loadWrapperTemplate("edge-web.mjs"), {
224
+ strings: {
225
+ __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,
226
+ __GIGADRIVE_EDGE_ENTRY_KEY__: entrypoint.edgeRuntime.entryKey,
227
+ __GIGADRIVE_EDGE_HANDLER_EXPORT__: entrypoint.edgeRuntime.handlerExport,
228
+ __GIGADRIVE_RELATIVE_PROJECT_DIR__: toPortableRelativePath(repoRoot, projectDir, true)
229
+ },
230
+ blocks: { __GIGADRIVE_EDGE_IMPORTS__: imports }
231
+ });
232
+ } else {
233
+ const templateName = isMiddleware ? "node-middleware-web.mjs" : "node-route.mjs";
234
+ source = renderWrapperTemplate(templateName, await loadWrapperTemplate(templateName), {
235
+ strings: {
236
+ __GIGADRIVE_PPR_RUNTIME__: pprRuntimeSpecifier,
237
+ __GIGADRIVE_PROJECT_DIR__: projectDirectorySpecifier,
238
+ __GIGADRIVE_ENTRYPOINT__: importSpecifier,
239
+ // The Node wrappers chdir into the project directory, so Next
240
+ // resolves everything relative to ".".
241
+ __GIGADRIVE_RELATIVE_PROJECT_DIR__: "."
242
+ }
243
+ });
244
+ }
270
245
  await writeFile(wrapperPath, source, "utf8");
271
246
  const portableWrapperPath = toPortableRelativePath(repoRoot, wrapperPath);
272
247
  entrypoint.assets[portableWrapperPath] = portableWrapperPath;