@gigadrive/network-config 4.4.0 → 4.6.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.
- package/dist/define-config.d.mts +304 -0
- package/dist/define-config.d.ts +304 -0
- package/dist/define-config.js +31 -0
- package/dist/define-config.js.map +1 -0
- package/dist/define-config.mjs +6 -0
- package/dist/define-config.mjs.map +1 -0
- package/dist/index.d.mts +648 -411
- package/dist/index.d.ts +648 -411
- package/dist/index.js +524 -210
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +450 -152
- package/dist/index.mjs.map +1 -1
- package/dist/nextjs-adapter.js +210 -10
- package/dist/nextjs-adapter.js.map +1 -1
- package/dist/nextjs-adapter.mjs +211 -11
- package/dist/nextjs-adapter.mjs.map +1 -1
- package/package.json +8 -2
package/dist/nextjs-adapter.js
CHANGED
|
@@ -34,12 +34,62 @@ __export(nextjs_adapter_exports, {
|
|
|
34
34
|
default: () => nextjs_adapter_default
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(nextjs_adapter_exports);
|
|
37
|
+
var import_effect2 = require("effect");
|
|
37
38
|
var import_promises = require("fs/promises");
|
|
38
39
|
var import_node_module = require("module");
|
|
39
40
|
var import_node_path = __toESM(require("path"));
|
|
40
41
|
var import_node_url = require("url");
|
|
42
|
+
|
|
43
|
+
// src/manifest-schema.ts
|
|
44
|
+
var import_effect = require("effect");
|
|
45
|
+
var HTTP_HEADER_NAME = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
|
|
46
|
+
var HTTP_HEADER_VALUE = /^[\t\x20-\x7e\x80-\xff]*$/;
|
|
47
|
+
var URL_PATHNAME_FORBIDDEN_CHARACTER = /[\x00-\x1f\x7f?#\\]/;
|
|
48
|
+
var isUrlDotSegment = (segment) => {
|
|
49
|
+
const decodedDots = segment.replace(/%2e/gi, ".");
|
|
50
|
+
return decodedDots === "." || decodedDots === "..";
|
|
51
|
+
};
|
|
52
|
+
var isPortableRelativePath = (value, allowCurrentDirectory = false) => {
|
|
53
|
+
const normalized = value.replaceAll("\\", "/").replace(/^\.\//, "").replace(/\/+$/, "");
|
|
54
|
+
return (allowCurrentDirectory || normalized !== "" && normalized !== ".") && !normalized.startsWith("/") && !/^[A-Za-z]:/.test(normalized) && !normalized.includes(":") && !normalized.split("/").includes("..");
|
|
55
|
+
};
|
|
56
|
+
var PortableRelativePathSchema = import_effect.Schema.String.pipe(import_effect.Schema.filter((value) => isPortableRelativePath(value)));
|
|
57
|
+
var RepositoryRelativePathSchema = import_effect.Schema.String.pipe(
|
|
58
|
+
import_effect.Schema.filter((value) => isPortableRelativePath(value, true))
|
|
59
|
+
);
|
|
60
|
+
var UrlPathnameSchema = import_effect.Schema.String.pipe(
|
|
61
|
+
import_effect.Schema.filter(
|
|
62
|
+
(value) => value.startsWith("/") && !URL_PATHNAME_FORBIDDEN_CHARACTER.test(value) && !value.split("/").some(isUrlDotSegment)
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
var HttpHeaderValueSchema = import_effect.Schema.String.pipe(import_effect.Schema.pattern(HTTP_HEADER_VALUE));
|
|
66
|
+
var HttpHeadersSchema = import_effect.Schema.mutable(
|
|
67
|
+
import_effect.Schema.Record({
|
|
68
|
+
key: import_effect.Schema.String,
|
|
69
|
+
value: import_effect.Schema.Union(HttpHeaderValueSchema, import_effect.Schema.mutable(import_effect.Schema.Array(HttpHeaderValueSchema)))
|
|
70
|
+
})
|
|
71
|
+
).pipe(import_effect.Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));
|
|
72
|
+
var HttpSingleValueHeadersSchema = import_effect.Schema.mutable(
|
|
73
|
+
import_effect.Schema.Record({ key: import_effect.Schema.String, value: HttpHeaderValueSchema })
|
|
74
|
+
).pipe(import_effect.Schema.filter((headers) => Object.keys(headers).every((name) => HTTP_HEADER_NAME.test(name))));
|
|
75
|
+
var decodeUnknown = (schema, value) => import_effect.Schema.decodeUnknownOption(schema, { onExcessProperty: "preserve" })(value).pipe(import_effect.Option.getOrUndefined);
|
|
76
|
+
var decodeJson = (schema, content) => decodeUnknown(import_effect.Schema.parseJson(schema), content);
|
|
77
|
+
|
|
78
|
+
// src/nextjs-constants.ts
|
|
79
|
+
var MAXIMUM_ENTRY_PAGE_PATHS = 50;
|
|
80
|
+
|
|
81
|
+
// src/nextjs-adapter.ts
|
|
41
82
|
var import_meta = {};
|
|
42
83
|
var PRODUCTION_BUILD_PHASE = "phase-production-build";
|
|
84
|
+
var NEXT_ASSET_MANIFEST_PATH = ".gigadrive/assets/nextjs.json";
|
|
85
|
+
var NEXT_PRERENDER_MANIFEST_PATH = ".gigadrive/nextjs-prerenders.json";
|
|
86
|
+
var HTML_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
87
|
+
var DEFAULT_RSC_CONTENT_TYPE = "text/x-component";
|
|
88
|
+
var INTERNAL_STATIC_RESPONSE_HEADERS = /* @__PURE__ */ new Set(["x-next-cache-tags", "x-nextjs-prerender"]);
|
|
89
|
+
var NextStaticFileMetaSchema = import_effect2.Schema.Struct({
|
|
90
|
+
status: import_effect2.Schema.optional(import_effect2.Schema.Int.pipe(import_effect2.Schema.between(100, 599))),
|
|
91
|
+
headers: import_effect2.Schema.mutable(import_effect2.Schema.Record({ key: import_effect2.Schema.String, value: import_effect2.Schema.Unknown }))
|
|
92
|
+
});
|
|
43
93
|
var runtimeDirectory = typeof __dirname === "string" ? __dirname : import_node_path.default.dirname((0, import_node_url.fileURLToPath)(import_meta.url));
|
|
44
94
|
var runtimeModulePath = (environmentName, fileName) => process.env[environmentName] ?? import_node_path.default.join(runtimeDirectory, fileName);
|
|
45
95
|
var CACHE_HANDLER_PATH = () => runtimeModulePath("GIGADRIVE_NEXT_CACHE_HANDLER_PATH", "nextjs-cache-handler.js");
|
|
@@ -67,21 +117,123 @@ var toPortableRelativePath = (from, to, allowCurrentDirectory = false) => {
|
|
|
67
117
|
}
|
|
68
118
|
return normalized;
|
|
69
119
|
};
|
|
70
|
-
async function resolveReadablePath(repoRoot, filePath) {
|
|
120
|
+
async function resolveReadablePath(repoRoot, filePath, resolvedRoot) {
|
|
71
121
|
const absolutePath = import_node_path.default.resolve(import_node_path.default.isAbsolute(filePath) ? filePath : import_node_path.default.join(repoRoot, filePath));
|
|
72
122
|
const portablePath = toPortableRelativePath(repoRoot, absolutePath);
|
|
73
123
|
await (0, import_promises.access)(absolutePath);
|
|
74
124
|
const resolvedPath = await (0, import_promises.realpath)(absolutePath);
|
|
75
|
-
void toPortableRelativePath(repoRoot, resolvedPath);
|
|
125
|
+
void toPortableRelativePath(resolvedRoot ?? await (0, import_promises.realpath)(repoRoot), resolvedPath);
|
|
76
126
|
const fileStat = await (0, import_promises.stat)(absolutePath);
|
|
77
127
|
return { portablePath, fileStat };
|
|
78
128
|
}
|
|
79
|
-
async function requireReadableFile(repoRoot, filePath) {
|
|
80
|
-
const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath);
|
|
129
|
+
async function requireReadableFile(repoRoot, filePath, resolvedRoot) {
|
|
130
|
+
const { portablePath, fileStat } = await resolveReadablePath(repoRoot, filePath, resolvedRoot);
|
|
81
131
|
if (!fileStat.isFile()) throw new Error(`Next.js adapter output is not a readable file: ${filePath}`);
|
|
82
132
|
return portablePath;
|
|
83
133
|
}
|
|
84
|
-
|
|
134
|
+
async function mapInBatches(values, mapper, batchSize = 64) {
|
|
135
|
+
const results = [];
|
|
136
|
+
for (let index = 0; index < values.length; index += batchSize) {
|
|
137
|
+
results.push(...await Promise.all(values.slice(index, index + batchSize).map((value) => mapper(value))));
|
|
138
|
+
}
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
var isInsideDirectory = (directory, filePath) => {
|
|
142
|
+
const relativePath = import_node_path.default.relative(import_node_path.default.resolve(directory), import_node_path.default.resolve(filePath));
|
|
143
|
+
return relativePath !== "" && !relativePath.startsWith("..") && !import_node_path.default.isAbsolute(relativePath);
|
|
144
|
+
};
|
|
145
|
+
var isDynamicRoutePathname = (pathname) => pathname.includes("[");
|
|
146
|
+
var normalizeStaticFilePathname = (pathname, basePath) => pathname === `${basePath}/index` ? basePath || "/" : pathname;
|
|
147
|
+
var getStaticStatus = (pathname, basePath, locales) => {
|
|
148
|
+
const routePathname = basePath && pathname.startsWith(`${basePath}/`) ? pathname.slice(basePath.length) : pathname;
|
|
149
|
+
const segments = routePathname.split("/").filter(Boolean);
|
|
150
|
+
const [firstSegment, secondSegment] = segments;
|
|
151
|
+
const statusPage = segments.length === 1 ? firstSegment : segments.length === 2 && firstSegment && locales.includes(firstSegment) ? secondSegment : void 0;
|
|
152
|
+
return statusPage === "404" ? 404 : statusPage === "500" ? 500 : void 0;
|
|
153
|
+
};
|
|
154
|
+
var hasContentType = (headers) => Object.keys(headers).some((name) => name.toLowerCase() === "content-type");
|
|
155
|
+
var getPublicStaticResponseHeaders = (headers) => {
|
|
156
|
+
const publicHeaders = Object.fromEntries(
|
|
157
|
+
Object.entries(headers).filter(([name]) => !INTERNAL_STATIC_RESPONSE_HEADERS.has(name.toLowerCase()))
|
|
158
|
+
);
|
|
159
|
+
return decodeUnknown(HttpHeadersSchema, publicHeaders);
|
|
160
|
+
};
|
|
161
|
+
async function getStaticFileResponseMetadata(projectDir, resolvedProjectDir, output, rscContentType, basePath, locales) {
|
|
162
|
+
if (output.filePath.endsWith(".body")) {
|
|
163
|
+
const metaPath = `${output.filePath.slice(0, -".body".length)}.meta`;
|
|
164
|
+
await requireReadableFile(projectDir, metaPath, resolvedProjectDir);
|
|
165
|
+
const meta = decodeJson(NextStaticFileMetaSchema, await (0, import_promises.readFile)(metaPath, "utf8"));
|
|
166
|
+
const headers = meta ? getPublicStaticResponseHeaders(meta.headers) : void 0;
|
|
167
|
+
if (!meta || !headers || !hasContentType(headers)) return void 0;
|
|
168
|
+
return {
|
|
169
|
+
...meta.status !== void 0 ? { status: meta.status } : {},
|
|
170
|
+
headers
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (output.filePath.endsWith(".html")) {
|
|
174
|
+
const status = getStaticStatus(output.pathname, basePath, locales);
|
|
175
|
+
return {
|
|
176
|
+
...status !== void 0 ? { status } : {},
|
|
177
|
+
headers: { "content-type": HTML_CONTENT_TYPE }
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
if (output.pathname.endsWith(".rsc")) return { headers: { "content-type": rscContentType } };
|
|
181
|
+
return {};
|
|
182
|
+
}
|
|
183
|
+
var serializeStaticFileAsset = async (projectDir, resolvedProjectDir, basePath, rscContentType, locales, output) => {
|
|
184
|
+
const [source, responseMetadata] = await Promise.all([
|
|
185
|
+
requireReadableFile(projectDir, output.filePath, resolvedProjectDir),
|
|
186
|
+
getStaticFileResponseMetadata(projectDir, resolvedProjectDir, output, rscContentType, basePath, locales)
|
|
187
|
+
]);
|
|
188
|
+
if (!responseMetadata) return void 0;
|
|
189
|
+
return {
|
|
190
|
+
source,
|
|
191
|
+
path: normalizeStaticFilePathname(output.pathname, basePath),
|
|
192
|
+
...responseMetadata,
|
|
193
|
+
...output.immutableHash ? { immutable: true } : {}
|
|
194
|
+
};
|
|
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) {
|
|
211
|
+
const staticDirectory = import_node_path.default.join(distDir, "static");
|
|
212
|
+
const staticEntries = await mapInBatches(
|
|
213
|
+
staticFiles.filter(
|
|
214
|
+
// The complete immutable subtree is already represented by a prefix.
|
|
215
|
+
(output) => !isInsideDirectory(staticDirectory, output.filePath) && !isDynamicRoutePathname(output.pathname)
|
|
216
|
+
),
|
|
217
|
+
(output) => serializeStaticFileAsset(projectDir, resolvedProjectDir, basePath, rscContentType, locales, output)
|
|
218
|
+
);
|
|
219
|
+
const entries = [
|
|
220
|
+
...staticEntries,
|
|
221
|
+
...prerenders.map((output) => serializePrerenderAsset(projectDir, repoRoot, distDir, output))
|
|
222
|
+
];
|
|
223
|
+
const assetsByPath = /* @__PURE__ */ new Map();
|
|
224
|
+
for (const entry of entries) {
|
|
225
|
+
if (!entry) continue;
|
|
226
|
+
if (assetsByPath.has(entry.path)) throw new Error(`Duplicate Next.js static asset path: ${entry.path}`);
|
|
227
|
+
assetsByPath.set(entry.path, entry);
|
|
228
|
+
}
|
|
229
|
+
return { version: 1, assets: [...assetsByPath.values()] };
|
|
230
|
+
}
|
|
231
|
+
var getEntryPagePaths = (prerenders) => [
|
|
232
|
+
...new Set(
|
|
233
|
+
prerenders.filter((output) => output.fallback?.postponedState === void 0).map((output) => output.pathname).filter((pathname) => pathname.startsWith("/") && !isDynamicRoutePathname(pathname))
|
|
234
|
+
)
|
|
235
|
+
].sort((left, right) => left.split("/").length - right.split("/").length || left.localeCompare(right)).slice(0, MAXIMUM_ENTRY_PAGE_PATHS);
|
|
236
|
+
var serializePrerenderOutput = async (repoRoot, resolvedRepoRoot, output) => {
|
|
85
237
|
const { bypassFor, ...prerenderConfig } = output.config;
|
|
86
238
|
return {
|
|
87
239
|
id: output.id,
|
|
@@ -93,7 +245,7 @@ var serializePrerenderOutput = async (repoRoot, output) => {
|
|
|
93
245
|
...output.parentFallbackMode !== void 0 ? { parentFallbackMode: toJsonValue(output.parentFallbackMode) } : {},
|
|
94
246
|
...output.fallback ? {
|
|
95
247
|
fallback: {
|
|
96
|
-
...output.fallback.filePath ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath) } : {},
|
|
248
|
+
...output.fallback.filePath ? { filePath: await requireReadableFile(repoRoot, output.fallback.filePath, resolvedRepoRoot) } : {},
|
|
97
249
|
...output.fallback.initialStatus !== void 0 ? { initialStatus: output.fallback.initialStatus } : {},
|
|
98
250
|
...output.fallback.initialHeaders ? { initialHeaders: output.fallback.initialHeaders } : {},
|
|
99
251
|
...output.fallback.initialExpiration !== void 0 ? { initialExpiration: output.fallback.initialExpiration } : {},
|
|
@@ -121,6 +273,19 @@ var aggregateServerDescriptor = (outputs) => {
|
|
|
121
273
|
...Object.keys(env).length > 0 ? { env } : {}
|
|
122
274
|
};
|
|
123
275
|
};
|
|
276
|
+
var TURBOPACK_SERVER_TRACE_IGNORES = [
|
|
277
|
+
// client components with a NODE_ENV guard the tracer cannot evaluate
|
|
278
|
+
"**/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js",
|
|
279
|
+
"**/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js",
|
|
280
|
+
// server/lib/router-server.js requires this statically but only uses it in dev
|
|
281
|
+
"**/next/dist/server/lib/router-utils/setup-dev-bundler.js",
|
|
282
|
+
// server/next.js requires this statically but only uses it in dev
|
|
283
|
+
"**/next/dist/server/dev/next-dev-server.js",
|
|
284
|
+
// build-time-only browser support data pulled in via next/dist/compiled/babel*
|
|
285
|
+
"**/next/dist/compiled/browserslist/**",
|
|
286
|
+
"**/next/dist/compiled/jest-worker/**/*",
|
|
287
|
+
"**/node_modules/react{,-dom,-server-dom-turbopack}/**/*.development.js"
|
|
288
|
+
];
|
|
124
289
|
async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config) {
|
|
125
290
|
const aggregateTracePath = import_node_path.default.join(distDir, "next-server.js.nft.json");
|
|
126
291
|
try {
|
|
@@ -138,10 +303,18 @@ async function ensureStandaloneServerTraces(projectDir, repoRoot, distDir, confi
|
|
|
138
303
|
`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}`
|
|
139
304
|
);
|
|
140
305
|
}
|
|
306
|
+
const { outputFileTracingExcludes = {} } = config;
|
|
307
|
+
const tracingConfig = {
|
|
308
|
+
...config,
|
|
309
|
+
outputFileTracingExcludes: {
|
|
310
|
+
...outputFileTracingExcludes,
|
|
311
|
+
"next-server": [...outputFileTracingExcludes["next-server"] ?? [], ...TURBOPACK_SERVER_TRACE_IGNORES]
|
|
312
|
+
}
|
|
313
|
+
};
|
|
141
314
|
try {
|
|
142
315
|
await collectBuildTracesModule.collectBuildTraces({
|
|
143
316
|
dir: projectDir,
|
|
144
|
-
config,
|
|
317
|
+
config: tracingConfig,
|
|
145
318
|
distDir,
|
|
146
319
|
edgeRuntimeRoutes: {},
|
|
147
320
|
staticPages: [],
|
|
@@ -263,9 +436,30 @@ var gigadriveNextAdapter = {
|
|
|
263
436
|
if (config.output === "standalone") {
|
|
264
437
|
await ensureStandaloneServerTraces(projectDir, repoRoot, distDir, config);
|
|
265
438
|
}
|
|
266
|
-
const
|
|
267
|
-
|
|
439
|
+
const [resolvedRepoRoot, resolvedProjectDir] = await Promise.all([(0, import_promises.realpath)(repoRoot), (0, import_promises.realpath)(projectDir)]);
|
|
440
|
+
const prerenders = await mapInBatches(
|
|
441
|
+
outputs.prerenders,
|
|
442
|
+
(output) => serializePrerenderOutput(repoRoot, resolvedRepoRoot, output)
|
|
268
443
|
);
|
|
444
|
+
const assetManifest = await serializeAssetManifest(
|
|
445
|
+
projectDir,
|
|
446
|
+
resolvedProjectDir,
|
|
447
|
+
repoRoot,
|
|
448
|
+
distDir,
|
|
449
|
+
config.basePath,
|
|
450
|
+
routing.rsc.contentTypeHeader ?? DEFAULT_RSC_CONTENT_TYPE,
|
|
451
|
+
config.i18n?.locales ?? [],
|
|
452
|
+
outputs.staticFiles,
|
|
453
|
+
prerenders
|
|
454
|
+
);
|
|
455
|
+
const prerenderManifest = { version: 1, prerenders };
|
|
456
|
+
await (0, import_promises.mkdir)(import_node_path.default.join(metadataDirectory, "assets"), { recursive: true });
|
|
457
|
+
await Promise.all([
|
|
458
|
+
(0, import_promises.writeFile)(import_node_path.default.join(projectDir, NEXT_ASSET_MANIFEST_PATH), `${JSON.stringify(assetManifest)}
|
|
459
|
+
`, "utf8"),
|
|
460
|
+
(0, import_promises.writeFile)(import_node_path.default.join(projectDir, NEXT_PRERENDER_MANIFEST_PATH), `${JSON.stringify(prerenderManifest)}
|
|
461
|
+
`, "utf8")
|
|
462
|
+
]);
|
|
269
463
|
const server = aggregateServerDescriptor([
|
|
270
464
|
...outputs.pages,
|
|
271
465
|
...outputs.pagesApi,
|
|
@@ -302,7 +496,13 @@ var gigadriveNextAdapter = {
|
|
|
302
496
|
shouldNormalizeNextData: routing.shouldNormalizeNextData,
|
|
303
497
|
rsc: toJsonValue(routing.rsc)
|
|
304
498
|
},
|
|
305
|
-
outputs: {
|
|
499
|
+
outputs: {
|
|
500
|
+
prerenders: [],
|
|
501
|
+
prerenderManifest: NEXT_PRERENDER_MANIFEST_PATH,
|
|
502
|
+
assetManifest: NEXT_ASSET_MANIFEST_PATH,
|
|
503
|
+
entryPagePaths: getEntryPagePaths(prerenders),
|
|
504
|
+
staticAssets
|
|
505
|
+
}
|
|
306
506
|
};
|
|
307
507
|
await writeManifest(manifest);
|
|
308
508
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nextjs-adapter.ts"],"sourcesContent":["import type { NextAdapter } from 'next';\nimport { access, mkdir, realpath, stat, writeFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\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\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 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":["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\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 * 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 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"]}
|