@gigadrive/network-config 4.5.0 → 4.6.1

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.
@@ -193,21 +193,7 @@ var serializeStaticFileAsset = async (projectDir, resolvedProjectDir, basePath,
193
193
  ...output.immutableHash ? { immutable: true } : {}
194
194
  };
195
195
  };
196
- var serializePrerenderAsset = (projectDir, repoRoot, distDir, output) => {
197
- const { fallback } = output;
198
- const hasNoTimeBasedRevalidation = fallback?.initialRevalidate === false;
199
- if (!fallback?.filePath || !hasNoTimeBasedRevalidation || fallback.postponedState !== void 0 || output.config.bypassFor !== void 0 || isInsideDirectory(import_node_path.default.join(distDir, "server", "pages"), import_node_path.default.resolve(repoRoot, fallback.filePath)) || isDynamicRoutePathname(output.pathname)) {
200
- return void 0;
201
- }
202
- const headers = fallback.initialHeaders ? getPublicStaticResponseHeaders(fallback.initialHeaders) : void 0;
203
- return {
204
- source: toPortableRelativePath(projectDir, import_node_path.default.join(repoRoot, fallback.filePath)),
205
- path: output.pathname,
206
- ...fallback.initialStatus !== void 0 ? { status: fallback.initialStatus } : {},
207
- ...headers ? { headers } : {}
208
- };
209
- };
210
- async function serializeAssetManifest(projectDir, resolvedProjectDir, repoRoot, distDir, basePath, rscContentType, locales, staticFiles, prerenders) {
196
+ async function serializeAssetManifest(projectDir, resolvedProjectDir, distDir, basePath, rscContentType, locales, staticFiles) {
211
197
  const staticDirectory = import_node_path.default.join(distDir, "static");
212
198
  const staticEntries = await mapInBatches(
213
199
  staticFiles.filter(
@@ -216,12 +202,8 @@ async function serializeAssetManifest(projectDir, resolvedProjectDir, repoRoot,
216
202
  ),
217
203
  (output) => serializeStaticFileAsset(projectDir, resolvedProjectDir, basePath, rscContentType, locales, output)
218
204
  );
219
- const entries = [
220
- ...staticEntries,
221
- ...prerenders.map((output) => serializePrerenderAsset(projectDir, repoRoot, distDir, output))
222
- ];
223
205
  const assetsByPath = /* @__PURE__ */ new Map();
224
- for (const entry of entries) {
206
+ for (const entry of staticEntries) {
225
207
  if (!entry) continue;
226
208
  if (assetsByPath.has(entry.path)) throw new Error(`Duplicate Next.js static asset path: ${entry.path}`);
227
209
  assetsByPath.set(entry.path, entry);
@@ -235,10 +217,11 @@ var getEntryPagePaths = (prerenders) => [
235
217
  ].sort((left, right) => left.split("/").length - right.split("/").length || left.localeCompare(right)).slice(0, MAXIMUM_ENTRY_PAGE_PATHS);
236
218
  var serializePrerenderOutput = async (repoRoot, resolvedRepoRoot, output) => {
237
219
  const { bypassFor, ...prerenderConfig } = output.config;
238
- return {
220
+ const serializedOutput = {
239
221
  id: output.id,
240
222
  type: "PRERENDER",
241
223
  pathname: output.pathname,
224
+ ...output.route !== void 0 ? { route: output.route } : {},
242
225
  parentOutputId: output.parentOutputId,
243
226
  groupId: output.groupId,
244
227
  ...output.pprChain ? { pprChain: output.pprChain } : {},
@@ -258,6 +241,16 @@ var serializePrerenderOutput = async (repoRoot, resolvedRepoRoot, output) => {
258
241
  ...bypassFor ? { bypassFor: toJsonValue(bypassFor) } : {}
259
242
  }
260
243
  };
244
+ if (output.routeType !== void 0) {
245
+ return {
246
+ ...serializedOutput,
247
+ routeType: output.routeType,
248
+ response: output.response,
249
+ compute: output.compute,
250
+ ...output.htmlSize !== void 0 ? { htmlSize: output.htmlSize } : {}
251
+ };
252
+ }
253
+ return serializedOutput;
261
254
  };
262
255
  var aggregateServerDescriptor = (outputs) => {
263
256
  let maxDuration;
@@ -273,6 +266,19 @@ var aggregateServerDescriptor = (outputs) => {
273
266
  ...Object.keys(env).length > 0 ? { env } : {}
274
267
  };
275
268
  };
269
+ var TURBOPACK_SERVER_TRACE_IGNORES = [
270
+ // client components with a NODE_ENV guard the tracer cannot evaluate
271
+ "**/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js",
272
+ "**/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js",
273
+ // server/lib/router-server.js requires this statically but only uses it in dev
274
+ "**/next/dist/server/lib/router-utils/setup-dev-bundler.js",
275
+ // server/next.js requires this statically but only uses it in dev
276
+ "**/next/dist/server/dev/next-dev-server.js",
277
+ // build-time-only browser support data pulled in via next/dist/compiled/babel*
278
+ "**/next/dist/compiled/browserslist/**",
279
+ "**/next/dist/compiled/jest-worker/**/*",
280
+ "**/node_modules/react{,-dom,-server-dom-turbopack}/**/*.development.js"
281
+ ];
276
282
  async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config) {
277
283
  const aggregateTracePath = import_node_path.default.join(distDir, "next-server.js.nft.json");
278
284
  try {
@@ -290,10 +296,18 @@ async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, confi
290
296
  `Next.js did not emit ${aggregateTracePath} and the Gigadrive adapter could not load next/dist/build/collect-build-traces from the project to regenerate it: ${message}`
291
297
  );
292
298
  }
299
+ const { outputFileTracingExcludes = {} } = config;
300
+ const tracingConfig = {
301
+ ...config,
302
+ outputFileTracingExcludes: {
303
+ ...outputFileTracingExcludes,
304
+ "next-server": [...outputFileTracingExcludes["next-server"] ?? [], ...TURBOPACK_SERVER_TRACE_IGNORES]
305
+ }
306
+ };
293
307
  try {
294
308
  await collectBuildTracesModule.collectBuildTraces({
295
309
  dir: projectDir,
296
- config,
310
+ config: tracingConfig,
297
311
  distDir,
298
312
  edgeRuntimeRoutes: {},
299
313
  staticPages: [],
@@ -423,15 +437,17 @@ var gigadriveNextAdapter = {
423
437
  const assetManifest = await serializeAssetManifest(
424
438
  projectDir,
425
439
  resolvedProjectDir,
426
- repoRoot,
427
440
  distDir,
428
441
  config.basePath,
429
442
  routing.rsc.contentTypeHeader ?? DEFAULT_RSC_CONTENT_TYPE,
430
443
  config.i18n?.locales ?? [],
431
- outputs.staticFiles,
432
- prerenders
444
+ outputs.staticFiles
433
445
  );
434
- const prerenderManifest = { version: 1, prerenders };
446
+ const prerenderManifest = {
447
+ version: 1,
448
+ seedMethods: ["GET", "HEAD"],
449
+ prerenders
450
+ };
435
451
  await (0, import_promises.mkdir)(import_node_path.default.join(metadataDirectory, "assets"), { recursive: true });
436
452
  await Promise.all([
437
453
  (0, import_promises.writeFile)(import_node_path.default.join(projectDir, NEXT_ASSET_MANIFEST_PATH), `${JSON.stringify(assetManifest)}
@@ -480,7 +496,16 @@ var gigadriveNextAdapter = {
480
496
  prerenderManifest: NEXT_PRERENDER_MANIFEST_PATH,
481
497
  assetManifest: NEXT_ASSET_MANIFEST_PATH,
482
498
  entryPagePaths: getEntryPagePaths(prerenders),
483
- staticAssets
499
+ staticAssets,
500
+ middleware: outputs.middleware ? {
501
+ present: true,
502
+ matchers: (outputs.middleware.config.matchers ?? []).map(({ source, sourceRegex, has, missing }) => ({
503
+ source,
504
+ sourceRegex,
505
+ has,
506
+ missing
507
+ }))
508
+ } : { present: false, matchers: [] }
484
509
  }
485
510
  };
486
511
  await writeManifest(manifest);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nextjs-adapter.ts","../src/manifest-schema.ts","../src/nextjs-constants.ts"],"sourcesContent":["import { Schema } from 'effect';\nimport type { NextAdapter } from 'next';\nimport { access, mkdir, readFile, realpath, stat, writeFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StaticAssetHeaders, StaticAssetManifestEntry, StaticAssetManifestV1 } from './asset-manifest';\nimport type { NormalizedImagePolicy } from './image-policy';\nimport { decodeJson, decodeUnknown, HttpHeadersSchema } from './manifest-schema';\nimport { MAXIMUM_ENTRY_PAGE_PATHS } from './nextjs-constants';\nimport type {\n GigadriveNextBuildManifestV1,\n GigadriveNextBuildManifestV2Export,\n GigadriveNextBuildManifestV2Standalone,\n GigadriveNextPrerenderManifestV1,\n GigadriveNextPrerenderOutput,\n GigadriveNextServerDescriptor,\n GigadriveNextStaticAssetPrefix,\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 NextPrerenderOutput = BuildCompleteContext['outputs']['prerenders'][number];\ntype NextStaticFileOutput = BuildCompleteContext['outputs']['staticFiles'][number];\n\nconst PRODUCTION_BUILD_PHASE = 'phase-production-build';\nconst NEXT_ASSET_MANIFEST_PATH = '.gigadrive/assets/nextjs.json';\nconst NEXT_PRERENDER_MANIFEST_PATH = '.gigadrive/nextjs-prerenders.json';\nconst HTML_CONTENT_TYPE = 'text/html; charset=utf-8';\nconst DEFAULT_RSC_CONTENT_TYPE = 'text/x-component';\nconst INTERNAL_STATIC_RESPONSE_HEADERS = new Set(['x-next-cache-tags', 'x-nextjs-prerender']);\nconst NextStaticFileMetaSchema = Schema.Struct({\n status: Schema.optional(Schema.Int.pipe(Schema.between(100, 599))),\n headers: Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.Unknown })),\n});\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');\n\nconst toJsonValue = (value: unknown): JsonValue => {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : (JSON.parse(serialized) as JsonValue);\n};\n\n/**\n * Next 16.2 introduced the adapter hooks (`modifyConfig` + `onBuildComplete`) and\n * the `cacheHandler`/`cacheHandlers`/`cacheComponents` config fields we inject.\n * Earlier releases keep the legacy standalone-only behavior with no injection.\n */\nconst supportsManagedRuntime = (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\n/**\n * Highest Next major validated to allow `output: 'standalone'` together with an\n * adapter. Next's own build source warns the combination \"might not be allowed\"\n * in a future release. We always emit `output: 'standalone'` on the managed path\n * (there is no per-route fallback to degrade to), so if a future major forbids\n * it the build fails loudly at `next build` rather than silently misdeploying.\n * The network canary drift test tracks releases past this bound.\n */\nconst MANAGED_STANDALONE_VALIDATED_MAX_MAJOR = 16;\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, resolvedRoot?: 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(resolvedRoot ?? (await realpath(repoRoot)), resolvedPath);\n const fileStat = await stat(absolutePath);\n return { portablePath, fileStat };\n}\n\nasync function requireReadableFile(repoRoot: string, filePath: string, resolvedRoot?: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath, resolvedRoot);\n if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);\n return portablePath;\n}\n\nasync function mapInBatches<Input, Output>(\n values: Input[],\n mapper: (value: Input) => Promise<Output>,\n batchSize = 64\n): Promise<Output[]> {\n const results: Output[] = [];\n for (let index = 0; index < values.length; index += batchSize) {\n results.push(...(await Promise.all(values.slice(index, index + batchSize).map((value) => mapper(value)))));\n }\n return results;\n}\n\nconst isInsideDirectory = (directory: string, filePath: string): boolean => {\n const relativePath = path.relative(path.resolve(directory), path.resolve(filePath));\n return relativePath !== '' && !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n};\n\nconst isDynamicRoutePathname = (pathname: string): boolean => pathname.includes('[');\n\n// Next reports the Pages Router root as `<basePath>/index`, while its public URL\n// is the base path itself (or `/` when no base path is configured).\nconst normalizeStaticFilePathname = (pathname: string, basePath: string): string =>\n pathname === `${basePath}/index` ? basePath || '/' : pathname;\n\nconst getStaticStatus = (pathname: string, basePath: string, locales: readonly string[]): number | undefined => {\n const routePathname = basePath && pathname.startsWith(`${basePath}/`) ? pathname.slice(basePath.length) : pathname;\n const segments = routePathname.split('/').filter(Boolean);\n const [firstSegment, secondSegment] = segments;\n const statusPage =\n segments.length === 1\n ? firstSegment\n : segments.length === 2 && firstSegment && locales.includes(firstSegment)\n ? secondSegment\n : undefined;\n return statusPage === '404' ? 404 : statusPage === '500' ? 500 : undefined;\n};\n\nconst hasContentType = (headers: StaticAssetHeaders): boolean =>\n Object.keys(headers).some((name) => name.toLowerCase() === 'content-type');\n\nconst getPublicStaticResponseHeaders = (headers: Record<string, unknown>): StaticAssetHeaders | undefined => {\n const publicHeaders = Object.fromEntries(\n Object.entries(headers).filter(([name]) => !INTERNAL_STATIC_RESPONSE_HEADERS.has(name.toLowerCase()))\n );\n return decodeUnknown(HttpHeadersSchema, publicHeaders);\n};\n\nasync function getStaticFileResponseMetadata(\n projectDir: string,\n resolvedProjectDir: string,\n output: NextStaticFileOutput,\n rscContentType: string,\n basePath: string,\n locales: readonly string[]\n): Promise<Pick<StaticAssetManifestEntry, 'status' | 'headers'> | undefined> {\n if (output.filePath.endsWith('.body')) {\n const metaPath = `${output.filePath.slice(0, -'.body'.length)}.meta`;\n await requireReadableFile(projectDir, metaPath, resolvedProjectDir);\n const meta = decodeJson(NextStaticFileMetaSchema, await readFile(metaPath, 'utf8'));\n const headers = meta ? getPublicStaticResponseHeaders(meta.headers) : undefined;\n if (!meta || !headers || !hasContentType(headers)) return undefined;\n return {\n ...(meta.status !== undefined ? { status: meta.status } : {}),\n headers,\n };\n }\n if (output.filePath.endsWith('.html')) {\n const status = getStaticStatus(output.pathname, basePath, locales);\n return {\n ...(status !== undefined ? { status } : {}),\n headers: { 'content-type': HTML_CONTENT_TYPE },\n };\n }\n if (output.pathname.endsWith('.rsc')) return { headers: { 'content-type': rscContentType } };\n return {};\n}\n\nconst serializeStaticFileAsset = async (\n projectDir: string,\n resolvedProjectDir: string,\n basePath: string,\n rscContentType: string,\n locales: readonly string[],\n output: NextStaticFileOutput\n): Promise<StaticAssetManifestEntry | undefined> => {\n const [source, responseMetadata] = await Promise.all([\n requireReadableFile(projectDir, output.filePath, resolvedProjectDir),\n getStaticFileResponseMetadata(projectDir, resolvedProjectDir, output, rscContentType, basePath, locales),\n ]);\n if (!responseMetadata) return undefined;\n return {\n source,\n path: normalizeStaticFilePathname(output.pathname, basePath),\n ...responseMetadata,\n ...(output.immutableHash ? { immutable: true } : {}),\n };\n};\n\nconst serializePrerenderAsset = (\n projectDir: string,\n repoRoot: string,\n distDir: string,\n output: GigadriveNextPrerenderOutput\n): StaticAssetManifestEntry | undefined => {\n const { fallback } = output;\n // `false` disables scheduled ISR. Per-route bypass conditions still require\n // runtime; Pages Router prerenders also stay server-backed because they may\n // be updated through on-demand ISR even without a time-based revalidation.\n const hasNoTimeBasedRevalidation = fallback?.initialRevalidate === false;\n if (\n !fallback?.filePath ||\n !hasNoTimeBasedRevalidation ||\n fallback.postponedState !== undefined ||\n output.config.bypassFor !== undefined ||\n isInsideDirectory(path.join(distDir, 'server', 'pages'), path.resolve(repoRoot, fallback.filePath)) ||\n isDynamicRoutePathname(output.pathname)\n ) {\n return undefined;\n }\n const headers = fallback.initialHeaders ? getPublicStaticResponseHeaders(fallback.initialHeaders) : undefined;\n return {\n source: toPortableRelativePath(projectDir, path.join(repoRoot, fallback.filePath)),\n path: output.pathname,\n ...(fallback.initialStatus !== undefined ? { status: fallback.initialStatus } : {}),\n ...(headers ? { headers } : {}),\n };\n};\n\nasync function serializeAssetManifest(\n projectDir: string,\n resolvedProjectDir: string,\n repoRoot: string,\n distDir: string,\n basePath: string,\n rscContentType: string,\n locales: readonly string[],\n staticFiles: NextStaticFileOutput[],\n prerenders: GigadriveNextPrerenderOutput[]\n): Promise<StaticAssetManifestV1> {\n const staticDirectory = path.join(distDir, 'static');\n const staticEntries = await mapInBatches(\n staticFiles.filter(\n // The complete immutable subtree is already represented by a prefix.\n (output) => !isInsideDirectory(staticDirectory, output.filePath) && !isDynamicRoutePathname(output.pathname)\n ),\n (output) => serializeStaticFileAsset(projectDir, resolvedProjectDir, basePath, rscContentType, locales, output)\n );\n const entries = [\n ...staticEntries,\n ...prerenders.map((output) => serializePrerenderAsset(projectDir, repoRoot, distDir, output)),\n ];\n const assetsByPath = new Map<string, StaticAssetManifestEntry>();\n for (const entry of entries) {\n if (!entry) continue;\n if (assetsByPath.has(entry.path)) throw new Error(`Duplicate Next.js static asset path: ${entry.path}`);\n assetsByPath.set(entry.path, entry);\n }\n return { version: 1, assets: [...assetsByPath.values()] };\n}\n\nconst getEntryPagePaths = (prerenders: GigadriveNextPrerenderOutput[]): string[] =>\n [\n ...new Set(\n prerenders\n .filter((output) => output.fallback?.postponedState === undefined)\n .map((output) => output.pathname)\n .filter((pathname) => pathname.startsWith('/') && !isDynamicRoutePathname(pathname))\n ),\n ]\n .sort((left, right) => left.split('/').length - right.split('/').length || left.localeCompare(right))\n .slice(0, MAXIMUM_ENTRY_PAGE_PATHS);\n\nconst serializePrerenderOutput = async (\n repoRoot: string,\n resolvedRepoRoot: string,\n output: NextPrerenderOutput\n): Promise<GigadriveNextPrerenderOutput> => {\n const { bypassFor, ...prerenderConfig } = output.config;\n return {\n id: output.id,\n type: 'PRERENDER',\n pathname: output.pathname,\n parentOutputId: output.parentOutputId,\n groupId: output.groupId,\n ...(output.pprChain ? { pprChain: output.pprChain } : {}),\n ...(output.parentFallbackMode !== undefined ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) } : {}),\n ...(output.fallback\n ? {\n fallback: {\n ...(output.fallback.filePath\n ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath, resolvedRepoRoot) }\n : {}),\n ...(output.fallback.initialStatus !== undefined ? { initialStatus: output.fallback.initialStatus } : {}),\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 ? { postponedState: output.fallback.postponedState } : {}),\n },\n }\n : {}),\n config: {\n ...prerenderConfig,\n ...(bypassFor ? { bypassFor: toJsonValue(bypassFor) as JsonValue[] } : {}),\n },\n };\n};\n\n/**\n * Collapses per-route runtime config onto the one standalone server. `maxDuration`\n * becomes the max across routes (one function honors one limit); `env` is the union\n * of every route's declared env (the single server runs them all in-process).\n */\nconst aggregateServerDescriptor = (outputs: NextRouteOutput[]): GigadriveNextServerDescriptor => {\n let maxDuration: number | undefined;\n const env: Record<string, string> = {};\n for (const output of outputs) {\n if (output.config.maxDuration !== undefined) {\n maxDuration = Math.max(maxDuration ?? 0, output.config.maxDuration);\n }\n if (output.config.env) Object.assign(env, output.config.env);\n }\n return {\n ...(maxDuration !== undefined ? { maxDuration } : {}),\n ...(Object.keys(env).length > 0 ? { env } : {}),\n };\n};\n\ntype CollectBuildTracesModule = {\n collectBuildTraces: (options: {\n dir: string;\n config: BuildCompleteContext['config'];\n distDir: string;\n edgeRuntimeRoutes: Record<string, never>;\n staticPages: string[];\n outputFileTracingRoot: string;\n }) => Promise<void>;\n};\n\n/**\n * Next 16.3 stopped emitting the aggregated `next-server.js.nft.json` /\n * `next-minimal-server.js.nft.json` traces from Turbopack builds whenever an\n * adapter is configured, yet `next build` still runs the `output: 'standalone'`\n * writer after `onBuildComplete` — and that writer reads exactly this file, so\n * the build dies with ENOENT. Next 16.2 and all webpack builds still emit the\n * file, making this a no-op there. When the file is missing, regenerate both\n * aggregate traces with Next's own `collectBuildTraces` (the module the webpack\n * pipeline runs); without `buildTraceContext` it only writes the two aggregate\n * trace files and leaves Turbopack's per-entry traces untouched.\n */\nasync function ensureStandaloneServerTraces(\n projectDir: string,\n repoRoot: string,\n distDir: string,\n config: BuildCompleteContext['config']\n): Promise<void> {\n const aggregateTracePath = path.join(distDir, 'next-server.js.nft.json');\n try {\n await access(aggregateTracePath);\n return;\n } catch {\n // Missing — Next will crash in its standalone writer unless we regenerate it.\n }\n let collectBuildTracesModule: CollectBuildTracesModule;\n try {\n const projectRequire = createRequire(path.join(projectDir, 'package.json'));\n collectBuildTracesModule = projectRequire('next/dist/build/collect-build-traces') as CollectBuildTracesModule;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Next.js did not emit ${aggregateTracePath} and the Gigadrive adapter could not load ` +\n `next/dist/build/collect-build-traces from the project to regenerate it: ${message}`\n );\n }\n try {\n await collectBuildTracesModule.collectBuildTraces({\n dir: projectDir,\n config,\n distDir,\n edgeRuntimeRoutes: {},\n staticPages: [],\n outputFileTracingRoot: (config as { outputFileTracingRoot?: string }).outputFileTracingRoot ?? repoRoot,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Regenerating the Next.js standalone server traces (${aggregateTracePath}) failed: ${message}`);\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 run the entire deployment as a single `output: 'standalone'`\n * server (one function per deployment) while the injected cache handlers, image\n * loader, and this hook's `onBuildComplete` metadata keep ISR, PPR, `use cache`,\n * and image optimization working through the platform's durable runtime-cache and\n * edge image services. Older releases retain the legacy standalone behavior without\n * the managed-runtime injections.\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 (!supportsManagedRuntime(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 // Run the whole deployment as one standalone Next server rather than a\n // serverless function per route. `onBuildComplete` still fires under\n // standalone (Next >= 16.2), and the standalone server natively honors the\n // injected cache handlers and resumes PPR from its incremental cache, so\n // ISR/PPR/`use cache` stay durable via the remote runtime-cache service.\n // Validated on Next 16.2.x (see MANAGED_STANDALONE_VALIDATED_MAX_MAJOR);\n // a future major that forbids adapter + standalone fails loudly at build.\n output: 'standalone',\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 await mkdir(metadataDirectory, { recursive: true });\n const manifestPath = path.join(metadataDirectory, 'nextjs.json');\n const writeManifest = (manifest: unknown) =>\n writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n\n if (!supportsManagedRuntime(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 writeManifest(manifest);\n return;\n }\n\n const portableDistDir = toPortableRelativePath(projectDir, distDir);\n const repoRootToProject = toPortableRelativePath(repoRoot, projectDir, true);\n\n if (config.output === 'export') {\n const manifest: GigadriveNextBuildManifestV2Export = {\n version: 2,\n mode: 'export',\n distDir: portableDistDir,\n repoRootToProject,\n nextVersion,\n buildId,\n };\n await writeManifest(manifest);\n return;\n }\n\n if (config.output === 'standalone') {\n await ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config);\n }\n\n const [resolvedRepoRoot, resolvedProjectDir] = await Promise.all([realpath(repoRoot), realpath(projectDir)]);\n const prerenders = await mapInBatches(outputs.prerenders, (output) =>\n serializePrerenderOutput(repoRoot, resolvedRepoRoot, output)\n );\n const assetManifest = await serializeAssetManifest(\n projectDir,\n resolvedProjectDir,\n repoRoot,\n distDir,\n config.basePath,\n routing.rsc.contentTypeHeader ?? DEFAULT_RSC_CONTENT_TYPE,\n config.i18n?.locales ?? [],\n outputs.staticFiles,\n prerenders\n );\n const prerenderManifest: GigadriveNextPrerenderManifestV1 = { version: 1, prerenders };\n await mkdir(path.join(metadataDirectory, 'assets'), { recursive: true });\n await Promise.all([\n writeFile(path.join(projectDir, NEXT_ASSET_MANIFEST_PATH), `${JSON.stringify(assetManifest)}\\n`, 'utf8'),\n writeFile(path.join(projectDir, NEXT_PRERENDER_MANIFEST_PATH), `${JSON.stringify(prerenderManifest)}\\n`, 'utf8'),\n ]);\n const server = aggregateServerDescriptor([\n ...outputs.pages,\n ...outputs.pagesApi,\n ...outputs.appPages,\n ...outputs.appRoutes,\n ...(outputs.middleware ? [outputs.middleware] : []),\n ]);\n const images = normalizeImages(config);\n // `.next/static` is thousands of content-hashed, immutable chunks. Register\n // the whole subtree as one edge-served prefix instead of enumerating files.\n const staticAssets: GigadriveNextStaticAssetPrefix[] = [\n { sourceDir: `${portableDistDir}/static`, urlPrefix: '_next/static', immutable: true },\n ];\n\n const manifest: GigadriveNextBuildManifestV2Standalone = {\n version: 2,\n mode: 'standalone-v2',\n distDir: portableDistDir,\n repoRootToProject,\n nextVersion,\n buildId,\n server,\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: {\n prerenders: [],\n prerenderManifest: NEXT_PRERENDER_MANIFEST_PATH,\n assetManifest: NEXT_ASSET_MANIFEST_PATH,\n entryPagePaths: getEntryPagePaths(prerenders),\n staticAssets,\n },\n };\n await writeManifest(manifest);\n },\n};\n\nexport { MANAGED_STANDALONE_VALIDATED_MAX_MAJOR };\nexport default gigadriveNextAdapter;\n","import { Option, Schema } from 'effect';\n\nconst HTTP_HEADER_NAME = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\nconst HTTP_HEADER_VALUE = /^[\\t\\x20-\\x7e\\x80-\\xff]*$/;\nconst URL_PATHNAME_FORBIDDEN_CHARACTER = /[\\x00-\\x1f\\x7f?#\\\\]/;\n\nconst isUrlDotSegment = (segment: string): boolean => {\n const decodedDots = segment.replace(/%2e/gi, '.');\n return decodedDots === '.' || decodedDots === '..';\n};\n\nconst isPortableRelativePath = (value: string, allowCurrentDirectory = false): boolean => {\n const normalized = value.replaceAll('\\\\', '/').replace(/^\\.\\//, '').replace(/\\/+$/, '');\n return (\n (allowCurrentDirectory || (normalized !== '' && normalized !== '.')) &&\n !normalized.startsWith('/') &&\n !/^[A-Za-z]:/.test(normalized) &&\n !normalized.includes(':') &&\n !normalized.split('/').includes('..')\n );\n};\n\nexport const PortableRelativePathSchema = Schema.String.pipe(Schema.filter((value) => isPortableRelativePath(value)));\n\nexport const RepositoryRelativePathSchema = Schema.String.pipe(\n Schema.filter((value) => isPortableRelativePath(value, true))\n);\n\nexport const UrlPathnameSchema = Schema.String.pipe(\n Schema.filter(\n (value) =>\n value.startsWith('/') && !URL_PATHNAME_FORBIDDEN_CHARACTER.test(value) && !value.split('/').some(isUrlDotSegment)\n )\n);\n\nexport const HttpHeaderValueSchema = Schema.String.pipe(Schema.pattern(HTTP_HEADER_VALUE));\nexport const HttpHeadersSchema = Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.Union(HttpHeaderValueSchema, Schema.mutable(Schema.Array(HttpHeaderValueSchema))),\n })\n).pipe(Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));\nexport const HttpSingleValueHeadersSchema = Schema.mutable(\n Schema.Record({ key: Schema.String, value: HttpHeaderValueSchema })\n).pipe(Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));\n\n/**\n * Decode an unknown value with an Effect schema.\n *\n * @param schema - Schema used to validate and decode the value.\n * @param value - Unknown input to decode.\n * @returns The decoded value, or `undefined` when validation fails.\n * @example\n * decodeUnknown(Schema.String, 'value');\n */\nexport const decodeUnknown = <A, I>(schema: Schema.Schema<A, I, never>, value: unknown): A | undefined =>\n Schema.decodeUnknownOption(schema, { onExcessProperty: 'preserve' })(value).pipe(Option.getOrUndefined);\n\n/**\n * Decode a JSON string with an Effect schema.\n *\n * @param schema - Schema used to validate and decode the parsed JSON value.\n * @param content - JSON string to parse and decode.\n * @returns The decoded value, or `undefined` when parsing or validation fails.\n * @example\n * decodeJson(Schema.Struct({ version: Schema.Number }), '{\"version\":1}');\n */\nexport const decodeJson = <A, I>(schema: Schema.Schema<A, I, never>, content: string): A | undefined =>\n decodeUnknown(Schema.parseJson(schema), content);\n","/**\n * A representative sample is enough for cache warming. The complete prerender\n * table stays in its sidecar so it cannot expand gateway configuration by\n * thousands of paths.\n */\nexport const MAXIMUM_ENTRY_PAGE_PATHS = 50;\n"],"mappings":"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","names":["import_effect","path","manifest"]}
1
+ {"version":3,"sources":["../src/nextjs-adapter.ts","../src/manifest-schema.ts","../src/nextjs-constants.ts"],"sourcesContent":["import { Schema } from 'effect';\nimport type { NextAdapter } from 'next';\nimport { access, mkdir, readFile, realpath, stat, writeFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StaticAssetHeaders, StaticAssetManifestEntry, StaticAssetManifestV1 } from './asset-manifest';\nimport type { NormalizedImagePolicy } from './image-policy';\nimport { decodeJson, decodeUnknown, HttpHeadersSchema } from './manifest-schema';\nimport { MAXIMUM_ENTRY_PAGE_PATHS } from './nextjs-constants';\nimport type {\n GigadriveNextBuildManifestV1,\n GigadriveNextBuildManifestV2Export,\n GigadriveNextBuildManifestV2Standalone,\n GigadriveNextPrerenderManifestV1,\n GigadriveNextPrerenderOutput,\n GigadriveNextServerDescriptor,\n GigadriveNextStaticAssetPrefix,\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 NextPrerenderOutput = BuildCompleteContext['outputs']['prerenders'][number];\ntype NextStaticFileOutput = BuildCompleteContext['outputs']['staticFiles'][number];\n\nconst PRODUCTION_BUILD_PHASE = 'phase-production-build';\nconst NEXT_ASSET_MANIFEST_PATH = '.gigadrive/assets/nextjs.json';\nconst NEXT_PRERENDER_MANIFEST_PATH = '.gigadrive/nextjs-prerenders.json';\nconst HTML_CONTENT_TYPE = 'text/html; charset=utf-8';\nconst DEFAULT_RSC_CONTENT_TYPE = 'text/x-component';\nconst INTERNAL_STATIC_RESPONSE_HEADERS = new Set(['x-next-cache-tags', 'x-nextjs-prerender']);\nconst NextStaticFileMetaSchema = Schema.Struct({\n status: Schema.optional(Schema.Int.pipe(Schema.between(100, 599))),\n headers: Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.Unknown })),\n});\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');\n\nconst toJsonValue = (value: unknown): JsonValue => {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : (JSON.parse(serialized) as JsonValue);\n};\n\n/**\n * Next 16.2 introduced the adapter hooks (`modifyConfig` + `onBuildComplete`) and\n * the `cacheHandler`/`cacheHandlers`/`cacheComponents` config fields we inject.\n * Earlier releases keep the legacy standalone-only behavior with no injection.\n */\nconst supportsManagedRuntime = (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\n/**\n * Highest Next major validated to allow `output: 'standalone'` together with an\n * adapter. Next's own build source warns the combination \"might not be allowed\"\n * in a future release. We always emit `output: 'standalone'` on the managed path\n * (there is no per-route fallback to degrade to), so if a future major forbids\n * it the build fails loudly at `next build` rather than silently misdeploying.\n * The network canary drift test tracks releases past this bound.\n */\nconst MANAGED_STANDALONE_VALIDATED_MAX_MAJOR = 16;\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, resolvedRoot?: 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(resolvedRoot ?? (await realpath(repoRoot)), resolvedPath);\n const fileStat = await stat(absolutePath);\n return { portablePath, fileStat };\n}\n\nasync function requireReadableFile(repoRoot: string, filePath: string, resolvedRoot?: string): Promise<string> {\n const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath, resolvedRoot);\n if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);\n return portablePath;\n}\n\nasync function mapInBatches<Input, Output>(\n values: Input[],\n mapper: (value: Input) => Promise<Output>,\n batchSize = 64\n): Promise<Output[]> {\n const results: Output[] = [];\n for (let index = 0; index < values.length; index += batchSize) {\n results.push(...(await Promise.all(values.slice(index, index + batchSize).map((value) => mapper(value)))));\n }\n return results;\n}\n\nconst isInsideDirectory = (directory: string, filePath: string): boolean => {\n const relativePath = path.relative(path.resolve(directory), path.resolve(filePath));\n return relativePath !== '' && !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n};\n\nconst isDynamicRoutePathname = (pathname: string): boolean => pathname.includes('[');\n\n// Next reports the Pages Router root as `<basePath>/index`, while its public URL\n// is the base path itself (or `/` when no base path is configured).\nconst normalizeStaticFilePathname = (pathname: string, basePath: string): string =>\n pathname === `${basePath}/index` ? basePath || '/' : pathname;\n\nconst getStaticStatus = (pathname: string, basePath: string, locales: readonly string[]): number | undefined => {\n const routePathname = basePath && pathname.startsWith(`${basePath}/`) ? pathname.slice(basePath.length) : pathname;\n const segments = routePathname.split('/').filter(Boolean);\n const [firstSegment, secondSegment] = segments;\n const statusPage =\n segments.length === 1\n ? firstSegment\n : segments.length === 2 && firstSegment && locales.includes(firstSegment)\n ? secondSegment\n : undefined;\n return statusPage === '404' ? 404 : statusPage === '500' ? 500 : undefined;\n};\n\nconst hasContentType = (headers: StaticAssetHeaders): boolean =>\n Object.keys(headers).some((name) => name.toLowerCase() === 'content-type');\n\nconst getPublicStaticResponseHeaders = (headers: Record<string, unknown>): StaticAssetHeaders | undefined => {\n const publicHeaders = Object.fromEntries(\n Object.entries(headers).filter(([name]) => !INTERNAL_STATIC_RESPONSE_HEADERS.has(name.toLowerCase()))\n );\n return decodeUnknown(HttpHeadersSchema, publicHeaders);\n};\n\nasync function getStaticFileResponseMetadata(\n projectDir: string,\n resolvedProjectDir: string,\n output: NextStaticFileOutput,\n rscContentType: string,\n basePath: string,\n locales: readonly string[]\n): Promise<Pick<StaticAssetManifestEntry, 'status' | 'headers'> | undefined> {\n if (output.filePath.endsWith('.body')) {\n const metaPath = `${output.filePath.slice(0, -'.body'.length)}.meta`;\n await requireReadableFile(projectDir, metaPath, resolvedProjectDir);\n const meta = decodeJson(NextStaticFileMetaSchema, await readFile(metaPath, 'utf8'));\n const headers = meta ? getPublicStaticResponseHeaders(meta.headers) : undefined;\n if (!meta || !headers || !hasContentType(headers)) return undefined;\n return {\n ...(meta.status !== undefined ? { status: meta.status } : {}),\n headers,\n };\n }\n if (output.filePath.endsWith('.html')) {\n const status = getStaticStatus(output.pathname, basePath, locales);\n return {\n ...(status !== undefined ? { status } : {}),\n headers: { 'content-type': HTML_CONTENT_TYPE },\n };\n }\n if (output.pathname.endsWith('.rsc')) return { headers: { 'content-type': rscContentType } };\n return {};\n}\n\nconst serializeStaticFileAsset = async (\n projectDir: string,\n resolvedProjectDir: string,\n basePath: string,\n rscContentType: string,\n locales: readonly string[],\n output: NextStaticFileOutput\n): Promise<StaticAssetManifestEntry | undefined> => {\n const [source, responseMetadata] = await Promise.all([\n requireReadableFile(projectDir, output.filePath, resolvedProjectDir),\n getStaticFileResponseMetadata(projectDir, resolvedProjectDir, output, rscContentType, basePath, locales),\n ]);\n if (!responseMetadata) return undefined;\n return {\n source,\n path: normalizeStaticFilePathname(output.pathname, basePath),\n ...responseMetadata,\n ...(output.immutableHash ? { immutable: true } : {}),\n };\n};\n\nasync function serializeAssetManifest(\n projectDir: string,\n resolvedProjectDir: string,\n distDir: string,\n basePath: string,\n rscContentType: string,\n locales: readonly string[],\n staticFiles: NextStaticFileOutput[]\n): Promise<StaticAssetManifestV1> {\n const staticDirectory = path.join(distDir, 'static');\n const staticEntries = await mapInBatches(\n staticFiles.filter(\n // The complete immutable subtree is already represented by a prefix.\n (output) => !isInsideDirectory(staticDirectory, output.filePath) && !isDynamicRoutePathname(output.pathname)\n ),\n (output) => serializeStaticFileAsset(projectDir, resolvedProjectDir, basePath, rscContentType, locales, output)\n );\n const assetsByPath = new Map<string, StaticAssetManifestEntry>();\n for (const entry of staticEntries) {\n if (!entry) continue;\n if (assetsByPath.has(entry.path)) throw new Error(`Duplicate Next.js static asset path: ${entry.path}`);\n assetsByPath.set(entry.path, entry);\n }\n return { version: 1, assets: [...assetsByPath.values()] };\n}\n\nconst getEntryPagePaths = (prerenders: GigadriveNextPrerenderOutput[]): string[] =>\n [\n ...new Set(\n prerenders\n .filter((output) => output.fallback?.postponedState === undefined)\n .map((output) => output.pathname)\n .filter((pathname) => pathname.startsWith('/') && !isDynamicRoutePathname(pathname))\n ),\n ]\n .sort((left, right) => left.split('/').length - right.split('/').length || left.localeCompare(right))\n .slice(0, MAXIMUM_ENTRY_PAGE_PATHS);\n\nconst serializePrerenderOutput = async (\n repoRoot: string,\n resolvedRepoRoot: string,\n output: NextPrerenderOutput\n): Promise<GigadriveNextPrerenderOutput> => {\n const { bypassFor, ...prerenderConfig } = output.config;\n const serializedOutput = {\n id: output.id,\n type: 'PRERENDER' as const,\n pathname: output.pathname,\n ...(output.route !== undefined ? { route: output.route } : {}),\n parentOutputId: output.parentOutputId,\n groupId: output.groupId,\n ...(output.pprChain ? { pprChain: output.pprChain } : {}),\n ...(output.parentFallbackMode !== undefined ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) } : {}),\n ...(output.fallback\n ? {\n fallback: {\n ...(output.fallback.filePath\n ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath, resolvedRepoRoot) }\n : {}),\n ...(output.fallback.initialStatus !== undefined ? { initialStatus: output.fallback.initialStatus } : {}),\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 ? { postponedState: output.fallback.postponedState } : {}),\n },\n }\n : {}),\n config: {\n ...prerenderConfig,\n ...(bypassFor ? { bypassFor: toJsonValue(bypassFor) as JsonValue[] } : {}),\n },\n };\n if (output.routeType !== undefined) {\n return {\n ...serializedOutput,\n routeType: output.routeType,\n response: output.response,\n compute: output.compute,\n ...(output.htmlSize !== undefined ? { htmlSize: output.htmlSize } : {}),\n };\n }\n return serializedOutput;\n};\n\n/**\n * Collapses per-route runtime config onto the one standalone server. `maxDuration`\n * becomes the max across routes (one function honors one limit); `env` is the union\n * of every route's declared env (the single server runs them all in-process).\n */\nconst aggregateServerDescriptor = (outputs: NextRouteOutput[]): GigadriveNextServerDescriptor => {\n let maxDuration: number | undefined;\n const env: Record<string, string> = {};\n for (const output of outputs) {\n if (output.config.maxDuration !== undefined) {\n maxDuration = Math.max(maxDuration ?? 0, output.config.maxDuration);\n }\n if (output.config.env) Object.assign(env, output.config.env);\n }\n return {\n ...(maxDuration !== undefined ? { maxDuration } : {}),\n ...(Object.keys(env).length > 0 ? { env } : {}),\n };\n};\n\ntype CollectBuildTracesModule = {\n collectBuildTraces: (options: {\n dir: string;\n config: BuildCompleteContext['config'];\n distDir: string;\n edgeRuntimeRoutes: Record<string, never>;\n staticPages: string[];\n outputFileTracingRoot: string;\n }) => Promise<void>;\n};\n\n/**\n * Ignore globs that Turbopack's native server tracer applies on top of the\n * shared `collectBuildTraces` ignore list (see `ignores()` in Next's\n * `crates/next-api/src/next_server_nft.rs`). The JavaScript\n * `collectBuildTraces` fallback only carries the webpack-era ignores, so\n * tracing Next's server entries with it follows dev-only require edges —\n * `router-server` → `setup-dev-bundler` → hot reloaders → the application's\n * build toolchain (webpack, terser, esbuild, swc, babel plugins) — that\n * Turbopack severs natively, roughly quadrupling the standalone output.\n *\n * Passing these through `outputFileTracingExcludes['next-server']` reuses\n * `collectBuildTraces`' own extension point for the shared ignores, so they\n * apply during trace traversal exactly like Turbopack's graph-level ignores.\n * Only Next-internal dev/build-only modules are listed — never application\n * packages — so application dependencies are excluded solely when their every\n * require path runs through one of these modules, matching the native trace.\n * If a future Next release moves one of these files the glob simply stops\n * matching and the trace grows back; nothing breaks at runtime.\n */\nconst TURBOPACK_SERVER_TRACE_IGNORES = [\n // client components with a NODE_ENV guard the tracer cannot evaluate\n '**/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js',\n '**/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js',\n // server/lib/router-server.js requires this statically but only uses it in dev\n '**/next/dist/server/lib/router-utils/setup-dev-bundler.js',\n // server/next.js requires this statically but only uses it in dev\n '**/next/dist/server/dev/next-dev-server.js',\n // build-time-only browser support data pulled in via next/dist/compiled/babel*\n '**/next/dist/compiled/browserslist/**',\n '**/next/dist/compiled/jest-worker/**/*',\n '**/node_modules/react{,-dom,-server-dom-turbopack}/**/*.development.js',\n];\n\n/**\n * Next 16.3 stopped emitting the aggregated `next-server.js.nft.json` /\n * `next-minimal-server.js.nft.json` traces from Turbopack builds whenever an\n * adapter is configured, yet `next build` still runs the `output: 'standalone'`\n * writer after `onBuildComplete` — and that writer reads exactly this file, so\n * the build dies with ENOENT. Next 16.2 and all webpack builds still emit the\n * file, making this a no-op there. When the file is missing, regenerate both\n * aggregate traces with Next's own `collectBuildTraces` (the module the webpack\n * pipeline runs); without `buildTraceContext` it only writes the two aggregate\n * trace files and leaves Turbopack's per-entry traces untouched. The\n * regeneration also merges `TURBOPACK_SERVER_TRACE_IGNORES` into the config's\n * `outputFileTracingExcludes` so the fallback prunes the same dev-only require\n * edges as Turbopack's native tracer instead of dragging the application's\n * build toolchain into the standalone output.\n */\nasync function ensureStandaloneServerTraces(\n projectDir: string,\n repoRoot: string,\n distDir: string,\n config: BuildCompleteContext['config']\n): Promise<void> {\n const aggregateTracePath = path.join(distDir, 'next-server.js.nft.json');\n try {\n await access(aggregateTracePath);\n return;\n } catch {\n // Missing — Next will crash in its standalone writer unless we regenerate it.\n }\n let collectBuildTracesModule: CollectBuildTracesModule;\n try {\n const projectRequire = createRequire(path.join(projectDir, 'package.json'));\n collectBuildTracesModule = projectRequire('next/dist/build/collect-build-traces') as CollectBuildTracesModule;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Next.js did not emit ${aggregateTracePath} and the Gigadrive adapter could not load ` +\n `next/dist/build/collect-build-traces from the project to regenerate it: ${message}`\n );\n }\n const { outputFileTracingExcludes = {} } = config as {\n outputFileTracingExcludes?: Record<string, string[]>;\n };\n const tracingConfig = {\n ...config,\n outputFileTracingExcludes: {\n ...outputFileTracingExcludes,\n 'next-server': [...(outputFileTracingExcludes['next-server'] ?? []), ...TURBOPACK_SERVER_TRACE_IGNORES],\n },\n };\n try {\n await collectBuildTracesModule.collectBuildTraces({\n dir: projectDir,\n config: tracingConfig,\n distDir,\n edgeRuntimeRoutes: {},\n staticPages: [],\n outputFileTracingRoot: (config as { outputFileTracingRoot?: string }).outputFileTracingRoot ?? repoRoot,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Regenerating the Next.js standalone server traces (${aggregateTracePath}) failed: ${message}`);\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 run the entire deployment as a single `output: 'standalone'`\n * server (one function per deployment) while the injected cache handlers, image\n * loader, and this hook's `onBuildComplete` metadata keep ISR, PPR, `use cache`,\n * and image optimization working through the platform's durable runtime-cache and\n * edge image services. Older releases retain the legacy standalone behavior without\n * the managed-runtime injections.\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 (!supportsManagedRuntime(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 // Run the whole deployment as one standalone Next server rather than a\n // serverless function per route. `onBuildComplete` still fires under\n // standalone (Next >= 16.2), and the standalone server natively honors the\n // injected cache handlers and resumes PPR from its incremental cache, so\n // ISR/PPR/`use cache` stay durable via the remote runtime-cache service.\n // Validated on Next 16.2.x (see MANAGED_STANDALONE_VALIDATED_MAX_MAJOR);\n // a future major that forbids adapter + standalone fails loudly at build.\n output: 'standalone',\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 await mkdir(metadataDirectory, { recursive: true });\n const manifestPath = path.join(metadataDirectory, 'nextjs.json');\n const writeManifest = (manifest: unknown) =>\n writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n\n if (!supportsManagedRuntime(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 writeManifest(manifest);\n return;\n }\n\n const portableDistDir = toPortableRelativePath(projectDir, distDir);\n const repoRootToProject = toPortableRelativePath(repoRoot, projectDir, true);\n\n if (config.output === 'export') {\n const manifest: GigadriveNextBuildManifestV2Export = {\n version: 2,\n mode: 'export',\n distDir: portableDistDir,\n repoRootToProject,\n nextVersion,\n buildId,\n };\n await writeManifest(manifest);\n return;\n }\n\n if (config.output === 'standalone') {\n await ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config);\n }\n\n const [resolvedRepoRoot, resolvedProjectDir] = await Promise.all([realpath(repoRoot), realpath(projectDir)]);\n const prerenders = await mapInBatches(outputs.prerenders, (output) =>\n serializePrerenderOutput(repoRoot, resolvedRepoRoot, output)\n );\n const assetManifest = await serializeAssetManifest(\n projectDir,\n resolvedProjectDir,\n distDir,\n config.basePath,\n routing.rsc.contentTypeHeader ?? DEFAULT_RSC_CONTENT_TYPE,\n config.i18n?.locales ?? [],\n outputs.staticFiles\n );\n const prerenderManifest: GigadriveNextPrerenderManifestV1 = {\n version: 1,\n seedMethods: ['GET', 'HEAD'],\n prerenders,\n };\n await mkdir(path.join(metadataDirectory, 'assets'), { recursive: true });\n await Promise.all([\n writeFile(path.join(projectDir, NEXT_ASSET_MANIFEST_PATH), `${JSON.stringify(assetManifest)}\\n`, 'utf8'),\n writeFile(path.join(projectDir, NEXT_PRERENDER_MANIFEST_PATH), `${JSON.stringify(prerenderManifest)}\\n`, 'utf8'),\n ]);\n const server = aggregateServerDescriptor([\n ...outputs.pages,\n ...outputs.pagesApi,\n ...outputs.appPages,\n ...outputs.appRoutes,\n ...(outputs.middleware ? [outputs.middleware] : []),\n ]);\n const images = normalizeImages(config);\n // `.next/static` is thousands of content-hashed, immutable chunks. Register\n // the whole subtree as one edge-served prefix instead of enumerating files.\n const staticAssets: GigadriveNextStaticAssetPrefix[] = [\n { sourceDir: `${portableDistDir}/static`, urlPrefix: '_next/static', immutable: true },\n ];\n\n const manifest: GigadriveNextBuildManifestV2Standalone = {\n version: 2,\n mode: 'standalone-v2',\n distDir: portableDistDir,\n repoRootToProject,\n nextVersion,\n buildId,\n server,\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: {\n prerenders: [],\n prerenderManifest: NEXT_PRERENDER_MANIFEST_PATH,\n assetManifest: NEXT_ASSET_MANIFEST_PATH,\n entryPagePaths: getEntryPagePaths(prerenders),\n staticAssets,\n middleware: outputs.middleware\n ? {\n present: true,\n matchers: (outputs.middleware.config.matchers ?? []).map(({ source, sourceRegex, has, missing }) => ({\n source,\n sourceRegex,\n has,\n missing,\n })),\n }\n : { present: false, matchers: [] },\n },\n };\n await writeManifest(manifest);\n },\n};\n\nexport { MANAGED_STANDALONE_VALIDATED_MAX_MAJOR };\nexport default gigadriveNextAdapter;\n","import { Option, Schema } from 'effect';\n\nconst HTTP_HEADER_NAME = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\nconst HTTP_HEADER_VALUE = /^[\\t\\x20-\\x7e\\x80-\\xff]*$/;\nconst URL_PATHNAME_FORBIDDEN_CHARACTER = /[\\x00-\\x1f\\x7f?#\\\\]/;\n\nconst isUrlDotSegment = (segment: string): boolean => {\n const decodedDots = segment.replace(/%2e/gi, '.');\n return decodedDots === '.' || decodedDots === '..';\n};\n\nconst isPortableRelativePath = (value: string, allowCurrentDirectory = false): boolean => {\n const normalized = value.replaceAll('\\\\', '/').replace(/^\\.\\//, '').replace(/\\/+$/, '');\n return (\n (allowCurrentDirectory || (normalized !== '' && normalized !== '.')) &&\n !normalized.startsWith('/') &&\n !/^[A-Za-z]:/.test(normalized) &&\n !normalized.includes(':') &&\n !normalized.split('/').includes('..')\n );\n};\n\nexport const PortableRelativePathSchema = Schema.String.pipe(Schema.filter((value) => isPortableRelativePath(value)));\n\nexport const RepositoryRelativePathSchema = Schema.String.pipe(\n Schema.filter((value) => isPortableRelativePath(value, true))\n);\n\nexport const UrlPathnameSchema = Schema.String.pipe(\n Schema.filter(\n (value) =>\n value.startsWith('/') && !URL_PATHNAME_FORBIDDEN_CHARACTER.test(value) && !value.split('/').some(isUrlDotSegment)\n )\n);\n\nexport const HttpHeaderValueSchema = Schema.String.pipe(Schema.pattern(HTTP_HEADER_VALUE));\nexport const HttpHeadersSchema = Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.Union(HttpHeaderValueSchema, Schema.mutable(Schema.Array(HttpHeaderValueSchema))),\n })\n).pipe(Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));\nexport const HttpSingleValueHeadersSchema = Schema.mutable(\n Schema.Record({ key: Schema.String, value: HttpHeaderValueSchema })\n).pipe(Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));\n\n/**\n * Decode an unknown value with an Effect schema.\n *\n * @param schema - Schema used to validate and decode the value.\n * @param value - Unknown input to decode.\n * @returns The decoded value, or `undefined` when validation fails.\n * @example\n * decodeUnknown(Schema.String, 'value');\n */\nexport const decodeUnknown = <A, I>(schema: Schema.Schema<A, I, never>, value: unknown): A | undefined =>\n Schema.decodeUnknownOption(schema, { onExcessProperty: 'preserve' })(value).pipe(Option.getOrUndefined);\n\n/**\n * Decode a JSON string with an Effect schema.\n *\n * @param schema - Schema used to validate and decode the parsed JSON value.\n * @param content - JSON string to parse and decode.\n * @returns The decoded value, or `undefined` when parsing or validation fails.\n * @example\n * decodeJson(Schema.Struct({ version: Schema.Number }), '{\"version\":1}');\n */\nexport const decodeJson = <A, I>(schema: Schema.Schema<A, I, never>, content: string): A | undefined =>\n decodeUnknown(Schema.parseJson(schema), content);\n","/**\n * A representative sample is enough for cache warming. The complete prerender\n * table stays in its sidecar so it cannot expand gateway configuration by\n * thousands of paths.\n */\nexport const MAXIMUM_ENTRY_PAGE_PATHS = 50;\n"],"mappings":"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","names":["import_effect","path","manifest"]}
@@ -157,21 +157,7 @@ var serializeStaticFileAsset = async (projectDir, resolvedProjectDir, basePath,
157
157
  ...output.immutableHash ? { immutable: true } : {}
158
158
  };
159
159
  };
160
- var serializePrerenderAsset = (projectDir, repoRoot, distDir, output) => {
161
- const { fallback } = output;
162
- const hasNoTimeBasedRevalidation = fallback?.initialRevalidate === false;
163
- if (!fallback?.filePath || !hasNoTimeBasedRevalidation || fallback.postponedState !== void 0 || output.config.bypassFor !== void 0 || isInsideDirectory(path.join(distDir, "server", "pages"), path.resolve(repoRoot, fallback.filePath)) || isDynamicRoutePathname(output.pathname)) {
164
- return void 0;
165
- }
166
- const headers = fallback.initialHeaders ? getPublicStaticResponseHeaders(fallback.initialHeaders) : void 0;
167
- return {
168
- source: toPortableRelativePath(projectDir, path.join(repoRoot, fallback.filePath)),
169
- path: output.pathname,
170
- ...fallback.initialStatus !== void 0 ? { status: fallback.initialStatus } : {},
171
- ...headers ? { headers } : {}
172
- };
173
- };
174
- async function serializeAssetManifest(projectDir, resolvedProjectDir, repoRoot, distDir, basePath, rscContentType, locales, staticFiles, prerenders) {
160
+ async function serializeAssetManifest(projectDir, resolvedProjectDir, distDir, basePath, rscContentType, locales, staticFiles) {
175
161
  const staticDirectory = path.join(distDir, "static");
176
162
  const staticEntries = await mapInBatches(
177
163
  staticFiles.filter(
@@ -180,12 +166,8 @@ async function serializeAssetManifest(projectDir, resolvedProjectDir, repoRoot,
180
166
  ),
181
167
  (output) => serializeStaticFileAsset(projectDir, resolvedProjectDir, basePath, rscContentType, locales, output)
182
168
  );
183
- const entries = [
184
- ...staticEntries,
185
- ...prerenders.map((output) => serializePrerenderAsset(projectDir, repoRoot, distDir, output))
186
- ];
187
169
  const assetsByPath = /* @__PURE__ */ new Map();
188
- for (const entry of entries) {
170
+ for (const entry of staticEntries) {
189
171
  if (!entry) continue;
190
172
  if (assetsByPath.has(entry.path)) throw new Error(`Duplicate Next.js static asset path: ${entry.path}`);
191
173
  assetsByPath.set(entry.path, entry);
@@ -199,10 +181,11 @@ var getEntryPagePaths = (prerenders) => [
199
181
  ].sort((left, right) => left.split("/").length - right.split("/").length || left.localeCompare(right)).slice(0, MAXIMUM_ENTRY_PAGE_PATHS);
200
182
  var serializePrerenderOutput = async (repoRoot, resolvedRepoRoot, output) => {
201
183
  const { bypassFor, ...prerenderConfig } = output.config;
202
- return {
184
+ const serializedOutput = {
203
185
  id: output.id,
204
186
  type: "PRERENDER",
205
187
  pathname: output.pathname,
188
+ ...output.route !== void 0 ? { route: output.route } : {},
206
189
  parentOutputId: output.parentOutputId,
207
190
  groupId: output.groupId,
208
191
  ...output.pprChain ? { pprChain: output.pprChain } : {},
@@ -222,6 +205,16 @@ var serializePrerenderOutput = async (repoRoot, resolvedRepoRoot, output) => {
222
205
  ...bypassFor ? { bypassFor: toJsonValue(bypassFor) } : {}
223
206
  }
224
207
  };
208
+ if (output.routeType !== void 0) {
209
+ return {
210
+ ...serializedOutput,
211
+ routeType: output.routeType,
212
+ response: output.response,
213
+ compute: output.compute,
214
+ ...output.htmlSize !== void 0 ? { htmlSize: output.htmlSize } : {}
215
+ };
216
+ }
217
+ return serializedOutput;
225
218
  };
226
219
  var aggregateServerDescriptor = (outputs) => {
227
220
  let maxDuration;
@@ -237,6 +230,19 @@ var aggregateServerDescriptor = (outputs) => {
237
230
  ...Object.keys(env).length > 0 ? { env } : {}
238
231
  };
239
232
  };
233
+ var TURBOPACK_SERVER_TRACE_IGNORES = [
234
+ // client components with a NODE_ENV guard the tracer cannot evaluate
235
+ "**/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js",
236
+ "**/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js",
237
+ // server/lib/router-server.js requires this statically but only uses it in dev
238
+ "**/next/dist/server/lib/router-utils/setup-dev-bundler.js",
239
+ // server/next.js requires this statically but only uses it in dev
240
+ "**/next/dist/server/dev/next-dev-server.js",
241
+ // build-time-only browser support data pulled in via next/dist/compiled/babel*
242
+ "**/next/dist/compiled/browserslist/**",
243
+ "**/next/dist/compiled/jest-worker/**/*",
244
+ "**/node_modules/react{,-dom,-server-dom-turbopack}/**/*.development.js"
245
+ ];
240
246
  async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config) {
241
247
  const aggregateTracePath = path.join(distDir, "next-server.js.nft.json");
242
248
  try {
@@ -254,10 +260,18 @@ async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, confi
254
260
  `Next.js did not emit ${aggregateTracePath} and the Gigadrive adapter could not load next/dist/build/collect-build-traces from the project to regenerate it: ${message}`
255
261
  );
256
262
  }
263
+ const { outputFileTracingExcludes = {} } = config;
264
+ const tracingConfig = {
265
+ ...config,
266
+ outputFileTracingExcludes: {
267
+ ...outputFileTracingExcludes,
268
+ "next-server": [...outputFileTracingExcludes["next-server"] ?? [], ...TURBOPACK_SERVER_TRACE_IGNORES]
269
+ }
270
+ };
257
271
  try {
258
272
  await collectBuildTracesModule.collectBuildTraces({
259
273
  dir: projectDir,
260
- config,
274
+ config: tracingConfig,
261
275
  distDir,
262
276
  edgeRuntimeRoutes: {},
263
277
  staticPages: [],
@@ -387,15 +401,17 @@ var gigadriveNextAdapter = {
387
401
  const assetManifest = await serializeAssetManifest(
388
402
  projectDir,
389
403
  resolvedProjectDir,
390
- repoRoot,
391
404
  distDir,
392
405
  config.basePath,
393
406
  routing.rsc.contentTypeHeader ?? DEFAULT_RSC_CONTENT_TYPE,
394
407
  config.i18n?.locales ?? [],
395
- outputs.staticFiles,
396
- prerenders
408
+ outputs.staticFiles
397
409
  );
398
- const prerenderManifest = { version: 1, prerenders };
410
+ const prerenderManifest = {
411
+ version: 1,
412
+ seedMethods: ["GET", "HEAD"],
413
+ prerenders
414
+ };
399
415
  await mkdir(path.join(metadataDirectory, "assets"), { recursive: true });
400
416
  await Promise.all([
401
417
  writeFile(path.join(projectDir, NEXT_ASSET_MANIFEST_PATH), `${JSON.stringify(assetManifest)}
@@ -444,7 +460,16 @@ var gigadriveNextAdapter = {
444
460
  prerenderManifest: NEXT_PRERENDER_MANIFEST_PATH,
445
461
  assetManifest: NEXT_ASSET_MANIFEST_PATH,
446
462
  entryPagePaths: getEntryPagePaths(prerenders),
447
- staticAssets
463
+ staticAssets,
464
+ middleware: outputs.middleware ? {
465
+ present: true,
466
+ matchers: (outputs.middleware.config.matchers ?? []).map(({ source, sourceRegex, has, missing }) => ({
467
+ source,
468
+ sourceRegex,
469
+ has,
470
+ missing
471
+ }))
472
+ } : { present: false, matchers: [] }
448
473
  }
449
474
  };
450
475
  await writeManifest(manifest);