vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
52 lines (49 loc) • 6.05 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { createLogger } from 'vite';
import { toError } from './toError.js';
import { getNodeEnv } from '../config/getNodeEnv.js';
import { logError } from './logError.js';
import { PANIC_SYMBOL } from './shouldPanic.js';
let errRepeat = 0;
let lastError = null;
const handleError = function _handleError(options) {
const {
error,
errorInfo,
logger = createLogger(),
mode = getNodeEnv(),
panicThreshold = "none",
critical = false,
log = false
} = options;
if (errorInfo != null) {
const errInfo = new Error(`Digest: ${errorInfo.digest ?? "unknown"}`);
errInfo.stack = errorInfo.componentStack ?? void 0;
errInfo.name = "ErrorInfo";
if (log) logError(errInfo, logger, mode);
}
const err = toError(error, errorInfo ?? void 0);
if (panicThreshold === "all_errors" || critical && panicThreshold === "critical_errors") {
err[PANIC_SYMBOL] = true;
return err;
}
if (log) {
if (lastError?.message === error?.message && lastError?.stack === error?.stack) {
errRepeat++;
const repeatedFrom = new Error("Error repeated", { cause: err });
repeatedFrom.stack = err.stack;
logger.error(`${err.message} (${errRepeat})`, { error: repeatedFrom });
} else {
errRepeat = 0;
lastError = error;
logError(err, logger, mode);
}
}
return null;
};
export { handleError };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlRXJyb3IuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9lcnJvci9oYW5kbGVFcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHsgdG9FcnJvciB9IGZyb20gXCIuL3RvRXJyb3IuanNcIjtcbmltcG9ydCB7IGdldE5vZGVFbnYgfSBmcm9tIFwiLi4vY29uZmlnL2dldE5vZGVFbnYuanNcIjtcbmltcG9ydCB7IGxvZ0Vycm9yIH0gZnJvbSBcIi4vbG9nRXJyb3IuanNcIjtcbmltcG9ydCB7IFBBTklDX1NZTUJPTCB9IGZyb20gXCIuL3Nob3VsZFBhbmljLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZUVycm9yRm4gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5sZXQgZXJyUmVwZWF0ID0gMDtcbmxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4vKipcbiAqIFNpbXBsaWZpZWQgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gdGhhdDpcbiAqIC0gRm9ybWF0cyBhbmQgbG9ncyBlcnJvcnNcbiAqIC0gSGFuZGxlcyBwYW5pYyB0aHJlc2hvbGRzXG4gKiAtIFJldHVybnMgZXJyb3IgdG8gdGhyb3cgb3IgbnVsbCB0byBjb250aW51ZVxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRXJyb3I6IEhhbmRsZUVycm9yRm4gPSBmdW5jdGlvbiBfaGFuZGxlRXJyb3IoXG4gIG9wdGlvbnNcbik6IEVycm9yIHwgbnVsbCB7XG4gIGNvbnN0IHtcbiAgICBlcnJvcixcbiAgICBlcnJvckluZm8sXG4gICAgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCksXG4gICAgbW9kZSA9IGdldE5vZGVFbnYoKSxcbiAgICBwYW5pY1RocmVzaG9sZCA9IFwibm9uZVwiLFxuICAgIGNyaXRpY2FsID0gZmFsc2UsXG4gICAgbG9nID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zO1xuICAvLyBIYW5kbGUgUmVhY3QgZXJyb3IgaW5mbyBpZiBwcmVzZW50XG4gIGlmIChlcnJvckluZm8gIT0gbnVsbCkge1xuICAgIGNvbnN0IGVyckluZm8gPSBuZXcgRXJyb3IoYERpZ2VzdDogJHsoZXJyb3JJbmZvIGFzIGFueSkuZGlnZXN0ID8/ICd1bmtub3duJ31gKTtcbiAgICBlcnJJbmZvLnN0YWNrID0gZXJyb3JJbmZvLmNvbXBvbmVudFN0YWNrID8/IHVuZGVmaW5lZDtcbiAgICBlcnJJbmZvLm5hbWUgPSBcIkVycm9ySW5mb1wiO1xuICAgIGlmIChsb2cpIGxvZ0Vycm9yKGVyckluZm8sIGxvZ2dlciwgbW9kZSk7XG4gIH1cblxuICBjb25zdCBlcnIgPSB0b0Vycm9yKGVycm9yLCBlcnJvckluZm8gPz8gdW5kZWZpbmVkKTtcblxuICAvLyBTaW1wbGUgcGFuaWMgdGhyZXNob2xkIGxvZ2ljXG4gIGlmIChwYW5pY1RocmVzaG9sZCA9PT0gXCJhbGxfZXJyb3JzXCIgfHwgKGNyaXRpY2FsICYmIHBhbmljVGhyZXNob2xkID09PSBcImNyaXRpY2FsX2Vycm9yc1wiKSkge1xuICAgIC8vIE1hcmsgZXJyb3IgZm9yIHBhbmljIGFuZCByZXR1cm4gaXQgdG8gYmUgdGhyb3duXG4gICAgKGVyciBhcyBhbnkpW1BBTklDX1NZTUJPTF0gPSB0cnVlO1xuICAgIHJldHVybiBlcnI7XG4gIH1cblxuICBpZiAobG9nKSB7XG4gICAgaWYgKFxuICAgICAgbGFzdEVycm9yPy5tZXNzYWdlID09PSAoZXJyb3IgYXMgRXJyb3IpPy5tZXNzYWdlICYmXG4gICAgICBsYXN0RXJyb3I/LnN0YWNrID09PSAoZXJyb3IgYXMgRXJyb3IpPy5zdGFja1xuICAgICkge1xuICAgICAgZXJyUmVwZWF0Kys7XG4gICAgICBjb25zdCByZXBlYXRlZEZyb20gPSBuZXcgRXJyb3IoXCJFcnJvciByZXBlYXRlZFwiLCB7IGNhdXNlOiBlcnIgfSk7XG4gICAgICByZXBlYXRlZEZyb20uc3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgICBsb2dnZXIuZXJyb3IoYCR7ZXJyLm1lc3NhZ2V9ICgke2VyclJlcGVhdH0pYCwgeyBlcnJvcjogcmVwZWF0ZWRGcm9tIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJSZXBlYXQgPSAwO1xuICAgICAgbGFzdEVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICBsb2dFcnJvcihlcnIsIGxvZ2dlciwgbW9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9yIFwibm9uZVwiIG9yIG5vbi1jcml0aWNhbCBlcnJvcnMsIGNvbnRpbnVlIHByb2Nlc3NpbmdcbiAgcmV0dXJuIG51bGw7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBT0EsSUFBSSxTQUFZLEdBQUEsQ0FBQTtBQUNoQixJQUFJLFNBQTBCLEdBQUEsSUFBQTtBQU9qQixNQUFBLFdBQUEsR0FBNkIsU0FBUyxZQUFBLENBQ2pELE9BQ2MsRUFBQTtBQUNkLEVBQU0sTUFBQTtBQUFBLElBQ0osS0FBQTtBQUFBLElBQ0EsU0FBQTtBQUFBLElBQ0EsU0FBUyxZQUFhLEVBQUE7QUFBQSxJQUN0QixPQUFPLFVBQVcsRUFBQTtBQUFBLElBQ2xCLGNBQWlCLEdBQUEsTUFBQTtBQUFBLElBQ2pCLFFBQVcsR0FBQSxLQUFBO0FBQUEsSUFDWCxHQUFNLEdBQUE7QUFBQSxHQUNKLEdBQUEsT0FBQTtBQUVKLEVBQUEsSUFBSSxhQUFhLElBQU0sRUFBQTtBQUNyQixJQUFBLE1BQU0sVUFBVSxJQUFJLEtBQUEsQ0FBTSxXQUFZLFNBQWtCLENBQUEsTUFBQSxJQUFVLFNBQVMsQ0FBRSxDQUFBLENBQUE7QUFDN0UsSUFBUSxPQUFBLENBQUEsS0FBQSxHQUFRLFVBQVUsY0FBa0IsSUFBQSxNQUFBO0FBQzVDLElBQUEsT0FBQSxDQUFRLElBQU8sR0FBQSxXQUFBO0FBQ2YsSUFBQSxJQUFJLEdBQUssRUFBQSxRQUFBLENBQVMsT0FBUyxFQUFBLE1BQUEsRUFBUSxJQUFJLENBQUE7QUFBQTtBQUd6QyxFQUFBLE1BQU0sR0FBTSxHQUFBLE9BQUEsQ0FBUSxLQUFPLEVBQUEsU0FBQSxJQUFhLE1BQVMsQ0FBQTtBQUdqRCxFQUFBLElBQUksY0FBbUIsS0FBQSxZQUFBLElBQWlCLFFBQVksSUFBQSxjQUFBLEtBQW1CLGlCQUFvQixFQUFBO0FBRXpGLElBQUMsR0FBQSxDQUFZLFlBQVksQ0FBSSxHQUFBLElBQUE7QUFDN0IsSUFBTyxPQUFBLEdBQUE7QUFBQTtBQUdULEVBQUEsSUFBSSxHQUFLLEVBQUE7QUFDUCxJQUFBLElBQ0UsV0FBVyxPQUFhLEtBQUEsS0FBQSxFQUFpQixXQUN6QyxTQUFXLEVBQUEsS0FBQSxLQUFXLE9BQWlCLEtBQ3ZDLEVBQUE7QUFDQSxNQUFBLFNBQUEsRUFBQTtBQUNBLE1BQUEsTUFBTSxlQUFlLElBQUksS0FBQSxDQUFNLGtCQUFrQixFQUFFLEtBQUEsRUFBTyxLQUFLLENBQUE7QUFDL0QsTUFBQSxZQUFBLENBQWEsUUFBUSxHQUFJLENBQUEsS0FBQTtBQUN6QixNQUFPLE1BQUEsQ0FBQSxLQUFBLENBQU0sQ0FBRyxFQUFBLEdBQUEsQ0FBSSxPQUFPLENBQUEsRUFBQSxFQUFLLFNBQVMsQ0FBSyxDQUFBLENBQUEsRUFBQSxFQUFFLEtBQU8sRUFBQSxZQUFBLEVBQWMsQ0FBQTtBQUFBLEtBQ2hFLE1BQUE7QUFDTCxNQUFZLFNBQUEsR0FBQSxDQUFBO0FBQ1osTUFBWSxTQUFBLEdBQUEsS0FBQTtBQUNaLE1BQVMsUUFBQSxDQUFBLEdBQUEsRUFBSyxRQUFRLElBQUksQ0FBQTtBQUFBO0FBQzVCO0FBSUYsRUFBTyxPQUFBLElBQUE7QUFDVDs7OzsifQ==