mirror of
https://github.com/nodejs/node.git
synced 2025-05-07 12:03:30 +00:00

Store all primordials as properties of the primordials object. Static functions are prefixed by the constructor's name and prototype methods are prefixed by the constructor's name followed by "Prototype". For example: primordials.Object.keys becomes primordials.ObjectKeys. PR-URL: https://github.com/nodejs/node/pull/30610 Refs: https://github.com/nodejs/node/issues/29766 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
112 lines
2.7 KiB
JavaScript
112 lines
2.7 KiB
JavaScript
'use strict';
|
|
const {
|
|
ERR_INVALID_ARG_TYPE,
|
|
ERR_SYNTHETIC
|
|
} = require('internal/errors').codes;
|
|
const { validateSignalName, validateString } = require('internal/validators');
|
|
const nr = internalBinding('report');
|
|
const {
|
|
JSONParse,
|
|
} = primordials;
|
|
const report = {
|
|
writeReport(file, err) {
|
|
if (typeof file === 'object' && file !== null) {
|
|
err = file;
|
|
file = undefined;
|
|
} else if (file !== undefined && typeof file !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('file', 'String', file);
|
|
} else if (err === undefined) {
|
|
err = new ERR_SYNTHETIC();
|
|
} else if (err === null || typeof err !== 'object') {
|
|
throw new ERR_INVALID_ARG_TYPE('err', 'Object', err);
|
|
}
|
|
|
|
return nr.writeReport('JavaScript API', 'API', file, err.stack);
|
|
},
|
|
getReport(err) {
|
|
if (err === undefined)
|
|
err = new ERR_SYNTHETIC();
|
|
else if (err === null || typeof err !== 'object')
|
|
throw new ERR_INVALID_ARG_TYPE('err', 'Object', err);
|
|
|
|
return JSONParse(nr.getReport(err.stack));
|
|
},
|
|
get directory() {
|
|
return nr.getDirectory();
|
|
},
|
|
set directory(dir) {
|
|
validateString(dir, 'directory');
|
|
nr.setDirectory(dir);
|
|
},
|
|
get filename() {
|
|
return nr.getFilename();
|
|
},
|
|
set filename(name) {
|
|
validateString(name, 'filename');
|
|
nr.setFilename(name);
|
|
},
|
|
get signal() {
|
|
return nr.getSignal();
|
|
},
|
|
set signal(sig) {
|
|
validateSignalName(sig, 'signal');
|
|
removeSignalHandler();
|
|
addSignalHandler(sig);
|
|
nr.setSignal(sig);
|
|
},
|
|
get reportOnFatalError() {
|
|
return nr.shouldReportOnFatalError();
|
|
},
|
|
set reportOnFatalError(trigger) {
|
|
if (typeof trigger !== 'boolean')
|
|
throw new ERR_INVALID_ARG_TYPE('trigger', 'boolean', trigger);
|
|
|
|
nr.setReportOnFatalError(trigger);
|
|
},
|
|
get reportOnSignal() {
|
|
return nr.shouldReportOnSignal();
|
|
},
|
|
set reportOnSignal(trigger) {
|
|
if (typeof trigger !== 'boolean')
|
|
throw new ERR_INVALID_ARG_TYPE('trigger', 'boolean', trigger);
|
|
|
|
nr.setReportOnSignal(trigger);
|
|
removeSignalHandler();
|
|
addSignalHandler();
|
|
},
|
|
get reportOnUncaughtException() {
|
|
return nr.shouldReportOnUncaughtException();
|
|
},
|
|
set reportOnUncaughtException(trigger) {
|
|
if (typeof trigger !== 'boolean')
|
|
throw new ERR_INVALID_ARG_TYPE('trigger', 'boolean', trigger);
|
|
|
|
nr.setReportOnUncaughtException(trigger);
|
|
}
|
|
};
|
|
|
|
function addSignalHandler(sig) {
|
|
if (nr.shouldReportOnSignal()) {
|
|
if (typeof sig !== 'string')
|
|
sig = nr.getSignal();
|
|
|
|
process.on(sig, signalHandler);
|
|
}
|
|
}
|
|
|
|
function removeSignalHandler() {
|
|
const sig = nr.getSignal();
|
|
|
|
if (sig)
|
|
process.removeListener(sig, signalHandler);
|
|
}
|
|
|
|
function signalHandler(sig) {
|
|
nr.writeReport(sig, 'Signal', null, '');
|
|
}
|
|
|
|
module.exports = {
|
|
addSignalHandler,
|
|
report
|
|
};
|