Initial commit
This commit is contained in:
2
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts
generated
vendored
Normal file
2
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { ActionAsyncStorage } from './action-async-storage.external';
|
||||
export declare const actionAsyncStorageInstance: ActionAsyncStorage;
|
||||
14
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.js
generated
vendored
Normal file
14
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "actionAsyncStorageInstance", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return actionAsyncStorageInstance;
|
||||
}
|
||||
});
|
||||
const _asynclocalstorage = require("./async-local-storage");
|
||||
const actionAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)();
|
||||
|
||||
//# sourceMappingURL=action-async-storage-instance.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage-instance.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/action-async-storage-instance.ts"],"sourcesContent":["import type { ActionAsyncStorage } from './action-async-storage.external'\nimport { createAsyncLocalStorage } from './async-local-storage'\n\nexport const actionAsyncStorageInstance: ActionAsyncStorage =\n createAsyncLocalStorage()\n"],"names":["actionAsyncStorageInstance","createAsyncLocalStorage"],"mappings":";;;;+BAGaA;;;eAAAA;;;mCAF2B;AAEjC,MAAMA,6BACXC,IAAAA,0CAAuB"}
|
||||
8
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts
generated
vendored
Normal file
8
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { AsyncLocalStorage } from 'async_hooks';
|
||||
import { actionAsyncStorageInstance } from './action-async-storage-instance';
|
||||
export interface ActionStore {
|
||||
readonly isAction?: boolean;
|
||||
readonly isAppRoute?: boolean;
|
||||
}
|
||||
export type ActionAsyncStorage = AsyncLocalStorage<ActionStore>;
|
||||
export { actionAsyncStorageInstance as actionAsyncStorage };
|
||||
13
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.js
generated
vendored
Normal file
13
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "actionAsyncStorage", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return _actionasyncstorageinstance.actionAsyncStorageInstance;
|
||||
}
|
||||
});
|
||||
const _actionasyncstorageinstance = require("./action-async-storage-instance");
|
||||
|
||||
//# sourceMappingURL=action-async-storage.external.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/action-async-storage.external.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/action-async-storage.external.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\n// Share the instance module in the next-shared layer\nimport { actionAsyncStorageInstance } from './action-async-storage-instance' with { 'turbopack-transition': 'next-shared' }\nexport interface ActionStore {\n readonly isAction?: boolean\n readonly isAppRoute?: boolean\n}\n\nexport type ActionAsyncStorage = AsyncLocalStorage<ActionStore>\n\nexport { actionAsyncStorageInstance as actionAsyncStorage }\n"],"names":["actionAsyncStorage","actionAsyncStorageInstance"],"mappings":";;;;+BAWuCA;;;eAA9BC,sDAA0B;;;4CARQ"}
|
||||
43
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.d.ts
generated
vendored
Normal file
43
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.d.ts
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
import type { IncomingHttpHeaders } from 'node:http';
|
||||
import type { SizeLimit } from '../../types';
|
||||
import type { RequestStore } from '../app-render/work-unit-async-storage.external';
|
||||
import type { AppRenderContext, GenerateFlight } from './app-render';
|
||||
import type { AppPageModule } from '../route-modules/app-page/module';
|
||||
import type { BaseNextRequest, BaseNextResponse } from '../base-http';
|
||||
import RenderResult from '../render-result';
|
||||
import type { WorkStore } from '../app-render/work-async-storage.external';
|
||||
declare const enum HostType {
|
||||
XForwardedHost = "x-forwarded-host",
|
||||
Host = "host"
|
||||
}
|
||||
export declare function parseHostHeader(headers: IncomingHttpHeaders, originDomain?: string): {
|
||||
type: HostType;
|
||||
value: string;
|
||||
} | undefined;
|
||||
type ServerModuleMap = Record<string, {
|
||||
id: string;
|
||||
chunks: string[];
|
||||
name: string;
|
||||
}>;
|
||||
type ServerActionsConfig = {
|
||||
bodySizeLimit?: SizeLimit;
|
||||
allowedOrigins?: string[];
|
||||
};
|
||||
export declare function handleAction({ req, res, ComponentMod, serverModuleMap, generateFlight, workStore, requestStore, serverActions, ctx, }: {
|
||||
req: BaseNextRequest;
|
||||
res: BaseNextResponse;
|
||||
ComponentMod: AppPageModule;
|
||||
serverModuleMap: ServerModuleMap;
|
||||
generateFlight: GenerateFlight;
|
||||
workStore: WorkStore;
|
||||
requestStore: RequestStore;
|
||||
serverActions?: ServerActionsConfig;
|
||||
ctx: AppRenderContext;
|
||||
}): Promise<undefined | {
|
||||
type: 'not-found';
|
||||
} | {
|
||||
type: 'done';
|
||||
result: RenderResult | undefined;
|
||||
formState?: any;
|
||||
}>;
|
||||
export {};
|
||||
754
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.js
generated
vendored
Normal file
754
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.js
generated
vendored
Normal file
@@ -0,0 +1,754 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
handleAction: null,
|
||||
parseHostHeader: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
handleAction: function() {
|
||||
return handleAction;
|
||||
},
|
||||
parseHostHeader: function() {
|
||||
return parseHostHeader;
|
||||
}
|
||||
});
|
||||
const _approuterheaders = require("../../client/components/app-router-headers");
|
||||
const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback");
|
||||
const _redirect = require("../../client/components/redirect");
|
||||
const _redirecterror = require("../../client/components/redirect-error");
|
||||
const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result"));
|
||||
const _flightrenderresult = require("./flight-render-result");
|
||||
const _utils = require("../lib/server-ipc/utils");
|
||||
const _requestcookies = require("../web/spec-extension/adapters/request-cookies");
|
||||
const _constants = require("../../lib/constants");
|
||||
const _serveractionrequestmeta = require("../lib/server-action-request-meta");
|
||||
const _csrfprotection = require("./csrf-protection");
|
||||
const _log = require("../../build/output/log");
|
||||
const _cookies = require("../web/spec-extension/cookies");
|
||||
const _headers = require("../web/spec-extension/adapters/headers");
|
||||
const _utils1 = require("../web/utils");
|
||||
const _actionutils = require("./action-utils");
|
||||
const _helpers = require("../base-http/helpers");
|
||||
const _redirectstatuscode = require("../../client/components/redirect-status-code");
|
||||
const _requeststore = require("../async-storage/request-store");
|
||||
const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external");
|
||||
const _invarianterror = require("../../shared/lib/invariant-error");
|
||||
const _revalidationutils = require("../revalidation-utils");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function formDataFromSearchQueryString(query) {
|
||||
const searchParams = new URLSearchParams(query);
|
||||
const formData = new FormData();
|
||||
for (const [key, value] of searchParams){
|
||||
formData.append(key, value);
|
||||
}
|
||||
return formData;
|
||||
}
|
||||
function nodeHeadersToRecord(headers) {
|
||||
const record = {};
|
||||
for (const [key, value] of Object.entries(headers)){
|
||||
if (value !== undefined) {
|
||||
record[key] = Array.isArray(value) ? value.join(', ') : `${value}`;
|
||||
}
|
||||
}
|
||||
return record;
|
||||
}
|
||||
function getForwardedHeaders(req, res) {
|
||||
// Get request headers and cookies
|
||||
const requestHeaders = req.headers;
|
||||
const requestCookies = new _cookies.RequestCookies(_headers.HeadersAdapter.from(requestHeaders));
|
||||
// Get response headers and cookies
|
||||
const responseHeaders = res.getHeaders();
|
||||
const responseCookies = new _cookies.ResponseCookies((0, _utils1.fromNodeOutgoingHttpHeaders)(responseHeaders));
|
||||
// Merge request and response headers
|
||||
const mergedHeaders = (0, _utils.filterReqHeaders)({
|
||||
...nodeHeadersToRecord(requestHeaders),
|
||||
...nodeHeadersToRecord(responseHeaders)
|
||||
}, _utils.actionsForbiddenHeaders);
|
||||
// Merge cookies into requestCookies, so responseCookies always take precedence
|
||||
// and overwrite/delete those from requestCookies.
|
||||
responseCookies.getAll().forEach((cookie)=>{
|
||||
if (typeof cookie.value === 'undefined') {
|
||||
requestCookies.delete(cookie.name);
|
||||
} else {
|
||||
requestCookies.set(cookie);
|
||||
}
|
||||
});
|
||||
// Update the 'cookie' header with the merged cookies
|
||||
mergedHeaders['cookie'] = requestCookies.toString();
|
||||
// Remove headers that should not be forwarded
|
||||
delete mergedHeaders['transfer-encoding'];
|
||||
return new Headers(mergedHeaders);
|
||||
}
|
||||
function addRevalidationHeader(res, { workStore, requestStore }) {
|
||||
var _workStore_pendingRevalidatedTags;
|
||||
// If a tag was revalidated, the client router needs to invalidate all the
|
||||
// client router cache as they may be stale. And if a path was revalidated, the
|
||||
// client needs to invalidate all subtrees below that path.
|
||||
// To keep the header size small, we use a tuple of
|
||||
// [[revalidatedPaths], isTagRevalidated ? 1 : 0, isCookieRevalidated ? 1 : 0]
|
||||
// instead of a JSON object.
|
||||
// TODO-APP: Currently the prefetch cache doesn't have subtree information,
|
||||
// so we need to invalidate the entire cache if a path was revalidated.
|
||||
// TODO-APP: Currently paths are treated as tags, so the second element of the tuple
|
||||
// is always empty.
|
||||
const isTagRevalidated = ((_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.length) ? 1 : 0;
|
||||
const isCookieRevalidated = (0, _requestcookies.getModifiedCookieValues)(requestStore.mutableCookies).length ? 1 : 0;
|
||||
res.setHeader('x-action-revalidated', JSON.stringify([
|
||||
[],
|
||||
isTagRevalidated,
|
||||
isCookieRevalidated
|
||||
]));
|
||||
}
|
||||
/**
|
||||
* Forwards a server action request to a separate worker. Used when the requested action is not available in the current worker.
|
||||
*/ async function createForwardedActionResponse(req, res, host, workerPathname, basePath, workStore) {
|
||||
var _workStore_incrementalCache;
|
||||
if (!host) {
|
||||
throw Object.defineProperty(new Error('Invariant: Missing `host` header from a forwarded Server Actions request.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E226",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const forwardedHeaders = getForwardedHeaders(req, res);
|
||||
// indicate that this action request was forwarded from another worker
|
||||
// we use this to skip rendering the flight tree so that we don't update the UI
|
||||
// with the response from the forwarded worker
|
||||
forwardedHeaders.set('x-action-forwarded', '1');
|
||||
const proto = ((_workStore_incrementalCache = workStore.incrementalCache) == null ? void 0 : _workStore_incrementalCache.requestProtocol) || 'https';
|
||||
// For standalone or the serverful mode, use the internal origin directly
|
||||
// other than the host headers from the request.
|
||||
const origin = process.env.__NEXT_PRIVATE_ORIGIN || `${proto}://${host.value}`;
|
||||
const fetchUrl = new URL(`${origin}${basePath}${workerPathname}`);
|
||||
try {
|
||||
var _response_headers_get;
|
||||
let body;
|
||||
if (// The type check here ensures that `req` is correctly typed, and the
|
||||
// environment variable check provides dead code elimination.
|
||||
process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(req)) {
|
||||
if (!req.body) {
|
||||
throw Object.defineProperty(new Error('Invariant: missing request body.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E333",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
body = req.body;
|
||||
} else if (// The type check here ensures that `req` is correctly typed, and the
|
||||
// environment variable check provides dead code elimination.
|
||||
process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) {
|
||||
body = req.stream();
|
||||
} else {
|
||||
throw Object.defineProperty(new Error('Invariant: Unknown request type.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E114",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// Forward the request to the new worker
|
||||
const response = await fetch(fetchUrl, {
|
||||
method: 'POST',
|
||||
body,
|
||||
duplex: 'half',
|
||||
headers: forwardedHeaders,
|
||||
redirect: 'manual',
|
||||
next: {
|
||||
// @ts-ignore
|
||||
internal: 1
|
||||
}
|
||||
});
|
||||
if ((_response_headers_get = response.headers.get('content-type')) == null ? void 0 : _response_headers_get.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER)) {
|
||||
// copy the headers from the redirect response to the response we're sending
|
||||
for (const [key, value] of response.headers){
|
||||
if (!_utils.actionsForbiddenHeaders.includes(key)) {
|
||||
res.setHeader(key, value);
|
||||
}
|
||||
}
|
||||
return new _flightrenderresult.FlightRenderResult(response.body);
|
||||
} else {
|
||||
var // Since we aren't consuming the response body, we cancel it to avoid memory leaks
|
||||
_response_body;
|
||||
(_response_body = response.body) == null ? void 0 : _response_body.cancel();
|
||||
}
|
||||
} catch (err) {
|
||||
// we couldn't stream the forwarded response, so we'll just return an empty response
|
||||
console.error(`failed to forward action response`, err);
|
||||
}
|
||||
return _renderresult.default.fromStatic('{}');
|
||||
}
|
||||
/**
|
||||
* Returns the parsed redirect URL if we deem that it is hosted by us.
|
||||
*
|
||||
* We handle both relative and absolute redirect URLs.
|
||||
*
|
||||
* In case the redirect URL is not relative to the application we return `null`.
|
||||
*/ function getAppRelativeRedirectUrl(basePath, host, redirectUrl) {
|
||||
if (redirectUrl.startsWith('/') || redirectUrl.startsWith('.')) {
|
||||
// Make sure we are appending the basePath to relative URLS
|
||||
return new URL(`${basePath}${redirectUrl}`, 'http://n');
|
||||
}
|
||||
const parsedRedirectUrl = new URL(redirectUrl);
|
||||
if ((host == null ? void 0 : host.value) !== parsedRedirectUrl.host) {
|
||||
return null;
|
||||
}
|
||||
// At this point the hosts are the same, just confirm we
|
||||
// are routing to a path underneath the `basePath`
|
||||
return parsedRedirectUrl.pathname.startsWith(basePath) ? parsedRedirectUrl : null;
|
||||
}
|
||||
async function createRedirectRenderResult(req, res, originalHost, redirectUrl, redirectType, basePath, workStore) {
|
||||
res.setHeader('x-action-redirect', `${redirectUrl};${redirectType}`);
|
||||
// If we're redirecting to another route of this Next.js application, we'll
|
||||
// try to stream the response from the other worker path. When that works,
|
||||
// we can save an extra roundtrip and avoid a full page reload.
|
||||
// When the redirect URL starts with a `/` or is to the same host, under the
|
||||
// `basePath` we treat it as an app-relative redirect;
|
||||
const appRelativeRedirectUrl = getAppRelativeRedirectUrl(basePath, originalHost, redirectUrl);
|
||||
if (appRelativeRedirectUrl) {
|
||||
var _workStore_incrementalCache;
|
||||
if (!originalHost) {
|
||||
throw Object.defineProperty(new Error('Invariant: Missing `host` header from a forwarded Server Actions request.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E226",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const forwardedHeaders = getForwardedHeaders(req, res);
|
||||
forwardedHeaders.set(_approuterheaders.RSC_HEADER, '1');
|
||||
const proto = ((_workStore_incrementalCache = workStore.incrementalCache) == null ? void 0 : _workStore_incrementalCache.requestProtocol) || 'https';
|
||||
// For standalone or the serverful mode, use the internal origin directly
|
||||
// other than the host headers from the request.
|
||||
const origin = process.env.__NEXT_PRIVATE_ORIGIN || `${proto}://${originalHost.value}`;
|
||||
const fetchUrl = new URL(`${origin}${appRelativeRedirectUrl.pathname}${appRelativeRedirectUrl.search}`);
|
||||
if (workStore.pendingRevalidatedTags) {
|
||||
var _workStore_incrementalCache_prerenderManifest_preview, _workStore_incrementalCache_prerenderManifest, _workStore_incrementalCache1;
|
||||
forwardedHeaders.set(_constants.NEXT_CACHE_REVALIDATED_TAGS_HEADER, workStore.pendingRevalidatedTags.join(','));
|
||||
forwardedHeaders.set(_constants.NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER, ((_workStore_incrementalCache1 = workStore.incrementalCache) == null ? void 0 : (_workStore_incrementalCache_prerenderManifest = _workStore_incrementalCache1.prerenderManifest) == null ? void 0 : (_workStore_incrementalCache_prerenderManifest_preview = _workStore_incrementalCache_prerenderManifest.preview) == null ? void 0 : _workStore_incrementalCache_prerenderManifest_preview.previewModeId) || '');
|
||||
}
|
||||
// Ensures that when the path was revalidated we don't return a partial response on redirects
|
||||
forwardedHeaders.delete(_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER);
|
||||
// When an action follows a redirect, it's no longer handling an action: it's just a normal RSC request
|
||||
// to the requested URL. We should remove the `next-action` header so that it's not treated as an action
|
||||
forwardedHeaders.delete(_approuterheaders.ACTION_HEADER);
|
||||
try {
|
||||
var _response_headers_get;
|
||||
const response = await fetch(fetchUrl, {
|
||||
method: 'GET',
|
||||
headers: forwardedHeaders,
|
||||
next: {
|
||||
// @ts-ignore
|
||||
internal: 1
|
||||
}
|
||||
});
|
||||
if ((_response_headers_get = response.headers.get('content-type')) == null ? void 0 : _response_headers_get.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER)) {
|
||||
// copy the headers from the redirect response to the response we're sending
|
||||
for (const [key, value] of response.headers){
|
||||
if (!_utils.actionsForbiddenHeaders.includes(key)) {
|
||||
res.setHeader(key, value);
|
||||
}
|
||||
}
|
||||
return new _flightrenderresult.FlightRenderResult(response.body);
|
||||
} else {
|
||||
var // Since we aren't consuming the response body, we cancel it to avoid memory leaks
|
||||
_response_body;
|
||||
(_response_body = response.body) == null ? void 0 : _response_body.cancel();
|
||||
}
|
||||
} catch (err) {
|
||||
// we couldn't stream the redirect response, so we'll just do a normal redirect
|
||||
console.error(`failed to get redirect response`, err);
|
||||
}
|
||||
}
|
||||
return _renderresult.default.fromStatic('{}');
|
||||
}
|
||||
/**
|
||||
* Ensures the value of the header can't create long logs.
|
||||
*/ function limitUntrustedHeaderValueForLogs(value) {
|
||||
return value.length > 100 ? value.slice(0, 100) + '...' : value;
|
||||
}
|
||||
function parseHostHeader(headers, originDomain) {
|
||||
var _forwardedHostHeader_split_, _forwardedHostHeader_split;
|
||||
const forwardedHostHeader = headers['x-forwarded-host'];
|
||||
const forwardedHostHeaderValue = forwardedHostHeader && Array.isArray(forwardedHostHeader) ? forwardedHostHeader[0] : forwardedHostHeader == null ? void 0 : (_forwardedHostHeader_split = forwardedHostHeader.split(',')) == null ? void 0 : (_forwardedHostHeader_split_ = _forwardedHostHeader_split[0]) == null ? void 0 : _forwardedHostHeader_split_.trim();
|
||||
const hostHeader = headers['host'];
|
||||
if (originDomain) {
|
||||
return forwardedHostHeaderValue === originDomain ? {
|
||||
type: "x-forwarded-host",
|
||||
value: forwardedHostHeaderValue
|
||||
} : hostHeader === originDomain ? {
|
||||
type: "host",
|
||||
value: hostHeader
|
||||
} : undefined;
|
||||
}
|
||||
return forwardedHostHeaderValue ? {
|
||||
type: "x-forwarded-host",
|
||||
value: forwardedHostHeaderValue
|
||||
} : hostHeader ? {
|
||||
type: "host",
|
||||
value: hostHeader
|
||||
} : undefined;
|
||||
}
|
||||
async function handleAction({ req, res, ComponentMod, serverModuleMap, generateFlight, workStore, requestStore, serverActions, ctx }) {
|
||||
const contentType = req.headers['content-type'];
|
||||
const { serverActionsManifest, page } = ctx.renderOpts;
|
||||
const { actionId, isURLEncodedAction, isMultipartAction, isFetchAction, isPossibleServerAction } = (0, _serveractionrequestmeta.getServerActionRequestMetadata)(req);
|
||||
// If it can't be a Server Action, skip handling.
|
||||
// Note that this can be a false positive -- any multipart/urlencoded POST can get us here,
|
||||
// But won't know if it's an MPA action or not until we call `decodeAction` below.
|
||||
if (!isPossibleServerAction) {
|
||||
return;
|
||||
}
|
||||
if (workStore.isStaticGeneration) {
|
||||
throw Object.defineProperty(new Error("Invariant: server actions can't be handled during static rendering"), "__NEXT_ERROR_CODE", {
|
||||
value: "E359",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
let temporaryReferences;
|
||||
const finalizeAndGenerateFlight = (...args)=>{
|
||||
// When we switch to the render phase, cookies() will return
|
||||
// `workUnitStore.cookies` instead of `workUnitStore.userspaceMutableCookies`.
|
||||
// We want the render to see any cookie writes that we performed during the action,
|
||||
// so we need to update the immutable cookies to reflect the changes.
|
||||
(0, _requeststore.synchronizeMutableCookies)(requestStore);
|
||||
// The server action might have toggled draft mode, so we need to reflect
|
||||
// that in the work store to be up-to-date for subsequent rendering.
|
||||
workStore.isDraftMode = requestStore.draftMode.isEnabled;
|
||||
return generateFlight(...args);
|
||||
};
|
||||
// When running actions the default is no-store, you can still `cache: 'force-cache'`
|
||||
workStore.fetchCache = 'default-no-store';
|
||||
const originDomain = typeof req.headers['origin'] === 'string' ? new URL(req.headers['origin']).host : undefined;
|
||||
const host = parseHostHeader(req.headers);
|
||||
let warning = undefined;
|
||||
function warnBadServerActionRequest() {
|
||||
if (warning) {
|
||||
(0, _log.warn)(warning);
|
||||
}
|
||||
}
|
||||
// This is to prevent CSRF attacks. If `x-forwarded-host` is set, we need to
|
||||
// ensure that the request is coming from the same host.
|
||||
if (!originDomain) {
|
||||
// This might be an old browser that doesn't send `host` header. We ignore
|
||||
// this case.
|
||||
warning = 'Missing `origin` header from a forwarded Server Actions request.';
|
||||
} else if (!host || originDomain !== host.value) {
|
||||
// If the customer sets a list of allowed origins, we'll allow the request.
|
||||
// These are considered safe but might be different from forwarded host set
|
||||
// by the infra (i.e. reverse proxies).
|
||||
if ((0, _csrfprotection.isCsrfOriginAllowed)(originDomain, serverActions == null ? void 0 : serverActions.allowedOrigins)) {
|
||||
// Ignore it
|
||||
} else {
|
||||
if (host) {
|
||||
// This seems to be an CSRF attack. We should not proceed the action.
|
||||
console.error(`\`${host.type}\` header with value \`${limitUntrustedHeaderValueForLogs(host.value)}\` does not match \`origin\` header with value \`${limitUntrustedHeaderValueForLogs(originDomain)}\` from a forwarded Server Actions request. Aborting the action.`);
|
||||
} else {
|
||||
// This is an attack. We should not proceed the action.
|
||||
console.error(`\`x-forwarded-host\` or \`host\` headers are not provided. One of these is needed to compare the \`origin\` header from a forwarded Server Actions request. Aborting the action.`);
|
||||
}
|
||||
const error = Object.defineProperty(new Error('Invalid Server Actions request.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E80",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
if (isFetchAction) {
|
||||
res.statusCode = 500;
|
||||
await (0, _revalidationutils.executeRevalidates)(workStore);
|
||||
const promise = Promise.reject(error);
|
||||
try {
|
||||
// we need to await the promise to trigger the rejection early
|
||||
// so that it's already handled by the time we call
|
||||
// the RSC runtime. Otherwise, it will throw an unhandled
|
||||
// promise rejection error in the renderer.
|
||||
await promise;
|
||||
} catch {
|
||||
// swallow error, it's gonna be handled on the client
|
||||
}
|
||||
return {
|
||||
type: 'done',
|
||||
result: await finalizeAndGenerateFlight(req, ctx, requestStore, {
|
||||
actionResult: promise,
|
||||
// if the page was not revalidated, we can skip the rendering the flight tree
|
||||
skipFlight: !workStore.pathWasRevalidated,
|
||||
temporaryReferences
|
||||
})
|
||||
};
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
// ensure we avoid caching server actions unexpectedly
|
||||
res.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate');
|
||||
let boundActionArguments = [];
|
||||
const { actionAsyncStorage } = ComponentMod;
|
||||
let actionResult;
|
||||
let formState;
|
||||
let actionModId;
|
||||
const actionWasForwarded = Boolean(req.headers['x-action-forwarded']);
|
||||
if (actionId) {
|
||||
const forwardedWorker = (0, _actionutils.selectWorkerForForwarding)(actionId, page, serverActionsManifest);
|
||||
// If forwardedWorker is truthy, it means there isn't a worker for the action
|
||||
// in the current handler, so we forward the request to a worker that has the action.
|
||||
if (forwardedWorker) {
|
||||
return {
|
||||
type: 'done',
|
||||
result: await createForwardedActionResponse(req, res, host, forwardedWorker, ctx.renderOpts.basePath, workStore)
|
||||
};
|
||||
}
|
||||
}
|
||||
try {
|
||||
await actionAsyncStorage.run({
|
||||
isAction: true
|
||||
}, async ()=>{
|
||||
if (// The type check here ensures that `req` is correctly typed, and the
|
||||
// environment variable check provides dead code elimination.
|
||||
process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(req)) {
|
||||
if (!req.body) {
|
||||
throw Object.defineProperty(new Error('invariant: Missing request body.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E364",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// TODO: add body limit
|
||||
// Use react-server-dom-webpack/server.edge
|
||||
const { createTemporaryReferenceSet, decodeReply, decodeAction, decodeFormState } = ComponentMod;
|
||||
temporaryReferences = createTemporaryReferenceSet();
|
||||
if (isMultipartAction) {
|
||||
// TODO-APP: Add streaming support
|
||||
const formData = await req.request.formData();
|
||||
if (isFetchAction) {
|
||||
boundActionArguments = await decodeReply(formData, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
} else {
|
||||
const action = await decodeAction(formData, serverModuleMap);
|
||||
if (typeof action === 'function') {
|
||||
// Only warn if it's a server action, otherwise skip for other post requests
|
||||
warnBadServerActionRequest();
|
||||
let actionReturnedState;
|
||||
requestStore.phase = 'action';
|
||||
try {
|
||||
actionReturnedState = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, action);
|
||||
} finally{
|
||||
requestStore.phase = 'render';
|
||||
}
|
||||
formState = await decodeFormState(actionReturnedState, formData, serverModuleMap);
|
||||
}
|
||||
// Skip the fetch path
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
actionModId = getActionModIdOrError(actionId, serverModuleMap);
|
||||
} catch (err) {
|
||||
if (actionId !== null) {
|
||||
console.error(err);
|
||||
}
|
||||
return {
|
||||
type: 'not-found'
|
||||
};
|
||||
}
|
||||
const chunks = [];
|
||||
const reader = req.body.getReader();
|
||||
while(true){
|
||||
const { done, value } = await reader.read();
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
chunks.push(value);
|
||||
}
|
||||
const actionData = Buffer.concat(chunks).toString('utf-8');
|
||||
if (isURLEncodedAction) {
|
||||
const formData = formDataFromSearchQueryString(actionData);
|
||||
boundActionArguments = await decodeReply(formData, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
} else {
|
||||
boundActionArguments = await decodeReply(actionData, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (// The type check here ensures that `req` is correctly typed, and the
|
||||
// environment variable check provides dead code elimination.
|
||||
process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) {
|
||||
// Use react-server-dom-webpack/server.node which supports streaming
|
||||
const { createTemporaryReferenceSet, decodeReply, decodeReplyFromBusboy, decodeAction, decodeFormState } = require(`./react-server.node`);
|
||||
temporaryReferences = createTemporaryReferenceSet();
|
||||
const { Transform } = require('node:stream');
|
||||
const defaultBodySizeLimit = '1 MB';
|
||||
const bodySizeLimit = (serverActions == null ? void 0 : serverActions.bodySizeLimit) ?? defaultBodySizeLimit;
|
||||
const bodySizeLimitBytes = bodySizeLimit !== defaultBodySizeLimit ? require('next/dist/compiled/bytes').parse(bodySizeLimit) : 1024 * 1024 // 1 MB
|
||||
;
|
||||
let size = 0;
|
||||
const body = req.body.pipe(new Transform({
|
||||
transform (chunk, encoding, callback) {
|
||||
size += Buffer.byteLength(chunk, encoding);
|
||||
if (size > bodySizeLimitBytes) {
|
||||
const { ApiError } = require('../api-utils');
|
||||
callback(Object.defineProperty(new ApiError(413, `Body exceeded ${bodySizeLimit} limit.
|
||||
To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit`), "__NEXT_ERROR_CODE", {
|
||||
value: "E394",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
}));
|
||||
return;
|
||||
}
|
||||
callback(null, chunk);
|
||||
}
|
||||
}));
|
||||
if (isMultipartAction) {
|
||||
if (isFetchAction) {
|
||||
const busboy = require('busboy')({
|
||||
defParamCharset: 'utf8',
|
||||
headers: req.headers,
|
||||
limits: {
|
||||
fieldSize: bodySizeLimitBytes
|
||||
}
|
||||
});
|
||||
body.pipe(busboy);
|
||||
boundActionArguments = await decodeReplyFromBusboy(busboy, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
} else {
|
||||
// React doesn't yet publish a busboy version of decodeAction
|
||||
// so we polyfill the parsing of FormData.
|
||||
const fakeRequest = new Request('http://localhost', {
|
||||
method: 'POST',
|
||||
// @ts-expect-error
|
||||
headers: {
|
||||
'Content-Type': contentType
|
||||
},
|
||||
body: new ReadableStream({
|
||||
start: (controller)=>{
|
||||
body.on('data', (chunk)=>{
|
||||
controller.enqueue(new Uint8Array(chunk));
|
||||
});
|
||||
body.on('end', ()=>{
|
||||
controller.close();
|
||||
});
|
||||
body.on('error', (err)=>{
|
||||
controller.error(err);
|
||||
});
|
||||
}
|
||||
}),
|
||||
duplex: 'half'
|
||||
});
|
||||
const formData = await fakeRequest.formData();
|
||||
const action = await decodeAction(formData, serverModuleMap);
|
||||
if (typeof action === 'function') {
|
||||
// Only warn if it's a server action, otherwise skip for other post requests
|
||||
warnBadServerActionRequest();
|
||||
let actionReturnedState;
|
||||
requestStore.phase = 'action';
|
||||
try {
|
||||
actionReturnedState = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, action);
|
||||
} finally{
|
||||
requestStore.phase = 'render';
|
||||
}
|
||||
formState = await decodeFormState(actionReturnedState, formData, serverModuleMap);
|
||||
}
|
||||
// Skip the fetch path
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
actionModId = getActionModIdOrError(actionId, serverModuleMap);
|
||||
} catch (err) {
|
||||
if (actionId !== null) {
|
||||
console.error(err);
|
||||
}
|
||||
return {
|
||||
type: 'not-found'
|
||||
};
|
||||
}
|
||||
const chunks = [];
|
||||
for await (const chunk of req.body){
|
||||
chunks.push(Buffer.from(chunk));
|
||||
}
|
||||
const actionData = Buffer.concat(chunks).toString('utf-8');
|
||||
if (isURLEncodedAction) {
|
||||
const formData = formDataFromSearchQueryString(actionData);
|
||||
boundActionArguments = await decodeReply(formData, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
} else {
|
||||
boundActionArguments = await decodeReply(actionData, serverModuleMap, {
|
||||
temporaryReferences
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw Object.defineProperty(new Error('Invariant: Unknown request type.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E114",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// actions.js
|
||||
// app/page.js
|
||||
// action worker1
|
||||
// appRender1
|
||||
// app/foo/page.js
|
||||
// action worker2
|
||||
// appRender
|
||||
// / -> fire action -> POST / -> appRender1 -> modId for the action file
|
||||
// /foo -> fire action -> POST /foo -> appRender2 -> modId for the action file
|
||||
try {
|
||||
actionModId = actionModId ?? getActionModIdOrError(actionId, serverModuleMap);
|
||||
} catch (err) {
|
||||
if (actionId !== null) {
|
||||
console.error(err);
|
||||
}
|
||||
return {
|
||||
type: 'not-found'
|
||||
};
|
||||
}
|
||||
const actionMod = await ComponentMod.__next_app__.require(actionModId);
|
||||
const actionHandler = actionMod[// `actionId` must exist if we got here, as otherwise we would have thrown an error above
|
||||
actionId];
|
||||
let returnVal;
|
||||
requestStore.phase = 'action';
|
||||
try {
|
||||
returnVal = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, ()=>actionHandler.apply(null, boundActionArguments));
|
||||
} finally{
|
||||
requestStore.phase = 'render';
|
||||
}
|
||||
// For form actions, we need to continue rendering the page.
|
||||
if (isFetchAction) {
|
||||
await (0, _revalidationutils.executeRevalidates)(workStore);
|
||||
addRevalidationHeader(res, {
|
||||
workStore,
|
||||
requestStore
|
||||
});
|
||||
actionResult = await finalizeAndGenerateFlight(req, ctx, requestStore, {
|
||||
actionResult: Promise.resolve(returnVal),
|
||||
// if the page was not revalidated, or if the action was forwarded from another worker, we can skip the rendering the flight tree
|
||||
skipFlight: !workStore.pathWasRevalidated || actionWasForwarded,
|
||||
temporaryReferences
|
||||
});
|
||||
}
|
||||
});
|
||||
return {
|
||||
type: 'done',
|
||||
result: actionResult,
|
||||
formState
|
||||
};
|
||||
} catch (err) {
|
||||
if ((0, _redirecterror.isRedirectError)(err)) {
|
||||
const redirectUrl = (0, _redirect.getURLFromRedirectError)(err);
|
||||
const redirectType = (0, _redirect.getRedirectTypeFromError)(err);
|
||||
await (0, _revalidationutils.executeRevalidates)(workStore);
|
||||
addRevalidationHeader(res, {
|
||||
workStore,
|
||||
requestStore
|
||||
});
|
||||
// if it's a fetch action, we'll set the status code for logging/debugging purposes
|
||||
// but we won't set a Location header, as the redirect will be handled by the client router
|
||||
res.statusCode = _redirectstatuscode.RedirectStatusCode.SeeOther;
|
||||
if (isFetchAction) {
|
||||
return {
|
||||
type: 'done',
|
||||
result: await createRedirectRenderResult(req, res, host, redirectUrl, redirectType, ctx.renderOpts.basePath, workStore)
|
||||
};
|
||||
}
|
||||
res.setHeader('Location', redirectUrl);
|
||||
return {
|
||||
type: 'done',
|
||||
result: _renderresult.default.fromStatic('')
|
||||
};
|
||||
} else if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) {
|
||||
res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err);
|
||||
await (0, _revalidationutils.executeRevalidates)(workStore);
|
||||
addRevalidationHeader(res, {
|
||||
workStore,
|
||||
requestStore
|
||||
});
|
||||
if (isFetchAction) {
|
||||
const promise = Promise.reject(err);
|
||||
try {
|
||||
// we need to await the promise to trigger the rejection early
|
||||
// so that it's already handled by the time we call
|
||||
// the RSC runtime. Otherwise, it will throw an unhandled
|
||||
// promise rejection error in the renderer.
|
||||
await promise;
|
||||
} catch {
|
||||
// swallow error, it's gonna be handled on the client
|
||||
}
|
||||
return {
|
||||
type: 'done',
|
||||
result: await finalizeAndGenerateFlight(req, ctx, requestStore, {
|
||||
skipFlight: false,
|
||||
actionResult: promise,
|
||||
temporaryReferences
|
||||
})
|
||||
};
|
||||
}
|
||||
return {
|
||||
type: 'not-found'
|
||||
};
|
||||
}
|
||||
if (isFetchAction) {
|
||||
res.statusCode = 500;
|
||||
await (0, _revalidationutils.executeRevalidates)(workStore);
|
||||
const promise = Promise.reject(err);
|
||||
try {
|
||||
// we need to await the promise to trigger the rejection early
|
||||
// so that it's already handled by the time we call
|
||||
// the RSC runtime. Otherwise, it will throw an unhandled
|
||||
// promise rejection error in the renderer.
|
||||
await promise;
|
||||
} catch {
|
||||
// swallow error, it's gonna be handled on the client
|
||||
}
|
||||
return {
|
||||
type: 'done',
|
||||
result: await generateFlight(req, ctx, requestStore, {
|
||||
actionResult: promise,
|
||||
// if the page was not revalidated, or if the action was forwarded from another worker, we can skip the rendering the flight tree
|
||||
skipFlight: !workStore.pathWasRevalidated || actionWasForwarded,
|
||||
temporaryReferences
|
||||
})
|
||||
};
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Attempts to find the module ID for the action from the module map. When this fails, it could be a deployment skew where
|
||||
* the action came from a different deployment. It could also simply be an invalid POST request that is not a server action.
|
||||
* In either case, we'll throw an error to be handled by the caller.
|
||||
*/ function getActionModIdOrError(actionId, serverModuleMap) {
|
||||
var _serverModuleMap_actionId;
|
||||
// if we're missing the action ID header, we can't do any further processing
|
||||
if (!actionId) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError("Missing 'next-action' header."), "__NEXT_ERROR_CODE", {
|
||||
value: "E664",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const actionModId = (_serverModuleMap_actionId = serverModuleMap[actionId]) == null ? void 0 : _serverModuleMap_actionId.id;
|
||||
if (!actionModId) {
|
||||
throw Object.defineProperty(new Error(`Failed to find Server Action "${actionId}". This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`), "__NEXT_ERROR_CODE", {
|
||||
value: "E665",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return actionModId;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=action-handler.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/action-handler.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
9
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.d.ts
generated
vendored
Normal file
9
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.d.ts
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin';
|
||||
export declare function createServerModuleMap({ serverActionsManifest, }: {
|
||||
serverActionsManifest: ActionManifest;
|
||||
}): {};
|
||||
/**
|
||||
* Checks if the requested action has a worker for the current page.
|
||||
* If not, it returns the first worker that has a handler for the action.
|
||||
*/
|
||||
export declare function selectWorkerForForwarding(actionId: string, pageName: string, serverActionsManifest: ActionManifest): string | undefined;
|
||||
90
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.js
generated
vendored
Normal file
90
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.js
generated
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
createServerModuleMap: null,
|
||||
selectWorkerForForwarding: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
createServerModuleMap: function() {
|
||||
return createServerModuleMap;
|
||||
},
|
||||
selectWorkerForForwarding: function() {
|
||||
return selectWorkerForForwarding;
|
||||
}
|
||||
});
|
||||
const _apppaths = require("../../shared/lib/router/utils/app-paths");
|
||||
const _pathhasprefix = require("../../shared/lib/router/utils/path-has-prefix");
|
||||
const _removepathprefix = require("../../shared/lib/router/utils/remove-path-prefix");
|
||||
const _workasyncstorageexternal = require("./work-async-storage.external");
|
||||
function createServerModuleMap({ serverActionsManifest }) {
|
||||
return new Proxy({}, {
|
||||
get: (_, id)=>{
|
||||
var _serverActionsManifest__id, _serverActionsManifest_;
|
||||
const workers = (_serverActionsManifest_ = serverActionsManifest[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node']) == null ? void 0 : (_serverActionsManifest__id = _serverActionsManifest_[id]) == null ? void 0 : _serverActionsManifest__id.workers;
|
||||
if (!workers) {
|
||||
return undefined;
|
||||
}
|
||||
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
||||
let workerEntry;
|
||||
if (workStore) {
|
||||
workerEntry = workers[normalizeWorkerPageName(workStore.page)];
|
||||
} else {
|
||||
// If there's no work store defined, we can assume that a server
|
||||
// module map is needed during module evaluation, e.g. to create a
|
||||
// server action using a higher-order function. Therefore it should be
|
||||
// safe to return any entry from the manifest that matches the action
|
||||
// ID. They all refer to the same module ID, which must also exist in
|
||||
// the current page bundle. TODO: This is currently not guaranteed in
|
||||
// Turbopack, and needs to be fixed.
|
||||
workerEntry = Object.values(workers).at(0);
|
||||
}
|
||||
if (!workerEntry) {
|
||||
return undefined;
|
||||
}
|
||||
const { moduleId, async } = workerEntry;
|
||||
return {
|
||||
id: moduleId,
|
||||
name: id,
|
||||
chunks: [],
|
||||
async
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
function selectWorkerForForwarding(actionId, pageName, serverActionsManifest) {
|
||||
var _serverActionsManifest__actionId;
|
||||
const workers = (_serverActionsManifest__actionId = serverActionsManifest[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers;
|
||||
const workerName = normalizeWorkerPageName(pageName);
|
||||
// no workers, nothing to forward to
|
||||
if (!workers) return;
|
||||
// if there is a worker for this page, no need to forward it.
|
||||
if (workers[workerName]) {
|
||||
return;
|
||||
}
|
||||
// otherwise, grab the first worker that has a handler for this action id
|
||||
return denormalizeWorkerPageName(Object.keys(workers)[0]);
|
||||
}
|
||||
/**
|
||||
* The flight entry loader keys actions by bundlePath.
|
||||
* bundlePath corresponds with the relative path (including 'app') to the page entrypoint.
|
||||
*/ function normalizeWorkerPageName(pageName) {
|
||||
if ((0, _pathhasprefix.pathHasPrefix)(pageName, 'app')) {
|
||||
return pageName;
|
||||
}
|
||||
return 'app' + pageName;
|
||||
}
|
||||
/**
|
||||
* Converts a bundlePath (relative path to the entrypoint) to a routable page name
|
||||
*/ function denormalizeWorkerPageName(bundlePath) {
|
||||
return (0, _apppaths.normalizeAppPath)((0, _removepathprefix.removePathPrefix)(bundlePath, 'app'));
|
||||
}
|
||||
|
||||
//# sourceMappingURL=action-utils.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/action-utils.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
2
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.d.ts
generated
vendored
Normal file
2
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { AfterTaskAsyncStorage } from './after-task-async-storage.external';
|
||||
export declare const afterTaskAsyncStorageInstance: AfterTaskAsyncStorage;
|
||||
14
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js
generated
vendored
Normal file
14
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "afterTaskAsyncStorageInstance", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return afterTaskAsyncStorageInstance;
|
||||
}
|
||||
});
|
||||
const _asynclocalstorage = require("./async-local-storage");
|
||||
const afterTaskAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)();
|
||||
|
||||
//# sourceMappingURL=after-task-async-storage-instance.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/after-task-async-storage-instance.ts"],"sourcesContent":["import type { AfterTaskAsyncStorage } from './after-task-async-storage.external'\nimport { createAsyncLocalStorage } from './async-local-storage'\n\nexport const afterTaskAsyncStorageInstance: AfterTaskAsyncStorage =\n createAsyncLocalStorage()\n"],"names":["afterTaskAsyncStorageInstance","createAsyncLocalStorage"],"mappings":";;;;+BAGaA;;;eAAAA;;;mCAF2B;AAEjC,MAAMA,gCACXC,IAAAA,0CAAuB"}
|
||||
13
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.d.ts
generated
vendored
Normal file
13
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.d.ts
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
import type { AsyncLocalStorage } from 'async_hooks';
|
||||
import { afterTaskAsyncStorageInstance as afterTaskAsyncStorage } from './after-task-async-storage-instance';
|
||||
import type { WorkUnitStore } from './work-unit-async-storage.external';
|
||||
export interface AfterTaskStore {
|
||||
/** The phase in which the topmost `after` was called.
|
||||
*
|
||||
* NOTE: Can be undefined when running `generateStaticParams`,
|
||||
* where we only have a `workStore`, no `workUnitStore`.
|
||||
*/
|
||||
readonly rootTaskSpawnPhase: WorkUnitStore['phase'] | undefined;
|
||||
}
|
||||
export type AfterTaskAsyncStorage = AsyncLocalStorage<AfterTaskStore>;
|
||||
export { afterTaskAsyncStorage };
|
||||
13
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.js
generated
vendored
Normal file
13
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "afterTaskAsyncStorage", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return _aftertaskasyncstorageinstance.afterTaskAsyncStorageInstance;
|
||||
}
|
||||
});
|
||||
const _aftertaskasyncstorageinstance = require("./after-task-async-storage-instance");
|
||||
|
||||
//# sourceMappingURL=after-task-async-storage.external.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/after-task-async-storage.external.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/after-task-async-storage.external.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\n// Share the instance module in the next-shared layer\nimport { afterTaskAsyncStorageInstance as afterTaskAsyncStorage } from './after-task-async-storage-instance' with { 'turbopack-transition': 'next-shared' }\nimport type { WorkUnitStore } from './work-unit-async-storage.external'\n\nexport interface AfterTaskStore {\n /** The phase in which the topmost `after` was called.\n *\n * NOTE: Can be undefined when running `generateStaticParams`,\n * where we only have a `workStore`, no `workUnitStore`.\n */\n readonly rootTaskSpawnPhase: WorkUnitStore['phase'] | undefined\n}\n\nexport type AfterTaskAsyncStorage = AsyncLocalStorage<AfterTaskStore>\n\nexport { afterTaskAsyncStorage }\n"],"names":["afterTaskAsyncStorage"],"mappings":";;;;+BAiBSA;;;eAAAA,4DAAqB;;;+CAdyC"}
|
||||
66
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.d.ts
generated
vendored
Normal file
66
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.d.ts
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* This is a utility function to make scheduling sequential tasks that run back to back easier.
|
||||
* We schedule on the same queue (setImmediate) at the same time to ensure no other events can sneak in between.
|
||||
*/
|
||||
export declare function prerenderAndAbortInSequentialTasks<R>(prerender: () => Promise<R>, abort: () => void): Promise<R>;
|
||||
export declare function prerenderServerWithPhases(signal: AbortSignal, render: () => ReadableStream<Uint8Array>, finalPhase: () => void): Promise<ServerPrerenderStreamResult>;
|
||||
export declare function prerenderServerWithPhases(signal: AbortSignal, render: () => ReadableStream<Uint8Array>, secondPhase: () => void, finalPhase: () => void): Promise<ServerPrerenderStreamResult>;
|
||||
export declare function prerenderServerWithPhases(signal: AbortSignal, render: () => ReadableStream<Uint8Array>, secondPhase: () => void, thirdPhase: () => void, ...remainingPhases: Array<() => void>): Promise<ServerPrerenderStreamResult>;
|
||||
export declare class ServerPrerenderStreamResult {
|
||||
private currentChunks;
|
||||
private chunksByPhase;
|
||||
private trailingChunks;
|
||||
private status;
|
||||
private reason;
|
||||
constructor(stream: ReadableStream<Uint8Array>);
|
||||
markPhase(): void;
|
||||
markComplete(): void;
|
||||
markInterrupted(): void;
|
||||
/**
|
||||
* Returns a stream which only releases chunks when `releasePhase` is called. This stream will never "complete" because
|
||||
* we rely upon the stream remaining open when prerendering to avoid triggering errors for incomplete chunks in the client.
|
||||
*
|
||||
* asPhasedStream is expected to be called once per result however it is safe to call multiple times as long as we have not
|
||||
* transferred the underlying data. Generally this will only happen when streaming to a response
|
||||
*/
|
||||
asPhasedStream(): PhasedStream<Uint8Array<ArrayBufferLike>>;
|
||||
/**
|
||||
* Returns a stream which will release all chunks immediately. This stream will "complete" synchronously. It should be used outside
|
||||
* of render use cases like loading client chunks ahead of SSR or writing the streamed content to disk.
|
||||
*/
|
||||
asStream(): ReadableStream<any>;
|
||||
}
|
||||
declare class PhasedStream<T> extends ReadableStream<T> {
|
||||
private nextPhase;
|
||||
private chunksByPhase;
|
||||
private destination;
|
||||
constructor(chunksByPhase: Array<Array<T>>);
|
||||
releasePhase(): void;
|
||||
assertExhausted(): void;
|
||||
}
|
||||
export declare function prerenderClientWithPhases<T>(render: () => Promise<T>, finalPhase: () => void): Promise<T>;
|
||||
export declare function prerenderClientWithPhases<T>(render: () => Promise<T>, secondPhase: () => void, finalPhase: () => void): Promise<T>;
|
||||
export declare function prerenderClientWithPhases<T>(render: () => Promise<T>, secondPhase: () => void, thirdPhase: () => void, ...remainingPhases: Array<() => void>): Promise<T>;
|
||||
export declare class ReactServerResult {
|
||||
private _stream;
|
||||
constructor(stream: ReadableStream<Uint8Array>);
|
||||
tee(): ReadableStream<Uint8Array<ArrayBufferLike>>;
|
||||
consume(): ReadableStream<Uint8Array<ArrayBufferLike>>;
|
||||
}
|
||||
export type ReactServerPrerenderResolveToType = {
|
||||
prelude: ReadableStream<Uint8Array>;
|
||||
};
|
||||
export declare function createReactServerPrerenderResult(underlying: Promise<ReactServerPrerenderResolveToType>): Promise<ReactServerPrerenderResult>;
|
||||
export declare function createReactServerPrerenderResultFromRender(underlying: ReadableStream<Uint8Array>): Promise<ReactServerPrerenderResult>;
|
||||
export declare class ReactServerPrerenderResult {
|
||||
private _chunks;
|
||||
private assertChunks;
|
||||
private consumeChunks;
|
||||
consume(): void;
|
||||
constructor(chunks: Array<Uint8Array>);
|
||||
asUnclosingStream(): ReadableStream<Uint8Array>;
|
||||
consumeAsUnclosingStream(): ReadableStream<Uint8Array>;
|
||||
asStream(): ReadableStream<Uint8Array>;
|
||||
consumeAsStream(): ReadableStream<Uint8Array>;
|
||||
}
|
||||
export {};
|
||||
441
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.js
generated
vendored
Normal file
441
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.js
generated
vendored
Normal file
@@ -0,0 +1,441 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
ReactServerPrerenderResult: null,
|
||||
ReactServerResult: null,
|
||||
ServerPrerenderStreamResult: null,
|
||||
createReactServerPrerenderResult: null,
|
||||
createReactServerPrerenderResultFromRender: null,
|
||||
prerenderAndAbortInSequentialTasks: null,
|
||||
prerenderClientWithPhases: null,
|
||||
prerenderServerWithPhases: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
ReactServerPrerenderResult: function() {
|
||||
return ReactServerPrerenderResult;
|
||||
},
|
||||
ReactServerResult: function() {
|
||||
return ReactServerResult;
|
||||
},
|
||||
ServerPrerenderStreamResult: function() {
|
||||
return ServerPrerenderStreamResult;
|
||||
},
|
||||
createReactServerPrerenderResult: function() {
|
||||
return createReactServerPrerenderResult;
|
||||
},
|
||||
createReactServerPrerenderResultFromRender: function() {
|
||||
return createReactServerPrerenderResultFromRender;
|
||||
},
|
||||
prerenderAndAbortInSequentialTasks: function() {
|
||||
return prerenderAndAbortInSequentialTasks;
|
||||
},
|
||||
prerenderClientWithPhases: function() {
|
||||
return prerenderClientWithPhases;
|
||||
},
|
||||
prerenderServerWithPhases: function() {
|
||||
return prerenderServerWithPhases;
|
||||
}
|
||||
});
|
||||
const _invarianterror = require("../../shared/lib/invariant-error");
|
||||
const _dynamicrendering = require("./dynamic-rendering");
|
||||
function prerenderAndAbortInSequentialTasks(prerender, abort) {
|
||||
if (process.env.NEXT_RUNTIME === 'edge') {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('`prerenderAndAbortInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E538",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
} else {
|
||||
return new Promise((resolve, reject)=>{
|
||||
let pendingResult;
|
||||
setImmediate(()=>{
|
||||
try {
|
||||
pendingResult = prerender();
|
||||
pendingResult.catch(()=>{});
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
setImmediate(()=>{
|
||||
abort();
|
||||
resolve(pendingResult);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
function prerenderServerWithPhases(signal, render, ...remainingPhases) {
|
||||
if (process.env.NEXT_RUNTIME === 'edge') {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('`prerenderAndAbortInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E538",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
} else {
|
||||
return new Promise((resolve, reject)=>{
|
||||
let result;
|
||||
signal.addEventListener('abort', ()=>{
|
||||
if ((0, _dynamicrendering.isPrerenderInterruptedError)(signal.reason)) {
|
||||
result.markInterrupted();
|
||||
} else {
|
||||
result.markComplete();
|
||||
}
|
||||
}, {
|
||||
once: true
|
||||
});
|
||||
setImmediate(()=>{
|
||||
try {
|
||||
result = new ServerPrerenderStreamResult(render());
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
function runFinalTask() {
|
||||
try {
|
||||
if (result) {
|
||||
result.markComplete();
|
||||
this();
|
||||
}
|
||||
resolve(result);
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
function runNextTask() {
|
||||
try {
|
||||
if (result) {
|
||||
result.markPhase();
|
||||
this();
|
||||
}
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
let i = 0;
|
||||
for(; i < remainingPhases.length - 1; i++){
|
||||
const phase = remainingPhases[i];
|
||||
setImmediate(runNextTask.bind(phase));
|
||||
}
|
||||
if (remainingPhases[i]) {
|
||||
const finalPhase = remainingPhases[i];
|
||||
setImmediate(runFinalTask.bind(finalPhase));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
const PENDING = 0;
|
||||
const COMPLETE = 1;
|
||||
const INTERRUPTED = 2;
|
||||
const ERRORED = 3;
|
||||
class ServerPrerenderStreamResult {
|
||||
constructor(stream){
|
||||
this.status = PENDING;
|
||||
this.reason = null;
|
||||
this.trailingChunks = [];
|
||||
this.currentChunks = [];
|
||||
this.chunksByPhase = [
|
||||
this.currentChunks
|
||||
];
|
||||
const reader = stream.getReader();
|
||||
const progress = ({ done, value })=>{
|
||||
if (done) {
|
||||
if (this.status === PENDING) {
|
||||
this.status = COMPLETE;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (this.status === PENDING || this.status === INTERRUPTED) {
|
||||
this.currentChunks.push(value);
|
||||
} else {
|
||||
this.trailingChunks.push(value);
|
||||
}
|
||||
reader.read().then(progress, error);
|
||||
};
|
||||
const error = (reason)=>{
|
||||
this.status = ERRORED;
|
||||
this.reason = reason;
|
||||
};
|
||||
reader.read().then(progress, error);
|
||||
}
|
||||
markPhase() {
|
||||
this.currentChunks = [];
|
||||
this.chunksByPhase.push(this.currentChunks);
|
||||
}
|
||||
markComplete() {
|
||||
if (this.status === PENDING) {
|
||||
this.status = COMPLETE;
|
||||
}
|
||||
}
|
||||
markInterrupted() {
|
||||
this.status = INTERRUPTED;
|
||||
}
|
||||
/**
|
||||
* Returns a stream which only releases chunks when `releasePhase` is called. This stream will never "complete" because
|
||||
* we rely upon the stream remaining open when prerendering to avoid triggering errors for incomplete chunks in the client.
|
||||
*
|
||||
* asPhasedStream is expected to be called once per result however it is safe to call multiple times as long as we have not
|
||||
* transferred the underlying data. Generally this will only happen when streaming to a response
|
||||
*/ asPhasedStream() {
|
||||
switch(this.status){
|
||||
case COMPLETE:
|
||||
case INTERRUPTED:
|
||||
return new PhasedStream(this.chunksByPhase);
|
||||
default:
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError(`ServerPrerenderStreamResult cannot be consumed as a stream because it is not yet complete. status: ${this.status}`), "__NEXT_ERROR_CODE", {
|
||||
value: "E612",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Returns a stream which will release all chunks immediately. This stream will "complete" synchronously. It should be used outside
|
||||
* of render use cases like loading client chunks ahead of SSR or writing the streamed content to disk.
|
||||
*/ asStream() {
|
||||
switch(this.status){
|
||||
case COMPLETE:
|
||||
case INTERRUPTED:
|
||||
const chunksByPhase = this.chunksByPhase;
|
||||
const trailingChunks = this.trailingChunks;
|
||||
return new ReadableStream({
|
||||
start (controller) {
|
||||
for(let i = 0; i < chunksByPhase.length; i++){
|
||||
const chunks = chunksByPhase[i];
|
||||
for(let j = 0; j < chunks.length; j++){
|
||||
controller.enqueue(chunks[j]);
|
||||
}
|
||||
}
|
||||
for(let i = 0; i < trailingChunks.length; i++){
|
||||
controller.enqueue(trailingChunks[i]);
|
||||
}
|
||||
controller.close();
|
||||
}
|
||||
});
|
||||
default:
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError(`ServerPrerenderStreamResult cannot be consumed as a stream because it is not yet complete. status: ${this.status}`), "__NEXT_ERROR_CODE", {
|
||||
value: "E612",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
class PhasedStream extends ReadableStream {
|
||||
constructor(chunksByPhase){
|
||||
if (chunksByPhase.length === 0) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('PhasedStream expected at least one phase but none were found.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E574",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
let destination;
|
||||
super({
|
||||
start (controller) {
|
||||
destination = controller;
|
||||
}
|
||||
});
|
||||
// the start function above is called synchronously during construction so we will always have a destination
|
||||
// We wait to assign it until after the super call because we cannot access `this` before calling super
|
||||
this.destination = destination;
|
||||
this.nextPhase = 0;
|
||||
this.chunksByPhase = chunksByPhase;
|
||||
this.releasePhase();
|
||||
}
|
||||
releasePhase() {
|
||||
if (this.nextPhase < this.chunksByPhase.length) {
|
||||
const chunks = this.chunksByPhase[this.nextPhase++];
|
||||
for(let i = 0; i < chunks.length; i++){
|
||||
this.destination.enqueue(chunks[i]);
|
||||
}
|
||||
} else {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('PhasedStream expected more phases to release but none were found.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E541",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
assertExhausted() {
|
||||
if (this.nextPhase < this.chunksByPhase.length) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('PhasedStream expected no more phases to release but some were found.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E584",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
function prerenderClientWithPhases(render, ...remainingPhases) {
|
||||
if (process.env.NEXT_RUNTIME === 'edge') {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('`prerenderAndAbortInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E538",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
} else {
|
||||
return new Promise((resolve, reject)=>{
|
||||
let pendingResult;
|
||||
setImmediate(()=>{
|
||||
try {
|
||||
pendingResult = render();
|
||||
pendingResult.catch((err)=>reject(err));
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
function runFinalTask() {
|
||||
try {
|
||||
this();
|
||||
resolve(pendingResult);
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
function runNextTask() {
|
||||
try {
|
||||
this();
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}
|
||||
let i = 0;
|
||||
for(; i < remainingPhases.length - 1; i++){
|
||||
const phase = remainingPhases[i];
|
||||
setImmediate(runNextTask.bind(phase));
|
||||
}
|
||||
if (remainingPhases[i]) {
|
||||
const finalPhase = remainingPhases[i];
|
||||
setImmediate(runFinalTask.bind(finalPhase));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
class ReactServerResult {
|
||||
constructor(stream){
|
||||
this._stream = stream;
|
||||
}
|
||||
tee() {
|
||||
if (this._stream === null) {
|
||||
throw Object.defineProperty(new Error('Cannot tee a ReactServerResult that has already been consumed'), "__NEXT_ERROR_CODE", {
|
||||
value: "E106",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const tee = this._stream.tee();
|
||||
this._stream = tee[0];
|
||||
return tee[1];
|
||||
}
|
||||
consume() {
|
||||
if (this._stream === null) {
|
||||
throw Object.defineProperty(new Error('Cannot consume a ReactServerResult that has already been consumed'), "__NEXT_ERROR_CODE", {
|
||||
value: "E470",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const stream = this._stream;
|
||||
this._stream = null;
|
||||
return stream;
|
||||
}
|
||||
}
|
||||
async function createReactServerPrerenderResult(underlying) {
|
||||
const chunks = [];
|
||||
const { prelude } = await underlying;
|
||||
const reader = prelude.getReader();
|
||||
while(true){
|
||||
const { done, value } = await reader.read();
|
||||
if (done) {
|
||||
return new ReactServerPrerenderResult(chunks);
|
||||
} else {
|
||||
chunks.push(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
async function createReactServerPrerenderResultFromRender(underlying) {
|
||||
const chunks = [];
|
||||
const reader = underlying.getReader();
|
||||
while(true){
|
||||
const { done, value } = await reader.read();
|
||||
if (done) {
|
||||
break;
|
||||
} else {
|
||||
chunks.push(value);
|
||||
}
|
||||
}
|
||||
return new ReactServerPrerenderResult(chunks);
|
||||
}
|
||||
class ReactServerPrerenderResult {
|
||||
assertChunks(expression) {
|
||||
if (this._chunks === null) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError(`Cannot \`${expression}\` on a ReactServerPrerenderResult that has already been consumed.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E593",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return this._chunks;
|
||||
}
|
||||
consumeChunks(expression) {
|
||||
const chunks = this.assertChunks(expression);
|
||||
this.consume();
|
||||
return chunks;
|
||||
}
|
||||
consume() {
|
||||
this._chunks = null;
|
||||
}
|
||||
constructor(chunks){
|
||||
this._chunks = chunks;
|
||||
}
|
||||
asUnclosingStream() {
|
||||
const chunks = this.assertChunks('asUnclosingStream()');
|
||||
return createUnclosingStream(chunks);
|
||||
}
|
||||
consumeAsUnclosingStream() {
|
||||
const chunks = this.consumeChunks('consumeAsUnclosingStream()');
|
||||
return createUnclosingStream(chunks);
|
||||
}
|
||||
asStream() {
|
||||
const chunks = this.assertChunks('asStream()');
|
||||
return createClosingStream(chunks);
|
||||
}
|
||||
consumeAsStream() {
|
||||
const chunks = this.consumeChunks('consumeAsStream()');
|
||||
return createClosingStream(chunks);
|
||||
}
|
||||
}
|
||||
function createUnclosingStream(chunks) {
|
||||
let i = 0;
|
||||
return new ReadableStream({
|
||||
async pull (controller) {
|
||||
if (i < chunks.length) {
|
||||
controller.enqueue(chunks[i++]);
|
||||
}
|
||||
// we intentionally keep the stream open. The consumer will clear
|
||||
// out chunks once finished and the remaining memory will be GC'd
|
||||
// when this object goes out of scope
|
||||
}
|
||||
});
|
||||
}
|
||||
function createClosingStream(chunks) {
|
||||
let i = 0;
|
||||
return new ReadableStream({
|
||||
async pull (controller) {
|
||||
if (i < chunks.length) {
|
||||
controller.enqueue(chunks[i++]);
|
||||
} else {
|
||||
controller.close();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=app-render-prerender-utils.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render-prerender-utils.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
5
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.d.ts
generated
vendored
Normal file
5
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* This is a utility function to make scheduling sequential tasks that run back to back easier.
|
||||
* We schedule on the same queue (setImmediate) at the same time to ensure no other events can sneak in between.
|
||||
*/
|
||||
export declare function scheduleInSequentialTasks<R>(render: () => R | Promise<R>, followup: () => void): Promise<R>;
|
||||
37
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.js
generated
vendored
Normal file
37
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.js
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "scheduleInSequentialTasks", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return scheduleInSequentialTasks;
|
||||
}
|
||||
});
|
||||
const _invarianterror = require("../../shared/lib/invariant-error");
|
||||
function scheduleInSequentialTasks(render, followup) {
|
||||
if (process.env.NEXT_RUNTIME === 'edge') {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('`scheduleInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E591",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
} else {
|
||||
return new Promise((resolve, reject)=>{
|
||||
let pendingResult;
|
||||
setImmediate(()=>{
|
||||
try {
|
||||
pendingResult = render();
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
setImmediate(()=>{
|
||||
followup();
|
||||
resolve(pendingResult);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=app-render-render-utils.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render-render-utils.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/app-render-render-utils.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\n\n/**\n * This is a utility function to make scheduling sequential tasks that run back to back easier.\n * We schedule on the same queue (setImmediate) at the same time to ensure no other events can sneak in between.\n */\nexport function scheduleInSequentialTasks<R>(\n render: () => R | Promise<R>,\n followup: () => void\n): Promise<R> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n '`scheduleInSequentialTasks` should not be called in edge runtime.'\n )\n } else {\n return new Promise((resolve, reject) => {\n let pendingResult: R | Promise<R>\n setImmediate(() => {\n try {\n pendingResult = render()\n } catch (err) {\n reject(err)\n }\n })\n setImmediate(() => {\n followup()\n resolve(pendingResult)\n })\n })\n }\n}\n"],"names":["scheduleInSequentialTasks","render","followup","process","env","NEXT_RUNTIME","InvariantError","Promise","resolve","reject","pendingResult","setImmediate","err"],"mappings":";;;;+BAMgBA;;;eAAAA;;;gCANe;AAMxB,SAASA,0BACdC,MAA4B,EAC5BC,QAAoB;IAEpB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;QACvC,MAAM,qBAEL,CAFK,IAAIC,8BAAc,CACtB,sEADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF,OAAO;QACL,OAAO,IAAIC,QAAQ,CAACC,SAASC;YAC3B,IAAIC;YACJC,aAAa;gBACX,IAAI;oBACFD,gBAAgBT;gBAClB,EAAE,OAAOW,KAAK;oBACZH,OAAOG;gBACT;YACF;YACAD,aAAa;gBACXT;gBACAM,QAAQE;YACV;QACF;IACF;AACF"}
|
||||
84
frontend/webapp/node_modules/next/dist/server/app-render/app-render.d.ts
generated
vendored
Normal file
84
frontend/webapp/node_modules/next/dist/server/app-render/app-render.d.ts
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
import type { ActionResult, DynamicParamTypesShort, FlightRouterState, RenderOpts, Segment, CacheNodeSeedData, PreloadCallbacks } from './types';
|
||||
import { type WorkStore } from '../app-render/work-async-storage.external';
|
||||
import type { RequestStore } from '../app-render/work-unit-async-storage.external';
|
||||
import type { NextParsedUrlQuery } from '../request-meta';
|
||||
import type { AppPageModule } from '../route-modules/app-page/module';
|
||||
import type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin';
|
||||
import type { DeepReadonly } from '../../shared/lib/deep-readonly';
|
||||
import type { BaseNextRequest, BaseNextResponse } from '../base-http';
|
||||
import RenderResult, { type AppPageRenderResultMetadata } from '../render-result';
|
||||
import { type ImplicitTags } from '../lib/implicit-tags';
|
||||
import { parseRelativeUrl } from '../../shared/lib/router/utils/parse-relative-url';
|
||||
import type { ServerComponentsHmrCache } from '../response-cache';
|
||||
import type { FallbackRouteParams } from '../request/fallback-params';
|
||||
import './clean-async-snapshot.external';
|
||||
export type GetDynamicParamFromSegment = (segment: string) => {
|
||||
param: string;
|
||||
value: string | string[] | null;
|
||||
treeSegment: Segment;
|
||||
type: DynamicParamTypesShort;
|
||||
} | null;
|
||||
export type GenerateFlight = typeof generateDynamicFlightRenderResult;
|
||||
export type AppSharedContext = {
|
||||
buildId: string;
|
||||
};
|
||||
export type AppRenderContext = {
|
||||
sharedContext: AppSharedContext;
|
||||
workStore: WorkStore;
|
||||
url: ReturnType<typeof parseRelativeUrl>;
|
||||
componentMod: AppPageModule;
|
||||
renderOpts: RenderOpts;
|
||||
parsedRequestHeaders: ParsedRequestHeaders;
|
||||
getDynamicParamFromSegment: GetDynamicParamFromSegment;
|
||||
query: NextParsedUrlQuery;
|
||||
isPrefetch: boolean;
|
||||
isPossibleServerAction: boolean;
|
||||
requestTimestamp: number;
|
||||
appUsingSizeAdjustment: boolean;
|
||||
flightRouterState?: FlightRouterState;
|
||||
requestId: string;
|
||||
pagePath: string;
|
||||
clientReferenceManifest: DeepReadonly<ClientReferenceManifest>;
|
||||
assetPrefix: string;
|
||||
isNotFoundPath: boolean;
|
||||
nonce: string | undefined;
|
||||
res: BaseNextResponse;
|
||||
/**
|
||||
* For now, the implicit tags are common for the whole route. If we ever start
|
||||
* rendering/revalidating segments independently, they need to move to the
|
||||
* work unit store.
|
||||
*/
|
||||
implicitTags: ImplicitTags;
|
||||
};
|
||||
interface ParsedRequestHeaders {
|
||||
/**
|
||||
* Router state provided from the client-side router. Used to handle rendering
|
||||
* from the common layout down. This value will be undefined if the request is
|
||||
* not a client-side navigation request, or if the request is a prefetch
|
||||
* request.
|
||||
*/
|
||||
readonly flightRouterState: FlightRouterState | undefined;
|
||||
readonly isPrefetchRequest: boolean;
|
||||
readonly isRouteTreePrefetchRequest: boolean;
|
||||
readonly isDevWarmupRequest: boolean;
|
||||
readonly isHmrRefresh: boolean;
|
||||
readonly isRSCRequest: boolean;
|
||||
readonly nonce: string | undefined;
|
||||
readonly previouslyRevalidatedTags: string[];
|
||||
}
|
||||
/**
|
||||
* Produces a RenderResult containing the Flight data for the given request. See
|
||||
* `generateDynamicRSCPayload` for information on the contents of the render result.
|
||||
*/
|
||||
declare function generateDynamicFlightRenderResult(req: BaseNextRequest, ctx: AppRenderContext, requestStore: RequestStore, options?: {
|
||||
actionResult: ActionResult;
|
||||
skipFlight: boolean;
|
||||
componentTree?: CacheNodeSeedData;
|
||||
preloadCallbacks?: PreloadCallbacks;
|
||||
temporaryReferences?: WeakMap<any, string>;
|
||||
}): Promise<RenderResult>;
|
||||
export type BinaryStreamOf<T> = ReadableStream<Uint8Array>;
|
||||
export type AppPageRender = (req: BaseNextRequest, res: BaseNextResponse, pagePath: string, query: NextParsedUrlQuery, fallbackRouteParams: FallbackRouteParams | null, renderOpts: RenderOpts, serverComponentsHmrCache: ServerComponentsHmrCache | undefined, isDevWarmup: boolean, sharedContext: AppSharedContext) => Promise<RenderResult<AppPageRenderResultMetadata>>;
|
||||
export declare const renderToHTMLOrFlight: AppPageRender;
|
||||
export declare function warmFlightResponse(flightStream: ReadableStream<Uint8Array>, clientReferenceManifest: DeepReadonly<ClientReferenceManifest>): Promise<unknown>;
|
||||
export {};
|
||||
2732
frontend/webapp/node_modules/next/dist/server/app-render/app-render.js
generated
vendored
Normal file
2732
frontend/webapp/node_modules/next/dist/server/app-render/app-render.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/app-render.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.d.ts
generated
vendored
Normal file
4
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import type { AsyncLocalStorage } from 'async_hooks';
|
||||
export declare function createAsyncLocalStorage<Store extends {}>(): AsyncLocalStorage<Store>;
|
||||
export declare function bindSnapshot<T>(fn: T): T;
|
||||
export declare function createSnapshot(): <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
|
||||
75
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.js
generated
vendored
Normal file
75
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.js
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
bindSnapshot: null,
|
||||
createAsyncLocalStorage: null,
|
||||
createSnapshot: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
bindSnapshot: function() {
|
||||
return bindSnapshot;
|
||||
},
|
||||
createAsyncLocalStorage: function() {
|
||||
return createAsyncLocalStorage;
|
||||
},
|
||||
createSnapshot: function() {
|
||||
return createSnapshot;
|
||||
}
|
||||
});
|
||||
const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", {
|
||||
value: "E504",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
class FakeAsyncLocalStorage {
|
||||
disable() {
|
||||
throw sharedAsyncLocalStorageNotAvailableError;
|
||||
}
|
||||
getStore() {
|
||||
// This fake implementation of AsyncLocalStorage always returns `undefined`.
|
||||
return undefined;
|
||||
}
|
||||
run() {
|
||||
throw sharedAsyncLocalStorageNotAvailableError;
|
||||
}
|
||||
exit() {
|
||||
throw sharedAsyncLocalStorageNotAvailableError;
|
||||
}
|
||||
enterWith() {
|
||||
throw sharedAsyncLocalStorageNotAvailableError;
|
||||
}
|
||||
static bind(fn) {
|
||||
return fn;
|
||||
}
|
||||
}
|
||||
const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage;
|
||||
function createAsyncLocalStorage() {
|
||||
if (maybeGlobalAsyncLocalStorage) {
|
||||
return new maybeGlobalAsyncLocalStorage();
|
||||
}
|
||||
return new FakeAsyncLocalStorage();
|
||||
}
|
||||
function bindSnapshot(fn) {
|
||||
if (maybeGlobalAsyncLocalStorage) {
|
||||
return maybeGlobalAsyncLocalStorage.bind(fn);
|
||||
}
|
||||
return FakeAsyncLocalStorage.bind(fn);
|
||||
}
|
||||
function createSnapshot() {
|
||||
if (maybeGlobalAsyncLocalStorage) {
|
||||
return maybeGlobalAsyncLocalStorage.snapshot();
|
||||
}
|
||||
return function(fn, ...args) {
|
||||
return fn(...args);
|
||||
};
|
||||
}
|
||||
|
||||
//# sourceMappingURL=async-local-storage.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/async-local-storage.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/async-local-storage.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage<Store extends {}>\n implements AsyncLocalStorage<Store>\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind<T>(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage<Store> {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\nexport function bindSnapshot<T>(fn: T): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): <R, TArgs extends any[]>(\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n"],"names":["bindSnapshot","createAsyncLocalStorage","createSnapshot","sharedAsyncLocalStorageNotAvailableError","Error","FakeAsyncLocalStorage","disable","getStore","undefined","run","exit","enterWith","bind","fn","maybeGlobalAsyncLocalStorage","globalThis","AsyncLocalStorage","snapshot","args"],"mappings":";;;;;;;;;;;;;;;;IA+CgBA,YAAY;eAAZA;;IATAC,uBAAuB;eAAvBA;;IAgBAC,cAAc;eAAdA;;;AApDhB,MAAMC,2CAA2C,qBAEhD,CAFgD,IAAIC,MACnD,+EAD+C,qBAAA;WAAA;gBAAA;kBAAA;AAEjD;AAEA,MAAMC;IAGJC,UAAgB;QACd,MAAMH;IACR;IAEAI,WAA8B;QAC5B,4EAA4E;QAC5E,OAAOC;IACT;IAEAC,MAAY;QACV,MAAMN;IACR;IAEAO,OAAa;QACX,MAAMP;IACR;IAEAQ,YAAkB;QAChB,MAAMR;IACR;IAEA,OAAOS,KAAQC,EAAK,EAAK;QACvB,OAAOA;IACT;AACF;AAEA,MAAMC,+BACJ,OAAOC,eAAe,eAAe,AAACA,WAAmBC,iBAAiB;AAErE,SAASf;IAGd,IAAIa,8BAA8B;QAChC,OAAO,IAAIA;IACb;IACA,OAAO,IAAIT;AACb;AAEO,SAASL,aAAgBa,EAAK;IACnC,IAAIC,8BAA8B;QAChC,OAAOA,6BAA6BF,IAAI,CAACC;IAC3C;IACA,OAAOR,sBAAsBO,IAAI,CAACC;AACpC;AAEO,SAASX;IAId,IAAIY,8BAA8B;QAChC,OAAOA,6BAA6BG,QAAQ;IAC9C;IACA,OAAO,SAAUJ,EAAO,EAAE,GAAGK,IAAW;QACtC,OAAOL,MAAMK;IACf;AACF"}
|
||||
28
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.d.ts
generated
vendored
Normal file
28
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.d.ts
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* This class is used to detect when all cache reads for a given render are settled.
|
||||
* We do this to allow for cache warming the prerender without having to continue rendering
|
||||
* the remainder of the page. This feature is really only useful when the dynamicIO flag is on
|
||||
* and should only be used in codepaths gated with this feature.
|
||||
*/
|
||||
export declare class CacheSignal {
|
||||
private count;
|
||||
private earlyListeners;
|
||||
private listeners;
|
||||
private tickPending;
|
||||
private taskPending;
|
||||
constructor();
|
||||
private noMorePendingCaches;
|
||||
/**
|
||||
* This promise waits until there are no more in progress cache reads but no later.
|
||||
* This allows for adding more cache reads after to delay cacheReady.
|
||||
*/
|
||||
inputReady(): Promise<void>;
|
||||
/**
|
||||
* If there are inflight cache reads this Promise can resolve in a microtask however
|
||||
* if there are no inflight cache reads then we wait at least one task to allow initial
|
||||
* cache reads to be initiated.
|
||||
*/
|
||||
cacheReady(): Promise<void>;
|
||||
beginRead(): void;
|
||||
endRead(): void;
|
||||
}
|
||||
90
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.js
generated
vendored
Normal file
90
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.js
generated
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* This class is used to detect when all cache reads for a given render are settled.
|
||||
* We do this to allow for cache warming the prerender without having to continue rendering
|
||||
* the remainder of the page. This feature is really only useful when the dynamicIO flag is on
|
||||
* and should only be used in codepaths gated with this feature.
|
||||
*/ "use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "CacheSignal", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return CacheSignal;
|
||||
}
|
||||
});
|
||||
class CacheSignal {
|
||||
constructor(){
|
||||
this.count = 0;
|
||||
this.earlyListeners = [];
|
||||
this.listeners = [];
|
||||
this.tickPending = false;
|
||||
this.taskPending = false;
|
||||
}
|
||||
noMorePendingCaches() {
|
||||
if (!this.tickPending) {
|
||||
this.tickPending = true;
|
||||
process.nextTick(()=>{
|
||||
this.tickPending = false;
|
||||
if (this.count === 0) {
|
||||
for(let i = 0; i < this.earlyListeners.length; i++){
|
||||
this.earlyListeners[i]();
|
||||
}
|
||||
this.earlyListeners.length = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!this.taskPending) {
|
||||
this.taskPending = true;
|
||||
setTimeout(()=>{
|
||||
this.taskPending = false;
|
||||
if (this.count === 0) {
|
||||
for(let i = 0; i < this.listeners.length; i++){
|
||||
this.listeners[i]();
|
||||
}
|
||||
this.listeners.length = 0;
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* This promise waits until there are no more in progress cache reads but no later.
|
||||
* This allows for adding more cache reads after to delay cacheReady.
|
||||
*/ inputReady() {
|
||||
return new Promise((resolve)=>{
|
||||
this.earlyListeners.push(resolve);
|
||||
if (this.count === 0) {
|
||||
this.noMorePendingCaches();
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* If there are inflight cache reads this Promise can resolve in a microtask however
|
||||
* if there are no inflight cache reads then we wait at least one task to allow initial
|
||||
* cache reads to be initiated.
|
||||
*/ cacheReady() {
|
||||
return new Promise((resolve)=>{
|
||||
this.listeners.push(resolve);
|
||||
if (this.count === 0) {
|
||||
this.noMorePendingCaches();
|
||||
}
|
||||
});
|
||||
}
|
||||
beginRead() {
|
||||
this.count++;
|
||||
}
|
||||
endRead() {
|
||||
// If this is the last read we need to wait a task before we can claim the cache is settled.
|
||||
// The cache read will likely ping a Server Component which can read from the cache again and this
|
||||
// will play out in a microtask so we need to only resolve pending listeners if we're still at 0
|
||||
// after at least one task.
|
||||
// We only want one task scheduled at a time so when we hit count 1 we don't decrement the counter immediately.
|
||||
// If intervening reads happen before the scheduled task runs they will never observe count 1 preventing reentrency
|
||||
this.count--;
|
||||
if (this.count === 0) {
|
||||
this.noMorePendingCaches();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=cache-signal.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/cache-signal.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/cache-signal.ts"],"sourcesContent":["/**\n * This class is used to detect when all cache reads for a given render are settled.\n * We do this to allow for cache warming the prerender without having to continue rendering\n * the remainder of the page. This feature is really only useful when the dynamicIO flag is on\n * and should only be used in codepaths gated with this feature.\n */\n\nexport class CacheSignal {\n private count: number\n private earlyListeners: Array<() => void>\n private listeners: Array<() => void>\n private tickPending: boolean\n private taskPending: boolean\n\n constructor() {\n this.count = 0\n this.earlyListeners = []\n this.listeners = []\n this.tickPending = false\n this.taskPending = false\n }\n\n private noMorePendingCaches() {\n if (!this.tickPending) {\n this.tickPending = true\n process.nextTick(() => {\n this.tickPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.earlyListeners.length; i++) {\n this.earlyListeners[i]()\n }\n this.earlyListeners.length = 0\n }\n })\n }\n if (!this.taskPending) {\n this.taskPending = true\n setTimeout(() => {\n this.taskPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.listeners.length; i++) {\n this.listeners[i]()\n }\n this.listeners.length = 0\n }\n }, 0)\n }\n }\n\n /**\n * This promise waits until there are no more in progress cache reads but no later.\n * This allows for adding more cache reads after to delay cacheReady.\n */\n inputReady() {\n return new Promise<void>((resolve) => {\n this.earlyListeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n /**\n * If there are inflight cache reads this Promise can resolve in a microtask however\n * if there are no inflight cache reads then we wait at least one task to allow initial\n * cache reads to be initiated.\n */\n cacheReady() {\n return new Promise<void>((resolve) => {\n this.listeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n beginRead() {\n this.count++\n }\n\n endRead() {\n // If this is the last read we need to wait a task before we can claim the cache is settled.\n // The cache read will likely ping a Server Component which can read from the cache again and this\n // will play out in a microtask so we need to only resolve pending listeners if we're still at 0\n // after at least one task.\n // We only want one task scheduled at a time so when we hit count 1 we don't decrement the counter immediately.\n // If intervening reads happen before the scheduled task runs they will never observe count 1 preventing reentrency\n this.count--\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n }\n}\n"],"names":["CacheSignal","constructor","count","earlyListeners","listeners","tickPending","taskPending","noMorePendingCaches","process","nextTick","i","length","setTimeout","inputReady","Promise","resolve","push","cacheReady","beginRead","endRead"],"mappings":"AAAA;;;;;CAKC;;;;+BAEYA;;;eAAAA;;;AAAN,MAAMA;IAOXC,aAAc;QACZ,IAAI,CAACC,KAAK,GAAG;QACb,IAAI,CAACC,cAAc,GAAG,EAAE;QACxB,IAAI,CAACC,SAAS,GAAG,EAAE;QACnB,IAAI,CAACC,WAAW,GAAG;QACnB,IAAI,CAACC,WAAW,GAAG;IACrB;IAEQC,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAACF,WAAW,EAAE;YACrB,IAAI,CAACA,WAAW,GAAG;YACnBG,QAAQC,QAAQ,CAAC;gBACf,IAAI,CAACJ,WAAW,GAAG;gBACnB,IAAI,IAAI,CAACH,KAAK,KAAK,GAAG;oBACpB,IAAK,IAAIQ,IAAI,GAAGA,IAAI,IAAI,CAACP,cAAc,CAACQ,MAAM,EAAED,IAAK;wBACnD,IAAI,CAACP,cAAc,CAACO,EAAE;oBACxB;oBACA,IAAI,CAACP,cAAc,CAACQ,MAAM,GAAG;gBAC/B;YACF;QACF;QACA,IAAI,CAAC,IAAI,CAACL,WAAW,EAAE;YACrB,IAAI,CAACA,WAAW,GAAG;YACnBM,WAAW;gBACT,IAAI,CAACN,WAAW,GAAG;gBACnB,IAAI,IAAI,CAACJ,KAAK,KAAK,GAAG;oBACpB,IAAK,IAAIQ,IAAI,GAAGA,IAAI,IAAI,CAACN,SAAS,CAACO,MAAM,EAAED,IAAK;wBAC9C,IAAI,CAACN,SAAS,CAACM,EAAE;oBACnB;oBACA,IAAI,CAACN,SAAS,CAACO,MAAM,GAAG;gBAC1B;YACF,GAAG;QACL;IACF;IAEA;;;GAGC,GACDE,aAAa;QACX,OAAO,IAAIC,QAAc,CAACC;YACxB,IAAI,CAACZ,cAAc,CAACa,IAAI,CAACD;YACzB,IAAI,IAAI,CAACb,KAAK,KAAK,GAAG;gBACpB,IAAI,CAACK,mBAAmB;YAC1B;QACF;IACF;IAEA;;;;GAIC,GACDU,aAAa;QACX,OAAO,IAAIH,QAAc,CAACC;YACxB,IAAI,CAACX,SAAS,CAACY,IAAI,CAACD;YACpB,IAAI,IAAI,CAACb,KAAK,KAAK,GAAG;gBACpB,IAAI,CAACK,mBAAmB;YAC1B;QACF;IACF;IAEAW,YAAY;QACV,IAAI,CAAChB,KAAK;IACZ;IAEAiB,UAAU;QACR,4FAA4F;QAC5F,kGAAkG;QAClG,gGAAgG;QAChG,2BAA2B;QAC3B,+GAA+G;QAC/G,mHAAmH;QACnH,IAAI,CAACjB,KAAK;QACV,IAAI,IAAI,CAACA,KAAK,KAAK,GAAG;YACpB,IAAI,CAACK,mBAAmB;QAC1B;IACF;AACF"}
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.d.ts
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export declare const runInCleanSnapshot: <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
|
||||
14
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js
generated
vendored
Normal file
14
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "runInCleanSnapshot", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return runInCleanSnapshot;
|
||||
}
|
||||
});
|
||||
const _asynclocalstorage = require("../app-render/async-local-storage");
|
||||
const runInCleanSnapshot = (0, _asynclocalstorage.createSnapshot)();
|
||||
|
||||
//# sourceMappingURL=clean-async-snapshot-instance.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/clean-async-snapshot-instance.ts"],"sourcesContent":["import { createSnapshot } from '../app-render/async-local-storage'\n\nexport const runInCleanSnapshot: <R, TArgs extends any[]>(\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R = createSnapshot()\n"],"names":["runInCleanSnapshot","createSnapshot"],"mappings":";;;;+BAEaA;;;eAAAA;;;mCAFkB;AAExB,MAAMA,qBAGJC,IAAAA,iCAAc"}
|
||||
2
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.d.ts
generated
vendored
Normal file
2
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import { runInCleanSnapshot } from './clean-async-snapshot-instance';
|
||||
export { runInCleanSnapshot };
|
||||
14
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js
generated
vendored
Normal file
14
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
// Share the instance module in the next-shared layer
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "runInCleanSnapshot", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return _cleanasyncsnapshotinstance.runInCleanSnapshot;
|
||||
}
|
||||
});
|
||||
const _cleanasyncsnapshotinstance = require("./clean-async-snapshot-instance");
|
||||
|
||||
//# sourceMappingURL=clean-async-snapshot.external.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/clean-async-snapshot.external.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/clean-async-snapshot.external.ts"],"sourcesContent":["// Share the instance module in the next-shared layer\nimport { runInCleanSnapshot } from './clean-async-snapshot-instance' with { 'turbopack-transition': 'next-shared' }\n\nexport { runInCleanSnapshot }\n"],"names":["runInCleanSnapshot"],"mappings":"AAAA,qDAAqD;;;;;+BAG5CA;;;eAAAA,8CAAkB;;;4CAFQ"}
|
||||
25
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.d.ts
generated
vendored
Normal file
25
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.d.ts
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
import type { Segment as FlightRouterStateSegment } from './types';
|
||||
import type { ManifestNode } from '../../build/webpack/plugins/flight-manifest-plugin';
|
||||
import type { HeadData, LoadingModuleData } from '../../shared/lib/app-router-context.shared-runtime';
|
||||
import type { FallbackRouteParams } from '../request/fallback-params';
|
||||
export type RootTreePrefetch = {
|
||||
buildId: string;
|
||||
tree: TreePrefetch;
|
||||
head: HeadData;
|
||||
isHeadPartial: boolean;
|
||||
staleTime: number;
|
||||
};
|
||||
export type TreePrefetch = {
|
||||
segment: FlightRouterStateSegment;
|
||||
slots: null | {
|
||||
[parallelRouteKey: string]: TreePrefetch;
|
||||
};
|
||||
isRootLayout: boolean;
|
||||
};
|
||||
export type SegmentPrefetch = {
|
||||
buildId: string;
|
||||
rsc: React.ReactNode | null;
|
||||
loading: LoadingModuleData | Promise<LoadingModuleData>;
|
||||
isPartial: boolean;
|
||||
};
|
||||
export declare function collectSegmentData(shouldAssumePartialData: boolean, fullPageDataBuffer: Buffer, staleTime: number, clientModules: ManifestNode, serverConsumerManifest: any, fallbackRouteParams: FallbackRouteParams | null): Promise<Map<string, Buffer>>;
|
||||
267
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.js
generated
vendored
Normal file
267
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.js
generated
vendored
Normal file
@@ -0,0 +1,267 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "collectSegmentData", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return collectSegmentData;
|
||||
}
|
||||
});
|
||||
const _jsxruntime = require("react/jsx-runtime");
|
||||
const _clientedge = require("react-server-dom-webpack/client.edge");
|
||||
const _staticedge = require("react-server-dom-webpack/static.edge");
|
||||
const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper");
|
||||
const _scheduler = require("../../lib/scheduler");
|
||||
const _segmentvalueencoding = require("../../shared/lib/segment-cache/segment-value-encoding");
|
||||
const _createerrorhandler = require("./create-error-handler");
|
||||
function onSegmentPrerenderError(error) {
|
||||
const digest = (0, _createerrorhandler.getDigestForWellKnownError)(error);
|
||||
if (digest) {
|
||||
return digest;
|
||||
}
|
||||
// We don't need to log the errors because we would have already done that
|
||||
// when generating the original Flight stream for the whole page.
|
||||
}
|
||||
async function collectSegmentData(shouldAssumePartialData, fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest, fallbackRouteParams) {
|
||||
// Traverse the router tree and generate a prefetch response for each segment.
|
||||
// A mutable map to collect the results as we traverse the route tree.
|
||||
const resultMap = new Map();
|
||||
// Before we start, warm up the module cache by decoding the page data once.
|
||||
// Then we can assume that any remaining async tasks that occur the next time
|
||||
// are due to hanging promises caused by dynamic data access. Note we only
|
||||
// have to do this once per page, not per individual segment.
|
||||
//
|
||||
try {
|
||||
await (0, _clientedge.createFromReadableStream)((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer), {
|
||||
serverConsumerManifest
|
||||
});
|
||||
await (0, _scheduler.waitAtLeastOneReactRenderTask)();
|
||||
} catch {}
|
||||
// Create an abort controller that we'll use to stop the stream.
|
||||
const abortController = new AbortController();
|
||||
const onCompletedProcessingRouteTree = async ()=>{
|
||||
// Since all we're doing is decoding and re-encoding a cached prerender, if
|
||||
// serializing the stream takes longer than a microtask, it must because of
|
||||
// hanging promises caused by dynamic data.
|
||||
await (0, _scheduler.waitAtLeastOneReactRenderTask)();
|
||||
abortController.abort();
|
||||
};
|
||||
// Generate a stream for the route tree prefetch. While we're walking the
|
||||
// tree, we'll also spawn additional tasks to generate the segment prefetches.
|
||||
// The promises for these tasks are pushed to a mutable array that we will
|
||||
// await once the route tree is fully rendered.
|
||||
const segmentTasks = [];
|
||||
const { prelude: treeStream } = await (0, _staticedge.unstable_prerender)(// RootTreePrefetch is not a valid return type for a React component, but
|
||||
// we need to use a component so that when we decode the original stream
|
||||
// inside of it, the side effects are transferred to the new stream.
|
||||
// @ts-expect-error
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(PrefetchTreeData, {
|
||||
shouldAssumePartialData: shouldAssumePartialData,
|
||||
fullPageDataBuffer: fullPageDataBuffer,
|
||||
fallbackRouteParams: fallbackRouteParams,
|
||||
serverConsumerManifest: serverConsumerManifest,
|
||||
clientModules: clientModules,
|
||||
staleTime: staleTime,
|
||||
segmentTasks: segmentTasks,
|
||||
onCompletedProcessingRouteTree: onCompletedProcessingRouteTree
|
||||
}), clientModules, {
|
||||
signal: abortController.signal,
|
||||
onError: onSegmentPrerenderError
|
||||
});
|
||||
// Write the route tree to a special `/_tree` segment.
|
||||
const treeBuffer = await (0, _nodewebstreamshelper.streamToBuffer)(treeStream);
|
||||
resultMap.set('/_tree', treeBuffer);
|
||||
// Now that we've finished rendering the route tree, all the segment tasks
|
||||
// should have been spawned. Await them in parallel and write the segment
|
||||
// prefetches to the result map.
|
||||
for (const [segmentPath, buffer] of (await Promise.all(segmentTasks))){
|
||||
resultMap.set(segmentPath, buffer);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
async function PrefetchTreeData({ shouldAssumePartialData, fullPageDataBuffer, fallbackRouteParams, serverConsumerManifest, clientModules, staleTime, segmentTasks, onCompletedProcessingRouteTree }) {
|
||||
// We're currently rendering a Flight response for the route tree prefetch.
|
||||
// Inside this component, decode the Flight stream for the whole page. This is
|
||||
// a hack to transfer the side effects from the original Flight stream (e.g.
|
||||
// Float preloads) onto the Flight stream for the tree prefetch.
|
||||
// TODO: React needs a better way to do this. Needed for Server Actions, too.
|
||||
const initialRSCPayload = await (0, _clientedge.createFromReadableStream)(createUnclosingPrefetchStream((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer)), {
|
||||
serverConsumerManifest
|
||||
});
|
||||
const buildId = initialRSCPayload.b;
|
||||
// FlightDataPath is an unsound type, hence the additional checks.
|
||||
const flightDataPaths = initialRSCPayload.f;
|
||||
if (flightDataPaths.length !== 1 && flightDataPaths[0].length !== 3) {
|
||||
console.error('Internal Next.js error: InitialRSCPayload does not match the expected ' + 'shape for a prerendered page during segment prefetch generation.');
|
||||
return null;
|
||||
}
|
||||
const flightRouterState = flightDataPaths[0][0];
|
||||
const seedData = flightDataPaths[0][1];
|
||||
const head = flightDataPaths[0][2];
|
||||
// Compute the route metadata tree by traversing the FlightRouterState. As we
|
||||
// walk the tree, we will also spawn a task to produce a prefetch response for
|
||||
// each segment.
|
||||
const tree = collectSegmentDataImpl(shouldAssumePartialData, flightRouterState, buildId, seedData, fallbackRouteParams, fullPageDataBuffer, clientModules, serverConsumerManifest, _segmentvalueencoding.ROOT_SEGMENT_KEY, segmentTasks);
|
||||
const isHeadPartial = shouldAssumePartialData || await isPartialRSCData(head, clientModules);
|
||||
// Notify the abort controller that we're done processing the route tree.
|
||||
// Anything async that happens after this point must be due to hanging
|
||||
// promises in the original stream.
|
||||
onCompletedProcessingRouteTree();
|
||||
// Render the route tree to a special `/_tree` segment.
|
||||
const treePrefetch = {
|
||||
buildId,
|
||||
tree,
|
||||
head,
|
||||
isHeadPartial,
|
||||
staleTime
|
||||
};
|
||||
return treePrefetch;
|
||||
}
|
||||
function collectSegmentDataImpl(shouldAssumePartialData, route, buildId, seedData, fallbackRouteParams, fullPageDataBuffer, clientModules, serverConsumerManifest, key, segmentTasks) {
|
||||
// Metadata about the segment. Sent as part of the tree prefetch. Null if
|
||||
// there are no children.
|
||||
let slotMetadata = null;
|
||||
const children = route[1];
|
||||
const seedDataChildren = seedData !== null ? seedData[2] : null;
|
||||
for(const parallelRouteKey in children){
|
||||
const childRoute = children[parallelRouteKey];
|
||||
const childSegment = childRoute[0];
|
||||
const childSeedData = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null;
|
||||
const childKey = (0, _segmentvalueencoding.encodeChildSegmentKey)(key, parallelRouteKey, Array.isArray(childSegment) && fallbackRouteParams !== null ? encodeSegmentWithPossibleFallbackParam(childSegment, fallbackRouteParams) : (0, _segmentvalueencoding.encodeSegment)(childSegment));
|
||||
const childTree = collectSegmentDataImpl(shouldAssumePartialData, childRoute, buildId, childSeedData, fallbackRouteParams, fullPageDataBuffer, clientModules, serverConsumerManifest, childKey, segmentTasks);
|
||||
if (slotMetadata === null) {
|
||||
slotMetadata = {};
|
||||
}
|
||||
slotMetadata[parallelRouteKey] = childTree;
|
||||
}
|
||||
if (seedData !== null) {
|
||||
// Spawn a task to write the segment data to a new Flight stream.
|
||||
segmentTasks.push(// Since we're already in the middle of a render, wait until after the
|
||||
// current task to escape the current rendering context.
|
||||
(0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>renderSegmentPrefetch(shouldAssumePartialData, buildId, seedData, key, clientModules)));
|
||||
} else {
|
||||
// This segment does not have any seed data. Skip generating a prefetch
|
||||
// response for it. We'll still include it in the route tree, though.
|
||||
// TODO: We should encode in the route tree whether a segment is missing
|
||||
// so we don't attempt to fetch it for no reason. As of now this shouldn't
|
||||
// ever happen in practice, though.
|
||||
}
|
||||
// Metadata about the segment. Sent to the client as part of the
|
||||
// tree prefetch.
|
||||
return {
|
||||
segment: route[0],
|
||||
slots: slotMetadata,
|
||||
isRootLayout: route[4] === true
|
||||
};
|
||||
}
|
||||
function encodeSegmentWithPossibleFallbackParam(segment, fallbackRouteParams) {
|
||||
const name = segment[0];
|
||||
if (!fallbackRouteParams.has(name)) {
|
||||
// Normal case. No matching fallback parameter.
|
||||
return (0, _segmentvalueencoding.encodeSegment)(segment);
|
||||
}
|
||||
// This segment includes a fallback parameter. During prerendering, a random
|
||||
// placeholder value was used; however, for segment prefetches, we need the
|
||||
// segment path to be predictable so the server can create a rewrite for it.
|
||||
// So, replace the placeholder segment value with a "template" string,
|
||||
// e.g. `[name]`.
|
||||
// TODO: This will become a bit cleaner once remove route parameters from the
|
||||
// server response, and instead add them to the segment keys on the client.
|
||||
// Instead of a string replacement, like we do here, route params will always
|
||||
// be encoded in separate step from the rest of the segment, not just in the
|
||||
// case of fallback params.
|
||||
const encodedSegment = (0, _segmentvalueencoding.encodeSegment)(segment);
|
||||
const lastIndex = encodedSegment.lastIndexOf('$');
|
||||
const encodedFallbackSegment = // NOTE: This is guaranteed not to clash with the rest of the segment
|
||||
// because non-simple characters (including [ and ]) trigger a base
|
||||
// 64 encoding.
|
||||
encodedSegment.substring(0, lastIndex + 1) + `[${name}]`;
|
||||
return encodedFallbackSegment;
|
||||
}
|
||||
async function renderSegmentPrefetch(shouldAssumePartialData, buildId, seedData, key, clientModules) {
|
||||
// Render the segment data to a stream.
|
||||
// In the future, this is where we can include additional metadata, like the
|
||||
// stale time and cache tags.
|
||||
const rsc = seedData[1];
|
||||
const loading = seedData[3];
|
||||
const segmentPrefetch = {
|
||||
buildId,
|
||||
rsc,
|
||||
loading,
|
||||
isPartial: shouldAssumePartialData || await isPartialRSCData(rsc, clientModules)
|
||||
};
|
||||
// Since all we're doing is decoding and re-encoding a cached prerender, if
|
||||
// it takes longer than a microtask, it must because of hanging promises
|
||||
// caused by dynamic data. Abort the stream at the end of the current task.
|
||||
const abortController = new AbortController();
|
||||
(0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>abortController.abort());
|
||||
const { prelude: segmentStream } = await (0, _staticedge.unstable_prerender)(segmentPrefetch, clientModules, {
|
||||
signal: abortController.signal,
|
||||
onError: onSegmentPrerenderError
|
||||
});
|
||||
const segmentBuffer = await (0, _nodewebstreamshelper.streamToBuffer)(segmentStream);
|
||||
if (key === _segmentvalueencoding.ROOT_SEGMENT_KEY) {
|
||||
return [
|
||||
'/_index',
|
||||
segmentBuffer
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
key,
|
||||
segmentBuffer
|
||||
];
|
||||
}
|
||||
}
|
||||
async function isPartialRSCData(rsc, clientModules) {
|
||||
// We can determine if a segment contains only partial data if it takes longer
|
||||
// than a task to encode, because dynamic data is encoded as an infinite
|
||||
// promise. We must do this in a separate Flight prerender from the one that
|
||||
// actually generates the prefetch stream because we need to include
|
||||
// `isPartial` in the stream itself.
|
||||
let isPartial = false;
|
||||
const abortController = new AbortController();
|
||||
(0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>{
|
||||
// If we haven't yet finished the outer task, then it must be because we
|
||||
// accessed dynamic data.
|
||||
isPartial = true;
|
||||
abortController.abort();
|
||||
});
|
||||
await (0, _staticedge.unstable_prerender)(rsc, clientModules, {
|
||||
signal: abortController.signal,
|
||||
onError () {}
|
||||
});
|
||||
return isPartial;
|
||||
}
|
||||
function createUnclosingPrefetchStream(originalFlightStream) {
|
||||
// When PPR is enabled, prefetch streams may contain references that never
|
||||
// resolve, because that's how we encode dynamic data access. In the decoded
|
||||
// object returned by the Flight client, these are reified into hanging
|
||||
// promises that suspend during render, which is effectively what we want.
|
||||
// The UI resolves when it switches to the dynamic data stream
|
||||
// (via useDeferredValue(dynamic, static)).
|
||||
//
|
||||
// However, the Flight implementation currently errors if the server closes
|
||||
// the response before all the references are resolved. As a cheat to work
|
||||
// around this, we wrap the original stream in a new stream that never closes,
|
||||
// and therefore doesn't error.
|
||||
const reader = originalFlightStream.getReader();
|
||||
return new ReadableStream({
|
||||
async pull (controller) {
|
||||
while(true){
|
||||
const { done, value } = await reader.read();
|
||||
if (!done) {
|
||||
// Pass to the target stream and keep consuming the Flight response
|
||||
// from the server.
|
||||
controller.enqueue(value);
|
||||
continue;
|
||||
}
|
||||
// The server stream has closed. Exit, but intentionally do not close
|
||||
// the target stream.
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=collect-segment-data.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/collect-segment-data.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
9
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.d.ts
generated
vendored
Normal file
9
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.d.ts
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import React from 'react';
|
||||
import type { AppRenderContext } from './app-render';
|
||||
export declare function createComponentStylesAndScripts({ filePath, getComponent, injectedCSS, injectedJS, ctx, }: {
|
||||
filePath: string;
|
||||
getComponent: () => any;
|
||||
injectedCSS: Set<string>;
|
||||
injectedJS: Set<string>;
|
||||
ctx: AppRenderContext;
|
||||
}): Promise<[React.ComponentType<any>, React.ReactNode, React.ReactNode]>;
|
||||
38
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js
generated
vendored
Normal file
38
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "createComponentStylesAndScripts", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return createComponentStylesAndScripts;
|
||||
}
|
||||
});
|
||||
const _jsxruntime = require("react/jsx-runtime");
|
||||
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
||||
const _interopdefault = require("./interop-default");
|
||||
const _getcssinlinedlinktags = require("./get-css-inlined-link-tags");
|
||||
const _getassetquerystring = require("./get-asset-query-string");
|
||||
const _encodeuripath = require("../../shared/lib/encode-uri-path");
|
||||
const _rendercssresource = require("./render-css-resource");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
async function createComponentStylesAndScripts({ filePath, getComponent, injectedCSS, injectedJS, ctx }) {
|
||||
const { styles: entryCssFiles, scripts: jsHrefs } = (0, _getcssinlinedlinktags.getLinkAndScriptTags)(ctx.clientReferenceManifest, filePath, injectedCSS, injectedJS);
|
||||
const styles = (0, _rendercssresource.renderCssResource)(entryCssFiles, ctx);
|
||||
const scripts = jsHrefs ? jsHrefs.map((href, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("script", {
|
||||
src: `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(href)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`,
|
||||
async: true
|
||||
}, `script-${index}`)) : null;
|
||||
const Comp = (0, _interopdefault.interopDefault)(await getComponent());
|
||||
return [
|
||||
Comp,
|
||||
styles,
|
||||
scripts
|
||||
];
|
||||
}
|
||||
|
||||
//# sourceMappingURL=create-component-styles-and-scripts.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/create-component-styles-and-scripts.tsx"],"sourcesContent":["import React from 'react'\nimport { interopDefault } from './interop-default'\nimport { getLinkAndScriptTags } from './get-css-inlined-link-tags'\nimport type { AppRenderContext } from './app-render'\nimport { getAssetQueryString } from './get-asset-query-string'\nimport { encodeURIPath } from '../../shared/lib/encode-uri-path'\nimport { renderCssResource } from './render-css-resource'\n\nexport async function createComponentStylesAndScripts({\n filePath,\n getComponent,\n injectedCSS,\n injectedJS,\n ctx,\n}: {\n filePath: string\n getComponent: () => any\n injectedCSS: Set<string>\n injectedJS: Set<string>\n ctx: AppRenderContext\n}): Promise<[React.ComponentType<any>, React.ReactNode, React.ReactNode]> {\n const { styles: entryCssFiles, scripts: jsHrefs } = getLinkAndScriptTags(\n ctx.clientReferenceManifest,\n filePath,\n injectedCSS,\n injectedJS\n )\n\n const styles = renderCssResource(entryCssFiles, ctx)\n\n const scripts = jsHrefs\n ? jsHrefs.map((href, index) => (\n <script\n src={`${ctx.assetPrefix}/_next/${encodeURIPath(\n href\n )}${getAssetQueryString(ctx, true)}`}\n async={true}\n key={`script-${index}`}\n />\n ))\n : null\n\n const Comp = interopDefault(await getComponent())\n\n return [Comp, styles, scripts]\n}\n"],"names":["createComponentStylesAndScripts","filePath","getComponent","injectedCSS","injectedJS","ctx","styles","entryCssFiles","scripts","jsHrefs","getLinkAndScriptTags","clientReferenceManifest","renderCssResource","map","href","index","script","src","assetPrefix","encodeURIPath","getAssetQueryString","async","Comp","interopDefault"],"mappings":";;;;+BAQsBA;;;eAAAA;;;;8DARJ;gCACa;uCACM;qCAED;+BACN;mCACI;;;;;;AAE3B,eAAeA,gCAAgC,EACpDC,QAAQ,EACRC,YAAY,EACZC,WAAW,EACXC,UAAU,EACVC,GAAG,EAOJ;IACC,MAAM,EAAEC,QAAQC,aAAa,EAAEC,SAASC,OAAO,EAAE,GAAGC,IAAAA,2CAAoB,EACtEL,IAAIM,uBAAuB,EAC3BV,UACAE,aACAC;IAGF,MAAME,SAASM,IAAAA,oCAAiB,EAACL,eAAeF;IAEhD,MAAMG,UAAUC,UACZA,QAAQI,GAAG,CAAC,CAACC,MAAMC,sBACjB,qBAACC;YACCC,KAAK,GAAGZ,IAAIa,WAAW,CAAC,OAAO,EAAEC,IAAAA,4BAAa,EAC5CL,QACEM,IAAAA,wCAAmB,EAACf,KAAK,OAAO;YACpCgB,OAAO;WACF,CAAC,OAAO,EAAEN,OAAO,KAG1B;IAEJ,MAAMO,OAAOC,IAAAA,8BAAc,EAAC,MAAMrB;IAElC,OAAO;QAACoB;QAAMhB;QAAQE;KAAQ;AAChC"}
|
||||
25
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.d.ts
generated
vendored
Normal file
25
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.d.ts
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
import type { CacheNodeSeedData, PreloadCallbacks } from './types';
|
||||
import React from 'react';
|
||||
import type { LoaderTree } from '../lib/app-dir-module';
|
||||
import type { AppRenderContext, GetDynamicParamFromSegment } from './app-render';
|
||||
import type { Params } from '../request/params';
|
||||
/**
|
||||
* Use the provided loader tree to create the React Component tree.
|
||||
*/
|
||||
export declare function createComponentTree(props: {
|
||||
loaderTree: LoaderTree;
|
||||
parentParams: Params;
|
||||
rootLayoutIncluded: boolean;
|
||||
injectedCSS: Set<string>;
|
||||
injectedJS: Set<string>;
|
||||
injectedFontPreloadTags: Set<string>;
|
||||
getMetadataReady: () => Promise<void>;
|
||||
getViewportReady: () => Promise<void>;
|
||||
ctx: AppRenderContext;
|
||||
missingSlots?: Set<string>;
|
||||
preloadCallbacks: PreloadCallbacks;
|
||||
authInterrupts: boolean;
|
||||
StreamingMetadata: React.ComponentType | null;
|
||||
StreamingMetadataOutlet: React.ComponentType;
|
||||
}): Promise<CacheNodeSeedData>;
|
||||
export declare function getRootParams(loaderTree: LoaderTree, getDynamicParamFromSegment: GetDynamicParamFromSegment): Params;
|
||||
697
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.js
generated
vendored
Normal file
697
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.js
generated
vendored
Normal file
@@ -0,0 +1,697 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
createComponentTree: null,
|
||||
getRootParams: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
createComponentTree: function() {
|
||||
return createComponentTree;
|
||||
},
|
||||
getRootParams: function() {
|
||||
return getRootParams;
|
||||
}
|
||||
});
|
||||
const _jsxruntime = require("react/jsx-runtime");
|
||||
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
||||
const _clientandserverreferences = require("../../lib/client-and-server-references");
|
||||
const _appdirmodule = require("../lib/app-dir-module");
|
||||
const _interopdefault = require("./interop-default");
|
||||
const _parseloadertree = require("./parse-loader-tree");
|
||||
const _createcomponentstylesandscripts = require("./create-component-styles-and-scripts");
|
||||
const _getlayerassets = require("./get-layer-assets");
|
||||
const _hasloadingcomponentintree = require("./has-loading-component-in-tree");
|
||||
const _patchfetch = require("../lib/patch-fetch");
|
||||
const _parallelroutedefault = require("../../client/components/parallel-route-default");
|
||||
const _tracer = require("../lib/trace/tracer");
|
||||
const _constants = require("../lib/trace/constants");
|
||||
const _staticgenerationbailout = require("../../client/components/static-generation-bailout");
|
||||
const _workunitasyncstorageexternal = require("./work-unit-async-storage.external");
|
||||
const _metadataconstants = require("../../lib/metadata/metadata-constants");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function createComponentTree(props) {
|
||||
return (0, _tracer.getTracer)().trace(_constants.NextNodeServerSpan.createComponentTree, {
|
||||
spanName: 'build component tree'
|
||||
}, ()=>createComponentTreeInternal(props));
|
||||
}
|
||||
function errorMissingDefaultExport(pagePath, convention) {
|
||||
const normalizedPagePath = pagePath === '/' ? '' : pagePath;
|
||||
throw Object.defineProperty(new Error(`The default export is not a React Component in "${normalizedPagePath}/${convention}"`), "__NEXT_ERROR_CODE", {
|
||||
value: "E45",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const cacheNodeKey = 'c';
|
||||
async function createComponentTreeInternal({ loaderTree: tree, parentParams, rootLayoutIncluded, injectedCSS, injectedJS, injectedFontPreloadTags, getViewportReady, getMetadataReady, ctx, missingSlots, preloadCallbacks, authInterrupts, StreamingMetadata, StreamingMetadataOutlet }) {
|
||||
const { renderOpts: { nextConfigOutput, experimental }, workStore, componentMod: { HTTPAccessFallbackBoundary, LayoutRouter, RenderFromTemplateContext, OutletBoundary, ClientPageRoot, ClientSegmentRoot, createServerSearchParamsForServerPage, createPrerenderSearchParamsForClientPage, createServerParamsForServerSegment, createPrerenderParamsForClientSegment, serverHooks: { DynamicServerError }, Postpone }, pagePath, getDynamicParamFromSegment, isPrefetch, query } = ctx;
|
||||
const { page, layoutOrPagePath, segment, modules, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree);
|
||||
const { layout, template, error, loading, 'not-found': notFound, forbidden, unauthorized } = modules;
|
||||
const injectedCSSWithCurrentLayout = new Set(injectedCSS);
|
||||
const injectedJSWithCurrentLayout = new Set(injectedJS);
|
||||
const injectedFontPreloadTagsWithCurrentLayout = new Set(injectedFontPreloadTags);
|
||||
const layerAssets = (0, _getlayerassets.getLayerAssets)({
|
||||
preloadCallbacks,
|
||||
ctx,
|
||||
layoutOrPagePath,
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout,
|
||||
injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout
|
||||
});
|
||||
const [Template, templateStyles, templateScripts] = template ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: template[1],
|
||||
getComponent: template[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [
|
||||
_react.default.Fragment
|
||||
];
|
||||
const [ErrorComponent, errorStyles, errorScripts] = error ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: error[1],
|
||||
getComponent: error[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [];
|
||||
const [Loading, loadingStyles, loadingScripts] = loading ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: loading[1],
|
||||
getComponent: loading[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [];
|
||||
const isLayout = typeof layout !== 'undefined';
|
||||
const isPage = typeof page !== 'undefined';
|
||||
const { mod: layoutOrPageMod, modType } = await (0, _tracer.getTracer)().trace(_constants.NextNodeServerSpan.getLayoutOrPageModule, {
|
||||
hideSpan: !(isLayout || isPage),
|
||||
spanName: 'resolve segment modules',
|
||||
attributes: {
|
||||
'next.segment': segment
|
||||
}
|
||||
}, ()=>(0, _appdirmodule.getLayoutOrPageModule)(tree));
|
||||
/**
|
||||
* Checks if the current segment is a root layout.
|
||||
*/ const rootLayoutAtThisLevel = isLayout && !rootLayoutIncluded;
|
||||
/**
|
||||
* Checks if the current segment or any level above it has a root layout.
|
||||
*/ const rootLayoutIncludedAtThisLevelOrAbove = rootLayoutIncluded || rootLayoutAtThisLevel;
|
||||
const [NotFound, notFoundStyles] = notFound ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: notFound[1],
|
||||
getComponent: notFound[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [];
|
||||
const [Forbidden, forbiddenStyles] = authInterrupts && forbidden ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: forbidden[1],
|
||||
getComponent: forbidden[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [];
|
||||
const [Unauthorized, unauthorizedStyles] = authInterrupts && unauthorized ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
||||
ctx,
|
||||
filePath: unauthorized[1],
|
||||
getComponent: unauthorized[0],
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout
|
||||
}) : [];
|
||||
let dynamic = layoutOrPageMod == null ? void 0 : layoutOrPageMod.dynamic;
|
||||
if (nextConfigOutput === 'export') {
|
||||
if (!dynamic || dynamic === 'auto') {
|
||||
dynamic = 'error';
|
||||
} else if (dynamic === 'force-dynamic') {
|
||||
// force-dynamic is always incompatible with 'export'. We must interrupt the build
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Page with \`dynamic = "force-dynamic"\` couldn't be exported. \`output: "export"\` requires all pages be renderable statically because there is no runtime server to dynamically render routes in this output format. Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`), "__NEXT_ERROR_CODE", {
|
||||
value: "E527",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
if (typeof dynamic === 'string') {
|
||||
// the nested most config wins so we only force-static
|
||||
// if it's configured above any parent that configured
|
||||
// otherwise
|
||||
if (dynamic === 'error') {
|
||||
workStore.dynamicShouldError = true;
|
||||
} else if (dynamic === 'force-dynamic') {
|
||||
workStore.forceDynamic = true;
|
||||
// TODO: (PPR) remove this bailout once PPR is the default
|
||||
if (workStore.isStaticGeneration && !experimental.isRoutePPREnabled) {
|
||||
// If the postpone API isn't available, we can't postpone the render and
|
||||
// therefore we can't use the dynamic API.
|
||||
const err = Object.defineProperty(new DynamicServerError(`Page with \`dynamic = "force-dynamic"\` won't be rendered statically.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E585",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
workStore.dynamicUsageDescription = err.message;
|
||||
workStore.dynamicUsageStack = err.stack;
|
||||
throw err;
|
||||
}
|
||||
} else {
|
||||
workStore.dynamicShouldError = false;
|
||||
workStore.forceStatic = dynamic === 'force-static';
|
||||
}
|
||||
}
|
||||
if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.fetchCache) === 'string') {
|
||||
workStore.fetchCache = layoutOrPageMod == null ? void 0 : layoutOrPageMod.fetchCache;
|
||||
}
|
||||
if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate) !== 'undefined') {
|
||||
(0, _patchfetch.validateRevalidate)(layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate, workStore.route);
|
||||
}
|
||||
if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate) === 'number') {
|
||||
const defaultRevalidate = layoutOrPageMod.revalidate;
|
||||
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
if (workUnitStore) {
|
||||
if (workUnitStore.type === 'prerender' || workUnitStore.type === 'prerender-legacy' || workUnitStore.type === 'prerender-ppr' || workUnitStore.type === 'cache') {
|
||||
if (workUnitStore.revalidate > defaultRevalidate) {
|
||||
workUnitStore.revalidate = defaultRevalidate;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!workStore.forceStatic && workStore.isStaticGeneration && defaultRevalidate === 0 && // If the postpone API isn't available, we can't postpone the render and
|
||||
// therefore we can't use the dynamic API.
|
||||
!experimental.isRoutePPREnabled) {
|
||||
const dynamicUsageDescription = `revalidate: 0 configured ${segment}`;
|
||||
workStore.dynamicUsageDescription = dynamicUsageDescription;
|
||||
throw Object.defineProperty(new DynamicServerError(dynamicUsageDescription), "__NEXT_ERROR_CODE", {
|
||||
value: "E394",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
const isStaticGeneration = workStore.isStaticGeneration;
|
||||
// Assume the segment we're rendering contains only partial data if PPR is
|
||||
// enabled and this is a statically generated response. This is used by the
|
||||
// client Segment Cache after a prefetch to determine if it can skip the
|
||||
// second request to fill in the dynamic data.
|
||||
//
|
||||
// It's OK for this to be `true` when the data is actually fully static, but
|
||||
// it's not OK for this to be `false` when the data possibly contains holes.
|
||||
// Although the value here is overly pessimistic, for prefetches, it will be
|
||||
// replaced by a more specific value when the data is later processed into
|
||||
// per-segment responses (see collect-segment-data.tsx)
|
||||
//
|
||||
// For dynamic requests, this must always be `false` because dynamic responses
|
||||
// are never partial.
|
||||
const isPossiblyPartialResponse = isStaticGeneration && experimental.isRoutePPREnabled === true;
|
||||
const LayoutOrPage = layoutOrPageMod ? (0, _interopdefault.interopDefault)(layoutOrPageMod) : undefined;
|
||||
/**
|
||||
* The React Component to render.
|
||||
*/ let MaybeComponent = LayoutOrPage;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const { isValidElementType } = require('next/dist/compiled/react-is');
|
||||
if (typeof MaybeComponent !== 'undefined' && !isValidElementType(MaybeComponent)) {
|
||||
errorMissingDefaultExport(pagePath, modType ?? 'page');
|
||||
}
|
||||
if (typeof ErrorComponent !== 'undefined' && !isValidElementType(ErrorComponent)) {
|
||||
errorMissingDefaultExport(pagePath, 'error');
|
||||
}
|
||||
if (typeof Loading !== 'undefined' && !isValidElementType(Loading)) {
|
||||
errorMissingDefaultExport(pagePath, 'loading');
|
||||
}
|
||||
if (typeof NotFound !== 'undefined' && !isValidElementType(NotFound)) {
|
||||
errorMissingDefaultExport(pagePath, 'not-found');
|
||||
}
|
||||
if (typeof Forbidden !== 'undefined' && !isValidElementType(Forbidden)) {
|
||||
errorMissingDefaultExport(pagePath, 'forbidden');
|
||||
}
|
||||
if (typeof Unauthorized !== 'undefined' && !isValidElementType(Unauthorized)) {
|
||||
errorMissingDefaultExport(pagePath, 'unauthorized');
|
||||
}
|
||||
}
|
||||
// Handle dynamic segment params.
|
||||
const segmentParam = getDynamicParamFromSegment(segment);
|
||||
// Create object holding the parent params and current params
|
||||
let currentParams = parentParams;
|
||||
if (segmentParam && segmentParam.value !== null) {
|
||||
currentParams = {
|
||||
...parentParams,
|
||||
[segmentParam.param]: segmentParam.value
|
||||
};
|
||||
}
|
||||
// Resolve the segment param
|
||||
const actualSegment = segmentParam ? segmentParam.treeSegment : segment;
|
||||
const metadata = StreamingMetadata ? /*#__PURE__*/ (0, _jsxruntime.jsx)(StreamingMetadata, {}) : undefined;
|
||||
// Use the same condition to render metadataOutlet as metadata
|
||||
const metadataOutlet = StreamingMetadataOutlet ? /*#__PURE__*/ (0, _jsxruntime.jsx)(StreamingMetadataOutlet, {}) : undefined;
|
||||
const notFoundElement = NotFound ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(NotFound, {}),
|
||||
notFoundStyles
|
||||
]
|
||||
}) : undefined;
|
||||
const forbiddenElement = Forbidden ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(Forbidden, {}),
|
||||
forbiddenStyles
|
||||
]
|
||||
}) : undefined;
|
||||
const unauthorizedElement = Unauthorized ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(Unauthorized, {}),
|
||||
unauthorizedStyles
|
||||
]
|
||||
}) : undefined;
|
||||
// TODO: Combine this `map` traversal with the loop below that turns the array
|
||||
// into an object.
|
||||
const parallelRouteMap = await Promise.all(Object.keys(parallelRoutes).map(async (parallelRouteKey)=>{
|
||||
const isChildrenRouteKey = parallelRouteKey === 'children';
|
||||
const parallelRoute = parallelRoutes[parallelRouteKey];
|
||||
const notFoundComponent = isChildrenRouteKey ? notFoundElement : undefined;
|
||||
const forbiddenComponent = isChildrenRouteKey ? forbiddenElement : undefined;
|
||||
const unauthorizedComponent = isChildrenRouteKey ? unauthorizedElement : undefined;
|
||||
// if we're prefetching and that there's a Loading component, we bail out
|
||||
// otherwise we keep rendering for the prefetch.
|
||||
// We also want to bail out if there's no Loading component in the tree.
|
||||
let childCacheNodeSeedData = null;
|
||||
if (// Before PPR, the way instant navigations work in Next.js is we
|
||||
// prefetch everything up to the first route segment that defines a
|
||||
// loading.tsx boundary. (We do the same if there's no loading
|
||||
// boundary in the entire tree, because we don't want to prefetch too
|
||||
// much) The rest of the tree is deferred until the actual navigation.
|
||||
// It does not take into account whether the data is dynamic — even if
|
||||
// the tree is completely static, it will still defer everything
|
||||
// inside the loading boundary.
|
||||
//
|
||||
// This behavior predates PPR and is only relevant if the
|
||||
// PPR flag is not enabled.
|
||||
isPrefetch && (Loading || !(0, _hasloadingcomponentintree.hasLoadingComponentInTree)(parallelRoute)) && // The approach with PPR is different — loading.tsx behaves like a
|
||||
// regular Suspense boundary and has no special behavior.
|
||||
//
|
||||
// With PPR, we prefetch as deeply as possible, and only defer when
|
||||
// dynamic data is accessed. If so, we only defer the nearest parent
|
||||
// Suspense boundary of the dynamic data access, regardless of whether
|
||||
// the boundary is defined by loading.tsx or a normal <Suspense>
|
||||
// component in userspace.
|
||||
//
|
||||
// NOTE: In practice this usually means we'll end up prefetching more
|
||||
// than we were before PPR, which may or may not be considered a
|
||||
// performance regression by some apps. The plan is to address this
|
||||
// before General Availability of PPR by introducing granular
|
||||
// per-segment fetching, so we can reuse as much of the tree as
|
||||
// possible during both prefetches and dynamic navigations. But during
|
||||
// the beta period, we should be clear about this trade off in our
|
||||
// communications.
|
||||
!experimental.isRoutePPREnabled) {
|
||||
// Don't prefetch this child. This will trigger a lazy fetch by the
|
||||
// client router.
|
||||
} else {
|
||||
// Create the child component
|
||||
if (process.env.NODE_ENV === 'development' && missingSlots) {
|
||||
var _parsedTree_layoutOrPagePath;
|
||||
// When we detect the default fallback (which triggers a 404), we collect the missing slots
|
||||
// to provide more helpful debug information during development mode.
|
||||
const parsedTree = (0, _parseloadertree.parseLoaderTree)(parallelRoute);
|
||||
if ((_parsedTree_layoutOrPagePath = parsedTree.layoutOrPagePath) == null ? void 0 : _parsedTree_layoutOrPagePath.endsWith(_parallelroutedefault.PARALLEL_ROUTE_DEFAULT_PATH)) {
|
||||
missingSlots.add(parallelRouteKey);
|
||||
}
|
||||
}
|
||||
const seedData = await createComponentTreeInternal({
|
||||
loaderTree: parallelRoute,
|
||||
parentParams: currentParams,
|
||||
rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove,
|
||||
injectedCSS: injectedCSSWithCurrentLayout,
|
||||
injectedJS: injectedJSWithCurrentLayout,
|
||||
injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout,
|
||||
// `getMetadataReady` and `getViewportReady` are used to conditionally throw. In the case of parallel routes we will have more than one page
|
||||
// but we only want to throw on the first one.
|
||||
getMetadataReady: isChildrenRouteKey ? getMetadataReady : ()=>Promise.resolve(),
|
||||
getViewportReady: isChildrenRouteKey ? getViewportReady : ()=>Promise.resolve(),
|
||||
ctx,
|
||||
missingSlots,
|
||||
preloadCallbacks,
|
||||
authInterrupts,
|
||||
StreamingMetadata: isChildrenRouteKey ? StreamingMetadata : null,
|
||||
// `StreamingMetadataOutlet` is used to conditionally throw. In the case of parallel routes we will have more than one page
|
||||
// but we only want to throw on the first one.
|
||||
StreamingMetadataOutlet: isChildrenRouteKey ? StreamingMetadataOutlet : null
|
||||
});
|
||||
childCacheNodeSeedData = seedData;
|
||||
}
|
||||
// This is turned back into an object below.
|
||||
return [
|
||||
parallelRouteKey,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(LayoutRouter, {
|
||||
parallelRouterKey: parallelRouteKey,
|
||||
// TODO-APP: Add test for loading returning `undefined`. This currently can't be tested as the `webdriver()` tab will wait for the full page to load before returning.
|
||||
error: ErrorComponent,
|
||||
errorStyles: errorStyles,
|
||||
errorScripts: errorScripts,
|
||||
template: /*#__PURE__*/ (0, _jsxruntime.jsx)(Template, {
|
||||
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(RenderFromTemplateContext, {})
|
||||
}),
|
||||
templateStyles: templateStyles,
|
||||
templateScripts: templateScripts,
|
||||
notFound: notFoundComponent,
|
||||
forbidden: forbiddenComponent,
|
||||
unauthorized: unauthorizedComponent
|
||||
}),
|
||||
childCacheNodeSeedData
|
||||
];
|
||||
}));
|
||||
// Convert the parallel route map into an object after all promises have been resolved.
|
||||
let parallelRouteProps = {};
|
||||
let parallelRouteCacheNodeSeedData = {};
|
||||
for (const parallelRoute of parallelRouteMap){
|
||||
const [parallelRouteKey, parallelRouteProp, flightData] = parallelRoute;
|
||||
parallelRouteProps[parallelRouteKey] = parallelRouteProp;
|
||||
parallelRouteCacheNodeSeedData[parallelRouteKey] = flightData;
|
||||
}
|
||||
const loadingData = Loading ? [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(Loading, {}, "l"),
|
||||
loadingStyles,
|
||||
loadingScripts
|
||||
] : null;
|
||||
// When the segment does not have a layout or page we still have to add the layout router to ensure the path holds the loading component
|
||||
if (!MaybeComponent) {
|
||||
return [
|
||||
actualSegment,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
parallelRouteProps.children
|
||||
]
|
||||
}, cacheNodeKey),
|
||||
parallelRouteCacheNodeSeedData,
|
||||
loadingData,
|
||||
isPossiblyPartialResponse
|
||||
];
|
||||
}
|
||||
const Component = MaybeComponent;
|
||||
// If force-dynamic is used and the current render supports postponing, we
|
||||
// replace it with a node that will postpone the render. This ensures that the
|
||||
// postpone is invoked during the react render phase and not during the next
|
||||
// render phase.
|
||||
// @TODO this does not actually do what it seems like it would or should do. The idea is that
|
||||
// if we are rendering in a force-dynamic mode and we can postpone we should only make the segments
|
||||
// that ask for force-dynamic to be dynamic, allowing other segments to still prerender. However
|
||||
// because this comes after the children traversal and the static generation store is mutated every segment
|
||||
// along the parent path of a force-dynamic segment will hit this condition effectively making the entire
|
||||
// render force-dynamic. We should refactor this function so that we can correctly track which segments
|
||||
// need to be dynamic
|
||||
if (workStore.isStaticGeneration && workStore.forceDynamic && experimental.isRoutePPREnabled) {
|
||||
return [
|
||||
actualSegment,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(Postpone, {
|
||||
reason: 'dynamic = "force-dynamic" was used',
|
||||
route: workStore.route
|
||||
}),
|
||||
layerAssets
|
||||
]
|
||||
}, cacheNodeKey),
|
||||
parallelRouteCacheNodeSeedData,
|
||||
loadingData,
|
||||
true
|
||||
];
|
||||
}
|
||||
const isClientComponent = (0, _clientandserverreferences.isClientReference)(layoutOrPageMod);
|
||||
if (process.env.NODE_ENV === 'development' && 'params' in parallelRouteProps) {
|
||||
// @TODO consider making this an error and running the check in build as well
|
||||
console.error(`"params" is a reserved prop in Layouts and Pages and cannot be used as the name of a parallel route in ${segment}`);
|
||||
}
|
||||
if (isPage) {
|
||||
const PageComponent = Component;
|
||||
// Assign searchParams to props if this is a page
|
||||
let pageElement;
|
||||
if (isClientComponent) {
|
||||
if (isStaticGeneration) {
|
||||
const promiseOfParams = createPrerenderParamsForClientSegment(currentParams, workStore);
|
||||
const promiseOfSearchParams = createPrerenderSearchParamsForClientPage(workStore);
|
||||
pageElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(ClientPageRoot, {
|
||||
Component: PageComponent,
|
||||
searchParams: query,
|
||||
params: currentParams,
|
||||
promises: [
|
||||
promiseOfSearchParams,
|
||||
promiseOfParams
|
||||
]
|
||||
});
|
||||
} else {
|
||||
pageElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(ClientPageRoot, {
|
||||
Component: PageComponent,
|
||||
searchParams: query,
|
||||
params: currentParams
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// If we are passing params to a server component Page we need to track
|
||||
// their usage in case the current render mode tracks dynamic API usage.
|
||||
const params = createServerParamsForServerSegment(currentParams, workStore);
|
||||
// TODO(useCache): Should we use this trick also if dynamicIO is enabled,
|
||||
// instead of relying on the searchParams being a hanging promise?
|
||||
if (!experimental.dynamicIO && (0, _clientandserverreferences.isUseCacheFunction)(PageComponent)) {
|
||||
const UseCachePageComponent = PageComponent;
|
||||
// The "use cache" wrapper takes care of converting this into an
|
||||
// erroring search params promise when passing it to the original
|
||||
// function.
|
||||
const searchParams = Promise.resolve({});
|
||||
pageElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(UseCachePageComponent, {
|
||||
params: params,
|
||||
searchParams: searchParams,
|
||||
$$isPageComponent: true
|
||||
});
|
||||
} else {
|
||||
// If we are passing searchParams to a server component Page we need to
|
||||
// track their usage in case the current render mode tracks dynamic API
|
||||
// usage.
|
||||
const searchParams = createServerSearchParamsForServerPage(query, workStore);
|
||||
pageElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(PageComponent, {
|
||||
params: params,
|
||||
searchParams: searchParams
|
||||
});
|
||||
}
|
||||
}
|
||||
return [
|
||||
actualSegment,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
pageElement,
|
||||
metadata,
|
||||
layerAssets,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsxs)(OutletBoundary, {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(MetadataOutlet, {
|
||||
ready: getViewportReady
|
||||
}),
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(MetadataOutlet, {
|
||||
ready: getMetadataReady
|
||||
}),
|
||||
metadataOutlet
|
||||
]
|
||||
})
|
||||
]
|
||||
}, cacheNodeKey),
|
||||
parallelRouteCacheNodeSeedData,
|
||||
loadingData,
|
||||
isPossiblyPartialResponse
|
||||
];
|
||||
} else {
|
||||
const SegmentComponent = Component;
|
||||
const isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot = rootLayoutAtThisLevel && 'children' in parallelRoutes && Object.keys(parallelRoutes).length > 1;
|
||||
let segmentNode;
|
||||
if (isClientComponent) {
|
||||
let clientSegment;
|
||||
if (isStaticGeneration) {
|
||||
const promiseOfParams = createPrerenderParamsForClientSegment(currentParams, workStore);
|
||||
clientSegment = /*#__PURE__*/ (0, _jsxruntime.jsx)(ClientSegmentRoot, {
|
||||
Component: SegmentComponent,
|
||||
slots: parallelRouteProps,
|
||||
params: currentParams,
|
||||
promise: promiseOfParams
|
||||
});
|
||||
} else {
|
||||
clientSegment = /*#__PURE__*/ (0, _jsxruntime.jsx)(ClientSegmentRoot, {
|
||||
Component: SegmentComponent,
|
||||
slots: parallelRouteProps,
|
||||
params: currentParams
|
||||
});
|
||||
}
|
||||
if (isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot) {
|
||||
let notfoundClientSegment;
|
||||
let forbiddenClientSegment;
|
||||
let unauthorizedClientSegment;
|
||||
// TODO-APP: This is a hack to support unmatched parallel routes, which will throw `notFound()`.
|
||||
// This ensures that a `HTTPAccessFallbackBoundary` is available for when that happens,
|
||||
// but it's not ideal, as it needlessly invokes the `NotFound` component and renders the `RootLayout` twice.
|
||||
// We should instead look into handling the fallback behavior differently in development mode so that it doesn't
|
||||
// rely on the `NotFound` behavior.
|
||||
notfoundClientSegment = createErrorBoundaryClientSegmentRoot({
|
||||
ErrorBoundaryComponent: NotFound,
|
||||
errorElement: notFoundElement,
|
||||
ClientSegmentRoot,
|
||||
layerAssets,
|
||||
SegmentComponent,
|
||||
currentParams
|
||||
});
|
||||
forbiddenClientSegment = createErrorBoundaryClientSegmentRoot({
|
||||
ErrorBoundaryComponent: Forbidden,
|
||||
errorElement: forbiddenElement,
|
||||
ClientSegmentRoot,
|
||||
layerAssets,
|
||||
SegmentComponent,
|
||||
currentParams
|
||||
});
|
||||
unauthorizedClientSegment = createErrorBoundaryClientSegmentRoot({
|
||||
ErrorBoundaryComponent: Unauthorized,
|
||||
errorElement: unauthorizedElement,
|
||||
ClientSegmentRoot,
|
||||
layerAssets,
|
||||
SegmentComponent,
|
||||
currentParams
|
||||
});
|
||||
if (notfoundClientSegment || forbiddenClientSegment || unauthorizedClientSegment) {
|
||||
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsxs)(HTTPAccessFallbackBoundary, {
|
||||
notFound: notfoundClientSegment,
|
||||
forbidden: forbiddenClientSegment,
|
||||
unauthorized: unauthorizedClientSegment,
|
||||
children: [
|
||||
layerAssets,
|
||||
clientSegment
|
||||
]
|
||||
}, cacheNodeKey);
|
||||
} else {
|
||||
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
clientSegment
|
||||
]
|
||||
}, cacheNodeKey);
|
||||
}
|
||||
} else {
|
||||
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
clientSegment
|
||||
]
|
||||
}, cacheNodeKey);
|
||||
}
|
||||
} else {
|
||||
const params = createServerParamsForServerSegment(currentParams, workStore);
|
||||
let serverSegment = /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentComponent, {
|
||||
...parallelRouteProps,
|
||||
params: params
|
||||
});
|
||||
if (isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot) {
|
||||
// TODO-APP: This is a hack to support unmatched parallel routes, which will throw `notFound()`.
|
||||
// This ensures that a `HTTPAccessFallbackBoundary` is available for when that happens,
|
||||
// but it's not ideal, as it needlessly invokes the `NotFound` component and renders the `RootLayout` twice.
|
||||
// We should instead look into handling the fallback behavior differently in development mode so that it doesn't
|
||||
// rely on the `NotFound` behavior.
|
||||
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsxs)(HTTPAccessFallbackBoundary, {
|
||||
notFound: NotFound ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsxs)(SegmentComponent, {
|
||||
params: params,
|
||||
children: [
|
||||
notFoundStyles,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(NotFound, {})
|
||||
]
|
||||
})
|
||||
]
|
||||
}) : undefined,
|
||||
children: [
|
||||
layerAssets,
|
||||
serverSegment
|
||||
]
|
||||
}, cacheNodeKey);
|
||||
} else {
|
||||
segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.default.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
serverSegment
|
||||
]
|
||||
}, cacheNodeKey);
|
||||
}
|
||||
}
|
||||
// For layouts we just render the component
|
||||
return [
|
||||
actualSegment,
|
||||
segmentNode,
|
||||
parallelRouteCacheNodeSeedData,
|
||||
loadingData,
|
||||
isPossiblyPartialResponse
|
||||
];
|
||||
}
|
||||
}
|
||||
async function MetadataOutlet({ ready }) {
|
||||
const r = ready();
|
||||
// We can avoid a extra microtask by unwrapping the instrumented promise directly if available.
|
||||
if (r.status === 'rejected') {
|
||||
throw r.value;
|
||||
} else if (r.status !== 'fulfilled') {
|
||||
await r;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
MetadataOutlet.displayName = _metadataconstants.OUTLET_BOUNDARY_NAME;
|
||||
function createErrorBoundaryClientSegmentRoot({ ErrorBoundaryComponent, errorElement, ClientSegmentRoot, layerAssets, SegmentComponent, currentParams }) {
|
||||
if (ErrorBoundaryComponent) {
|
||||
const notFoundParallelRouteProps = {
|
||||
children: errorElement
|
||||
};
|
||||
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||||
children: [
|
||||
layerAssets,
|
||||
/*#__PURE__*/ (0, _jsxruntime.jsx)(ClientSegmentRoot, {
|
||||
Component: SegmentComponent,
|
||||
slots: notFoundParallelRouteProps,
|
||||
params: currentParams
|
||||
})
|
||||
]
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function getRootParams(loaderTree, getDynamicParamFromSegment) {
|
||||
return getRootParamsImpl({}, loaderTree, getDynamicParamFromSegment);
|
||||
}
|
||||
function getRootParamsImpl(parentParams, loaderTree, getDynamicParamFromSegment) {
|
||||
const { segment, modules: { layout }, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(loaderTree);
|
||||
const segmentParam = getDynamicParamFromSegment(segment);
|
||||
let currentParams = parentParams;
|
||||
if (segmentParam && segmentParam.value !== null) {
|
||||
currentParams = {
|
||||
...parentParams,
|
||||
[segmentParam.param]: segmentParam.value
|
||||
};
|
||||
}
|
||||
const isRootLayout = typeof layout !== 'undefined';
|
||||
if (isRootLayout) {
|
||||
return currentParams;
|
||||
} else if (!parallelRoutes.children) {
|
||||
// This should really be an error but there are bugs in Turbopack that cause
|
||||
// the _not-found LoaderTree to not have any layouts. For rootParams sake
|
||||
// this is somewhat irrelevant when you are not customizing the 404 page.
|
||||
// If you are customizing 404
|
||||
// TODO update rootParams to make all params optional if `/app/not-found.tsx` is defined
|
||||
return currentParams;
|
||||
} else {
|
||||
return getRootParamsImpl(currentParams, // We stop looking for root params as soon as we hit the first layout
|
||||
// and it is not possible to use parallel route children above the root layout
|
||||
// so every parallelRoutes object that this function can visit will necessarily
|
||||
// have a single `children` prop and no others.
|
||||
parallelRoutes.children, getDynamicParamFromSegment);
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=create-component-tree.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/create-component-tree.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
20
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.d.ts
generated
vendored
Normal file
20
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.d.ts
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
import type { ErrorInfo } from 'react';
|
||||
declare global {
|
||||
var __next_log_error__: undefined | ((err: unknown) => void);
|
||||
}
|
||||
type RSCErrorHandler = (err: unknown) => string | undefined;
|
||||
type SSRErrorHandler = (err: unknown, errorInfo?: ErrorInfo) => string | undefined;
|
||||
export type DigestedError = Error & {
|
||||
digest: string;
|
||||
};
|
||||
/**
|
||||
* Returns a digest for well-known Next.js errors, otherwise `undefined`. If a
|
||||
* digest is returned this also means that the error does not need to be
|
||||
* reported.
|
||||
*/
|
||||
export declare function getDigestForWellKnownError(error: unknown): string | undefined;
|
||||
export declare function createFlightReactServerErrorHandler(shouldFormatError: boolean, onReactServerRenderError: (err: DigestedError) => void): RSCErrorHandler;
|
||||
export declare function createHTMLReactServerErrorHandler(shouldFormatError: boolean, isNextExport: boolean, reactServerErrors: Map<string, DigestedError>, silenceLogger: boolean, onReactServerRenderError: undefined | ((err: DigestedError) => void)): RSCErrorHandler;
|
||||
export declare function createHTMLErrorHandler(shouldFormatError: boolean, isNextExport: boolean, reactServerErrors: Map<string, DigestedError>, allCapturedErrors: Array<unknown>, silenceLogger: boolean, onHTMLRenderSSRError: (err: DigestedError, errorInfo?: ErrorInfo) => void): SSRErrorHandler;
|
||||
export declare function isUserLandError(err: any): boolean;
|
||||
export {};
|
||||
198
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.js
generated
vendored
Normal file
198
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.js
generated
vendored
Normal file
@@ -0,0 +1,198 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
createFlightReactServerErrorHandler: null,
|
||||
createHTMLErrorHandler: null,
|
||||
createHTMLReactServerErrorHandler: null,
|
||||
getDigestForWellKnownError: null,
|
||||
isUserLandError: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
createFlightReactServerErrorHandler: function() {
|
||||
return createFlightReactServerErrorHandler;
|
||||
},
|
||||
createHTMLErrorHandler: function() {
|
||||
return createHTMLErrorHandler;
|
||||
},
|
||||
createHTMLReactServerErrorHandler: function() {
|
||||
return createHTMLReactServerErrorHandler;
|
||||
},
|
||||
getDigestForWellKnownError: function() {
|
||||
return getDigestForWellKnownError;
|
||||
},
|
||||
isUserLandError: function() {
|
||||
return isUserLandError;
|
||||
}
|
||||
});
|
||||
const _stringhash = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/string-hash"));
|
||||
const _formatservererror = require("../../lib/format-server-error");
|
||||
const _tracer = require("../lib/trace/tracer");
|
||||
const _pipereadable = require("../pipe-readable");
|
||||
const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr");
|
||||
const _hooksservercontext = require("../../client/components/hooks-server-context");
|
||||
const _isnextroutererror = require("../../client/components/is-next-router-error");
|
||||
const _iserror = require("../../lib/is-error");
|
||||
const _errortelemetryutils = require("../../lib/error-telemetry-utils");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function getDigestForWellKnownError(error) {
|
||||
// If we're bailing out to CSR, we don't need to log the error.
|
||||
if ((0, _bailouttocsr.isBailoutToCSRError)(error)) return error.digest;
|
||||
// If this is a navigation error, we don't need to log the error.
|
||||
if ((0, _isnextroutererror.isNextRouterError)(error)) return error.digest;
|
||||
// If this error occurs, we know that we should be stopping the static
|
||||
// render. This is only thrown in static generation when PPR is not enabled,
|
||||
// which causes the whole page to be marked as dynamic. We don't need to
|
||||
// tell the user about this error, as it's not actionable.
|
||||
if ((0, _hooksservercontext.isDynamicServerError)(error)) return error.digest;
|
||||
return undefined;
|
||||
}
|
||||
function createFlightReactServerErrorHandler(shouldFormatError, onReactServerRenderError) {
|
||||
return (thrownValue)=>{
|
||||
if (typeof thrownValue === 'string') {
|
||||
// TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.
|
||||
return (0, _stringhash.default)(thrownValue).toString();
|
||||
}
|
||||
// If the response was closed, we don't need to log the error.
|
||||
if ((0, _pipereadable.isAbortError)(thrownValue)) return;
|
||||
const digest = getDigestForWellKnownError(thrownValue);
|
||||
if (digest) {
|
||||
return digest;
|
||||
}
|
||||
const err = (0, _iserror.getProperError)(thrownValue);
|
||||
// If the error already has a digest, respect the original digest,
|
||||
// so it won't get re-generated into another new error.
|
||||
if (!err.digest) {
|
||||
// TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.
|
||||
err.digest = (0, _stringhash.default)(err.message + err.stack || '').toString();
|
||||
}
|
||||
// Format server errors in development to add more helpful error messages
|
||||
if (shouldFormatError) {
|
||||
(0, _formatservererror.formatServerError)(err);
|
||||
}
|
||||
// Record exception in an active span, if available.
|
||||
const span = (0, _tracer.getTracer)().getActiveScopeSpan();
|
||||
if (span) {
|
||||
span.recordException(err);
|
||||
span.setStatus({
|
||||
code: _tracer.SpanStatusCode.ERROR,
|
||||
message: err.message
|
||||
});
|
||||
}
|
||||
onReactServerRenderError(err);
|
||||
return (0, _errortelemetryutils.createDigestWithErrorCode)(thrownValue, err.digest);
|
||||
};
|
||||
}
|
||||
function createHTMLReactServerErrorHandler(shouldFormatError, isNextExport, reactServerErrors, silenceLogger, onReactServerRenderError) {
|
||||
return (thrownValue)=>{
|
||||
var _err_message;
|
||||
if (typeof thrownValue === 'string') {
|
||||
// TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.
|
||||
return (0, _stringhash.default)(thrownValue).toString();
|
||||
}
|
||||
// If the response was closed, we don't need to log the error.
|
||||
if ((0, _pipereadable.isAbortError)(thrownValue)) return;
|
||||
const digest = getDigestForWellKnownError(thrownValue);
|
||||
if (digest) {
|
||||
return digest;
|
||||
}
|
||||
const err = (0, _iserror.getProperError)(thrownValue);
|
||||
// If the error already has a digest, respect the original digest,
|
||||
// so it won't get re-generated into another new error.
|
||||
if (!err.digest) {
|
||||
// TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.
|
||||
err.digest = (0, _stringhash.default)(err.message + (err.stack || '')).toString();
|
||||
}
|
||||
// @TODO by putting this here and not at the top it is possible that
|
||||
// we don't error the build in places we actually expect to
|
||||
if (!reactServerErrors.has(err.digest)) {
|
||||
reactServerErrors.set(err.digest, err);
|
||||
}
|
||||
// Format server errors in development to add more helpful error messages
|
||||
if (shouldFormatError) {
|
||||
(0, _formatservererror.formatServerError)(err);
|
||||
}
|
||||
// Don't log the suppressed error during export
|
||||
if (!(isNextExport && (err == null ? void 0 : (_err_message = err.message) == null ? void 0 : _err_message.includes('The specific message is omitted in production builds to avoid leaking sensitive details.')))) {
|
||||
// Record exception in an active span, if available.
|
||||
const span = (0, _tracer.getTracer)().getActiveScopeSpan();
|
||||
if (span) {
|
||||
span.recordException(err);
|
||||
span.setStatus({
|
||||
code: _tracer.SpanStatusCode.ERROR,
|
||||
message: err.message
|
||||
});
|
||||
}
|
||||
if (!silenceLogger) {
|
||||
onReactServerRenderError == null ? void 0 : onReactServerRenderError(err);
|
||||
}
|
||||
}
|
||||
return (0, _errortelemetryutils.createDigestWithErrorCode)(thrownValue, err.digest);
|
||||
};
|
||||
}
|
||||
function createHTMLErrorHandler(shouldFormatError, isNextExport, reactServerErrors, allCapturedErrors, silenceLogger, onHTMLRenderSSRError) {
|
||||
return (thrownValue, errorInfo)=>{
|
||||
var _err_message;
|
||||
let isSSRError = true;
|
||||
allCapturedErrors.push(thrownValue);
|
||||
// If the response was closed, we don't need to log the error.
|
||||
if ((0, _pipereadable.isAbortError)(thrownValue)) return;
|
||||
const digest = getDigestForWellKnownError(thrownValue);
|
||||
if (digest) {
|
||||
return digest;
|
||||
}
|
||||
const err = (0, _iserror.getProperError)(thrownValue);
|
||||
// If the error already has a digest, respect the original digest,
|
||||
// so it won't get re-generated into another new error.
|
||||
if (err.digest) {
|
||||
if (reactServerErrors.has(err.digest)) {
|
||||
// This error is likely an obfuscated error from react-server.
|
||||
// We recover the original error here.
|
||||
thrownValue = reactServerErrors.get(err.digest);
|
||||
isSSRError = false;
|
||||
} else {
|
||||
// The error is not from react-server but has a digest
|
||||
// from other means so we don't need to produce a new one
|
||||
}
|
||||
} else {
|
||||
err.digest = (0, _stringhash.default)(err.message + ((errorInfo == null ? void 0 : errorInfo.componentStack) || err.stack || '')).toString();
|
||||
}
|
||||
// Format server errors in development to add more helpful error messages
|
||||
if (shouldFormatError) {
|
||||
(0, _formatservererror.formatServerError)(err);
|
||||
}
|
||||
// Don't log the suppressed error during export
|
||||
if (!(isNextExport && (err == null ? void 0 : (_err_message = err.message) == null ? void 0 : _err_message.includes('The specific message is omitted in production builds to avoid leaking sensitive details.')))) {
|
||||
// Record exception in an active span, if available.
|
||||
const span = (0, _tracer.getTracer)().getActiveScopeSpan();
|
||||
if (span) {
|
||||
span.recordException(err);
|
||||
span.setStatus({
|
||||
code: _tracer.SpanStatusCode.ERROR,
|
||||
message: err.message
|
||||
});
|
||||
}
|
||||
if (!silenceLogger && // HTML errors contain RSC errors as well, filter them out before reporting
|
||||
isSSRError) {
|
||||
onHTMLRenderSSRError(err, errorInfo);
|
||||
}
|
||||
}
|
||||
return (0, _errortelemetryutils.createDigestWithErrorCode)(thrownValue, err.digest);
|
||||
};
|
||||
}
|
||||
function isUserLandError(err) {
|
||||
return !(0, _pipereadable.isAbortError)(err) && !(0, _bailouttocsr.isBailoutToCSRError)(err) && !(0, _isnextroutererror.isNextRouterError)(err);
|
||||
}
|
||||
|
||||
//# sourceMappingURL=create-error-handler.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/create-error-handler.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.d.ts
generated
vendored
Normal file
4
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import type { LoaderTree } from '../lib/app-dir-module';
|
||||
import type { FlightRouterState } from './types';
|
||||
import type { GetDynamicParamFromSegment } from './app-render';
|
||||
export declare function createFlightRouterStateFromLoaderTree([segment, parallelRoutes, { layout }]: LoaderTree, getDynamicParamFromSegment: GetDynamicParamFromSegment, searchParams: any, rootLayoutIncluded?: boolean): FlightRouterState;
|
||||
30
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js
generated
vendored
Normal file
30
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "createFlightRouterStateFromLoaderTree", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return createFlightRouterStateFromLoaderTree;
|
||||
}
|
||||
});
|
||||
const _segment = require("../../shared/lib/segment");
|
||||
function createFlightRouterStateFromLoaderTree([segment, parallelRoutes, { layout }], getDynamicParamFromSegment, searchParams, rootLayoutIncluded = false) {
|
||||
const dynamicParam = getDynamicParamFromSegment(segment);
|
||||
const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment;
|
||||
const segmentTree = [
|
||||
(0, _segment.addSearchParamsIfPageSegment)(treeSegment, searchParams),
|
||||
{}
|
||||
];
|
||||
if (!rootLayoutIncluded && typeof layout !== 'undefined') {
|
||||
rootLayoutIncluded = true;
|
||||
segmentTree[4] = true;
|
||||
}
|
||||
segmentTree[1] = Object.keys(parallelRoutes).reduce((existingValue, currentValue)=>{
|
||||
existingValue[currentValue] = createFlightRouterStateFromLoaderTree(parallelRoutes[currentValue], getDynamicParamFromSegment, searchParams, rootLayoutIncluded);
|
||||
return existingValue;
|
||||
}, {});
|
||||
return segmentTree;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=create-flight-router-state-from-loader-tree.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/create-flight-router-state-from-loader-tree.ts"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\nimport type { FlightRouterState } from './types'\nimport type { GetDynamicParamFromSegment } from './app-render'\nimport { addSearchParamsIfPageSegment } from '../../shared/lib/segment'\n\nexport function createFlightRouterStateFromLoaderTree(\n [segment, parallelRoutes, { layout }]: LoaderTree,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n rootLayoutIncluded = false\n): FlightRouterState {\n const dynamicParam = getDynamicParamFromSegment(segment)\n const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment\n\n const segmentTree: FlightRouterState = [\n addSearchParamsIfPageSegment(treeSegment, searchParams),\n {},\n ]\n\n if (!rootLayoutIncluded && typeof layout !== 'undefined') {\n rootLayoutIncluded = true\n segmentTree[4] = true\n }\n\n segmentTree[1] = Object.keys(parallelRoutes).reduce(\n (existingValue, currentValue) => {\n existingValue[currentValue] = createFlightRouterStateFromLoaderTree(\n parallelRoutes[currentValue],\n getDynamicParamFromSegment,\n searchParams,\n rootLayoutIncluded\n )\n return existingValue\n },\n {} as FlightRouterState[1]\n )\n\n return segmentTree\n}\n"],"names":["createFlightRouterStateFromLoaderTree","segment","parallelRoutes","layout","getDynamicParamFromSegment","searchParams","rootLayoutIncluded","dynamicParam","treeSegment","segmentTree","addSearchParamsIfPageSegment","Object","keys","reduce","existingValue","currentValue"],"mappings":";;;;+BAKgBA;;;eAAAA;;;yBAF6B;AAEtC,SAASA,sCACd,CAACC,SAASC,gBAAgB,EAAEC,MAAM,EAAE,CAAa,EACjDC,0BAAsD,EACtDC,YAAiB,EACjBC,qBAAqB,KAAK;IAE1B,MAAMC,eAAeH,2BAA2BH;IAChD,MAAMO,cAAcD,eAAeA,aAAaC,WAAW,GAAGP;IAE9D,MAAMQ,cAAiC;QACrCC,IAAAA,qCAA4B,EAACF,aAAaH;QAC1C,CAAC;KACF;IAED,IAAI,CAACC,sBAAsB,OAAOH,WAAW,aAAa;QACxDG,qBAAqB;QACrBG,WAAW,CAAC,EAAE,GAAG;IACnB;IAEAA,WAAW,CAAC,EAAE,GAAGE,OAAOC,IAAI,CAACV,gBAAgBW,MAAM,CACjD,CAACC,eAAeC;QACdD,aAAa,CAACC,aAAa,GAAGf,sCAC5BE,cAAc,CAACa,aAAa,EAC5BX,4BACAC,cACAC;QAEF,OAAOQ;IACT,GACA,CAAC;IAGH,OAAOL;AACT"}
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.d.ts
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export declare const isCsrfOriginAllowed: (originDomain: string, allowedOrigins?: string[]) => boolean;
|
||||
74
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.js
generated
vendored
Normal file
74
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.js
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
// micromatch is only available at node runtime, so it cannot be used here since the code path that calls this function
|
||||
// can be run from edge. This is a simple implementation that safely achieves the required functionality.
|
||||
// the goal is to match the functionality for remotePatterns as defined here -
|
||||
// https://nextjs.org/docs/app/api-reference/components/image#remotepatterns
|
||||
// TODO - retrofit micromatch to work in edge and use that instead
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "isCsrfOriginAllowed", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return isCsrfOriginAllowed;
|
||||
}
|
||||
});
|
||||
function matchWildcardDomain(domain, pattern) {
|
||||
const domainParts = domain.split('.');
|
||||
const patternParts = pattern.split('.');
|
||||
if (patternParts.length < 1) {
|
||||
// pattern is empty and therefore invalid to match against
|
||||
return false;
|
||||
}
|
||||
if (domainParts.length < patternParts.length) {
|
||||
// domain has too few segments and thus cannot match
|
||||
return false;
|
||||
}
|
||||
// Prevent wildcards from matching entire domains (e.g. '**' or '*.com')
|
||||
// This ensures wildcards can only match subdomains, not the main domain
|
||||
if (patternParts.length === 1 && (patternParts[0] === '*' || patternParts[0] === '**')) {
|
||||
return false;
|
||||
}
|
||||
while(patternParts.length){
|
||||
const patternPart = patternParts.pop();
|
||||
const domainPart = domainParts.pop();
|
||||
switch(patternPart){
|
||||
case '':
|
||||
{
|
||||
// invalid pattern. pattern segments must be non empty
|
||||
return false;
|
||||
}
|
||||
case '*':
|
||||
{
|
||||
// wildcard matches anything so we continue if the domain part is non-empty
|
||||
if (domainPart) {
|
||||
continue;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
case '**':
|
||||
{
|
||||
// if this is not the last item in the pattern the pattern is invalid
|
||||
if (patternParts.length > 0) {
|
||||
return false;
|
||||
}
|
||||
// recursive wildcard matches anything so we terminate here if the domain part is non empty
|
||||
return domainPart !== undefined;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (domainPart !== patternPart) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// We exhausted the pattern. If we also exhausted the domain we have a match
|
||||
return domainParts.length === 0;
|
||||
}
|
||||
const isCsrfOriginAllowed = (originDomain, allowedOrigins = [])=>{
|
||||
return allowedOrigins.some((allowedOrigin)=>allowedOrigin && (allowedOrigin === originDomain || matchWildcardDomain(originDomain, allowedOrigin)));
|
||||
};
|
||||
|
||||
//# sourceMappingURL=csrf-protection.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/csrf-protection.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/csrf-protection.ts"],"sourcesContent":["// micromatch is only available at node runtime, so it cannot be used here since the code path that calls this function\n// can be run from edge. This is a simple implementation that safely achieves the required functionality.\n// the goal is to match the functionality for remotePatterns as defined here -\n// https://nextjs.org/docs/app/api-reference/components/image#remotepatterns\n// TODO - retrofit micromatch to work in edge and use that instead\nfunction matchWildcardDomain(domain: string, pattern: string) {\n const domainParts = domain.split('.')\n const patternParts = pattern.split('.')\n\n if (patternParts.length < 1) {\n // pattern is empty and therefore invalid to match against\n return false\n }\n\n if (domainParts.length < patternParts.length) {\n // domain has too few segments and thus cannot match\n return false\n }\n\n // Prevent wildcards from matching entire domains (e.g. '**' or '*.com')\n // This ensures wildcards can only match subdomains, not the main domain\n if (\n patternParts.length === 1 &&\n (patternParts[0] === '*' || patternParts[0] === '**')\n ) {\n return false\n }\n\n while (patternParts.length) {\n const patternPart = patternParts.pop()\n const domainPart = domainParts.pop()\n\n switch (patternPart) {\n case '': {\n // invalid pattern. pattern segments must be non empty\n return false\n }\n case '*': {\n // wildcard matches anything so we continue if the domain part is non-empty\n if (domainPart) {\n continue\n } else {\n return false\n }\n }\n case '**': {\n // if this is not the last item in the pattern the pattern is invalid\n if (patternParts.length > 0) {\n return false\n }\n // recursive wildcard matches anything so we terminate here if the domain part is non empty\n return domainPart !== undefined\n }\n default: {\n if (domainPart !== patternPart) {\n return false\n }\n }\n }\n }\n\n // We exhausted the pattern. If we also exhausted the domain we have a match\n return domainParts.length === 0\n}\n\nexport const isCsrfOriginAllowed = (\n originDomain: string,\n allowedOrigins: string[] = []\n): boolean => {\n return allowedOrigins.some(\n (allowedOrigin) =>\n allowedOrigin &&\n (allowedOrigin === originDomain ||\n matchWildcardDomain(originDomain, allowedOrigin))\n )\n}\n"],"names":["isCsrfOriginAllowed","matchWildcardDomain","domain","pattern","domainParts","split","patternParts","length","patternPart","pop","domainPart","undefined","originDomain","allowedOrigins","some","allowedOrigin"],"mappings":"AAAA,uHAAuH;AACvH,yGAAyG;AACzG,8EAA8E;AAC9E,4EAA4E;AAC5E,kEAAkE;;;;;+BA6DrDA;;;eAAAA;;;AA5Db,SAASC,oBAAoBC,MAAc,EAAEC,OAAe;IAC1D,MAAMC,cAAcF,OAAOG,KAAK,CAAC;IACjC,MAAMC,eAAeH,QAAQE,KAAK,CAAC;IAEnC,IAAIC,aAAaC,MAAM,GAAG,GAAG;QAC3B,0DAA0D;QAC1D,OAAO;IACT;IAEA,IAAIH,YAAYG,MAAM,GAAGD,aAAaC,MAAM,EAAE;QAC5C,oDAAoD;QACpD,OAAO;IACT;IAEA,wEAAwE;IACxE,wEAAwE;IACxE,IACED,aAAaC,MAAM,KAAK,KACvBD,CAAAA,YAAY,CAAC,EAAE,KAAK,OAAOA,YAAY,CAAC,EAAE,KAAK,IAAG,GACnD;QACA,OAAO;IACT;IAEA,MAAOA,aAAaC,MAAM,CAAE;QAC1B,MAAMC,cAAcF,aAAaG,GAAG;QACpC,MAAMC,aAAaN,YAAYK,GAAG;QAElC,OAAQD;YACN,KAAK;gBAAI;oBACP,sDAAsD;oBACtD,OAAO;gBACT;YACA,KAAK;gBAAK;oBACR,2EAA2E;oBAC3E,IAAIE,YAAY;wBACd;oBACF,OAAO;wBACL,OAAO;oBACT;gBACF;YACA,KAAK;gBAAM;oBACT,qEAAqE;oBACrE,IAAIJ,aAAaC,MAAM,GAAG,GAAG;wBAC3B,OAAO;oBACT;oBACA,2FAA2F;oBAC3F,OAAOG,eAAeC;gBACxB;YACA;gBAAS;oBACP,IAAID,eAAeF,aAAa;wBAC9B,OAAO;oBACT;gBACF;QACF;IACF;IAEA,4EAA4E;IAC5E,OAAOJ,YAAYG,MAAM,KAAK;AAChC;AAEO,MAAMP,sBAAsB,CACjCY,cACAC,iBAA2B,EAAE;IAE7B,OAAOA,eAAeC,IAAI,CACxB,CAACC,gBACCA,iBACCA,CAAAA,kBAAkBH,gBACjBX,oBAAoBW,cAAcG,cAAa;AAEvD"}
|
||||
111
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts
generated
vendored
Normal file
111
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* The functions provided by this module are used to communicate certain properties
|
||||
* about the currently running code so that Next.js can make decisions on how to handle
|
||||
* the current execution in different rendering modes such as pre-rendering, resuming, and SSR.
|
||||
*
|
||||
* Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.
|
||||
* Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts
|
||||
* of a React tree as dynamic while still keeping other parts static. There are really two different kinds of
|
||||
* Dynamic indications.
|
||||
*
|
||||
* The first is simply an intention to be dynamic. unstable_noStore is an example of this where
|
||||
* the currently executing code simply declares that the current scope is dynamic but if you use it
|
||||
* inside unstable_cache it can still be cached. This type of indication can be removed if we ever
|
||||
* make the default dynamic to begin with because the only way you would ever be static is inside
|
||||
* a cache scope which this indication does not affect.
|
||||
*
|
||||
* The second is an indication that a dynamic data source was read. This is a stronger form of dynamic
|
||||
* because it means that it is inappropriate to cache this at all. using a dynamic data source inside
|
||||
* unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should
|
||||
* read that data outside the cache and pass it in as an argument to the cached function.
|
||||
*/
|
||||
import type { WorkStore } from '../app-render/work-async-storage.external';
|
||||
import type { WorkUnitStore, RequestStore, PrerenderStoreModern } from '../app-render/work-unit-async-storage.external';
|
||||
export type DynamicAccess = {
|
||||
/**
|
||||
* If debugging, this will contain the stack trace of where the dynamic access
|
||||
* occurred. This is used to provide more information to the user about why
|
||||
* their page is being rendered dynamically.
|
||||
*/
|
||||
stack?: string;
|
||||
/**
|
||||
* The expression that was accessed dynamically.
|
||||
*/
|
||||
expression: string;
|
||||
};
|
||||
export type DynamicTrackingState = {
|
||||
/**
|
||||
* When true, stack information will also be tracked during dynamic access.
|
||||
*/
|
||||
readonly isDebugDynamicAccesses: boolean | undefined;
|
||||
/**
|
||||
* The dynamic accesses that occurred during the render.
|
||||
*/
|
||||
readonly dynamicAccesses: Array<DynamicAccess>;
|
||||
syncDynamicExpression: undefined | string;
|
||||
syncDynamicErrorWithStack: null | Error;
|
||||
syncDynamicLogged?: boolean;
|
||||
};
|
||||
export type DynamicValidationState = {
|
||||
hasSuspendedDynamic: boolean;
|
||||
hasDynamicMetadata: boolean;
|
||||
hasDynamicViewport: boolean;
|
||||
hasSyncDynamicErrors: boolean;
|
||||
dynamicErrors: Array<Error>;
|
||||
};
|
||||
export declare function createDynamicTrackingState(isDebugDynamicAccesses: boolean | undefined): DynamicTrackingState;
|
||||
export declare function createDynamicValidationState(): DynamicValidationState;
|
||||
export declare function getFirstDynamicReason(trackingState: DynamicTrackingState): undefined | string;
|
||||
/**
|
||||
* This function communicates that the current scope should be treated as dynamic.
|
||||
*
|
||||
* In most cases this function is a no-op but if called during
|
||||
* a PPR prerender it will postpone the current sub-tree and calling
|
||||
* it during a normal prerender will cause the entire prerender to abort
|
||||
*/
|
||||
export declare function markCurrentScopeAsDynamic(store: WorkStore, workUnitStore: undefined | Exclude<WorkUnitStore, PrerenderStoreModern>, expression: string): void;
|
||||
/**
|
||||
* This function communicates that some dynamic path parameter was read. This
|
||||
* differs from the more general `trackDynamicDataAccessed` in that it is will
|
||||
* not error when `dynamic = "error"` is set.
|
||||
*
|
||||
* @param store The static generation store
|
||||
* @param expression The expression that was accessed dynamically
|
||||
*/
|
||||
export declare function trackFallbackParamAccessed(store: WorkStore, expression: string): void;
|
||||
export declare function abortOnSynchronousPlatformIOAccess(route: string, expression: string, errorWithStack: Error, prerenderStore: PrerenderStoreModern): void;
|
||||
export declare function trackSynchronousPlatformIOAccessInDev(requestStore: RequestStore): void;
|
||||
export declare const trackSynchronousRequestDataAccessInDev: typeof trackSynchronousPlatformIOAccessInDev;
|
||||
/**
|
||||
* This component will call `React.postpone` that throws the postponed error.
|
||||
*/
|
||||
type PostponeProps = {
|
||||
reason: string;
|
||||
route: string;
|
||||
};
|
||||
export declare function Postpone({ reason, route }: PostponeProps): never;
|
||||
export declare function postponeWithTracking(route: string, expression: string, dynamicTracking: null | DynamicTrackingState): never;
|
||||
export declare function isDynamicPostpone(err: unknown): boolean;
|
||||
type DigestError = Error & {
|
||||
digest: string;
|
||||
};
|
||||
export declare function isPrerenderInterruptedError(error: unknown): error is DigestError;
|
||||
export declare function accessedDynamicData(dynamicAccesses: Array<DynamicAccess>): boolean;
|
||||
export declare function consumeDynamicAccess(serverDynamic: DynamicTrackingState, clientDynamic: DynamicTrackingState): DynamicTrackingState['dynamicAccesses'];
|
||||
export declare function formatDynamicAPIAccesses(dynamicAccesses: Array<DynamicAccess>): string[];
|
||||
/**
|
||||
* This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's
|
||||
* abort semantics slightly.
|
||||
*/
|
||||
export declare function createPostponedAbortSignal(reason: string): AbortSignal;
|
||||
/**
|
||||
* In a prerender, we may end up with hanging Promises as inputs due them
|
||||
* stalling on connection() or because they're loading dynamic data. In that
|
||||
* case we need to abort the encoding of arguments since they'll never complete.
|
||||
*/
|
||||
export declare function createHangingInputAbortSignal(workUnitStore: PrerenderStoreModern): AbortSignal;
|
||||
export declare function annotateDynamicAccess(expression: string, prerenderStore: PrerenderStoreModern): void;
|
||||
export declare function useDynamicRouteParams(expression: string): void;
|
||||
export declare function trackAllowedDynamicAccess(route: string, componentStack: string, dynamicValidation: DynamicValidationState, serverDynamic: DynamicTrackingState, clientDynamic: DynamicTrackingState): void;
|
||||
export declare function throwIfDisallowedDynamic(route: string, dynamicValidation: DynamicValidationState, serverDynamic: DynamicTrackingState, clientDynamic: DynamicTrackingState): void;
|
||||
export {};
|
||||
549
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.js
generated
vendored
Normal file
549
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.js
generated
vendored
Normal file
@@ -0,0 +1,549 @@
|
||||
/**
|
||||
* The functions provided by this module are used to communicate certain properties
|
||||
* about the currently running code so that Next.js can make decisions on how to handle
|
||||
* the current execution in different rendering modes such as pre-rendering, resuming, and SSR.
|
||||
*
|
||||
* Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.
|
||||
* Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts
|
||||
* of a React tree as dynamic while still keeping other parts static. There are really two different kinds of
|
||||
* Dynamic indications.
|
||||
*
|
||||
* The first is simply an intention to be dynamic. unstable_noStore is an example of this where
|
||||
* the currently executing code simply declares that the current scope is dynamic but if you use it
|
||||
* inside unstable_cache it can still be cached. This type of indication can be removed if we ever
|
||||
* make the default dynamic to begin with because the only way you would ever be static is inside
|
||||
* a cache scope which this indication does not affect.
|
||||
*
|
||||
* The second is an indication that a dynamic data source was read. This is a stronger form of dynamic
|
||||
* because it means that it is inappropriate to cache this at all. using a dynamic data source inside
|
||||
* unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should
|
||||
* read that data outside the cache and pass it in as an argument to the cached function.
|
||||
*/ "use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
Postpone: null,
|
||||
abortAndThrowOnSynchronousRequestDataAccess: null,
|
||||
abortOnSynchronousPlatformIOAccess: null,
|
||||
accessedDynamicData: null,
|
||||
annotateDynamicAccess: null,
|
||||
consumeDynamicAccess: null,
|
||||
createDynamicTrackingState: null,
|
||||
createDynamicValidationState: null,
|
||||
createHangingInputAbortSignal: null,
|
||||
createPostponedAbortSignal: null,
|
||||
formatDynamicAPIAccesses: null,
|
||||
getFirstDynamicReason: null,
|
||||
isDynamicPostpone: null,
|
||||
isPrerenderInterruptedError: null,
|
||||
markCurrentScopeAsDynamic: null,
|
||||
postponeWithTracking: null,
|
||||
throwIfDisallowedDynamic: null,
|
||||
throwToInterruptStaticGeneration: null,
|
||||
trackAllowedDynamicAccess: null,
|
||||
trackDynamicDataInDynamicRender: null,
|
||||
trackFallbackParamAccessed: null,
|
||||
trackSynchronousPlatformIOAccessInDev: null,
|
||||
trackSynchronousRequestDataAccessInDev: null,
|
||||
useDynamicRouteParams: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
Postpone: function() {
|
||||
return Postpone;
|
||||
},
|
||||
abortAndThrowOnSynchronousRequestDataAccess: function() {
|
||||
return abortAndThrowOnSynchronousRequestDataAccess;
|
||||
},
|
||||
abortOnSynchronousPlatformIOAccess: function() {
|
||||
return abortOnSynchronousPlatformIOAccess;
|
||||
},
|
||||
accessedDynamicData: function() {
|
||||
return accessedDynamicData;
|
||||
},
|
||||
annotateDynamicAccess: function() {
|
||||
return annotateDynamicAccess;
|
||||
},
|
||||
consumeDynamicAccess: function() {
|
||||
return consumeDynamicAccess;
|
||||
},
|
||||
createDynamicTrackingState: function() {
|
||||
return createDynamicTrackingState;
|
||||
},
|
||||
createDynamicValidationState: function() {
|
||||
return createDynamicValidationState;
|
||||
},
|
||||
createHangingInputAbortSignal: function() {
|
||||
return createHangingInputAbortSignal;
|
||||
},
|
||||
createPostponedAbortSignal: function() {
|
||||
return createPostponedAbortSignal;
|
||||
},
|
||||
formatDynamicAPIAccesses: function() {
|
||||
return formatDynamicAPIAccesses;
|
||||
},
|
||||
getFirstDynamicReason: function() {
|
||||
return getFirstDynamicReason;
|
||||
},
|
||||
isDynamicPostpone: function() {
|
||||
return isDynamicPostpone;
|
||||
},
|
||||
isPrerenderInterruptedError: function() {
|
||||
return isPrerenderInterruptedError;
|
||||
},
|
||||
markCurrentScopeAsDynamic: function() {
|
||||
return markCurrentScopeAsDynamic;
|
||||
},
|
||||
postponeWithTracking: function() {
|
||||
return postponeWithTracking;
|
||||
},
|
||||
throwIfDisallowedDynamic: function() {
|
||||
return throwIfDisallowedDynamic;
|
||||
},
|
||||
throwToInterruptStaticGeneration: function() {
|
||||
return throwToInterruptStaticGeneration;
|
||||
},
|
||||
trackAllowedDynamicAccess: function() {
|
||||
return trackAllowedDynamicAccess;
|
||||
},
|
||||
trackDynamicDataInDynamicRender: function() {
|
||||
return trackDynamicDataInDynamicRender;
|
||||
},
|
||||
trackFallbackParamAccessed: function() {
|
||||
return trackFallbackParamAccessed;
|
||||
},
|
||||
trackSynchronousPlatformIOAccessInDev: function() {
|
||||
return trackSynchronousPlatformIOAccessInDev;
|
||||
},
|
||||
trackSynchronousRequestDataAccessInDev: function() {
|
||||
return trackSynchronousRequestDataAccessInDev;
|
||||
},
|
||||
useDynamicRouteParams: function() {
|
||||
return useDynamicRouteParams;
|
||||
}
|
||||
});
|
||||
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
||||
const _hooksservercontext = require("../../client/components/hooks-server-context");
|
||||
const _staticgenerationbailout = require("../../client/components/static-generation-bailout");
|
||||
const _workunitasyncstorageexternal = require("./work-unit-async-storage.external");
|
||||
const _workasyncstorageexternal = require("../app-render/work-async-storage.external");
|
||||
const _dynamicrenderingutils = require("../dynamic-rendering-utils");
|
||||
const _metadataconstants = require("../../lib/metadata/metadata-constants");
|
||||
const _scheduler = require("../../lib/scheduler");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
const hasPostpone = typeof _react.default.unstable_postpone === 'function';
|
||||
function createDynamicTrackingState(isDebugDynamicAccesses) {
|
||||
return {
|
||||
isDebugDynamicAccesses,
|
||||
dynamicAccesses: [],
|
||||
syncDynamicExpression: undefined,
|
||||
syncDynamicErrorWithStack: null
|
||||
};
|
||||
}
|
||||
function createDynamicValidationState() {
|
||||
return {
|
||||
hasSuspendedDynamic: false,
|
||||
hasDynamicMetadata: false,
|
||||
hasDynamicViewport: false,
|
||||
hasSyncDynamicErrors: false,
|
||||
dynamicErrors: []
|
||||
};
|
||||
}
|
||||
function getFirstDynamicReason(trackingState) {
|
||||
var _trackingState_dynamicAccesses_;
|
||||
return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression;
|
||||
}
|
||||
function markCurrentScopeAsDynamic(store, workUnitStore, expression) {
|
||||
if (workUnitStore) {
|
||||
if (workUnitStore.type === 'cache' || workUnitStore.type === 'unstable-cache') {
|
||||
// inside cache scopes marking a scope as dynamic has no effect because the outer cache scope
|
||||
// creates a cache boundary. This is subtly different from reading a dynamic data source which is
|
||||
// forbidden inside a cache scope.
|
||||
return;
|
||||
}
|
||||
}
|
||||
// If we're forcing dynamic rendering or we're forcing static rendering, we
|
||||
// don't need to do anything here because the entire page is already dynamic
|
||||
// or it's static and it should not throw or postpone here.
|
||||
if (store.forceDynamic || store.forceStatic) return;
|
||||
if (store.dynamicShouldError) {
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
|
||||
value: "E553",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
if (workUnitStore) {
|
||||
if (workUnitStore.type === 'prerender-ppr') {
|
||||
postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking);
|
||||
} else if (workUnitStore.type === 'prerender-legacy') {
|
||||
workUnitStore.revalidate = 0;
|
||||
// We aren't prerendering but we are generating a static page. We need to bail out of static generation
|
||||
const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
||||
value: "E550",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
store.dynamicUsageDescription = expression;
|
||||
store.dynamicUsageStack = err.stack;
|
||||
throw err;
|
||||
} else if (process.env.NODE_ENV === 'development' && workUnitStore && workUnitStore.type === 'request') {
|
||||
workUnitStore.usedDynamic = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
function trackFallbackParamAccessed(store, expression) {
|
||||
const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
if (!prerenderStore || prerenderStore.type !== 'prerender-ppr') return;
|
||||
postponeWithTracking(store.route, expression, prerenderStore.dynamicTracking);
|
||||
}
|
||||
function throwToInterruptStaticGeneration(expression, store, prerenderStore) {
|
||||
// We aren't prerendering but we are generating a static page. We need to bail out of static generation
|
||||
const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
||||
value: "E558",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
prerenderStore.revalidate = 0;
|
||||
store.dynamicUsageDescription = expression;
|
||||
store.dynamicUsageStack = err.stack;
|
||||
throw err;
|
||||
}
|
||||
function trackDynamicDataInDynamicRender(_store, workUnitStore) {
|
||||
if (workUnitStore) {
|
||||
if (workUnitStore.type === 'cache' || workUnitStore.type === 'unstable-cache') {
|
||||
// inside cache scopes marking a scope as dynamic has no effect because the outer cache scope
|
||||
// creates a cache boundary. This is subtly different from reading a dynamic data source which is
|
||||
// forbidden inside a cache scope.
|
||||
return;
|
||||
}
|
||||
if (workUnitStore.type === 'prerender' || workUnitStore.type === 'prerender-legacy') {
|
||||
workUnitStore.revalidate = 0;
|
||||
}
|
||||
if (process.env.NODE_ENV === 'development' && workUnitStore.type === 'request') {
|
||||
workUnitStore.usedDynamic = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Despite it's name we don't actually abort unless we have a controller to call abort on
|
||||
// There are times when we let a prerender run long to discover caches where we want the semantics
|
||||
// of tracking dynamic access without terminating the prerender early
|
||||
function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) {
|
||||
const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`;
|
||||
const error = createPrerenderInterruptedError(reason);
|
||||
prerenderStore.controller.abort(error);
|
||||
const dynamicTracking = prerenderStore.dynamicTracking;
|
||||
if (dynamicTracking) {
|
||||
dynamicTracking.dynamicAccesses.push({
|
||||
// When we aren't debugging, we don't need to create another error for the
|
||||
// stack trace.
|
||||
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
||||
expression
|
||||
});
|
||||
}
|
||||
}
|
||||
function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) {
|
||||
const dynamicTracking = prerenderStore.dynamicTracking;
|
||||
if (dynamicTracking) {
|
||||
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
||||
dynamicTracking.syncDynamicExpression = expression;
|
||||
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
||||
}
|
||||
}
|
||||
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
||||
}
|
||||
function trackSynchronousPlatformIOAccessInDev(requestStore) {
|
||||
// We don't actually have a controller to abort but we do the semantic equivalent by
|
||||
// advancing the request store out of prerender mode
|
||||
requestStore.prerenderPhase = false;
|
||||
}
|
||||
function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) {
|
||||
const prerenderSignal = prerenderStore.controller.signal;
|
||||
if (prerenderSignal.aborted === false) {
|
||||
// TODO it would be better to move this aborted check into the callsite so we can avoid making
|
||||
// the error object when it isn't relevant to the aborting of the prerender however
|
||||
// since we need the throw semantics regardless of whether we abort it is easier to land
|
||||
// this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer
|
||||
// to ideal implementation
|
||||
const dynamicTracking = prerenderStore.dynamicTracking;
|
||||
if (dynamicTracking) {
|
||||
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
||||
dynamicTracking.syncDynamicExpression = expression;
|
||||
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
||||
if (prerenderStore.validating === true) {
|
||||
// We always log Request Access in dev at the point of calling the function
|
||||
// So we mark the dynamic validation as not requiring it to be printed
|
||||
dynamicTracking.syncDynamicLogged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
||||
}
|
||||
throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`);
|
||||
}
|
||||
const trackSynchronousRequestDataAccessInDev = trackSynchronousPlatformIOAccessInDev;
|
||||
function Postpone({ reason, route }) {
|
||||
const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
const dynamicTracking = prerenderStore && prerenderStore.type === 'prerender-ppr' ? prerenderStore.dynamicTracking : null;
|
||||
postponeWithTracking(route, reason, dynamicTracking);
|
||||
}
|
||||
function postponeWithTracking(route, expression, dynamicTracking) {
|
||||
assertPostpone();
|
||||
if (dynamicTracking) {
|
||||
dynamicTracking.dynamicAccesses.push({
|
||||
// When we aren't debugging, we don't need to create another error for the
|
||||
// stack trace.
|
||||
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
||||
expression
|
||||
});
|
||||
}
|
||||
_react.default.unstable_postpone(createPostponeReason(route, expression));
|
||||
}
|
||||
function createPostponeReason(route, expression) {
|
||||
return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + `React throws this special object to indicate where. It should not be caught by ` + `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;
|
||||
}
|
||||
function isDynamicPostpone(err) {
|
||||
if (typeof err === 'object' && err !== null && typeof err.message === 'string') {
|
||||
return isDynamicPostponeReason(err.message);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function isDynamicPostponeReason(reason) {
|
||||
return reason.includes('needs to bail out of prerendering at this point because it used') && reason.includes('Learn more: https://nextjs.org/docs/messages/ppr-caught-error');
|
||||
}
|
||||
if (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {
|
||||
throw Object.defineProperty(new Error('Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
||||
value: "E296",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED';
|
||||
function createPrerenderInterruptedError(message) {
|
||||
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||||
value: "E394",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
error.digest = NEXT_PRERENDER_INTERRUPTED;
|
||||
return error;
|
||||
}
|
||||
function isPrerenderInterruptedError(error) {
|
||||
return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error;
|
||||
}
|
||||
function accessedDynamicData(dynamicAccesses) {
|
||||
return dynamicAccesses.length > 0;
|
||||
}
|
||||
function consumeDynamicAccess(serverDynamic, clientDynamic) {
|
||||
// We mutate because we only call this once we are no longer writing
|
||||
// to the dynamicTrackingState and it's more efficient than creating a new
|
||||
// array.
|
||||
serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses);
|
||||
return serverDynamic.dynamicAccesses;
|
||||
}
|
||||
function formatDynamicAPIAccesses(dynamicAccesses) {
|
||||
return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{
|
||||
stack = stack.split('\n')// Remove the "Error: " prefix from the first line of the stack trace as
|
||||
// well as the first 4 lines of the stack trace which is the distance
|
||||
// from the user code and the `new Error().stack` call.
|
||||
.slice(4).filter((line)=>{
|
||||
// Exclude Next.js internals from the stack trace.
|
||||
if (line.includes('node_modules/next/')) {
|
||||
return false;
|
||||
}
|
||||
// Exclude anonymous functions from the stack trace.
|
||||
if (line.includes(' (<anonymous>)')) {
|
||||
return false;
|
||||
}
|
||||
// Exclude Node.js internals from the stack trace.
|
||||
if (line.includes(' (node:')) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).join('\n');
|
||||
return `Dynamic API Usage Debug - ${expression}:\n${stack}`;
|
||||
});
|
||||
}
|
||||
function assertPostpone() {
|
||||
if (!hasPostpone) {
|
||||
throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
||||
value: "E224",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
function createPostponedAbortSignal(reason) {
|
||||
assertPostpone();
|
||||
const controller = new AbortController();
|
||||
// We get our hands on a postpone instance by calling postpone and catching the throw
|
||||
try {
|
||||
_react.default.unstable_postpone(reason);
|
||||
} catch (x) {
|
||||
controller.abort(x);
|
||||
}
|
||||
return controller.signal;
|
||||
}
|
||||
function createHangingInputAbortSignal(workUnitStore) {
|
||||
const controller = new AbortController();
|
||||
if (workUnitStore.cacheSignal) {
|
||||
// If we have a cacheSignal it means we're in a prospective render. If the input
|
||||
// we're waiting on is coming from another cache, we do want to wait for it so that
|
||||
// we can resolve this cache entry too.
|
||||
workUnitStore.cacheSignal.inputReady().then(()=>{
|
||||
controller.abort();
|
||||
});
|
||||
} else {
|
||||
// Otherwise we're in the final render and we should already have all our caches
|
||||
// filled. We might still be waiting on some microtasks so we wait one tick before
|
||||
// giving up. When we give up, we still want to render the content of this cache
|
||||
// as deeply as we can so that we can suspend as deeply as possible in the tree
|
||||
// or not at all if we don't end up waiting for the input.
|
||||
(0, _scheduler.scheduleOnNextTick)(()=>controller.abort());
|
||||
}
|
||||
return controller.signal;
|
||||
}
|
||||
function annotateDynamicAccess(expression, prerenderStore) {
|
||||
const dynamicTracking = prerenderStore.dynamicTracking;
|
||||
if (dynamicTracking) {
|
||||
dynamicTracking.dynamicAccesses.push({
|
||||
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
||||
expression
|
||||
});
|
||||
}
|
||||
}
|
||||
function useDynamicRouteParams(expression) {
|
||||
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
||||
if (workStore && workStore.isStaticGeneration && workStore.fallbackRouteParams && workStore.fallbackRouteParams.size > 0) {
|
||||
// There are fallback route params, we should track these as dynamic
|
||||
// accesses.
|
||||
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
if (workUnitStore) {
|
||||
// We're prerendering with dynamicIO or PPR or both
|
||||
if (workUnitStore.type === 'prerender') {
|
||||
// We are in a prerender with dynamicIO semantics
|
||||
// We are going to hang here and never resolve. This will cause the currently
|
||||
// rendering component to effectively be a dynamic hole
|
||||
_react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, expression));
|
||||
} else if (workUnitStore.type === 'prerender-ppr') {
|
||||
// We're prerendering with PPR
|
||||
postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking);
|
||||
} else if (workUnitStore.type === 'prerender-legacy') {
|
||||
throwToInterruptStaticGeneration(expression, workStore, workUnitStore);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const hasSuspenseRegex = /\n\s+at Suspense \(<anonymous>\)/;
|
||||
const hasMetadataRegex = new RegExp(`\\n\\s+at ${_metadataconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`);
|
||||
const hasViewportRegex = new RegExp(`\\n\\s+at ${_metadataconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`);
|
||||
const hasOutletRegex = new RegExp(`\\n\\s+at ${_metadataconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`);
|
||||
function trackAllowedDynamicAccess(route, componentStack, dynamicValidation, serverDynamic, clientDynamic) {
|
||||
if (hasOutletRegex.test(componentStack)) {
|
||||
// We don't need to track that this is dynamic. It is only so when something else is also dynamic.
|
||||
return;
|
||||
} else if (hasMetadataRegex.test(componentStack)) {
|
||||
dynamicValidation.hasDynamicMetadata = true;
|
||||
return;
|
||||
} else if (hasViewportRegex.test(componentStack)) {
|
||||
dynamicValidation.hasDynamicViewport = true;
|
||||
return;
|
||||
} else if (hasSuspenseRegex.test(componentStack)) {
|
||||
dynamicValidation.hasSuspendedDynamic = true;
|
||||
return;
|
||||
} else if (serverDynamic.syncDynamicErrorWithStack || clientDynamic.syncDynamicErrorWithStack) {
|
||||
dynamicValidation.hasSyncDynamicErrors = true;
|
||||
return;
|
||||
} else {
|
||||
const message = `Route "${route}": A component accessed data, headers, params, searchParams, or a short-lived cache without a Suspense boundary nor a "use cache" above it. We don't have the exact line number added to error messages yet but you can see which component in the stack below. See more info: https://nextjs.org/docs/messages/next-prerender-missing-suspense`;
|
||||
const error = createErrorWithComponentStack(message, componentStack);
|
||||
dynamicValidation.dynamicErrors.push(error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
function createErrorWithComponentStack(message, componentStack) {
|
||||
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||||
value: "E394",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
error.stack = 'Error: ' + message + componentStack;
|
||||
return error;
|
||||
}
|
||||
function throwIfDisallowedDynamic(route, dynamicValidation, serverDynamic, clientDynamic) {
|
||||
let syncError;
|
||||
let syncExpression;
|
||||
let syncLogged;
|
||||
if (serverDynamic.syncDynamicErrorWithStack) {
|
||||
syncError = serverDynamic.syncDynamicErrorWithStack;
|
||||
syncExpression = serverDynamic.syncDynamicExpression;
|
||||
syncLogged = serverDynamic.syncDynamicLogged === true;
|
||||
} else if (clientDynamic.syncDynamicErrorWithStack) {
|
||||
syncError = clientDynamic.syncDynamicErrorWithStack;
|
||||
syncExpression = clientDynamic.syncDynamicExpression;
|
||||
syncLogged = clientDynamic.syncDynamicLogged === true;
|
||||
} else {
|
||||
syncError = null;
|
||||
syncExpression = undefined;
|
||||
syncLogged = false;
|
||||
}
|
||||
if (dynamicValidation.hasSyncDynamicErrors && syncError) {
|
||||
if (!syncLogged) {
|
||||
// In dev we already log errors about sync dynamic access. But during builds we need to ensure
|
||||
// the offending sync error is logged before we exit the build
|
||||
console.error(syncError);
|
||||
}
|
||||
// The actual error should have been logged when the sync access ocurred
|
||||
throw new _staticgenerationbailout.StaticGenBailoutError();
|
||||
}
|
||||
const dynamicErrors = dynamicValidation.dynamicErrors;
|
||||
if (dynamicErrors.length) {
|
||||
for(let i = 0; i < dynamicErrors.length; i++){
|
||||
console.error(dynamicErrors[i]);
|
||||
}
|
||||
throw new _staticgenerationbailout.StaticGenBailoutError();
|
||||
}
|
||||
if (!dynamicValidation.hasSuspendedDynamic) {
|
||||
if (dynamicValidation.hasDynamicMetadata) {
|
||||
if (syncError) {
|
||||
console.error(syncError);
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route "${route}" has a \`generateMetadata\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E608",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route "${route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or external data (\`fetch(...)\`, etc...) but the rest of the route was static or only used cached data (\`"use cache"\`). If you expected this route to be prerenderable update your \`generateMetadata\` to not use Request data and only use cached external data. Otherwise, add \`await connection()\` somewhere within this route to indicate explicitly it should not be prerendered.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E534",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
} else if (dynamicValidation.hasDynamicViewport) {
|
||||
if (syncError) {
|
||||
console.error(syncError);
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route "${route}" has a \`generateViewport\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E573",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route "${route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or external data (\`fetch(...)\`, etc...) but the rest of the route was static or only used cached data (\`"use cache"\`). If you expected this route to be prerenderable update your \`generateViewport\` to not use Request data and only use cached external data. Otherwise, add \`await connection()\` somewhere within this route to indicate explicitly it should not be prerendered.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E590",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=dynamic-rendering.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/dynamic-rendering.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.d.ts
generated
vendored
Normal file
4
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
export declare function generateEncryptionKeyBase64({ isBuild, distDir, }: {
|
||||
isBuild: boolean;
|
||||
distDir: string;
|
||||
}): Promise<string>;
|
||||
114
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.js
generated
vendored
Normal file
114
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.js
generated
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
// This file should never be bundled into application's runtime code and should
|
||||
// stay in the Next.js server.
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "generateEncryptionKeyBase64", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return generateEncryptionKeyBase64;
|
||||
}
|
||||
});
|
||||
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
||||
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
||||
const _cachedir = require("../cache-dir");
|
||||
const _encryptionutils = require("./encryption-utils");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
// Keep the key in memory as it should never change during the lifetime of the server in
|
||||
// both development and production.
|
||||
let __next_encryption_key_generation_promise = null;
|
||||
const CONFIG_FILE = '.rscinfo';
|
||||
const ENCRYPTION_KEY = 'encryption.key';
|
||||
const ENCRYPTION_EXPIRE_AT = 'encryption.expire_at';
|
||||
const EXPIRATION = 1000 * 60 * 60 * 24 * 14 // 14 days
|
||||
;
|
||||
async function writeCache(distDir, configValue) {
|
||||
const cacheBaseDir = (0, _cachedir.getStorageDirectory)(distDir);
|
||||
if (!cacheBaseDir) return;
|
||||
const configPath = _path.default.join(cacheBaseDir, CONFIG_FILE);
|
||||
if (!_fs.default.existsSync(cacheBaseDir)) {
|
||||
await _fs.default.promises.mkdir(cacheBaseDir, {
|
||||
recursive: true
|
||||
});
|
||||
}
|
||||
await _fs.default.promises.writeFile(configPath, JSON.stringify({
|
||||
[ENCRYPTION_KEY]: configValue,
|
||||
[ENCRYPTION_EXPIRE_AT]: Date.now() + EXPIRATION
|
||||
}));
|
||||
}
|
||||
// This utility is used to get a key for the cache directory. If the
|
||||
// key is not present, it will generate a new one and store it in the
|
||||
// cache directory inside dist.
|
||||
// The key will also expire after a certain amount of time. Once it
|
||||
// expires, a new one will be generated.
|
||||
// During the lifetime of the server, it will be reused and never refreshed.
|
||||
async function loadOrGenerateKey(distDir, isBuild, generateKey) {
|
||||
const cacheBaseDir = (0, _cachedir.getStorageDirectory)(distDir);
|
||||
if (!cacheBaseDir) {
|
||||
// There's no persistent storage available. We generate a new key.
|
||||
// This also covers development time.
|
||||
return await generateKey();
|
||||
}
|
||||
const configPath = _path.default.join(cacheBaseDir, CONFIG_FILE);
|
||||
async function hasCachedKey() {
|
||||
if (!_fs.default.existsSync(configPath)) return false;
|
||||
try {
|
||||
const config = JSON.parse(await _fs.default.promises.readFile(configPath, 'utf8'));
|
||||
if (!config) return false;
|
||||
if (typeof config[ENCRYPTION_KEY] !== 'string' || typeof config[ENCRYPTION_EXPIRE_AT] !== 'number') {
|
||||
return false;
|
||||
}
|
||||
// For build time, we need to rotate the key if it's expired. Otherwise
|
||||
// (next start) we have to keep the key as it is so the runtime key matches
|
||||
// the build time key.
|
||||
if (isBuild && config[ENCRYPTION_EXPIRE_AT] < Date.now()) {
|
||||
return false;
|
||||
}
|
||||
const cachedKey = config[ENCRYPTION_KEY];
|
||||
// If encryption key is provided via env, and it's not same as valid cache,
|
||||
// we should not use the cached key and respect the env key.
|
||||
if (cachedKey && process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY && cachedKey !== process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY) {
|
||||
return false;
|
||||
}
|
||||
return cachedKey;
|
||||
} catch {
|
||||
// Broken config file. We should generate a new key and overwrite it.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const maybeValidKey = await hasCachedKey();
|
||||
if (typeof maybeValidKey === 'string') {
|
||||
return maybeValidKey;
|
||||
}
|
||||
const key = await generateKey();
|
||||
await writeCache(distDir, key);
|
||||
return key;
|
||||
}
|
||||
async function generateEncryptionKeyBase64({ isBuild, distDir }) {
|
||||
// This avoids it being generated multiple times in parallel.
|
||||
if (!__next_encryption_key_generation_promise) {
|
||||
__next_encryption_key_generation_promise = loadOrGenerateKey(distDir, isBuild, async ()=>{
|
||||
const providedKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY;
|
||||
if (providedKey) {
|
||||
return providedKey;
|
||||
}
|
||||
const key = await crypto.subtle.generateKey({
|
||||
name: 'AES-GCM',
|
||||
length: 256
|
||||
}, true, [
|
||||
'encrypt',
|
||||
'decrypt'
|
||||
]);
|
||||
const exported = await crypto.subtle.exportKey('raw', key);
|
||||
return btoa((0, _encryptionutils.arrayBufferToString)(exported));
|
||||
});
|
||||
}
|
||||
return __next_encryption_key_generation_promise;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=encryption-utils-server.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils-server.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
28
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.d.ts
generated
vendored
Normal file
28
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.d.ts
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin';
|
||||
import type { ClientReferenceManifest, ClientReferenceManifestForRsc } from '../../build/webpack/plugins/flight-manifest-plugin';
|
||||
import type { DeepReadonly } from '../../shared/lib/deep-readonly';
|
||||
export declare function arrayBufferToString(buffer: ArrayBuffer | Uint8Array<ArrayBufferLike>): string;
|
||||
export declare function stringToUint8Array(binary: string): Uint8Array<ArrayBuffer>;
|
||||
export declare function encrypt(key: CryptoKey, iv: Uint8Array, data: Uint8Array): Promise<ArrayBuffer>;
|
||||
export declare function decrypt(key: CryptoKey, iv: Uint8Array, data: Uint8Array): Promise<ArrayBuffer>;
|
||||
export declare function setReferenceManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest, serverModuleMap, }: {
|
||||
page: string;
|
||||
clientReferenceManifest: DeepReadonly<ClientReferenceManifest>;
|
||||
serverActionsManifest: DeepReadonly<ActionManifest>;
|
||||
serverModuleMap: {
|
||||
[id: string]: {
|
||||
id: string;
|
||||
chunks: string[];
|
||||
name: string;
|
||||
};
|
||||
};
|
||||
}): void;
|
||||
export declare function getServerModuleMap(): {
|
||||
[id: string]: {
|
||||
id: string;
|
||||
chunks: string[];
|
||||
name: string;
|
||||
};
|
||||
};
|
||||
export declare function getClientReferenceManifestForRsc(): DeepReadonly<ClientReferenceManifestForRsc>;
|
||||
export declare function getActionEncryptionKey(): Promise<CryptoKey>;
|
||||
198
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.js
generated
vendored
Normal file
198
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.js
generated
vendored
Normal file
@@ -0,0 +1,198 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
arrayBufferToString: null,
|
||||
decrypt: null,
|
||||
encrypt: null,
|
||||
getActionEncryptionKey: null,
|
||||
getClientReferenceManifestForRsc: null,
|
||||
getServerModuleMap: null,
|
||||
setReferenceManifestsSingleton: null,
|
||||
stringToUint8Array: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
arrayBufferToString: function() {
|
||||
return arrayBufferToString;
|
||||
},
|
||||
decrypt: function() {
|
||||
return decrypt;
|
||||
},
|
||||
encrypt: function() {
|
||||
return encrypt;
|
||||
},
|
||||
getActionEncryptionKey: function() {
|
||||
return getActionEncryptionKey;
|
||||
},
|
||||
getClientReferenceManifestForRsc: function() {
|
||||
return getClientReferenceManifestForRsc;
|
||||
},
|
||||
getServerModuleMap: function() {
|
||||
return getServerModuleMap;
|
||||
},
|
||||
setReferenceManifestsSingleton: function() {
|
||||
return setReferenceManifestsSingleton;
|
||||
},
|
||||
stringToUint8Array: function() {
|
||||
return stringToUint8Array;
|
||||
}
|
||||
});
|
||||
const _invarianterror = require("../../shared/lib/invariant-error");
|
||||
const _apppaths = require("../../shared/lib/router/utils/app-paths");
|
||||
const _workasyncstorageexternal = require("./work-async-storage.external");
|
||||
let __next_loaded_action_key;
|
||||
function arrayBufferToString(buffer) {
|
||||
const bytes = new Uint8Array(buffer);
|
||||
const len = bytes.byteLength;
|
||||
// @anonrig: V8 has a limit of 65535 arguments in a function.
|
||||
// For len < 65535, this is faster.
|
||||
// https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623
|
||||
if (len < 65535) {
|
||||
return String.fromCharCode.apply(null, bytes);
|
||||
}
|
||||
let binary = '';
|
||||
for(let i = 0; i < len; i++){
|
||||
binary += String.fromCharCode(bytes[i]);
|
||||
}
|
||||
return binary;
|
||||
}
|
||||
function stringToUint8Array(binary) {
|
||||
const len = binary.length;
|
||||
const arr = new Uint8Array(len);
|
||||
for(let i = 0; i < len; i++){
|
||||
arr[i] = binary.charCodeAt(i);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
function encrypt(key, iv, data) {
|
||||
return crypto.subtle.encrypt({
|
||||
name: 'AES-GCM',
|
||||
iv
|
||||
}, key, data);
|
||||
}
|
||||
function decrypt(key, iv, data) {
|
||||
return crypto.subtle.decrypt({
|
||||
name: 'AES-GCM',
|
||||
iv
|
||||
}, key, data);
|
||||
}
|
||||
// This is a global singleton that is used to encode/decode the action bound args from
|
||||
// the closure. This can't be using a AsyncLocalStorage as it might happen on the module
|
||||
// level. Since the client reference manifest won't be mutated, let's use a global singleton
|
||||
// to keep it.
|
||||
const SERVER_ACTION_MANIFESTS_SINGLETON = Symbol.for('next.server.action-manifests');
|
||||
function setReferenceManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest, serverModuleMap }) {
|
||||
var _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON;
|
||||
// @ts-expect-error
|
||||
const clientReferenceManifestsPerPage = (_globalThis_SERVER_ACTION_MANIFESTS_SINGLETON = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]) == null ? void 0 : _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON.clientReferenceManifestsPerPage;
|
||||
// @ts-expect-error
|
||||
globalThis[SERVER_ACTION_MANIFESTS_SINGLETON] = {
|
||||
clientReferenceManifestsPerPage: {
|
||||
...clientReferenceManifestsPerPage,
|
||||
[(0, _apppaths.normalizeAppPath)(page)]: clientReferenceManifest
|
||||
},
|
||||
serverActionsManifest,
|
||||
serverModuleMap
|
||||
};
|
||||
}
|
||||
function getServerModuleMap() {
|
||||
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
||||
if (!serverActionsManifestSingleton) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E606",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return serverActionsManifestSingleton.serverModuleMap;
|
||||
}
|
||||
function getClientReferenceManifestForRsc() {
|
||||
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
||||
if (!serverActionsManifestSingleton) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E606",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const { clientReferenceManifestsPerPage } = serverActionsManifestSingleton;
|
||||
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
||||
if (!workStore) {
|
||||
// If there's no work store defined, we can assume that a client reference
|
||||
// manifest is needed during module evaluation, e.g. to create a server
|
||||
// action using a higher-order function. This might also use client
|
||||
// components which need to be serialized by Flight, and therefore client
|
||||
// references need to be resolvable. To make this work, we're returning a
|
||||
// merged manifest across all pages. This is fine as long as the module IDs
|
||||
// are not page specific, which they are not for Webpack. TODO: Fix this in
|
||||
// Turbopack.
|
||||
return mergeClientReferenceManifests(clientReferenceManifestsPerPage);
|
||||
}
|
||||
const clientReferenceManifest = clientReferenceManifestsPerPage[workStore.route];
|
||||
if (!clientReferenceManifest) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError(`Missing Client Reference Manifest for ${workStore.route}.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E570",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return clientReferenceManifest;
|
||||
}
|
||||
async function getActionEncryptionKey() {
|
||||
if (__next_loaded_action_key) {
|
||||
return __next_loaded_action_key;
|
||||
}
|
||||
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
||||
if (!serverActionsManifestSingleton) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E606",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const rawKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY || serverActionsManifestSingleton.serverActionsManifest.encryptionKey;
|
||||
if (rawKey === undefined) {
|
||||
throw Object.defineProperty(new _invarianterror.InvariantError('Missing encryption key for Server Actions'), "__NEXT_ERROR_CODE", {
|
||||
value: "E571",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
__next_loaded_action_key = await crypto.subtle.importKey('raw', stringToUint8Array(atob(rawKey)), 'AES-GCM', true, [
|
||||
'encrypt',
|
||||
'decrypt'
|
||||
]);
|
||||
return __next_loaded_action_key;
|
||||
}
|
||||
function mergeClientReferenceManifests(clientReferenceManifestsPerPage) {
|
||||
const clientReferenceManifests = Object.values(clientReferenceManifestsPerPage);
|
||||
const mergedClientReferenceManifest = {
|
||||
clientModules: {},
|
||||
edgeRscModuleMapping: {},
|
||||
rscModuleMapping: {}
|
||||
};
|
||||
for (const clientReferenceManifest of clientReferenceManifests){
|
||||
mergedClientReferenceManifest.clientModules = {
|
||||
...mergedClientReferenceManifest.clientModules,
|
||||
...clientReferenceManifest.clientModules
|
||||
};
|
||||
mergedClientReferenceManifest.edgeRscModuleMapping = {
|
||||
...mergedClientReferenceManifest.edgeRscModuleMapping,
|
||||
...clientReferenceManifest.edgeRscModuleMapping
|
||||
};
|
||||
mergedClientReferenceManifest.rscModuleMapping = {
|
||||
...mergedClientReferenceManifest.rscModuleMapping,
|
||||
...clientReferenceManifest.rscModuleMapping
|
||||
};
|
||||
}
|
||||
return mergedClientReferenceManifest;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=encryption-utils.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption-utils.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
frontend/webapp/node_modules/next/dist/server/app-render/encryption.d.ts
generated
vendored
Normal file
3
frontend/webapp/node_modules/next/dist/server/app-render/encryption.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
import 'server-only';
|
||||
export declare const encryptActionBoundArgs: (actionId: string, ...args: any[]) => Promise<string>;
|
||||
export declare function decryptActionBoundArgs(actionId: string, encryptedPromise: Promise<string>): Promise<unknown>;
|
||||
188
frontend/webapp/node_modules/next/dist/server/app-render/encryption.js
generated
vendored
Normal file
188
frontend/webapp/node_modules/next/dist/server/app-render/encryption.js
generated
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */ "use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
decryptActionBoundArgs: null,
|
||||
encryptActionBoundArgs: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
decryptActionBoundArgs: function() {
|
||||
return decryptActionBoundArgs;
|
||||
},
|
||||
encryptActionBoundArgs: function() {
|
||||
return encryptActionBoundArgs;
|
||||
}
|
||||
});
|
||||
require("server-only");
|
||||
const _serveredge = require("react-server-dom-webpack/server.edge");
|
||||
const _clientedge = require("react-server-dom-webpack/client.edge");
|
||||
const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper");
|
||||
const _encryptionutils = require("./encryption-utils");
|
||||
const _workunitasyncstorageexternal = require("./work-unit-async-storage.external");
|
||||
const _dynamicrendering = require("./dynamic-rendering");
|
||||
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge';
|
||||
const textEncoder = new TextEncoder();
|
||||
const textDecoder = new TextDecoder();
|
||||
/**
|
||||
* Decrypt the serialized string with the action id as the salt.
|
||||
*/ async function decodeActionBoundArg(actionId, arg) {
|
||||
const key = await (0, _encryptionutils.getActionEncryptionKey)();
|
||||
if (typeof key === 'undefined') {
|
||||
throw Object.defineProperty(new Error(`Missing encryption key for Server Action. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
||||
value: "E65",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// Get the iv (16 bytes) and the payload from the arg.
|
||||
const originalPayload = atob(arg);
|
||||
const ivValue = originalPayload.slice(0, 16);
|
||||
const payload = originalPayload.slice(16);
|
||||
const decrypted = textDecoder.decode(await (0, _encryptionutils.decrypt)(key, (0, _encryptionutils.stringToUint8Array)(ivValue), (0, _encryptionutils.stringToUint8Array)(payload)));
|
||||
if (!decrypted.startsWith(actionId)) {
|
||||
throw Object.defineProperty(new Error('Invalid Server Action payload: failed to decrypt.'), "__NEXT_ERROR_CODE", {
|
||||
value: "E191",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return decrypted.slice(actionId.length);
|
||||
}
|
||||
/**
|
||||
* Encrypt the serialized string with the action id as the salt. Add a prefix to
|
||||
* later ensure that the payload is correctly decrypted, similar to a checksum.
|
||||
*/ async function encodeActionBoundArg(actionId, arg) {
|
||||
const key = await (0, _encryptionutils.getActionEncryptionKey)();
|
||||
if (key === undefined) {
|
||||
throw Object.defineProperty(new Error(`Missing encryption key for Server Action. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
||||
value: "E65",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// Get 16 random bytes as iv.
|
||||
const randomBytes = new Uint8Array(16);
|
||||
_workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(randomBytes));
|
||||
const ivValue = (0, _encryptionutils.arrayBufferToString)(randomBytes.buffer);
|
||||
const encrypted = await (0, _encryptionutils.encrypt)(key, randomBytes, textEncoder.encode(actionId + arg));
|
||||
return btoa(ivValue + (0, _encryptionutils.arrayBufferToString)(encrypted));
|
||||
}
|
||||
const encryptActionBoundArgs = _react.default.cache(async function encryptActionBoundArgs(actionId, ...args) {
|
||||
const { clientModules } = (0, _encryptionutils.getClientReferenceManifestForRsc)();
|
||||
// Create an error before any asynchronous calls, to capture the original
|
||||
// call stack in case we need it when the serialization errors.
|
||||
const error = new Error();
|
||||
Error.captureStackTrace(error, encryptActionBoundArgs);
|
||||
let didCatchError = false;
|
||||
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
const hangingInputAbortSignal = (workUnitStore == null ? void 0 : workUnitStore.type) === 'prerender' ? (0, _dynamicrendering.createHangingInputAbortSignal)(workUnitStore) : undefined;
|
||||
// Using Flight to serialize the args into a string.
|
||||
const serialized = await (0, _nodewebstreamshelper.streamToString)((0, _serveredge.renderToReadableStream)(args, clientModules, {
|
||||
signal: hangingInputAbortSignal,
|
||||
onError (err) {
|
||||
if (hangingInputAbortSignal == null ? void 0 : hangingInputAbortSignal.aborted) {
|
||||
return;
|
||||
}
|
||||
// We're only reporting one error at a time, starting with the first.
|
||||
if (didCatchError) {
|
||||
return;
|
||||
}
|
||||
didCatchError = true;
|
||||
// Use the original error message together with the previously created
|
||||
// stack, because err.stack is a useless Flight Server call stack.
|
||||
error.message = err instanceof Error ? err.message : String(err);
|
||||
}
|
||||
}), // We pass the abort signal to `streamToString` so that no chunks are
|
||||
// included that are emitted after the signal was already aborted. This
|
||||
// ensures that we can encode hanging promises.
|
||||
hangingInputAbortSignal);
|
||||
if (didCatchError) {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// Logging the error is needed for server functions that are passed to the
|
||||
// client where the decryption is not done during rendering. Console
|
||||
// replaying allows us to still show the error dev overlay in this case.
|
||||
console.error(error);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
if (!workUnitStore) {
|
||||
return encodeActionBoundArg(actionId, serialized);
|
||||
}
|
||||
const prerenderResumeDataCache = (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore);
|
||||
const renderResumeDataCache = (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore);
|
||||
const cacheKey = actionId + serialized;
|
||||
const cachedEncrypted = (prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.encryptedBoundArgs.get(cacheKey)) ?? (renderResumeDataCache == null ? void 0 : renderResumeDataCache.encryptedBoundArgs.get(cacheKey));
|
||||
if (cachedEncrypted) {
|
||||
return cachedEncrypted;
|
||||
}
|
||||
const cacheSignal = workUnitStore.type === 'prerender' ? workUnitStore.cacheSignal : undefined;
|
||||
cacheSignal == null ? void 0 : cacheSignal.beginRead();
|
||||
const encrypted = await encodeActionBoundArg(actionId, serialized);
|
||||
cacheSignal == null ? void 0 : cacheSignal.endRead();
|
||||
prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.encryptedBoundArgs.set(cacheKey, encrypted);
|
||||
return encrypted;
|
||||
});
|
||||
async function decryptActionBoundArgs(actionId, encryptedPromise) {
|
||||
const encrypted = await encryptedPromise;
|
||||
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
||||
let decrypted;
|
||||
if (workUnitStore) {
|
||||
const cacheSignal = workUnitStore.type === 'prerender' ? workUnitStore.cacheSignal : undefined;
|
||||
const prerenderResumeDataCache = (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore);
|
||||
const renderResumeDataCache = (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore);
|
||||
decrypted = (prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.decryptedBoundArgs.get(encrypted)) ?? (renderResumeDataCache == null ? void 0 : renderResumeDataCache.decryptedBoundArgs.get(encrypted));
|
||||
if (!decrypted) {
|
||||
cacheSignal == null ? void 0 : cacheSignal.beginRead();
|
||||
decrypted = await decodeActionBoundArg(actionId, encrypted);
|
||||
cacheSignal == null ? void 0 : cacheSignal.endRead();
|
||||
prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.decryptedBoundArgs.set(encrypted, decrypted);
|
||||
}
|
||||
} else {
|
||||
decrypted = await decodeActionBoundArg(actionId, encrypted);
|
||||
}
|
||||
const { edgeRscModuleMapping, rscModuleMapping } = (0, _encryptionutils.getClientReferenceManifestForRsc)();
|
||||
// Using Flight to deserialize the args from the string.
|
||||
const deserialized = await (0, _clientedge.createFromReadableStream)(new ReadableStream({
|
||||
start (controller) {
|
||||
controller.enqueue(textEncoder.encode(decrypted));
|
||||
if ((workUnitStore == null ? void 0 : workUnitStore.type) === 'prerender') {
|
||||
// Explicitly don't close the stream here (until prerendering is
|
||||
// complete) so that hanging promises are not rejected.
|
||||
if (workUnitStore.renderSignal.aborted) {
|
||||
controller.close();
|
||||
} else {
|
||||
workUnitStore.renderSignal.addEventListener('abort', ()=>controller.close(), {
|
||||
once: true
|
||||
});
|
||||
}
|
||||
} else {
|
||||
controller.close();
|
||||
}
|
||||
}
|
||||
}), {
|
||||
serverConsumerManifest: {
|
||||
// moduleLoading must be null because we don't want to trigger preloads of ClientReferences
|
||||
// to be added to the current execution. Instead, we'll wait for any ClientReference
|
||||
// to be emitted which themselves will handle the preloading.
|
||||
moduleLoading: null,
|
||||
moduleMap: isEdgeRuntime ? edgeRscModuleMapping : rscModuleMapping,
|
||||
serverModuleMap: (0, _encryptionutils.getServerModuleMap)()
|
||||
}
|
||||
});
|
||||
return deserialized;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=encryption.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/encryption.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
22
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.d.ts
generated
vendored
Normal file
22
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.d.ts
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
export { createTemporaryReferenceSet, renderToReadableStream, decodeReply, decodeAction, decodeFormState, } from 'react-server-dom-webpack/server.edge';
|
||||
export { unstable_prerender as prerender } from 'react-server-dom-webpack/static.edge';
|
||||
import LayoutRouter from '../../client/components/layout-router';
|
||||
import RenderFromTemplateContext from '../../client/components/render-from-template-context';
|
||||
import { workAsyncStorage } from '../app-render/work-async-storage.external';
|
||||
import { workUnitAsyncStorage } from './work-unit-async-storage.external';
|
||||
import { actionAsyncStorage } from '../app-render/action-async-storage.external';
|
||||
import { ClientPageRoot } from '../../client/components/client-page';
|
||||
import { ClientSegmentRoot } from '../../client/components/client-segment';
|
||||
import { createServerSearchParamsForServerPage, createPrerenderSearchParamsForClientPage } from '../request/search-params';
|
||||
import { createServerParamsForServerSegment, createPrerenderParamsForClientSegment } from '../request/params';
|
||||
import * as serverHooks from '../../client/components/hooks-server-context';
|
||||
import { HTTPAccessFallbackBoundary } from '../../client/components/http-access-fallback/error-boundary';
|
||||
import { createMetadataComponents } from '../../lib/metadata/metadata';
|
||||
import '../../client/components/error-boundary';
|
||||
import { MetadataBoundary, ViewportBoundary, OutletBoundary } from '../../client/components/metadata/metadata-boundary';
|
||||
import { preloadStyle, preloadFont, preconnect } from './rsc/preloads';
|
||||
import { Postpone } from './rsc/postpone';
|
||||
import { taintObjectReference } from './rsc/taint';
|
||||
export { collectSegmentData } from './collect-segment-data';
|
||||
declare function patchFetch(): void;
|
||||
export { LayoutRouter, RenderFromTemplateContext, workAsyncStorage, workUnitAsyncStorage, actionAsyncStorage, createServerSearchParamsForServerPage, createPrerenderSearchParamsForClientPage, createServerParamsForServerSegment, createPrerenderParamsForClientSegment, serverHooks, preloadStyle, preloadFont, preconnect, Postpone, MetadataBoundary, ViewportBoundary, OutletBoundary, taintObjectReference, ClientPageRoot, ClientSegmentRoot, HTTPAccessFallbackBoundary, patchFetch, createMetadataComponents, };
|
||||
212
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.js
generated
vendored
Normal file
212
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.js
generated
vendored
Normal file
@@ -0,0 +1,212 @@
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
ClientPageRoot: null,
|
||||
ClientSegmentRoot: null,
|
||||
HTTPAccessFallbackBoundary: null,
|
||||
LayoutRouter: null,
|
||||
MetadataBoundary: null,
|
||||
OutletBoundary: null,
|
||||
Postpone: null,
|
||||
RenderFromTemplateContext: null,
|
||||
ViewportBoundary: null,
|
||||
actionAsyncStorage: null,
|
||||
collectSegmentData: null,
|
||||
createMetadataComponents: null,
|
||||
createPrerenderParamsForClientSegment: null,
|
||||
createPrerenderSearchParamsForClientPage: null,
|
||||
createServerParamsForServerSegment: null,
|
||||
createServerSearchParamsForServerPage: null,
|
||||
createTemporaryReferenceSet: null,
|
||||
decodeAction: null,
|
||||
decodeFormState: null,
|
||||
decodeReply: null,
|
||||
patchFetch: null,
|
||||
preconnect: null,
|
||||
preloadFont: null,
|
||||
preloadStyle: null,
|
||||
prerender: null,
|
||||
renderToReadableStream: null,
|
||||
serverHooks: null,
|
||||
taintObjectReference: null,
|
||||
workAsyncStorage: null,
|
||||
workUnitAsyncStorage: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
ClientPageRoot: function() {
|
||||
return _clientpage.ClientPageRoot;
|
||||
},
|
||||
ClientSegmentRoot: function() {
|
||||
return _clientsegment.ClientSegmentRoot;
|
||||
},
|
||||
HTTPAccessFallbackBoundary: function() {
|
||||
return _errorboundary.HTTPAccessFallbackBoundary;
|
||||
},
|
||||
LayoutRouter: function() {
|
||||
return _layoutrouter.default;
|
||||
},
|
||||
MetadataBoundary: function() {
|
||||
return _metadataboundary.MetadataBoundary;
|
||||
},
|
||||
OutletBoundary: function() {
|
||||
return _metadataboundary.OutletBoundary;
|
||||
},
|
||||
Postpone: function() {
|
||||
return _postpone.Postpone;
|
||||
},
|
||||
RenderFromTemplateContext: function() {
|
||||
return _renderfromtemplatecontext.default;
|
||||
},
|
||||
ViewportBoundary: function() {
|
||||
return _metadataboundary.ViewportBoundary;
|
||||
},
|
||||
actionAsyncStorage: function() {
|
||||
return _actionasyncstorageexternal.actionAsyncStorage;
|
||||
},
|
||||
collectSegmentData: function() {
|
||||
return _collectsegmentdata.collectSegmentData;
|
||||
},
|
||||
createMetadataComponents: function() {
|
||||
return _metadata.createMetadataComponents;
|
||||
},
|
||||
createPrerenderParamsForClientSegment: function() {
|
||||
return _params.createPrerenderParamsForClientSegment;
|
||||
},
|
||||
createPrerenderSearchParamsForClientPage: function() {
|
||||
return _searchparams.createPrerenderSearchParamsForClientPage;
|
||||
},
|
||||
createServerParamsForServerSegment: function() {
|
||||
return _params.createServerParamsForServerSegment;
|
||||
},
|
||||
createServerSearchParamsForServerPage: function() {
|
||||
return _searchparams.createServerSearchParamsForServerPage;
|
||||
},
|
||||
createTemporaryReferenceSet: function() {
|
||||
return _serveredge.createTemporaryReferenceSet;
|
||||
},
|
||||
decodeAction: function() {
|
||||
return _serveredge.decodeAction;
|
||||
},
|
||||
decodeFormState: function() {
|
||||
return _serveredge.decodeFormState;
|
||||
},
|
||||
decodeReply: function() {
|
||||
return _serveredge.decodeReply;
|
||||
},
|
||||
patchFetch: function() {
|
||||
return patchFetch;
|
||||
},
|
||||
preconnect: function() {
|
||||
return _preloads.preconnect;
|
||||
},
|
||||
preloadFont: function() {
|
||||
return _preloads.preloadFont;
|
||||
},
|
||||
preloadStyle: function() {
|
||||
return _preloads.preloadStyle;
|
||||
},
|
||||
prerender: function() {
|
||||
return _staticedge.unstable_prerender;
|
||||
},
|
||||
renderToReadableStream: function() {
|
||||
return _serveredge.renderToReadableStream;
|
||||
},
|
||||
serverHooks: function() {
|
||||
return _hooksservercontext;
|
||||
},
|
||||
taintObjectReference: function() {
|
||||
return _taint.taintObjectReference;
|
||||
},
|
||||
workAsyncStorage: function() {
|
||||
return _workasyncstorageexternal.workAsyncStorage;
|
||||
},
|
||||
workUnitAsyncStorage: function() {
|
||||
return _workunitasyncstorageexternal.workUnitAsyncStorage;
|
||||
}
|
||||
});
|
||||
const _serveredge = require("react-server-dom-webpack/server.edge");
|
||||
const _staticedge = require("react-server-dom-webpack/static.edge");
|
||||
const _layoutrouter = /*#__PURE__*/ _interop_require_default(require("../../client/components/layout-router"));
|
||||
const _renderfromtemplatecontext = /*#__PURE__*/ _interop_require_default(require("../../client/components/render-from-template-context"));
|
||||
const _workasyncstorageexternal = require("../app-render/work-async-storage.external");
|
||||
const _workunitasyncstorageexternal = require("./work-unit-async-storage.external");
|
||||
const _actionasyncstorageexternal = require("../app-render/action-async-storage.external");
|
||||
const _clientpage = require("../../client/components/client-page");
|
||||
const _clientsegment = require("../../client/components/client-segment");
|
||||
const _searchparams = require("../request/search-params");
|
||||
const _params = require("../request/params");
|
||||
const _hooksservercontext = /*#__PURE__*/ _interop_require_wildcard(require("../../client/components/hooks-server-context"));
|
||||
const _errorboundary = require("../../client/components/http-access-fallback/error-boundary");
|
||||
const _metadata = require("../../lib/metadata/metadata");
|
||||
const _patchfetch = require("../lib/patch-fetch");
|
||||
require("../../client/components/error-boundary");
|
||||
const _metadataboundary = require("../../client/components/metadata/metadata-boundary");
|
||||
const _preloads = require("./rsc/preloads");
|
||||
const _postpone = require("./rsc/postpone");
|
||||
const _taint = require("./rsc/taint");
|
||||
const _collectsegmentdata = require("./collect-segment-data");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function _getRequireWildcardCache(nodeInterop) {
|
||||
if (typeof WeakMap !== "function") return null;
|
||||
var cacheBabelInterop = new WeakMap();
|
||||
var cacheNodeInterop = new WeakMap();
|
||||
return (_getRequireWildcardCache = function(nodeInterop) {
|
||||
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
||||
})(nodeInterop);
|
||||
}
|
||||
function _interop_require_wildcard(obj, nodeInterop) {
|
||||
if (!nodeInterop && obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
||||
return {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
var cache = _getRequireWildcardCache(nodeInterop);
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {
|
||||
__proto__: null
|
||||
};
|
||||
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for(var key in obj){
|
||||
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
// patchFetch makes use of APIs such as `React.unstable_postpone` which are only available
|
||||
// in the experimental channel of React, so export it from here so that it comes from the bundled runtime
|
||||
function patchFetch() {
|
||||
return (0, _patchfetch.patchFetch)({
|
||||
workAsyncStorage: _workasyncstorageexternal.workAsyncStorage,
|
||||
workUnitAsyncStorage: _workunitasyncstorageexternal.workUnitAsyncStorage
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=entry-base.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/entry-base.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/entry-base.ts"],"sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nexport {\n createTemporaryReferenceSet,\n renderToReadableStream,\n decodeReply,\n decodeAction,\n decodeFormState,\n} from 'react-server-dom-webpack/server.edge'\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nexport { unstable_prerender as prerender } from 'react-server-dom-webpack/static.edge'\n\nimport LayoutRouter from '../../client/components/layout-router'\nimport RenderFromTemplateContext from '../../client/components/render-from-template-context'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { workUnitAsyncStorage } from './work-unit-async-storage.external'\nimport { actionAsyncStorage } from '../app-render/action-async-storage.external'\nimport { ClientPageRoot } from '../../client/components/client-page'\nimport { ClientSegmentRoot } from '../../client/components/client-segment'\nimport {\n createServerSearchParamsForServerPage,\n createPrerenderSearchParamsForClientPage,\n} from '../request/search-params'\nimport {\n createServerParamsForServerSegment,\n createPrerenderParamsForClientSegment,\n} from '../request/params'\nimport * as serverHooks from '../../client/components/hooks-server-context'\nimport { HTTPAccessFallbackBoundary } from '../../client/components/http-access-fallback/error-boundary'\nimport { createMetadataComponents } from '../../lib/metadata/metadata'\nimport { patchFetch as _patchFetch } from '../lib/patch-fetch'\n// not being used but needs to be included in the client manifest for /_not-found\nimport '../../client/components/error-boundary'\nimport {\n MetadataBoundary,\n ViewportBoundary,\n OutletBoundary,\n} from '../../client/components/metadata/metadata-boundary'\n\nimport { preloadStyle, preloadFont, preconnect } from './rsc/preloads'\nimport { Postpone } from './rsc/postpone'\nimport { taintObjectReference } from './rsc/taint'\nexport { collectSegmentData } from './collect-segment-data'\n\n// patchFetch makes use of APIs such as `React.unstable_postpone` which are only available\n// in the experimental channel of React, so export it from here so that it comes from the bundled runtime\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n LayoutRouter,\n RenderFromTemplateContext,\n workAsyncStorage,\n workUnitAsyncStorage,\n actionAsyncStorage,\n createServerSearchParamsForServerPage,\n createPrerenderSearchParamsForClientPage,\n createServerParamsForServerSegment,\n createPrerenderParamsForClientSegment,\n serverHooks,\n preloadStyle,\n preloadFont,\n preconnect,\n Postpone,\n MetadataBoundary,\n ViewportBoundary,\n OutletBoundary,\n taintObjectReference,\n ClientPageRoot,\n ClientSegmentRoot,\n HTTPAccessFallbackBoundary,\n patchFetch,\n createMetadataComponents,\n}\n"],"names":["ClientPageRoot","ClientSegmentRoot","HTTPAccessFallbackBoundary","LayoutRouter","MetadataBoundary","OutletBoundary","Postpone","RenderFromTemplateContext","ViewportBoundary","actionAsyncStorage","collectSegmentData","createMetadataComponents","createPrerenderParamsForClientSegment","createPrerenderSearchParamsForClientPage","createServerParamsForServerSegment","createServerSearchParamsForServerPage","createTemporaryReferenceSet","decodeAction","decodeFormState","decodeReply","patchFetch","preconnect","preloadFont","preloadStyle","prerender","unstable_prerender","renderToReadableStream","serverHooks","taintObjectReference","workAsyncStorage","workUnitAsyncStorage","_patchFetch"],"mappings":"AAAA,6DAA6D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwE3DA,cAAc;eAAdA,0BAAc;;IACdC,iBAAiB;eAAjBA,gCAAiB;;IACjBC,0BAA0B;eAA1BA,yCAA0B;;IApB1BC,YAAY;eAAZA,qBAAY;;IAcZC,gBAAgB;eAAhBA,kCAAgB;;IAEhBC,cAAc;eAAdA,gCAAc;;IAHdC,QAAQ;eAARA,kBAAQ;;IAZRC,yBAAyB;eAAzBA,kCAAyB;;IAczBC,gBAAgB;eAAhBA,kCAAgB;;IAXhBC,kBAAkB;eAAlBA,8CAAkB;;IAhBXC,kBAAkB;eAAlBA,sCAAkB;;IAkCzBC,wBAAwB;eAAxBA,kCAAwB;;IAdxBC,qCAAqC;eAArCA,6CAAqC;;IAFrCC,wCAAwC;eAAxCA,sDAAwC;;IACxCC,kCAAkC;eAAlCA,0CAAkC;;IAFlCC,qCAAqC;eAArCA,mDAAqC;;IAzDrCC,2BAA2B;eAA3BA,uCAA2B;;IAG3BC,YAAY;eAAZA,wBAAY;;IACZC,eAAe;eAAfA,2BAAe;;IAFfC,WAAW;eAAXA,uBAAW;;IAuEXC,UAAU;eAAVA;;IATAC,UAAU;eAAVA,oBAAU;;IADVC,WAAW;eAAXA,qBAAW;;IADXC,YAAY;eAAZA,sBAAY;;IAtDiBC,SAAS;eAA/BC,8BAAkB;;IAPzBC,sBAAsB;eAAtBA,kCAAsB;;IA4DtBC,WAAW;eAAXA;;IAQAC,oBAAoB;eAApBA,2BAAoB;;IAfpBC,gBAAgB;eAAhBA,0CAAgB;;IAChBC,oBAAoB;eAApBA,kDAAoB;;;4BAlDf;4BAGyC;qEAEvB;kFACa;0CACL;8CACI;4CACF;4BACJ;+BACG;8BAI3B;wBAIA;4EACsB;+BACc;0BACF;4BACC;QAEnC;kCAKA;0BAE+C;0BAC7B;uBACY;oCACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,0FAA0F;AAC1F,yGAAyG;AACzG,SAASV;IACP,OAAOW,IAAAA,sBAAW,EAAC;QACjBF,kBAAAA,0CAAgB;QAChBC,sBAAAA,kDAAoB;IACtB;AACF"}
|
||||
7
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.d.ts
generated
vendored
Normal file
7
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
import RenderResult, { type RenderResultMetadata } from '../render-result';
|
||||
/**
|
||||
* Flight Response is always set to RSC_CONTENT_TYPE_HEADER to ensure it does not get interpreted as HTML.
|
||||
*/
|
||||
export declare class FlightRenderResult extends RenderResult {
|
||||
constructor(response: string | ReadableStream<Uint8Array>, metadata?: RenderResultMetadata);
|
||||
}
|
||||
27
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.js
generated
vendored
Normal file
27
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "FlightRenderResult", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return FlightRenderResult;
|
||||
}
|
||||
});
|
||||
const _approuterheaders = require("../../client/components/app-router-headers");
|
||||
const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result"));
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
class FlightRenderResult extends _renderresult.default {
|
||||
constructor(response, metadata = {}){
|
||||
super(response, {
|
||||
contentType: _approuterheaders.RSC_CONTENT_TYPE_HEADER,
|
||||
metadata
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=flight-render-result.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/flight-render-result.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/flight-render-result.ts"],"sourcesContent":["import { RSC_CONTENT_TYPE_HEADER } from '../../client/components/app-router-headers'\nimport RenderResult, { type RenderResultMetadata } from '../render-result'\n\n/**\n * Flight Response is always set to RSC_CONTENT_TYPE_HEADER to ensure it does not get interpreted as HTML.\n */\nexport class FlightRenderResult extends RenderResult {\n constructor(\n response: string | ReadableStream<Uint8Array>,\n metadata: RenderResultMetadata = {}\n ) {\n super(response, { contentType: RSC_CONTENT_TYPE_HEADER, metadata })\n }\n}\n"],"names":["FlightRenderResult","RenderResult","constructor","response","metadata","contentType","RSC_CONTENT_TYPE_HEADER"],"mappings":";;;;+BAMaA;;;eAAAA;;;kCAN2B;qEACgB;;;;;;AAKjD,MAAMA,2BAA2BC,qBAAY;IAClDC,YACEC,QAA6C,EAC7CC,WAAiC,CAAC,CAAC,CACnC;QACA,KAAK,CAACD,UAAU;YAAEE,aAAaC,yCAAuB;YAAEF;QAAS;IACnE;AACF"}
|
||||
2
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.d.ts
generated
vendored
Normal file
2
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { AppRenderContext } from './app-render';
|
||||
export declare function getAssetQueryString(ctx: AppRenderContext, addTimestamp: boolean): string;
|
||||
29
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.js
generated
vendored
Normal file
29
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.js
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getAssetQueryString", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getAssetQueryString;
|
||||
}
|
||||
});
|
||||
const isDev = process.env.NODE_ENV === 'development';
|
||||
const isTurbopack = !!process.env.TURBOPACK;
|
||||
function getAssetQueryString(ctx, addTimestamp) {
|
||||
let qs = '';
|
||||
// In development we add the request timestamp to allow react to
|
||||
// reload assets when a new RSC response is received.
|
||||
// Turbopack handles HMR of assets itself and react doesn't need to reload them
|
||||
// so this approach is not needed for Turbopack.
|
||||
const shouldAddVersion = isDev && !isTurbopack && addTimestamp;
|
||||
if (shouldAddVersion) {
|
||||
qs += `?v=${ctx.requestTimestamp}`;
|
||||
}
|
||||
if (ctx.renderOpts.deploymentId) {
|
||||
qs += `${shouldAddVersion ? '&' : '?'}dpl=${ctx.renderOpts.deploymentId}`;
|
||||
}
|
||||
return qs;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-asset-query-string.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-asset-query-string.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-asset-query-string.ts"],"sourcesContent":["import type { AppRenderContext } from './app-render'\n\nconst isDev = process.env.NODE_ENV === 'development'\nconst isTurbopack = !!process.env.TURBOPACK\n\nexport function getAssetQueryString(\n ctx: AppRenderContext,\n addTimestamp: boolean\n) {\n let qs = ''\n\n // In development we add the request timestamp to allow react to\n // reload assets when a new RSC response is received.\n // Turbopack handles HMR of assets itself and react doesn't need to reload them\n // so this approach is not needed for Turbopack.\n const shouldAddVersion = isDev && !isTurbopack && addTimestamp\n if (shouldAddVersion) {\n qs += `?v=${ctx.requestTimestamp}`\n }\n\n if (ctx.renderOpts.deploymentId) {\n qs += `${shouldAddVersion ? '&' : '?'}dpl=${ctx.renderOpts.deploymentId}`\n }\n return qs\n}\n"],"names":["getAssetQueryString","isDev","process","env","NODE_ENV","isTurbopack","TURBOPACK","ctx","addTimestamp","qs","shouldAddVersion","requestTimestamp","renderOpts","deploymentId"],"mappings":";;;;+BAKgBA;;;eAAAA;;;AAHhB,MAAMC,QAAQC,QAAQC,GAAG,CAACC,QAAQ,KAAK;AACvC,MAAMC,cAAc,CAAC,CAACH,QAAQC,GAAG,CAACG,SAAS;AAEpC,SAASN,oBACdO,GAAqB,EACrBC,YAAqB;IAErB,IAAIC,KAAK;IAET,gEAAgE;IAChE,qDAAqD;IACrD,+EAA+E;IAC/E,gDAAgD;IAChD,MAAMC,mBAAmBT,SAAS,CAACI,eAAeG;IAClD,IAAIE,kBAAkB;QACpBD,MAAM,CAAC,GAAG,EAAEF,IAAII,gBAAgB,EAAE;IACpC;IAEA,IAAIJ,IAAIK,UAAU,CAACC,YAAY,EAAE;QAC/BJ,MAAM,GAAGC,mBAAmB,MAAM,IAAI,IAAI,EAAEH,IAAIK,UAAU,CAACC,YAAY,EAAE;IAC3E;IACA,OAAOJ;AACT"}
|
||||
9
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.d.ts
generated
vendored
Normal file
9
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.d.ts
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { ClientReferenceManifest, CssResource } from '../../build/webpack/plugins/flight-manifest-plugin';
|
||||
import type { DeepReadonly } from '../../shared/lib/deep-readonly';
|
||||
/**
|
||||
* Get external stylesheet link hrefs based on server CSS manifest.
|
||||
*/
|
||||
export declare function getLinkAndScriptTags(clientReferenceManifest: DeepReadonly<ClientReferenceManifest>, filePath: string, injectedCSS: Set<string>, injectedScripts: Set<string>, collectNewImports?: boolean): {
|
||||
styles: CssResource[];
|
||||
scripts: string[];
|
||||
};
|
||||
48
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js
generated
vendored
Normal file
48
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getLinkAndScriptTags", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getLinkAndScriptTags;
|
||||
}
|
||||
});
|
||||
function getLinkAndScriptTags(clientReferenceManifest, filePath, injectedCSS, injectedScripts, collectNewImports) {
|
||||
var _clientReferenceManifest_entryJSFiles;
|
||||
const filePathWithoutExt = filePath.replace(/\.[^.]+$/, '');
|
||||
const cssChunks = new Set();
|
||||
const jsChunks = new Set();
|
||||
const entryCSSFiles = clientReferenceManifest.entryCSSFiles[filePathWithoutExt];
|
||||
const entryJSFiles = ((_clientReferenceManifest_entryJSFiles = clientReferenceManifest.entryJSFiles) == null ? void 0 : _clientReferenceManifest_entryJSFiles[filePathWithoutExt]) ?? [];
|
||||
if (entryCSSFiles) {
|
||||
for (const css of entryCSSFiles){
|
||||
if (!injectedCSS.has(css.path)) {
|
||||
if (collectNewImports) {
|
||||
injectedCSS.add(css.path);
|
||||
}
|
||||
cssChunks.add(css);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (entryJSFiles) {
|
||||
for (const file of entryJSFiles){
|
||||
if (!injectedScripts.has(file)) {
|
||||
if (collectNewImports) {
|
||||
injectedScripts.add(file);
|
||||
}
|
||||
jsChunks.add(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
styles: [
|
||||
...cssChunks
|
||||
],
|
||||
scripts: [
|
||||
...jsChunks
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-css-inlined-link-tags.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-css-inlined-link-tags.tsx"],"sourcesContent":["import type {\n ClientReferenceManifest,\n CssResource,\n} from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\n\n/**\n * Get external stylesheet link hrefs based on server CSS manifest.\n */\nexport function getLinkAndScriptTags(\n clientReferenceManifest: DeepReadonly<ClientReferenceManifest>,\n filePath: string,\n injectedCSS: Set<string>,\n injectedScripts: Set<string>,\n collectNewImports?: boolean\n): { styles: CssResource[]; scripts: string[] } {\n const filePathWithoutExt = filePath.replace(/\\.[^.]+$/, '')\n const cssChunks = new Set<CssResource>()\n const jsChunks = new Set<string>()\n\n const entryCSSFiles =\n clientReferenceManifest.entryCSSFiles[filePathWithoutExt]\n const entryJSFiles =\n clientReferenceManifest.entryJSFiles?.[filePathWithoutExt] ?? []\n\n if (entryCSSFiles) {\n for (const css of entryCSSFiles) {\n if (!injectedCSS.has(css.path)) {\n if (collectNewImports) {\n injectedCSS.add(css.path)\n }\n cssChunks.add(css)\n }\n }\n }\n\n if (entryJSFiles) {\n for (const file of entryJSFiles) {\n if (!injectedScripts.has(file)) {\n if (collectNewImports) {\n injectedScripts.add(file)\n }\n jsChunks.add(file)\n }\n }\n }\n\n return { styles: [...cssChunks], scripts: [...jsChunks] }\n}\n"],"names":["getLinkAndScriptTags","clientReferenceManifest","filePath","injectedCSS","injectedScripts","collectNewImports","filePathWithoutExt","replace","cssChunks","Set","jsChunks","entryCSSFiles","entryJSFiles","css","has","path","add","file","styles","scripts"],"mappings":";;;;+BASgBA;;;eAAAA;;;AAAT,SAASA,qBACdC,uBAA8D,EAC9DC,QAAgB,EAChBC,WAAwB,EACxBC,eAA4B,EAC5BC,iBAA2B;QASzBJ;IAPF,MAAMK,qBAAqBJ,SAASK,OAAO,CAAC,YAAY;IACxD,MAAMC,YAAY,IAAIC;IACtB,MAAMC,WAAW,IAAID;IAErB,MAAME,gBACJV,wBAAwBU,aAAa,CAACL,mBAAmB;IAC3D,MAAMM,eACJX,EAAAA,wCAAAA,wBAAwBW,YAAY,qBAApCX,qCAAsC,CAACK,mBAAmB,KAAI,EAAE;IAElE,IAAIK,eAAe;QACjB,KAAK,MAAME,OAAOF,cAAe;YAC/B,IAAI,CAACR,YAAYW,GAAG,CAACD,IAAIE,IAAI,GAAG;gBAC9B,IAAIV,mBAAmB;oBACrBF,YAAYa,GAAG,CAACH,IAAIE,IAAI;gBAC1B;gBACAP,UAAUQ,GAAG,CAACH;YAChB;QACF;IACF;IAEA,IAAID,cAAc;QAChB,KAAK,MAAMK,QAAQL,aAAc;YAC/B,IAAI,CAACR,gBAAgBU,GAAG,CAACG,OAAO;gBAC9B,IAAIZ,mBAAmB;oBACrBD,gBAAgBY,GAAG,CAACC;gBACtB;gBACAP,SAASM,GAAG,CAACC;YACf;QACF;IACF;IAEA,OAAO;QAAEC,QAAQ;eAAIV;SAAU;QAAEW,SAAS;eAAIT;SAAS;IAAC;AAC1D"}
|
||||
11
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.d.ts
generated
vendored
Normal file
11
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.d.ts
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
import React from 'react';
|
||||
import type { AppRenderContext } from './app-render';
|
||||
import type { PreloadCallbacks } from './types';
|
||||
export declare function getLayerAssets({ ctx, layoutOrPagePath, injectedCSS: injectedCSSWithCurrentLayout, injectedJS: injectedJSWithCurrentLayout, injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout, preloadCallbacks, }: {
|
||||
layoutOrPagePath: string | undefined;
|
||||
injectedCSS: Set<string>;
|
||||
injectedJS: Set<string>;
|
||||
injectedFontPreloadTags: Set<string>;
|
||||
ctx: AppRenderContext;
|
||||
preloadCallbacks: PreloadCallbacks;
|
||||
}): React.ReactNode;
|
||||
70
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.js
generated
vendored
Normal file
70
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.js
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getLayerAssets", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getLayerAssets;
|
||||
}
|
||||
});
|
||||
const _jsxruntime = require("react/jsx-runtime");
|
||||
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
||||
const _getcssinlinedlinktags = require("./get-css-inlined-link-tags");
|
||||
const _getpreloadablefonts = require("./get-preloadable-fonts");
|
||||
const _getassetquerystring = require("./get-asset-query-string");
|
||||
const _encodeuripath = require("../../shared/lib/encode-uri-path");
|
||||
const _rendercssresource = require("./render-css-resource");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function getLayerAssets({ ctx, layoutOrPagePath, injectedCSS: injectedCSSWithCurrentLayout, injectedJS: injectedJSWithCurrentLayout, injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout, preloadCallbacks }) {
|
||||
const { styles: styleTags, scripts: scriptTags } = layoutOrPagePath ? (0, _getcssinlinedlinktags.getLinkAndScriptTags)(ctx.clientReferenceManifest, layoutOrPagePath, injectedCSSWithCurrentLayout, injectedJSWithCurrentLayout, true) : {
|
||||
styles: [],
|
||||
scripts: []
|
||||
};
|
||||
const preloadedFontFiles = layoutOrPagePath ? (0, _getpreloadablefonts.getPreloadableFonts)(ctx.renderOpts.nextFontManifest, layoutOrPagePath, injectedFontPreloadTagsWithCurrentLayout) : null;
|
||||
if (preloadedFontFiles) {
|
||||
if (preloadedFontFiles.length) {
|
||||
for(let i = 0; i < preloadedFontFiles.length; i++){
|
||||
const fontFilename = preloadedFontFiles[i];
|
||||
const ext = /\.(woff|woff2|eot|ttf|otf)$/.exec(fontFilename)[1];
|
||||
const type = `font/${ext}`;
|
||||
const href = `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(fontFilename)}`;
|
||||
preloadCallbacks.push(()=>{
|
||||
ctx.componentMod.preloadFont(href, type, ctx.renderOpts.crossOrigin, ctx.nonce);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
let url = new URL(ctx.assetPrefix);
|
||||
preloadCallbacks.push(()=>{
|
||||
ctx.componentMod.preconnect(url.origin, 'anonymous', ctx.nonce);
|
||||
});
|
||||
} catch (error) {
|
||||
// assetPrefix must not be a fully qualified domain name. We assume
|
||||
// we should preconnect to same origin instead
|
||||
preloadCallbacks.push(()=>{
|
||||
ctx.componentMod.preconnect('/', 'anonymous', ctx.nonce);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
const styles = (0, _rendercssresource.renderCssResource)(styleTags, ctx, preloadCallbacks);
|
||||
const scripts = scriptTags ? scriptTags.map((href, index)=>{
|
||||
const fullSrc = `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(href)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`;
|
||||
return /*#__PURE__*/ (0, _jsxruntime.jsx)("script", {
|
||||
src: fullSrc,
|
||||
async: true,
|
||||
nonce: ctx.nonce
|
||||
}, `script-${index}`);
|
||||
}) : [];
|
||||
return styles.length || scripts.length ? [
|
||||
...styles,
|
||||
...scripts
|
||||
] : null;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-layer-assets.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-layer-assets.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
10
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.d.ts
generated
vendored
Normal file
10
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.d.ts
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
import type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin';
|
||||
import type { DeepReadonly } from '../../shared/lib/deep-readonly';
|
||||
/**
|
||||
* Get hrefs for fonts to preload
|
||||
* Returns null if there are no fonts at all.
|
||||
* Returns string[] if there are fonts to preload (font paths)
|
||||
* Returns empty string[] if there are fonts but none to preload and no other fonts have been preloaded
|
||||
* Returns null if there are fonts but none to preload and at least some were previously preloaded
|
||||
*/
|
||||
export declare function getPreloadableFonts(nextFontManifest: DeepReadonly<NextFontManifest> | undefined, filePath: string | undefined, injectedFontPreloadTags: Set<string>): string[] | null;
|
||||
39
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.js
generated
vendored
Normal file
39
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.js
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getPreloadableFonts", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getPreloadableFonts;
|
||||
}
|
||||
});
|
||||
function getPreloadableFonts(nextFontManifest, filePath, injectedFontPreloadTags) {
|
||||
if (!nextFontManifest || !filePath) {
|
||||
return null;
|
||||
}
|
||||
const filepathWithoutExtension = filePath.replace(/\.[^.]+$/, '');
|
||||
const fontFiles = new Set();
|
||||
let foundFontUsage = false;
|
||||
const preloadedFontFiles = nextFontManifest.app[filepathWithoutExtension];
|
||||
if (preloadedFontFiles) {
|
||||
foundFontUsage = true;
|
||||
for (const fontFile of preloadedFontFiles){
|
||||
if (!injectedFontPreloadTags.has(fontFile)) {
|
||||
fontFiles.add(fontFile);
|
||||
injectedFontPreloadTags.add(fontFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fontFiles.size) {
|
||||
return [
|
||||
...fontFiles
|
||||
].sort();
|
||||
} else if (foundFontUsage && injectedFontPreloadTags.size === 0) {
|
||||
return [];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-preloadable-fonts.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-preloadable-fonts.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-preloadable-fonts.tsx"],"sourcesContent":["import type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\n\n/**\n * Get hrefs for fonts to preload\n * Returns null if there are no fonts at all.\n * Returns string[] if there are fonts to preload (font paths)\n * Returns empty string[] if there are fonts but none to preload and no other fonts have been preloaded\n * Returns null if there are fonts but none to preload and at least some were previously preloaded\n */\nexport function getPreloadableFonts(\n nextFontManifest: DeepReadonly<NextFontManifest> | undefined,\n filePath: string | undefined,\n injectedFontPreloadTags: Set<string>\n): string[] | null {\n if (!nextFontManifest || !filePath) {\n return null\n }\n const filepathWithoutExtension = filePath.replace(/\\.[^.]+$/, '')\n const fontFiles = new Set<string>()\n let foundFontUsage = false\n\n const preloadedFontFiles = nextFontManifest.app[filepathWithoutExtension]\n if (preloadedFontFiles) {\n foundFontUsage = true\n for (const fontFile of preloadedFontFiles) {\n if (!injectedFontPreloadTags.has(fontFile)) {\n fontFiles.add(fontFile)\n injectedFontPreloadTags.add(fontFile)\n }\n }\n }\n\n if (fontFiles.size) {\n return [...fontFiles].sort()\n } else if (foundFontUsage && injectedFontPreloadTags.size === 0) {\n return []\n } else {\n return null\n }\n}\n"],"names":["getPreloadableFonts","nextFontManifest","filePath","injectedFontPreloadTags","filepathWithoutExtension","replace","fontFiles","Set","foundFontUsage","preloadedFontFiles","app","fontFile","has","add","size","sort"],"mappings":";;;;+BAUgBA;;;eAAAA;;;AAAT,SAASA,oBACdC,gBAA4D,EAC5DC,QAA4B,EAC5BC,uBAAoC;IAEpC,IAAI,CAACF,oBAAoB,CAACC,UAAU;QAClC,OAAO;IACT;IACA,MAAME,2BAA2BF,SAASG,OAAO,CAAC,YAAY;IAC9D,MAAMC,YAAY,IAAIC;IACtB,IAAIC,iBAAiB;IAErB,MAAMC,qBAAqBR,iBAAiBS,GAAG,CAACN,yBAAyB;IACzE,IAAIK,oBAAoB;QACtBD,iBAAiB;QACjB,KAAK,MAAMG,YAAYF,mBAAoB;YACzC,IAAI,CAACN,wBAAwBS,GAAG,CAACD,WAAW;gBAC1CL,UAAUO,GAAG,CAACF;gBACdR,wBAAwBU,GAAG,CAACF;YAC9B;QACF;IACF;IAEA,IAAIL,UAAUQ,IAAI,EAAE;QAClB,OAAO;eAAIR;SAAU,CAACS,IAAI;IAC5B,OAAO,IAAIP,kBAAkBL,wBAAwBW,IAAI,KAAK,GAAG;QAC/D,OAAO,EAAE;IACX,OAAO;QACL,OAAO;IACT;AACF"}
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.d.ts
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export declare function getScriptNonceFromHeader(cspHeaderValue: string): string | undefined;
|
||||
44
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js
generated
vendored
Normal file
44
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getScriptNonceFromHeader", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getScriptNonceFromHeader;
|
||||
}
|
||||
});
|
||||
const _htmlescape = require("../htmlescape");
|
||||
function getScriptNonceFromHeader(cspHeaderValue) {
|
||||
var _directive_split_slice_map_find;
|
||||
const directives = cspHeaderValue// Directives are split by ';'.
|
||||
.split(';').map((directive)=>directive.trim());
|
||||
// First try to find the directive for the 'script-src', otherwise try to
|
||||
// fallback to the 'default-src'.
|
||||
const directive = directives.find((dir)=>dir.startsWith('script-src')) || directives.find((dir)=>dir.startsWith('default-src'));
|
||||
// If no directive could be found, then we're done.
|
||||
if (!directive) {
|
||||
return;
|
||||
}
|
||||
// Extract the nonce from the directive
|
||||
const nonce = (_directive_split_slice_map_find = directive.split(' ')// Remove the 'strict-src'/'default-src' string, this can't be the nonce.
|
||||
.slice(1).map((source)=>source.trim())// Find the first source with the 'nonce-' prefix.
|
||||
.find((source)=>source.startsWith("'nonce-") && source.length > 8 && source.endsWith("'"))) == null ? void 0 : _directive_split_slice_map_find.slice(7, -1);
|
||||
// If we could't find the nonce, then we're done.
|
||||
if (!nonce) {
|
||||
return;
|
||||
}
|
||||
// Don't accept the nonce value if it contains HTML escape characters.
|
||||
// Technically, the spec requires a base64'd value, but this is just an
|
||||
// extra layer.
|
||||
if (_htmlescape.ESCAPE_REGEX.test(nonce)) {
|
||||
throw Object.defineProperty(new Error('Nonce value from Content-Security-Policy contained HTML escape characters.\nLearn more: https://nextjs.org/docs/messages/nonce-contained-invalid-characters'), "__NEXT_ERROR_CODE", {
|
||||
value: "E440",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return nonce;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-script-nonce-from-header.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-script-nonce-from-header.tsx"],"sourcesContent":["import { ESCAPE_REGEX } from '../htmlescape'\n\nexport function getScriptNonceFromHeader(\n cspHeaderValue: string\n): string | undefined {\n const directives = cspHeaderValue\n // Directives are split by ';'.\n .split(';')\n .map((directive) => directive.trim())\n\n // First try to find the directive for the 'script-src', otherwise try to\n // fallback to the 'default-src'.\n const directive =\n directives.find((dir) => dir.startsWith('script-src')) ||\n directives.find((dir) => dir.startsWith('default-src'))\n\n // If no directive could be found, then we're done.\n if (!directive) {\n return\n }\n\n // Extract the nonce from the directive\n const nonce = directive\n .split(' ')\n // Remove the 'strict-src'/'default-src' string, this can't be the nonce.\n .slice(1)\n .map((source) => source.trim())\n // Find the first source with the 'nonce-' prefix.\n .find(\n (source) =>\n source.startsWith(\"'nonce-\") &&\n source.length > 8 &&\n source.endsWith(\"'\")\n )\n // Grab the nonce by trimming the 'nonce-' prefix.\n ?.slice(7, -1)\n\n // If we could't find the nonce, then we're done.\n if (!nonce) {\n return\n }\n\n // Don't accept the nonce value if it contains HTML escape characters.\n // Technically, the spec requires a base64'd value, but this is just an\n // extra layer.\n if (ESCAPE_REGEX.test(nonce)) {\n throw new Error(\n 'Nonce value from Content-Security-Policy contained HTML escape characters.\\nLearn more: https://nextjs.org/docs/messages/nonce-contained-invalid-characters'\n )\n }\n\n return nonce\n}\n"],"names":["getScriptNonceFromHeader","cspHeaderValue","directive","directives","split","map","trim","find","dir","startsWith","nonce","slice","source","length","endsWith","ESCAPE_REGEX","test","Error"],"mappings":";;;;+BAEgBA;;;eAAAA;;;4BAFa;AAEtB,SAASA,yBACdC,cAAsB;QAmBRC;IAjBd,MAAMC,aAAaF,cACjB,+BAA+B;KAC9BG,KAAK,CAAC,KACNC,GAAG,CAAC,CAACH,YAAcA,UAAUI,IAAI;IAEpC,yEAAyE;IACzE,iCAAiC;IACjC,MAAMJ,YACJC,WAAWI,IAAI,CAAC,CAACC,MAAQA,IAAIC,UAAU,CAAC,kBACxCN,WAAWI,IAAI,CAAC,CAACC,MAAQA,IAAIC,UAAU,CAAC;IAE1C,mDAAmD;IACnD,IAAI,CAACP,WAAW;QACd;IACF;IAEA,uCAAuC;IACvC,MAAMQ,SAAQR,kCAAAA,UACXE,KAAK,CAAC,IACP,yEAAyE;KACxEO,KAAK,CAAC,GACNN,GAAG,CAAC,CAACO,SAAWA,OAAON,IAAI,GAC5B,kDAAkD;KACjDC,IAAI,CACH,CAACK,SACCA,OAAOH,UAAU,CAAC,cAClBG,OAAOC,MAAM,GAAG,KAChBD,OAAOE,QAAQ,CAAC,0BAVRZ,gCAaVS,KAAK,CAAC,GAAG,CAAC;IAEd,iDAAiD;IACjD,IAAI,CAACD,OAAO;QACV;IACF;IAEA,sEAAsE;IACtE,uEAAuE;IACvE,eAAe;IACf,IAAIK,wBAAY,CAACC,IAAI,CAACN,QAAQ;QAC5B,MAAM,qBAEL,CAFK,IAAIO,MACR,gKADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,OAAOP;AACT"}
|
||||
8
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.d.ts
generated
vendored
Normal file
8
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.d.ts
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { DynamicParamTypes } from './types';
|
||||
/**
|
||||
* Parse dynamic route segment to type of parameter
|
||||
*/
|
||||
export declare function getSegmentParam(segment: string): {
|
||||
param: string;
|
||||
type: DynamicParamTypes;
|
||||
} | null;
|
||||
42
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.js
generated
vendored
Normal file
42
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.js
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getSegmentParam", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getSegmentParam;
|
||||
}
|
||||
});
|
||||
const _interceptionroutes = require("../../shared/lib/router/utils/interception-routes");
|
||||
function getSegmentParam(segment) {
|
||||
const interceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((marker)=>segment.startsWith(marker));
|
||||
// if an interception marker is part of the path segment, we need to jump ahead
|
||||
// to the relevant portion for param parsing
|
||||
if (interceptionMarker) {
|
||||
segment = segment.slice(interceptionMarker.length);
|
||||
}
|
||||
if (segment.startsWith('[[...') && segment.endsWith(']]')) {
|
||||
return {
|
||||
// TODO-APP: Optional catchall does not currently work with parallel routes,
|
||||
// so for now aren't handling a potential interception marker.
|
||||
type: 'optional-catchall',
|
||||
param: segment.slice(5, -2)
|
||||
};
|
||||
}
|
||||
if (segment.startsWith('[...') && segment.endsWith(']')) {
|
||||
return {
|
||||
type: interceptionMarker ? 'catchall-intercepted' : 'catchall',
|
||||
param: segment.slice(4, -1)
|
||||
};
|
||||
}
|
||||
if (segment.startsWith('[') && segment.endsWith(']')) {
|
||||
return {
|
||||
type: interceptionMarker ? 'dynamic-intercepted' : 'dynamic',
|
||||
param: segment.slice(1, -1)
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-segment-param.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-segment-param.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-segment-param.tsx"],"sourcesContent":["import { INTERCEPTION_ROUTE_MARKERS } from '../../shared/lib/router/utils/interception-routes'\nimport type { DynamicParamTypes } from './types'\n\n/**\n * Parse dynamic route segment to type of parameter\n */\nexport function getSegmentParam(segment: string): {\n param: string\n type: DynamicParamTypes\n} | null {\n const interceptionMarker = INTERCEPTION_ROUTE_MARKERS.find((marker) =>\n segment.startsWith(marker)\n )\n\n // if an interception marker is part of the path segment, we need to jump ahead\n // to the relevant portion for param parsing\n if (interceptionMarker) {\n segment = segment.slice(interceptionMarker.length)\n }\n\n if (segment.startsWith('[[...') && segment.endsWith(']]')) {\n return {\n // TODO-APP: Optional catchall does not currently work with parallel routes,\n // so for now aren't handling a potential interception marker.\n type: 'optional-catchall',\n param: segment.slice(5, -2),\n }\n }\n\n if (segment.startsWith('[...') && segment.endsWith(']')) {\n return {\n type: interceptionMarker ? 'catchall-intercepted' : 'catchall',\n param: segment.slice(4, -1),\n }\n }\n\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return {\n type: interceptionMarker ? 'dynamic-intercepted' : 'dynamic',\n param: segment.slice(1, -1),\n }\n }\n\n return null\n}\n"],"names":["getSegmentParam","segment","interceptionMarker","INTERCEPTION_ROUTE_MARKERS","find","marker","startsWith","slice","length","endsWith","type","param"],"mappings":";;;;+BAMgBA;;;eAAAA;;;oCAN2B;AAMpC,SAASA,gBAAgBC,OAAe;IAI7C,MAAMC,qBAAqBC,8CAA0B,CAACC,IAAI,CAAC,CAACC,SAC1DJ,QAAQK,UAAU,CAACD;IAGrB,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAIH,oBAAoB;QACtBD,UAAUA,QAAQM,KAAK,CAACL,mBAAmBM,MAAM;IACnD;IAEA,IAAIP,QAAQK,UAAU,CAAC,YAAYL,QAAQQ,QAAQ,CAAC,OAAO;QACzD,OAAO;YACL,4EAA4E;YAC5E,8DAA8D;YAC9DC,MAAM;YACNC,OAAOV,QAAQM,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,IAAIN,QAAQK,UAAU,CAAC,WAAWL,QAAQQ,QAAQ,CAAC,MAAM;QACvD,OAAO;YACLC,MAAMR,qBAAqB,yBAAyB;YACpDS,OAAOV,QAAQM,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,IAAIN,QAAQK,UAAU,CAAC,QAAQL,QAAQQ,QAAQ,CAAC,MAAM;QACpD,OAAO;YACLC,MAAMR,qBAAqB,wBAAwB;YACnDS,OAAOV,QAAQM,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,OAAO;AACT"}
|
||||
6
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.d.ts
generated
vendored
Normal file
6
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.d.ts
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import type { DynamicParamTypes, DynamicParamTypesShort } from './types';
|
||||
export declare const dynamicParamTypes: Record<DynamicParamTypes, DynamicParamTypesShort>;
|
||||
/**
|
||||
* Shorten the dynamic param in order to make it smaller when transmitted to the browser.
|
||||
*/
|
||||
export declare function getShortDynamicParamType(type: DynamicParamTypes): DynamicParamTypesShort;
|
||||
42
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js
generated
vendored
Normal file
42
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
dynamicParamTypes: null,
|
||||
getShortDynamicParamType: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
dynamicParamTypes: function() {
|
||||
return dynamicParamTypes;
|
||||
},
|
||||
getShortDynamicParamType: function() {
|
||||
return getShortDynamicParamType;
|
||||
}
|
||||
});
|
||||
const dynamicParamTypes = {
|
||||
catchall: 'c',
|
||||
'catchall-intercepted': 'ci',
|
||||
'optional-catchall': 'oc',
|
||||
dynamic: 'd',
|
||||
'dynamic-intercepted': 'di'
|
||||
};
|
||||
function getShortDynamicParamType(type) {
|
||||
const short = dynamicParamTypes[type];
|
||||
if (!short) {
|
||||
throw Object.defineProperty(new Error('Unknown dynamic param type'), "__NEXT_ERROR_CODE", {
|
||||
value: "E378",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
return short;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=get-short-dynamic-param-type.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/get-short-dynamic-param-type.tsx"],"sourcesContent":["import type { DynamicParamTypes, DynamicParamTypesShort } from './types'\n\nexport const dynamicParamTypes: Record<\n DynamicParamTypes,\n DynamicParamTypesShort\n> = {\n catchall: 'c',\n 'catchall-intercepted': 'ci',\n 'optional-catchall': 'oc',\n dynamic: 'd',\n 'dynamic-intercepted': 'di',\n}\n\n/**\n * Shorten the dynamic param in order to make it smaller when transmitted to the browser.\n */\nexport function getShortDynamicParamType(\n type: DynamicParamTypes\n): DynamicParamTypesShort {\n const short = dynamicParamTypes[type]\n if (!short) {\n throw new Error('Unknown dynamic param type')\n }\n return short\n}\n"],"names":["dynamicParamTypes","getShortDynamicParamType","catchall","dynamic","type","short","Error"],"mappings":";;;;;;;;;;;;;;;IAEaA,iBAAiB;eAAjBA;;IAcGC,wBAAwB;eAAxBA;;;AAdT,MAAMD,oBAGT;IACFE,UAAU;IACV,wBAAwB;IACxB,qBAAqB;IACrBC,SAAS;IACT,uBAAuB;AACzB;AAKO,SAASF,yBACdG,IAAuB;IAEvB,MAAMC,QAAQL,iBAAiB,CAACI,KAAK;IACrC,IAAI,CAACC,OAAO;QACV,MAAM,qBAAuC,CAAvC,IAAIC,MAAM,+BAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAsC;IAC9C;IACA,OAAOD;AACT"}
|
||||
2
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.d.ts
generated
vendored
Normal file
2
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { LoaderTree } from '../lib/app-dir-module';
|
||||
export declare function hasLoadingComponentInTree(tree: LoaderTree): boolean;
|
||||
19
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js
generated
vendored
Normal file
19
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "hasLoadingComponentInTree", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return hasLoadingComponentInTree;
|
||||
}
|
||||
});
|
||||
function hasLoadingComponentInTree(tree) {
|
||||
const [, parallelRoutes, { loading }] = tree;
|
||||
if (loading) {
|
||||
return true;
|
||||
}
|
||||
return Object.values(parallelRoutes).some((parallelRoute)=>hasLoadingComponentInTree(parallelRoute));
|
||||
}
|
||||
|
||||
//# sourceMappingURL=has-loading-component-in-tree.js.map
|
||||
1
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js.map
generated
vendored
Normal file
1
frontend/webapp/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../src/server/app-render/has-loading-component-in-tree.tsx"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\n\nexport function hasLoadingComponentInTree(tree: LoaderTree): boolean {\n const [, parallelRoutes, { loading }] = tree\n\n if (loading) {\n return true\n }\n\n return Object.values(parallelRoutes).some((parallelRoute) =>\n hasLoadingComponentInTree(parallelRoute)\n ) as boolean\n}\n"],"names":["hasLoadingComponentInTree","tree","parallelRoutes","loading","Object","values","some","parallelRoute"],"mappings":";;;;+BAEgBA;;;eAAAA;;;AAAT,SAASA,0BAA0BC,IAAgB;IACxD,MAAM,GAAGC,gBAAgB,EAAEC,OAAO,EAAE,CAAC,GAAGF;IAExC,IAAIE,SAAS;QACX,OAAO;IACT;IAEA,OAAOC,OAAOC,MAAM,CAACH,gBAAgBI,IAAI,CAAC,CAACC,gBACzCP,0BAA0BO;AAE9B"}
|
||||
4
frontend/webapp/node_modules/next/dist/server/app-render/interop-default.d.ts
generated
vendored
Normal file
4
frontend/webapp/node_modules/next/dist/server/app-render/interop-default.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* Interop between "export default" and "module.exports".
|
||||
*/
|
||||
export declare function interopDefault(mod: any): any;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user