| Server IP : 159.203.156.69 / Your IP : 216.73.217.172 Web Server : nginx/1.24.0 System : Linux main-ubuntu 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/tanviranik.com/node_modules/vinext/dist/server/ |
Upload File : |
import { resolveAppPageSpecialError } from "./app-page-execution.js";
//#region src/server/app-rsc-errors.ts
function hasDigest(error) {
return Boolean(error && typeof error === "object" && "digest" in error);
}
function getThrownValueMessage(error) {
return error instanceof Error ? error.message : String(error);
}
function getThrownValueStack(error) {
return error instanceof Error ? error.stack || "" : "";
}
/**
* djb2 hash matching Next.js's string-hash package for RSC error digests.
*/
function errorDigest(input) {
let hash = 5381;
for (let i = input.length - 1; i >= 0; i--) hash = hash * 33 ^ input.charCodeAt(i);
return (hash >>> 0).toString();
}
function sanitizeErrorForClient(error, nodeEnv = process.env.NODE_ENV) {
if (resolveAppPageSpecialError(error)) return error;
if (nodeEnv !== "production") return error;
const sanitized = /* @__PURE__ */ new Error("An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.");
sanitized.digest = errorDigest(getThrownValueMessage(error) + getThrownValueStack(error));
return sanitized;
}
function createRscOnErrorHandler(options) {
return (error) => {
const nodeEnv = options.nodeEnv ?? process.env.NODE_ENV;
if (hasDigest(error)) return String(error.digest);
if (nodeEnv !== "production" && error instanceof Error && error.message.includes("Only plain objects, and a few built-ins, can be passed to Client Components")) {
console.error("[vinext] RSC serialization error: a non-plain object was passed from a Server Component to a Client Component.\n\nCommon causes:\n * Passing a module namespace (import * as X) directly as a prop.\n Unlike Next.js (webpack), Vite produces real ESM module namespace objects\n which are not serializable. Fix: pass individual values instead,\n e.g. <Comp value={module.value} />\n * Passing a class instance (new Foo()) as a prop.\n Fix: convert to a plain object, e.g. { id: foo.id, name: foo.name }\n * Passing a Date, Map, or Set. Use .toISOString(), [...map.entries()], etc.\n * Passing Object.create(null). Use { ...obj } to restore a prototype.\n\nOriginal error:", error.message);
return;
}
if (options.requestInfo && options.errorContext && error) options.reportRequestError(error instanceof Error ? error : new Error(getThrownValueMessage(error)), options.requestInfo, options.errorContext);
if (nodeEnv === "production" && error) return errorDigest(getThrownValueMessage(error) + getThrownValueStack(error));
};
}
//#endregion
export { createRscOnErrorHandler, errorDigest, sanitizeErrorForClient };
//# sourceMappingURL=app-rsc-errors.js.map