
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
Base class with pub-sub and observers for JS object properties using ECMA5 getters/setters
This provides a flexible base class and extension mechanism for building JS objects which can have properties which listen for changes on other properties. Inspired by Ember.JS observers it aims to be smaller in scope and functionality and thus more lightweight.
var MyClass = Abide.extend({
firstName: 'John',
lastName: 'Smith',
fullName: (function() {
return this.firstName + ' ' + this.lastName;
}).computed('firstName', 'lastName'),
showWelcomeMessage: (function() {
console.log('Welcome ' + this.fullName);
}).observes('fullName')
});
var m = new MyClass();
m.showWelcomeMessage();
// console.log 'John Smith'
m.firstName = 'Mark';
// showWelcomeMessage() automatically gets triggered
// console.log 'Mark Smith'
Node:
$ npm install abide
Bower:
$ bower install abide
Browser:
<script type="text/javascript" src="https://rawgithub.com/hiddentao/abide/master/abide.min.js"></script>
Create a new class by extending the base class with the given mixins.
var EmailClient = Abide.extend(EventEmitterMixin, {
server: 'gmail.com',
port: 993
});
var ImapClient = EmailClient.extend({
ssl: true
});
Params:
mixins... - one more mixins and class definitionsSpecify an object property which gets computed whenever a given dependency gets updated.
var EmailClient = Abide.extend(EventEmitterMixin, {
username: 'john',
server: 'gmail.com',
email: (function(){
return this.username + '@' + this.server;
}).computed('username', 'server')
});
var client = new EmailClient();
client.username = 'mark'; // will auto-trigger a re-calculation of 'email' property
Params:
dependencies... - names of properties which, when modified, should auto-trigger a recalculation of this property.Specify an object method which gets called whenever a given dependency gets updated.
var EmailClient = Abide.extend(EventEmitterMixin, {
username: 'john',
server: 'gmail.com',
logEmailAddress: (function(){
console.log(this.username + '@' + this.server);
}).observes('username', 'server')
});
var client = new EmailClient();
client.username = 'mark'; // will auto-trigger a call to 'logEmailAddress()'
Params:
dependencies... - names of properties which, when modified, should auto-trigger a call to this method.Notify all dependents of a property that it has been updated.
var EmailClient = Abide.extend(EventEmitterMixin, {
username: 'john',
server: 'gmail.com',
logEmailAddress: (function(){
console.log(this.username + '@' + this.server);
}).observes('username', 'server')
});
var client = new EmailClient();
client.notifyPropertyUpdated('username'); // will auto-trigger a call to 'logEmailAddress()'
Params:
name - name of properties whose dependents should be notified.Some nice-to-haves for the future:
Pull requests with comprehensive tests are welcome as long as they fit well with the goals of the library.
See LICENSE.md
FAQs
Base class pub-sub observers for JS objects based on ECMA5 getters/setters
We found that abide 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
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.