@gigadrive/network-config 3.4.17 → 4.0.0

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.
@@ -1,5 +1,5 @@
1
1
  // src/nextjs-adapter.ts
2
- import { access, mkdir, readFile, realpath, stat, writeFile } from "fs/promises";
2
+ import { access, mkdir, 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";
@@ -8,45 +8,18 @@ var runtimeModulePath = (environmentName, fileName) => process.env[environmentNa
8
8
  var CACHE_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_HANDLER_PATH", "nextjs-cache-handler.js");
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
- 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
- };
39
11
  var toJsonValue = (value) => {
40
12
  const serialized = JSON.stringify(value);
41
13
  return serialized === void 0 ? null : JSON.parse(serialized);
42
14
  };
43
- var supportsAdapterV2 = (nextVersion) => {
15
+ var supportsManagedRuntime = (nextVersion) => {
44
16
  if (!nextVersion) return false;
45
17
  const [majorPart, minorPart] = nextVersion.split(".");
46
18
  const major = Number.parseInt(majorPart ?? "", 10);
47
19
  const minor = Number.parseInt(minorPart ?? "", 10);
48
20
  return Number.isFinite(major) && Number.isFinite(minor) && (major > 16 || major === 16 && minor >= 2);
49
21
  };
22
+ var MANAGED_STANDALONE_VALIDATED_MAX_MAJOR = 16;
50
23
  var toPortableRelativePath = (from, to, allowCurrentDirectory = false) => {
51
24
  const resolvedFrom = path.resolve(from);
52
25
  const resolvedTo = path.resolve(path.isAbsolute(to) ? to : path.join(from, to));
@@ -71,183 +44,45 @@ async function requireReadableFile(repoRoot, filePath) {
71
44
  if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);
72
45
  return portablePath;
73
46
  }
74
- async function requireReadableAsset(repoRoot, filePath) {
75
- const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);
76
- if (!fileStat.isFile() && !fileStat.isDirectory()) {
77
- throw new Error(`Next.js adapter asset is not a readable file or directory: ${filePath}`);
78
- }
79
- return portablePath;
80
- }
81
- async function serializeFileMap(repoRoot, files) {
82
- const entries = await Promise.all(
83
- Object.entries(files).map(async ([targetPath, sourcePath]) => [
84
- toPortableRelativePath(repoRoot, targetPath),
85
- await requireReadableAsset(repoRoot, sourcePath)
86
- ])
87
- );
88
- return Object.fromEntries(entries);
89
- }
90
- var serializeRuntimeConfigAssets = async (projectDir, repoRoot, config) => {
91
- const configuredPaths = /* @__PURE__ */ new Set([
92
- config.cacheHandler,
93
- ...Object.values(config.cacheHandlers ?? {}),
94
- config.images.loaderFile,
95
- PPR_RUNTIME_PATH()
96
- ]);
97
- const assets = {};
98
- for (const configuredPath of configuredPaths) {
99
- if (!configuredPath) continue;
100
- const absolutePath = path.resolve(
101
- path.isAbsolute(configuredPath) ? configuredPath : path.join(projectDir, configuredPath)
102
- );
103
- const portablePath = await requireReadableFile(repoRoot, absolutePath);
104
- assets[portablePath] = portablePath;
105
- }
106
- return assets;
107
- };
108
- var serializeRouteOutput = async (repoRoot, output) => {
109
- const matchers = output.config.matchers;
47
+ var serializePrerenderOutput = async (repoRoot, output) => {
48
+ const { bypassFor, ...prerenderConfig } = output.config;
110
49
  return {
111
50
  id: output.id,
112
- type: String(output.type),
113
- filePath: await requireReadableFile(repoRoot, output.filePath),
51
+ type: "PRERENDER",
114
52
  pathname: output.pathname,
115
- sourcePage: output.sourcePage,
116
- runtime: output.runtime,
117
- assets: await serializeFileMap(repoRoot, output.assets),
118
- ...output.wasmAssets ? { wasmAssets: await serializeFileMap(repoRoot, output.wasmAssets) } : {},
119
- ...output.edgeRuntime ? {
120
- edgeRuntime: {
121
- modulePath: await requireReadableFile(repoRoot, output.edgeRuntime.modulePath),
122
- entryKey: output.edgeRuntime.entryKey,
123
- handlerExport: output.edgeRuntime.handlerExport
53
+ parentOutputId: output.parentOutputId,
54
+ groupId: output.groupId,
55
+ ...output.pprChain ? { pprChain: output.pprChain } : {},
56
+ ...output.parentFallbackMode !== void 0 ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) } : {},
57
+ ...output.fallback ? {
58
+ fallback: {
59
+ ...output.fallback.filePath ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath) } : {},
60
+ ...output.fallback.initialStatus !== void 0 ? { initialStatus: output.fallback.initialStatus } : {},
61
+ ...output.fallback.initialHeaders ? { initialHeaders: output.fallback.initialHeaders } : {},
62
+ ...output.fallback.initialExpiration !== void 0 ? { initialExpiration: output.fallback.initialExpiration } : {},
63
+ ...output.fallback.initialRevalidate !== void 0 ? { initialRevalidate: output.fallback.initialRevalidate } : {},
64
+ ...output.fallback.postponedState !== void 0 ? { postponedState: output.fallback.postponedState } : {}
124
65
  }
125
66
  } : {},
126
67
  config: {
127
- maxDuration: output.config.maxDuration,
128
- preferredRegion: output.config.preferredRegion,
129
- env: output.config.env,
130
- ...matchers ? {
131
- matchers: matchers.map((matcher) => ({
132
- source: matcher.source,
133
- sourceRegex: matcher.sourceRegex,
134
- ...matcher.has ? { has: toJsonValue(matcher.has) } : {},
135
- ...matcher.missing ? { missing: toJsonValue(matcher.missing) } : {}
136
- }))
137
- } : {}
68
+ ...prerenderConfig,
69
+ ...bypassFor ? { bypassFor: toJsonValue(bypassFor) } : {}
138
70
  }
139
71
  };
140
72
  };
