UNPKG

@sap/cds

Version:

SAP Cloud Application Programming Model - CDS for Node.js

48 lines (44 loc) 1.61 kB
const cds = require ('../index') const placeholders = [...'x'.repeat(9)].map((x,i) => `{${i+1}}`) /** * Messages Collector, used for `req.errors` and `req.messages` */ class Responses extends Array { add (severity, code, message, target, args) { let e // be filled in below... if (code?.raw) { if (typeof message === 'object') { target = Object.keys(message)[0] args = [ ...arguments ].slice(3) e = { message: String.raw (code, target, ...args), target, text: '{0} '+ String.raw (code,'', ...placeholders.slice(0,args.length)).trim(), args, } } else e = { message: String.raw (code, ...[...arguments].slice(2)) } } else { if (typeof code === 'object') e = code; else { if (typeof code === 'number') e = { code }; else [ code, message, target, args, e ] = [ undefined, code, message, target, {} ] if (typeof message === 'object') e = Object.assign(message,e); else { if (typeof target === 'object') [ target, args ] = [ undefined, target ] if (message) e.message = message //; else if (code) e.message = String(code) if (target) e.target = target if (args) e.args = args } } } if (severity) e.numericSeverity ??= severity this.push(e) return e } } class Errors extends Responses { push(e) { if ('stack' in e) return super.push (...arguments) else Error.captureStackTrace (e = Object.assign(new Error,e), cds.Request.prototype.error) return super.push(e) } } module.exports = { Responses, Errors }