create-custom-error.cjs 532 B

123456789101112131415161718
  1. 'use strict';
  2. function createCustomError(name, message) {
  3. // use Object.create(), because some VMs prevent setting line/column otherwise
  4. // (iOS Safari 10 even throws an exception)
  5. const error = Object.create(SyntaxError.prototype);
  6. const errorStack = new Error();
  7. return Object.assign(error, {
  8. name,
  9. message,
  10. get stack() {
  11. return (errorStack.stack || '').replace(/^(.+\n){1,3}/, `${name}: ${message}\n`);
  12. }
  13. });
  14. }
  15. exports.createCustomError = createCustomError;