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

try-inline

v2.0.1

Published

A functional approach to catching errors inline for async promises and syncronous functions

Downloads

8

Readme

:traffic_light: TryInline

A functional approach to catching errors inline for async promises and syncronous functions

NPM Version

:bulb: Inspired by await-to-js

:gift: Example

const { try_ } = require('try-inline');

let err, data;

// async
[err, data] = await try_(somePromise());
if (err) process.exit(1);
console.log(data);

// normal function
[err, data] = try_(() => someFunction());
if (err) process.exit(1);
console.log(data);

:package: Installation

$ npm install try-inline

:barber: Features

  • Inline error catching
    • No more "try-catch-hell" (like callback-hell)
  • Configurable error logging
  • Error object patching
    • on a execution fail, the returned error object includes its ErrorString
  • Labeling executions for better debugging
  • Filtering error results for specified key-paths
    • only show specific keys from the error object

:nut_and_bolt: API

try_(executionObj, logOptionsString, [options]) => [err, data]

Wraps an execution safely. The default TryInline instance.

  • executionObj - the object to execute. Can be a promise or a callback with a syncronous function.
  • logOptionsString - optional (you can leave it empty) option string for the logger.
    • Format: "(logLevel:)labelString"
      • logLevel - method used from logger. The default logger is the JavaScript global "console". So the available values are: info, log, warn, error. Defaults to error. When you want to use your own logger, take a look at creating your own TryInline custom instance.
      • labelString - optional label attached to the error log message.
    • Example: "warn:HTTP_TIMEOUT" -> Logger gets the 'warn' log-level and the label string 'HTTP_TIMEOUT'
  • options - optional object with:
    • errData - additional error information (assinged to error.ErrorData).

Returns an array with two values:

  • err - the error obejct. When executionObj throws an error, it is assigned to err. Otherwise err is null.
  • data - returned value from executionObj. On error it gets undefined.
const { try_ } = require('try-inline');

let [err, data] = await try_(readFilePromise('lorem.txt'), 'warn:READ_FILE_ERR',
    { errData: "Safely ignore the error. The lorem file is optional." } 
});

// array destructuring is awesome!
let [err]    = ... // just get the error obj
let [, data] = ... // only get the data obj

new TryInline(options) => try_ (customized)

Creates a custom TryInline instance with specified options.

  • options - required object where:
    • Logger - custom error handling function. It gets error, level, label passed as arguments.
    • DefaultLogLevel - set the default level for your Logger.

Returns a custom try_ instance with attached Logger.

const TryInline = require('try-inline');

const try_ = new TryInline({
  Logger: function(error, level, label) {
    const logMessage = label ? `(${label}) ${error}` : error;
    console[level](logMessage);
  },
  DefaultLogLevel: 'debug'
});

:point_up: Notes

Do not always trust automatic semi-colon insertion (ASI) in JavaScript, when not using semi-colons! Be careful when assigning the output variables by destructuring the returned array!

When you want to be 100% safe, then put a semi-colon in front of the destructuring statement:

;[err, data] = await try_(somePromise())

:page_with_curl: License

MIT