vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
60 lines (58 loc) • 6.61 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
let isGlobalHandlerSetup = false;
let uncaughtExceptionHandler = null;
let unhandledRejectionHandler = null;
const setupGlobalErrorHandler = function _setupGlobalErrorHandler(options) {
const { panicThreshold, logger, verbose = false } = options;
if (isGlobalHandlerSetup) {
return;
}
if (verbose) {
logger.info(
`Setting up global error handler for panic threshold: ${panicThreshold}`
);
}
uncaughtExceptionHandler = (error) => {
if (verbose) {
logger.info(
`Global error handler caught uncaught exception: ${error.message}`
);
}
logger.warn(
`Uncaught exception handled by panic threshold (${panicThreshold}): ${error.message}`
);
};
unhandledRejectionHandler = (reason, _promise) => {
if (verbose) {
logger.info(
`Global error handler caught unhandled rejection: ${reason}`
);
}
logger.warn(
`Unhandled rejection handled by panic threshold (${panicThreshold}): ${reason}`
);
};
process.on("uncaughtException", uncaughtExceptionHandler);
process.on("unhandledRejection", unhandledRejectionHandler);
isGlobalHandlerSetup = true;
};
const cleanupGlobalErrorHandler = function _cleanupGlobalErrorHandler() {
if (!isGlobalHandlerSetup) {
return;
}
if (uncaughtExceptionHandler) {
process.removeListener("uncaughtException", uncaughtExceptionHandler);
uncaughtExceptionHandler = null;
}
if (unhandledRejectionHandler) {
process.removeListener("unhandledRejection", unhandledRejectionHandler);
unhandledRejectionHandler = null;
}
isGlobalHandlerSetup = false;
};
export { cleanupGlobalErrorHandler, setupGlobalErrorHandler };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBHbG9iYWxFcnJvckhhbmRsZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9lcnJvci9zZXR1cEdsb2JhbEVycm9ySGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIENsZWFudXBHbG9iYWxFcnJvckhhbmRsZXJGbixcbiAgU2V0dXBHbG9iYWxFcnJvckhhbmRsZXJGbixcbn0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxubGV0IGlzR2xvYmFsSGFuZGxlclNldHVwID0gZmFsc2U7XG5sZXQgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyOiAoKGVycm9yOiBFcnJvcikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbmxldCB1bmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyOiAoKHJlYXNvbjogdW5rbm93biwgcHJvbWlzZTogUHJvbWlzZTx1bmtub3duPikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IHNldHVwR2xvYmFsRXJyb3JIYW5kbGVyOiBTZXR1cEdsb2JhbEVycm9ySGFuZGxlckZuID1cbiAgZnVuY3Rpb24gX3NldHVwR2xvYmFsRXJyb3JIYW5kbGVyKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHBhbmljVGhyZXNob2xkLCBsb2dnZXIsIHZlcmJvc2UgPSBmYWxzZSB9ID0gb3B0aW9ucztcblxuICAgIGlmIChpc0dsb2JhbEhhbmRsZXJTZXR1cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFNldHRpbmcgdXAgZ2xvYmFsIGVycm9yIGhhbmRsZXIgZm9yIHBhbmljIHRocmVzaG9sZDogJHtwYW5pY1RocmVzaG9sZH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBHbG9iYWwgZXJyb3IgaGFuZGxlciBjYXVnaHQgdW5jYXVnaHQgZXhjZXB0aW9uOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVkIGJ5IHBhbmljIHRocmVzaG9sZCAoJHtwYW5pY1RocmVzaG9sZH0pOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlciA9IChyZWFzb246IHVua25vd24sIF9wcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICBgR2xvYmFsIGVycm9yIGhhbmRsZXIgY2F1Z2h0IHVuaGFuZGxlZCByZWplY3Rpb246ICR7cmVhc29ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBVbmhhbmRsZWQgcmVqZWN0aW9uIGhhbmRsZWQgYnkgcGFuaWMgdGhyZXNob2xkICgke3BhbmljVGhyZXNob2xkfSk6ICR7cmVhc29ufWBcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIpO1xuICAgIHByb2Nlc3Mub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlcik7XG5cbiAgICBpc0dsb2JhbEhhbmRsZXJTZXR1cCA9IHRydWU7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBjbGVhbnVwR2xvYmFsRXJyb3JIYW5kbGVyOiBDbGVhbnVwR2xvYmFsRXJyb3JIYW5kbGVyRm4gPVxuICBmdW5jdGlvbiBfY2xlYW51cEdsb2JhbEVycm9ySGFuZGxlcigpIHtcbiAgICBpZiAoIWlzR2xvYmFsSGFuZGxlclNldHVwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcik7XG4gICAgICB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlcikge1xuICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihcInVuaGFuZGxlZFJlamVjdGlvblwiLCB1bmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIHVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlzR2xvYmFsSGFuZGxlclNldHVwID0gZmFsc2U7XG4gIH07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxJQUFJLG9CQUF1QixHQUFBLEtBQUE7QUFDM0IsSUFBSSx3QkFBNEQsR0FBQSxJQUFBO0FBQ2hFLElBQUkseUJBQTJGLEdBQUEsSUFBQTtBQUVsRixNQUFBLHVCQUFBLEdBQ1gsU0FBUyx3QkFBQSxDQUF5QixPQUFTLEVBQUE7QUFDekMsRUFBQSxNQUFNLEVBQUUsY0FBQSxFQUFnQixNQUFRLEVBQUEsT0FBQSxHQUFVLE9BQVUsR0FBQSxPQUFBO0FBRXBELEVBQUEsSUFBSSxvQkFBc0IsRUFBQTtBQUN4QixJQUFBO0FBQUE7QUFHRixFQUFBLElBQUksT0FBUyxFQUFBO0FBQ1gsSUFBTyxNQUFBLENBQUEsSUFBQTtBQUFBLE1BQ0wsd0RBQXdELGNBQWMsQ0FBQTtBQUFBLEtBQ3hFO0FBQUE7QUFHRixFQUFBLHdCQUFBLEdBQTJCLENBQUMsS0FBaUIsS0FBQTtBQUMzQyxJQUFBLElBQUksT0FBUyxFQUFBO0FBQ1gsTUFBTyxNQUFBLENBQUEsSUFBQTtBQUFBLFFBQ0wsQ0FBQSxnREFBQSxFQUFtRCxNQUFNLE9BQU8sQ0FBQTtBQUFBLE9BQ2xFO0FBQUE7QUFHRixJQUFPLE1BQUEsQ0FBQSxJQUFBO0FBQUEsTUFDTCxDQUFrRCwrQ0FBQSxFQUFBLGNBQWMsQ0FBTSxHQUFBLEVBQUEsS0FBQSxDQUFNLE9BQU8sQ0FBQTtBQUFBLEtBQ3JGO0FBQUEsR0FDRjtBQUVBLEVBQTRCLHlCQUFBLEdBQUEsQ0FBQyxRQUFpQixRQUErQixLQUFBO0FBQzNFLElBQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxNQUFPLE1BQUEsQ0FBQSxJQUFBO0FBQUEsUUFDTCxvREFBb0QsTUFBTSxDQUFBO0FBQUEsT0FDNUQ7QUFBQTtBQUdGLElBQU8sTUFBQSxDQUFBLElBQUE7QUFBQSxNQUNMLENBQUEsZ0RBQUEsRUFBbUQsY0FBYyxDQUFBLEdBQUEsRUFBTSxNQUFNLENBQUE7QUFBQSxLQUMvRTtBQUFBLEdBQ0Y7QUFFQSxFQUFRLE9BQUEsQ0FBQSxFQUFBLENBQUcscUJBQXFCLHdCQUF3QixDQUFBO0FBQ3hELEVBQVEsT0FBQSxDQUFBLEVBQUEsQ0FBRyxzQkFBc0IseUJBQXlCLENBQUE7QUFFMUQsRUFBdUIsb0JBQUEsR0FBQSxJQUFBO0FBQ3pCO0FBRVcsTUFBQSx5QkFBQSxHQUNYLFNBQVMsMEJBQTZCLEdBQUE7QUFDcEMsRUFBQSxJQUFJLENBQUMsb0JBQXNCLEVBQUE7QUFDekIsSUFBQTtBQUFBO0FBR0YsRUFBQSxJQUFJLHdCQUEwQixFQUFBO0FBQzVCLElBQVEsT0FBQSxDQUFBLGNBQUEsQ0FBZSxxQkFBcUIsd0JBQXdCLENBQUE7QUFDcEUsSUFBMkIsd0JBQUEsR0FBQSxJQUFBO0FBQUE7QUFFN0IsRUFBQSxJQUFJLHlCQUEyQixFQUFBO0FBQzdCLElBQVEsT0FBQSxDQUFBLGNBQUEsQ0FBZSxzQkFBc0IseUJBQXlCLENBQUE7QUFDdEUsSUFBNEIseUJBQUEsR0FBQSxJQUFBO0FBQUE7QUFHOUIsRUFBdUIsb0JBQUEsR0FBQSxLQUFBO0FBQ3pCOzs7OyJ9