cnpmcore
Version:
63 lines • 5.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ErrorHandler = void 0;
const PackageSyncerService_1 = require("../../core/service/PackageSyncerService");
const DEFAULT_SERVER_ERROR_STATUS = 500;
async function ErrorHandler(ctx, next) {
try {
await next();
}
catch (err) {
if (err.name === 'PackageNotFoundError') {
if (err.syncPackage) {
// create sync task
const syncPacakge = err.syncPackage;
const packageSyncerService = await ctx.getEggObject(PackageSyncerService_1.PackageSyncerService);
const task = await packageSyncerService.createTask(syncPacakge.fullname, {
authorIp: ctx.ip,
authorId: ctx.userId,
tips: `Sync cause by "${syncPacakge.fullname}" missing, request URL "${ctx.href}"`,
});
ctx.logger.info('[middleware:ErrorHandler][syncPackage] create sync package "%s" task %s', syncPacakge.fullname, task.taskId);
}
if (err.redirectToSourceRegistry) {
// redirect to sourceRegistry
ctx.redirect(`${err.redirectToSourceRegistry}${ctx.url}`);
return;
}
}
else if (err.name === 'ControllerRedirectError' && err.location) {
ctx.redirect(err.location);
return;
}
// http status, default is DEFAULT_SERVER_ERROR_STATUS
ctx.status = (typeof err.status === 'number' && err.status >= 200) ? err.status : DEFAULT_SERVER_ERROR_STATUS;
// don't log NotImplementedError
if (ctx.status >= DEFAULT_SERVER_ERROR_STATUS && err.name !== 'NotImplementedError') {
ctx.logger.error(err);
}
let message = err.message;
// convert ctx.tValidate error
if (err.name === 'UnprocessableEntityError' && err.currentSchema && err.errors[0]?.message) {
// {
// instancePath: '/password',
// schemaPath: '#/properties/password/minLength',
// keyword: 'minLength',
// message: 'must NOT have fewer than 8 characters'
// }
const item = err.errors[0];
if (item.instancePath) {
message = `${item.instancePath.substring(1)}: ${item.message}`;
}
else {
message = item.message;
}
}
// error body format https://github.com/npm/npm-registry-fetch/blob/main/errors.js#L45
ctx.body = {
error: err.code ? `[${String(err.code).toUpperCase()}] ${message}` : message,
};
}
}
exports.ErrorHandler = ErrorHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvbWlkZGxld2FyZS9FcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esa0ZBQStFO0FBRS9FLE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDO0FBRWpDLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBZSxFQUFFLElBQVU7SUFDNUQsSUFBSTtRQUNGLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDZDtJQUFDLE9BQU8sR0FBUSxFQUFFO1FBQ2pCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTtZQUN2QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLG1CQUFtQjtnQkFDbkIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDcEMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsMkNBQW9CLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtvQkFDdkUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU07b0JBQ3BCLElBQUksRUFBRSxrQkFBa0IsV0FBVyxDQUFDLFFBQVEsMkJBQTJCLEdBQUcsQ0FBQyxJQUFJLEdBQUc7aUJBQ25GLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsRUFDdkYsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEM7WUFDRCxJQUFJLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDaEMsNkJBQTZCO2dCQUM3QixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPO2FBQ1I7U0FDRjthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyx5QkFBeUIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUVELHNEQUFzRDtRQUN0RCxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUM5RyxnQ0FBZ0M7UUFDaEMsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLDJCQUEyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUU7WUFDbkYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFDRCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzFCLDhCQUE4QjtRQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssMEJBQTBCLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtZQUMxRixJQUFJO1lBQ0osK0JBQStCO1lBQy9CLG1EQUFtRDtZQUNuRCwwQkFBMEI7WUFDMUIscURBQXFEO1lBQ3JELElBQUk7WUFDSixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2hFO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0Y7UUFDRCxzRkFBc0Y7UUFDdEYsR0FBRyxDQUFDLElBQUksR0FBRztZQUNULEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDN0UsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQXRERCxvQ0FzREMifQ==