
Research
PyPI Package Disguised as Instagram Growth Tool Harvests User Credentials
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
standard-error
Advanced tools
Tiny library that simplifies subclassing and inheriting from Error while keeping the correct name and stack. Also supports constructing from an object of properties. Saves you from boilerplate.
![NPM version][npm-badge] [npm-badge]: https://badge.fury.io/js/standard-error.png
StandardError.js is a tiny JavaScript library that simplifies creating
subclasses of Error
for custom error classes with the correct name
and
stack
property. Saves you from writing a few lines of boilerplate.
Error
behavior in tact.Error
with Object.create
breaks the stack trace.StandardError
instance is also an instance of Error
.JSON.stringify
.Error
object serializes to an empty object
({}
)?Error.captureStackTrace
where available.npm install standard-error
Just require StandardError.js and either use it directly or inherit from it for your custom error class.
Like Error
, StandardError
takes a message argument, but in addition to that,
you may give it an object with other properties to be set:
var StandardError = require("standard-error")
throw new StandardError("Not Found", {code: 404})
The thrown instance of StandardError
will then have both the message
and the
code
property.
It'll also also have a name
property set to "StandardError"
.
You can skip the explicit message
argument and give everything as an
object of properties:
new StandardError({message: "Not Found", code: 404})
Note: All properties besides stack
will be enumerable for easier
serialization with JSON.stringify
. That includes the name
property which
will be set from the constructor's name (defaults to "StandardError"
).
The real benefit of StandardError.js comes from subclassing it to create new error classes and adding custom behavior to them.
Let's create an HttpError
that we can instantiate with the HTTP status code
(new HttpError(404)
) and have it set the message automatically based on that:
var Http = require("http")
var StandardError = require("standard-error")
function HttpError(code, msg) {
StandardError.call(this, msg || Http.STATUS_CODES[code], {code: code})
}
HttpError.prototype = Object.create(StandardError.prototype, {
constructor: {value: HttpError, configurable: true, writable: true}
})
Note that you must set the constructor
property like in the above
example. First, that's the proper way to subclass in JavaScript and second,
StandardError.js depends on that to know which functions to skip in the stack
trace.
StandardError.js finds out the name (err.name
) of your subclassed error from
its constructor function. However, if you minify your code, you can also set or
change it explicitly:
ChildError.prototype.name = "FallacyError"
Now that you've inherited, you can, for example, customize stringifying by
overwriting toString
on your subclass. To get new HttpError(404)
to print
itself as 404 Not Found
:
HttpError.prototype.toString = function() {
return this.code + " " + this.message
}
StandardError.js is released under a Lesser GNU Affero General Public License, which in summary means:
For more convoluted language, see the LICENSE
file.
Andri Möll typed this and the code.
Monday Calendar supported the engineering work.
If you find StandardError.js needs improving, please don't hesitate to type to me now at andri@dot.ee or create an issue online.
1.1.0 (Jun 15, 2014)
Allows overwriting the stack
property if given in the object:
new StandardError({stack: stackOverflow})
Fixes stack's first line when name given in the object:
new StandardError({name: "UnknownError"})
Allows overriding name
explicitly through the subclass's prototype.
Previously StandardError got the name only from the constructor function's
name
property or from the passed-in object.
function ChildError(msg, props) { StandardError.apply(this, arguments) }
ChildError.prototype = Object.create(StandardError.prototype, {
constructor: {value: ChildError, configurable: true, writeable: true}
})
ChildError.prototype.name = "FallacyError"
Sets StandardError.prototype.name
explicitly for cases where the code is
minified.
If you don't minify your code (like when using it on the server side) you
don't need to set name
explicitly on your subclasses and can depend on
StandardError.js finding it out from the constructor function.
Uses Error.captureStackTrace
only if available, so it'll work in non-V8
JavaScript engines.
FAQs
Tiny library that simplifies subclassing and inheriting from Error while keeping the correct name and stack. Also supports constructing from an object of properties. Saves you from boilerplate.
The npm package standard-error receives a total of 40,226 weekly downloads. As such, standard-error popularity was classified as popular.
We found that standard-error demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
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.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.