141
- var serializeStaticOutput = async (repoRoot, output) => ({
142
- id: output.id,
143
- type: "STATIC_FILE",
144
- filePath: await requireReadableFile(repoRoot, output.filePath),
145
- pathname: output.pathname,
146
- ...output.immutableHash ? { immutableHash: output.immutableHash } : {}
147
- });
148
- var buildEntrypointPlan = (outputs) => {
149
- const byIdentity = /* @__PURE__ */ new Map();
150
- const outputEntrypoints = {};
73
+ var aggregateServerDescriptor = (outputs) => {
74
+ let maxDuration;
75
+ const env = {};
151
76
  for (const output of outputs) {
152
- const identity = JSON.stringify([
153
- output.type === "MIDDLEWARE" ? "middleware-web" : "route",
154
- output.runtime,
155
- output.filePath,
156
- output.edgeRuntime?.modulePath,
157
- output.edgeRuntime?.entryKey,
158
- output.edgeRuntime?.handlerExport
159
- ]);
160
- const existingEntrypoint = byIdentity.get(identity);
161
- const entrypoint = existingEntrypoint ?? {
162
- id: `next-${byIdentity.size}`,
163
- runtime: output.runtime,
164
- filePath: output.filePath,
165
- outputIds: [],
166
- assets: { ...output.assets },
167
- ...output.wasmAssets ? { wasmAssets: { ...output.wasmAssets } } : {},
168
- ...output.edgeRuntime ? { edgeRuntime: { ...output.edgeRuntime } } : {},
169
- config: {
170
- maxDuration: output.config.maxDuration,
171
- preferredRegion: output.config.preferredRegion,
172
- env: output.config.env
173
- }
174
- };
175
- if (!existingEntrypoint) {
176
- byIdentity.set(identity, entrypoint);
177
- } else {
178
- Object.assign(entrypoint.assets, output.assets);
179
- if (output.wasmAssets) entrypoint.wasmAssets = { ...entrypoint.wasmAssets, ...output.wasmAssets };
180
- if (output.config.maxDuration !== void 0) {
181
- entrypoint.config.maxDuration = Math.max(entrypoint.config.maxDuration ?? 0, output.config.maxDuration);
182
- }
77
+ if (output.config.maxDuration !== void 0) {
78
+ maxDuration = Math.max(maxDuration ?? 0, output.config.maxDuration);
183
79
  }
184
- entrypoint.outputIds.push(output.id);
185
- outputEntrypoints[output.id] = entrypoint.id;
80
+ if (output.config.env) Object.assign(env, output.config.env);
186
81
  }
187
- return { entrypoints: [...byIdentity.values()], outputEntrypoints };
188
- };
189
- var writeEntrypointWrappers = async (projectDir, repoRoot, entrypoints, pprRuntimePath, middlewareOutputId) => {
190
- const wrapperDirectory = path.join(projectDir, ".gigadrive", "nextjs", "entrypoints");
191
- await mkdir(wrapperDirectory, { recursive: true });
192
- const portableWrapperDirectory = toPortableRelativePath(repoRoot, wrapperDirectory);
193
- const relativePprRuntimePath = path.posix.relative(portableWrapperDirectory, pprRuntimePath);
194
- const pprRuntimeSpecifier = relativePprRuntimePath.startsWith(".") ? relativePprRuntimePath : `./${relativePprRuntimePath}`;
195
- const relativeProjectDirectory = path.posix.relative(
196
- portableWrapperDirectory,
197
- toPortableRelativePath(repoRoot, projectDir, true)
198
- );
199
- const projectDirectorySpecifier = relativeProjectDirectory.startsWith(".") ? relativeProjectDirectory : `./${relativeProjectDirectory}`;
200
- await Promise.all(
201
- entrypoints.map(async (entrypoint) => {
202
- const wrapperPath = path.join(wrapperDirectory, `${entrypoint.id}.mjs`);
203
- const executablePath = path.join(repoRoot, entrypoint.edgeRuntime?.modulePath ?? entrypoint.filePath);
204
- const relativeImport = path.relative(wrapperDirectory, executablePath).replaceAll(path.sep, "/");
205
- const importSpecifier = relativeImport.startsWith(".") ? relativeImport : `./${relativeImport}`;
206
- const isMiddleware = middlewareOutputId !== void 0 && entrypoint.outputIds.includes(middlewareOutputId);
207
- let source;
208
- if (entrypoint.runtime === "edge" && entrypoint.edgeRuntime) {
209
- const edgeMarker = "/server/edge/";
210
- const markerIndex = entrypoint.edgeRuntime.modulePath.indexOf(edgeMarker);
211
- const distDirectory = markerIndex >= 0 ? entrypoint.edgeRuntime.modulePath.slice(0, markerIndex) : path.dirname(entrypoint.edgeRuntime.modulePath);
212
- const edgeRuntimeAssets = Object.entries(entrypoint.assets).filter(([, sourcePath]) => sourcePath.startsWith(`${distDirectory}/`) && sourcePath.endsWith(".js")).sort(([, leftSource], [, rightSource]) => {
213
- if (leftSource === entrypoint.edgeRuntime?.modulePath) return 1;
214
- if (rightSource === entrypoint.edgeRuntime?.modulePath) return -1;
215
- return leftSource.localeCompare(rightSource);
216
- });
217
- const imports = edgeRuntimeAssets.map(([targetPath, sourcePath]) => {
218
- const runtimeTargetPath = sourcePath === entrypoint.edgeRuntime?.modulePath ? entrypoint.edgeRuntime.modulePath : targetPath;
219
- const relativeAssetPath = path.posix.relative(portableWrapperDirectory, runtimeTargetPath);
220
- const assetSpecifier = relativeAssetPath.startsWith(".") ? relativeAssetPath : `./${relativeAssetPath}`;
221
- return `await import(${JSON.stringify(assetSpecifier)});`;
222
- }).join("\n");
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
- }
245
- await writeFile(wrapperPath, source, "utf8");
246
- const portableWrapperPath = toPortableRelativePath(repoRoot, wrapperPath);
247
- entrypoint.assets[portableWrapperPath] = portableWrapperPath;
248
- entrypoint.filePath = portableWrapperPath;
249
- })
250
- );
82
+ return {
83
+ ...maxDuration !== void 0 ? { maxDuration } : {},
84
+ ...Object.keys(env).length > 0 ? { env } : {}
85
+ };
251
86
  };
252
87
  var normalizeImages = (config) => {
253
88
  if (config.images.unoptimized) return void 0;
@@ -283,7 +118,7 @@ var gigadriveNextAdapter = {
283
118
  modifyConfig(config, { phase, nextVersion }) {
284
119
  if (phase !== PRODUCTION_BUILD_PHASE) return config;
285
120
  const deploymentId = config.deploymentId ?? process.env.GIGADRIVE_DEPLOYMENT_ID;
286
- if (!supportsAdapterV2(nextVersion)) {
121
+ if (!supportsManagedRuntime(nextVersion)) {
287
122
  return {
288
123
  ...config,
289
124
  ...deploymentId ? { deploymentId } : {},
@@ -300,6 +135,14 @@ var gigadriveNextAdapter = {
300
135
  return {
301
136
  ...config,
302
137
  ...deploymentId ? { deploymentId } : {},
138
+ // Run the whole deployment as one standalone Next server rather than a
139
+ // serverless function per route. `onBuildComplete` still fires under
140
+ // standalone (Next >= 16.2), and the standalone server natively honors the
141
+ // injected cache handlers and resumes PPR from its incremental cache, so
142
+ // ISR/PPR/`use cache` stay durable via the remote runtime-cache service.
143
+ // Validated on Next 16.2.x (see MANAGED_STANDALONE_VALIDATED_MAX_MAJOR);
144
+ // a future major that forbids adapter + standalone fails loudly at build.
145
+ output: "standalone",
303
146
  ...injectCacheHandler ? { cacheHandler: CACHE_HANDLER_PATH() } : {},
304
147
  ...injectCacheComponentHandlers ? {
305
148
  cacheHandlers: {
@@ -319,7 +162,11 @@ var gigadriveNextAdapter = {
319
162
  },
320
163
  async onBuildComplete({ projectDir, repoRoot, distDir, config, nextVersion, buildId, routing, outputs }) {
321
164
  const metadataDirectory = path.join(projectDir, ".gigadrive");
322
- if (!supportsAdapterV2(nextVersion)) {
165
+ await mkdir(metadataDirectory, { recursive: true });
166
+ const manifestPath = path.join(metadataDirectory, "nextjs.json");
167
+ const writeManifest = (manifest2) => writeFile(manifestPath, `${JSON.stringify(manifest2, null, 2)}
168
+ `, "utf8");
169
+ if (!supportsManagedRuntime(nextVersion)) {
323
170
  const manifest2 = {
324
171
  version: 1,
325
172
  output: config.output === "export" ? "export" : "standalone",
@@ -328,73 +175,45 @@ var gigadriveNextAdapter = {
328
175
  nextVersion,
329
176
  buildId
330
177
  };
331
- await mkdir(metadataDirectory, { recursive: true });
332
- await writeFile(path.join(metadataDirectory, "nextjs.json"), `${JSON.stringify(manifest2, null, 2)}
333
- `, "utf8");
178
+ await writeManifest(manifest2);
334
179
  return;
335
180
  }
336
- const portableOutputs = {
337
- pages: await Promise.all(outputs.pages.map((output) => serializeRouteOutput(repoRoot, output))),
338
- ...outputs.middleware ? { middleware: await serializeRouteOutput(repoRoot, outputs.middleware) } : {},
339
- appPages: await Promise.all(outputs.appPages.map((output) => serializeRouteOutput(repoRoot, output))),
340
- pagesApi: await Promise.all(outputs.pagesApi.map((output) => serializeRouteOutput(repoRoot, output))),
341
- appRoutes: await Promise.all(outputs.appRoutes.map((output) => serializeRouteOutput(repoRoot, output))),
342
- prerenders: await Promise.all(
343
- outputs.prerenders.map(async (output) => {
344
- const { bypassFor, ...prerenderConfig } = output.config;
345
- return {
346
- id: output.id,
347
- type: "PRERENDER",
348
- pathname: output.pathname,
349
- parentOutputId: output.parentOutputId,
350
- groupId: output.groupId,
351
- ...output.pprChain ? { pprChain: output.pprChain } : {},
352
- ...output.parentFallbackMode !== void 0 ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) } : {},
353
- ...output.fallback ? {
354
- fallback: {
355
- ...output.fallback.filePath ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath) } : {},
356
- ...output.fallback.initialStatus !== void 0 ? { initialStatus: output.fallback.initialStatus } : {},
357
- ...output.fallback.initialHeaders ? { initialHeaders: output.fallback.initialHeaders } : {},
358
- ...output.fallback.initialExpiration !== void 0 ? { initialExpiration: output.fallback.initialExpiration } : {},
359
- ...output.fallback.initialRevalidate !== void 0 ? { initialRevalidate: output.fallback.initialRevalidate } : {},
360
- ...output.fallback.postponedState !== void 0 ? { postponedState: output.fallback.postponedState } : {}
361
- }
362
- } : {},
363
- config: {
364
- ...prerenderConfig,
365
- ...bypassFor ? { bypassFor: toJsonValue(bypassFor) } : {}
366
- }
367
- };
368
- })
369
- ),
370
- staticFiles: await Promise.all(outputs.staticFiles.map((output) => serializeStaticOutput(repoRoot, output)))
371
- };
372
- const executableOutputs = [
373
- ...portableOutputs.pages,
374
- ...portableOutputs.pagesApi,
375
- ...portableOutputs.appPages,
376
- ...portableOutputs.appRoutes,
377
- ...portableOutputs.middleware ? [portableOutputs.middleware] : []
378
- ];
379
- const entrypointPlan = buildEntrypointPlan(executableOutputs);
380
- const runtimeConfigAssets = await serializeRuntimeConfigAssets(projectDir, repoRoot, config);
381
- for (const entrypoint of entrypointPlan.entrypoints) Object.assign(entrypoint.assets, runtimeConfigAssets);
382
- const pprRuntimePath = await requireReadableFile(repoRoot, PPR_RUNTIME_PATH());
383
- await writeEntrypointWrappers(
384
- projectDir,
385
- repoRoot,
386
- entrypointPlan.entrypoints,
387
- pprRuntimePath,
388
- portableOutputs.middleware?.id
181
+ const portableDistDir = toPortableRelativePath(projectDir, distDir);
182
+ const repoRootToProject = toPortableRelativePath(repoRoot, projectDir, true);
183
+ if (config.output === "export") {
184
+ const manifest2 = {
185
+ version: 2,
186
+ mode: "export",
187
+ distDir: portableDistDir,
188
+ repoRootToProject,
189
+ nextVersion,
190
+ buildId
191
+ };
192
+ await writeManifest(manifest2);
193
+ return;
194
+ }
195
+ const prerenders = await Promise.all(
196
+ outputs.prerenders.map((output) => serializePrerenderOutput(repoRoot, output))
389
197
  );
198
+ const server = aggregateServerDescriptor([
199
+ ...outputs.pages,
200
+ ...outputs.pagesApi,
201
+ ...outputs.appPages,
202
+ ...outputs.appRoutes,
203
+ ...outputs.middleware ? [outputs.middleware] : []
204
+ ]);
390
205
  const images = normalizeImages(config);
206
+ const staticAssets = [
207
+ { sourceDir: `${portableDistDir}/static`, urlPrefix: "_next/static", immutable: true }
208
+ ];
391
209
  const manifest = {
392
210
  version: 2,
393
- mode: config.output === "export" ? "export" : "adapter-v2",
394
- distDir: toPortableRelativePath(projectDir, distDir),
395
- repoRootToProject: toPortableRelativePath(repoRoot, projectDir, true),
211
+ mode: "standalone-v2",
212
+ distDir: portableDistDir,
213
+ repoRootToProject,
396
214
  nextVersion,
397
215
  buildId,
216
+ server,
398
217
  config: {
399
218
  basePath: config.basePath,
400
219
  trailingSlash: config.trailingSlash,
@@ -412,16 +231,14 @@ var gigadriveNextAdapter = {
412
231
  shouldNormalizeNextData: routing.shouldNormalizeNextData,
413
232
  rsc: toJsonValue(routing.rsc)
414
233
  },
415
- outputs: portableOutputs,
416
- ...entrypointPlan
234
+ outputs: { prerenders, staticAssets }
417
235
  };
418
- await mkdir(metadataDirectory, { recursive: true });
419
- await writeFile(path.join(metadataDirectory, "nextjs.json"), `${JSON.stringify(manifest, null, 2)}
420
- `, "utf8");
236
+ await writeManifest(manifest);
421
237
  }
422
238
  };
423
239
  var nextjs_adapter_default = gigadriveNextAdapter;
424
240
  export {
241
+ MANAGED_STANDALONE_VALIDATED_MAX_MAJOR,
425
242
  nextjs_adapter_default as default
426
243
  };
427
244
  //# sourceMappingURL=nextjs-adapter.mjs.map
@@ -1 +1 @@
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":["manifest"]}
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 GigadriveNextBuildManifestV2Export,\n GigadriveNextBuildManifestV2Standalone,\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];\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');\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) {\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\nconst serializePrerenderOutput = async (\n repoRoot: 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) }\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\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 const prerenders = await Promise.all(\n outputs.prerenders.map((output) => serializePrerenderOutput(repoRoot, output))\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: { prerenders, staticAssets },\n };\n await writeManifest(manifest);\n },\n};\n\nexport { MANAGED_STANDALONE_VALIDATED_MAX_MAJOR };\nexport default gigadriveNextAdapter;\n"],"mappings":"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","names":["manifest"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gigadrive/network-config",
3
- "version": "3.4.17",
3
+ "version": "4.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Gigadrive/sdk.git",
@@ -33,11 +33,6 @@
33
33
  "types": "./dist/nextjs-image-loader.d.ts",
34
34
  "require": "./dist/nextjs-image-loader.js",
35
35
  "import": "./dist/nextjs-image-loader.mjs"
36
- },
37
- "./nextjs-ppr-runtime": {
38
- "types": "./dist/nextjs-ppr-runtime.d.ts",
39
- "require": "./dist/nextjs-ppr-runtime.js",
40
- "import": "./dist/nextjs-ppr-runtime.mjs"
41
36
  }
42
37
  },
43
38
  "main": "dist/index.js",
@@ -54,7 +49,7 @@
54
49
  "safe-regex2": "^5.0.0",
55
50
  "yaml": "^2.8.1",
56
51
  "@gigadrive/build-utils": "1.0.3",
57
- "@gigadrive/commons": "2.1.1"
52
+ "@gigadrive/commons": "2.2.0"
58
53
  },
59
54
  "devDependencies": {
60
55
  "@effect/platform": "^0.96.0",
@@ -72,7 +67,7 @@
72
67
  "access": "public"
73
68
  },
74
69
  "scripts": {
75
- "build": "tsup && mkdir -p dist/v4 && cp -r ./src/v4/schema.json ./dist/v4/schema.json && cp ./src/nextjs-adapter.cjs ./dist/nextjs-adapter.cjs && cp -r ./src/nextjs-entrypoint-templates ./dist/nextjs-entrypoint-templates",
70
+ "build": "tsup && mkdir -p dist/v4 && cp -r ./src/v4/schema.json ./dist/v4/schema.json && cp ./src/nextjs-adapter.cjs ./dist/nextjs-adapter.cjs",
76
71
  "clean": "rm -rf dist",
77
72
  "typecheck": "tsc --noEmit"
78
73
  }