Socket
Socket
Sign inDemoInstall

magic-error

Package Overview
Dependencies
0
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    magic-error

Developer friendly JS Errors


Version published
Weekly downloads
25K
decreased by-20.57%
Maintainers
1
Install size
8.81 kB
Created
Weekly downloads
 

Readme

Source

magic-error

How do I install it?

npm install --save magic-error

Usage

import createMagicError from 'magic-error';

const err = createMagicError(new ReferenceError('Impossible does not exist'));

How does it work?

It uses proxy and sets traps for 2 internal methods:

Ok, cool, but I still don't have a clue how this crap is supposed to work. I'll probably fail to describe it in a meaningful way and skip a couple of details, but let me try. If you take a look at a method like Object.keys, you should be able to see it invokes [[EnumerableOwnPropertyNames]]. Now, please take a look at the step 2 of [[EnumerableOwnPropertyNames]]. Yes, you see it right. It 'calls' [[OwnPropertyKeys]]. Then, step 4.II is kind of important (but not in our case, more on this later) as well in general, as if the desc[[Enumerable]] is not true, the key won't be included in the list. All descriptors we return have enumerable set to true, because we'd have a nice TypeError otherwise. The trap for [[GetOwnProperty]] internal method is needed due to that - we need to make properties enumerable and configurable.

Why do we have that new Set in ownKeys?

It's caused by the fact the trap result cannot return duplicate entries. See the step 9 of [[OwnPropertyKeys]] internal slot.

What about Object.getOwnPropertyNames?

Pretty much the same story. It has different steps, as, [[EnumerableOwnPropertyNames]] unlike it doesn't 'filter out' non-enumerable properties, but since everything is enumerable in our case, the output should be equal.

What about for in loop?

Alright - we need to get the syntax right first. As you can see, all for in iteration methods 'pass' enumerate 'to' ForIn/OfHeadEvaluation. Now, go ahead, look at step 6. EnumerateObjectProperties is described quite nicely - there is even a code sample.

What about xyz?

Google it or search in spec.

How does it differ from serialize-error?

Serialize-error can be used on production, while this thingy... well, I wouldn't use it.

Besides that, there a few other differences you most likely don't care about, but to name a few:

  • all available properties are exposed, i.e. columnNumber and lineNumber on Firefox,
  • constructor is set to an actual initial error constructor,
  • prototype is retained,
  • instanceof works 'correctly'... I think,
  • it's just cool.

FAQs

Last updated on 14 Jun 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc