1.0.6 • Published 6 years ago

@zerointermittency/error v1.0.6

Weekly downloads
357
License
MIT
Repository
github
Last release
6 years ago

Bienvenido

Base para el manejo de errores para cualquier proyecto.

Instalación

yarn add @zerointermittency/error
# npm i --save @zerointermittency/error

Api

El modulo consta de una sola clase llamada ZIError.

ZIError

constructor

Este método es el que se llama cuando se realiza el siguiente código:

const ZIError = require('@zerointermittency/error');
let error = new ZIError(params);

Argumentos:

  • params (Object):
    • level (String) required: identifica el nivel al que pertenece el error, estos están definidos en el atributo estático level de la clase
    • code (Number) required: numero que identifique su error
    • name (String): nombre que identifica el error
    • message (String): mensaje con mayor detalle respecto al error o informativo
    • extra (Object): objeto para poder tener referencia a variables o objetos cuyos valores son necesarios para un correcto funcionamiento y ayudar a identificar de mejor manera porque se produjo el error
    • error (Error): es una instancia de Error nativo de javascript, para poder sobrescribir el stack, mensaje y nombre que identifique el error en caso que necesitemos validarlo.
    • prefix (String): para identificar donde se esta produciendo el error.

Retorna:

(ZIError): Retorna la instancia de la clase ZIError.

level

Están definidos actualmente solo 3 niveles de error fatal, error y warning.

const ZIError = require('@zerointermittency/error');

let levelError = ZIError.level.error,
    levelFatal = ZIError.level.fatal,
    levelWarning = ZIError.level.warning;

Recomendación

Para su uso es importante destacar que se puede extender de esta clase ZIError, por ejemplo:

'use strict';

const ZIError = require('@zerointermittency/error');

class AuthError extends ZIError {

    constructor(opts) {
        opts.prefix = 'auth';
        super(opts);
    }

}

module.exports = {
    internalError: new AuthError({
        code: 0,
        name: 'internalError',
        message: 'internalError',
        level: ZIError.level.fatal,
    }),
    secretRequired: new AuthError({
        code: 1,
        name: 'secretRequired',
        message: 'secret required',
        level: ZIError.level.error,
    }),
    appRequired: (extra) => new AuthError({
        code: 2,
        name: 'appRequired',
        message: 'app required to create payload',
        level: ZIError.level.error,
        extra: extra,
    }),
};

En este caso obtenemos una clase de error llamada AuthError, definiendo específicamente el prefijo ('auth') en el constructor, lo cual nos permitiría saber que los errores pertenecen a dicha clase.

Pruebas funcionales (Unit Testing)

Se llevaron a cabo 2 pruebas funcionales las cuales evalúan todos los casos de éxito al momento de crear la instancia de ZIError y los casos en que va a dar error si los parámetros especificados no tienen los elementos requeridos. Para ejecutar las pruebas:

yarn test

Pruebas de rendimiento (benchmark)

Con el objetivo de que sea optimo el código se realizaron 2 pruebas de rendimiento, de las cuales se determino que:

yarn benchmark benchmark/StringConcatenate.js

Template Literal x 562,432,004 ops/sec ±0.85% (85 runs sampled)
operate String x 561,491,894 ops/sec ±0.77% (85 runs sampled)
Concatenate String x 48,848,307 ops/sec ±4.89% (82 runs sampled)
add String x 556,429,141 ops/sec ±1.05% (87 runs sampled)
Fastest is Template Literal,operate String,add String
  • Utilizar de manera global el atributo estático de niveles para la clase ZIError, es mucho mejor en rendimiento que utilizar de manera local el objeto. Para correr la prueba:
yarn benchmark benchmark/LocalvsGlobalStaticAttrClass.js

local static attrs x 63,716,107 ops/sec ±5.69% (81 runs sampled)
global static attrs x 557,872,339 ops/sec ±0.85% (84 runs sampled)
Fastest is global static attrs

Changelog

Todos los cambios importantes son escritos aquí