npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@teamhive/node-common

v4.0.0

Published

This repo houses our shared node functions and node handlers

Downloads

15

Readme

node-common

This repo houses our shared node functions and node handlers

@TryCatch(optionsOrException = {} as TryCatchOptions | TryCatchException, options = {} as TryCatchOptions )

This decorator will wrap your whole function into a try/catch and you can pass an optional custom error class for it to throw! If you only want to handle the error and not throw an excxeption, you can pass in handleOnly: true. When using this option, it will emit an event with the error through the TryCatchEmitter, which you should use to listen and handle these errors in your application. If you want to sanitize the error itself, like in case of taking unecessary propereties off of it, you can pass in a class that accepts an error as a parameter to errorWrapperClass or even have that class be the first parameter

    // Main file, right after bootstrap of application **caught error will be handled here**
    import { TryCatchEmitter } from '@teamhive/node-common';
    // This will setup any baseExceptions that may get thrown that you dont want to wrap with the wrapping class
    TryCatchEmitter.baseException = [MyBaseException, HttpException];
    TryCatchEmitter.listen((error) => errorHandler.captureException(error));

    // Options interface
    interface TryCatchOptions {
        handleOnly?: boolean;
        customResponseMessage?: string;
        errorWrapperClass?: { new (param1: Error) };
        isSynchronous?: boolean;
    }

    // Only pass in exception (this will throw an SqlException)
    @TryCatch(SqlException)
    async fetchAll() {
        return await this.usersRepository.fetchAll()
    }

    OR

    // Only pass in options (this will not throw but only report the SqlExceptionError)
    @TryCatch({ handleOnly: true, errorWrapperClass: SqlExceptionError })
    async fetchAll() {
        return await this.usersRepository.fetchAll()
    }

    OR

    // Pass in exception with options
    @TryCatch(SqlException, { handleOnly: true, customResponseMessage: 'error creating content' })
    async fetchAll() {
        return await this.usersRepository.fetchAll()
    }

NodeEventHandler

This statis class is designed to help you catch unhandled promise rejections and uncaught exceptions from the highest node process event listeners. You can als pass in a function to handle these exceptions gracefully.

At the very beginning in your index file you should setup our very basic event listeners

    'use strict'

    // setup uncaught exception handling
    try {
        const NodeEventHandler = require('@teamhive/node-common').NodeEventHandler;

        NodeEventHandler.logUncaughtException();
        NodeEventHandler.logUnhandleRejection();
    } catch (error) {
        console.error('ERROR SETTING UP EVENT HANDLER: ' + error);
        process.exit(1);
    }

    // start application
    require('./dist/main');

Once your app bootstraps and you have access to your error handler, you can pass that to it

    import { NodeEventHandler } from '@teamhive/node-common';

    // Get you errorHandler our of Reflector or whereever it is constructed

    NodeEventHandler.handleUnhandledRejection(errorHandler);
    NodeEventHandler.handleUncaughtException(errorHandler);

Distribution

npm pack
npm version (major|minor|patch)
npm publish

Note: This will also automatically push changes and tags post-publish