All files / urkel/lib/optimized errors.js

13.51% Statements 5/37
0% Branches 0/17
0% Functions 0/4
13.51% Lines 5/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108                1x                                                                                                                                                                                             1x 1x 1x 1x  
/*!
 * errors.js - tree errors
 * Copyright (c) 2018, Christopher Jeffrey (MIT License).
 * https://github.com/handshake-org/urkel
 */
 
'use strict';
 
const assert = require('bsert');
 
/**
 * Missing Node Error
 */
 
class MissingNodeError extends Error {
  /**
   * Create an error.
   * @constructor
   * @param {Object?} options
   */
 
  constructor(options = {}) {
    super();
 
    this.type = 'MissingNodeError';
    this.name = 'MissingNodeError';
    this.code = 'ERR_MISSING_NODE';
    this.rootHash = options.rootHash || null;
    this.nodeHash = options.nodeHash || null;
    this.key = options.key || null;
    this.depth = options.depth >>> 0;
    this.message = 'Missing node.';
 
    if (this.nodeHash)
      this.message = `Missing node: ${this.nodeHash.toString('hex')}.`;
 
    if (Error.captureStackTrace)
      Error.captureStackTrace(this, MissingNodeError);
  }
}
 
/**
 * IO Error
 */
 
class IOError extends Error {
  /**
   * Create an error.
   * @constructor
   */
 
  constructor(syscall, index, pos, size) {
    super();
 
    this.type = 'IOError';
    this.name = 'IOError';
    this.code = 'ERR_IO';
    this.syscall = syscall;
    this.index = index;
    this.pos = pos;
    this.size = size;
    this.message = `Invalid ${syscall} for file ${index} at ${pos}:${size}.`;
 
    if (Error.captureStackTrace)
      Error.captureStackTrace(this, IOError);
  }
}
 
class EncodingError extends Error {
  /**
   * Create an encoding error.
   * @constructor
   * @param {Number} offset
   * @param {String} reason
   */
 
  constructor(offset, reason, start) {
    super();
 
    this.type = 'EncodingError';
    this.name = 'EncodingError';
    this.code = 'ERR_ENCODING';
    this.message = `${reason} (offset=${offset}).`;
 
    if (Error.captureStackTrace)
      Error.captureStackTrace(this, start || EncodingError);
  }
}
 
/**
 * Assertion Error
 */
 
class AssertionError extends assert.AssertionError {
  constructor(message) {
    super({ message });
  }
}
 
/*
 * Expose
 */
 
exports.MissingNodeError = MissingNodeError;
exports.IOError = IOError;
exports.EncodingError = EncodingError;
exports.AssertionError = AssertionError;