
Security News
vlt Launches "reproduce": A New Tool Challenging the Limits of Package Provenance
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
inherits-ex
Advanced tools
Browser-friendly enhanced inheritance fully compatible with standard node.js and coffee-script
Browser-friendly enhanced inheritance fully compatible with standard node.js inherits and coffee-script.
This package modifies and enhances the standard inherits
from node.js
util
module in node environment. It also has a shim for old
browsers with no Object.create
support.
Differs from the standard implementation is:
The standard inherits
implementation is in inherits-ex/lib/inheritsDirectly
,
of casue it's the coffee-script supports and browser-friendly.
var inherits = require('inherits-ex/lib/inherits')
The enhanced inherits
implementation.
super_
property(the super ctor) to the ctor.__super__
property(the super's prototype) to the ctor for the coffeeScirpt super
keyword.Class
property(point to the current class) to the object's prototype.
assert = require('assert')
inherits = require('inherits-ex/lib/inherits')
isInheritedFrom = require('inherits-ex/lib/isInheritedFrom')
log = console.log.bind console
class Root
m: -> log('root')
class A
inherits A, Root
m: ->
log('A')
super
class B
inherits B, Root
m: ->
log('B')
super
class MyClass
# MyClass -> A -> Root
inherits MyClass, B
# MyClass -> A -> B -> Root
inherits MyClass, A
assert.notOk inherits(A, Root) #duplication inheritances prohibited.
assert.ok isInheritedFrom(MyClass, A)
assert.ok isInheritedFrom(MyClass, Root)
assert.ok isInheritedFrom(MyClass, B)
and the following codes do same thing:
class Root
m: -> log('root')
class A
m: ->
log('A')
super
class B
m: ->
log('B')
super
class MyClass
# create inheritances chain:
# MyClass -> A -> B -> Root
inherits MyClass, [A, B, Root]
assert.ok isInheritedFrom(MyClass, A)
assert.ok isInheritedFrom(MyClass, Root)
assert.ok isInheritedFrom(MyClass, B)
var inheritsDirectly = require('inherits-ex/lib/inheritsDirectly')
The standard inherits
implementation in node.js environment with coffee-script supports
and browser-friendly.
var isInheritedFrom = require('inherits-ex/lib/isInheritedFrom')
return the superCtor's son if ctor is inherited from superCtor. else return false.
it will use the ctor.name to check whether inherited from superCtorName.
var mixin = require('inherits-ex/lib/mixin')
mixin all superCtors to ctor.
mCallOrder = []
class Root
class C
m: ->
mCallOrder.push 'C'
super
class A
m: ->
mCallOrder.push 'A'
class A1
m: ->
mCallOrder.push 'A1'
super
class B
inherits B, Root
class B1
m: ->
mCallOrder.push 'B1'
super
inherits(C, Root).should.be.equal true, "C should inherits from Root"
inherits(B1, B).should.be.equal true, "B1 should inherits from B"
inherits(A1, A).should.be.equal true, "A1 should inherits from A"
mixin(B1, [A1, C]).should.be.equal true, 'mixin'
o = new B1()
o.m("a", 12) # call chain: B1::m -> C::m -> A1::m -> A::m
A::m.should.have.been.calledOnce
A::m.should.have.been.calledWith "a", 12
mCallOrder.should.be.deep.equal ['B1', 'C', 'A1', 'A']
The inheritance chain: B1 -> MixinCtor_ -> B -> Root
All mixins will be added to MixinCtor_
.
var isMixinedFrom = require('inherits-ex/lib/isMixinedFrom')
The helper function to create the object dynamically.
var createObject = require('inherits-ex/lib/createObject')
class RefObject
constructor: -> @initialize.apply @, arguments
class MyObject
inherits MyObject, RefObject
initialize: (@a,@b)->
super
obj = createObject(MyObject, "a", "b")
#obj = new MyObject("a", "b") # it will have no property a and b.
assert.equal obj.a "a"
assert.equal obj.b "b"
The helper function to create the object dynamically.
var createObjectWith = require('inherits-ex/lib/createObjectWith')
name
(String): the function nameargs
(Array): the function argument list. it's optional.body
(String): the function body.values
if it's an object.value
is requierd if it's an array. It's the key's name listvalue
(Array): the optional function scope's value list. only for the scope
is the Array.The helper function to create the function dynamically.
var createFunction = require('inherits-ex/lib/createFunction')
class RefObject
constructor: -> @initialize.apply @, arguments
class MyObject
inherits MyObject, RefObject
initialize: (@a,@b)->
super
obj = createObject(MyObject, "a", "b")
#obj = new MyObject("a", "b") # it will have no property a and b.
assert.equal obj.a "a"
assert.equal obj.b "b"
FAQs
Enhanced inheritance for dynamic inheritance and mixin.
The npm package inherits-ex receives a total of 31,316 weekly downloads. As such, inherits-ex popularity was classified as popular.
We found that inherits-ex demonstrated a healthy version release cadence and project activity because the last version was released less than 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.
Security News
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.