Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@atlassian/backbone-brace
Advanced tools
Brace is an extension to [Backbone](http://backbonejs.org) that adds mixins and self-documenting attributes & events.
Brace is an extension to Backbone that adds mixins and self-documenting attributes & events.
Brace allows:
Both namedEvents and namedAttributes are arrays of strings. namedAttributes can also be an object.
:::javascript
var Person = Brace.Model.extend({
namedAttributes: ["name"],
namedEvents: ["sleep"]
});
For each attribute in namedAttributes, get[Attribute] and set[Attribute] methods are generated:
:::javascript
var person = new Person();
person.setName("Tim");
person.getName() // Returns "Tim"
Backbone models' get() and set() validate attributes:
:::javascript
person.get("name"); // ok
person.set("name", "Timmy"); // ok
person.set({
name: "Timothy"
}); // ok
person.get("lost"); // throws exception
person.set("lost", "frequently"); // throws exception
person.set({
lost: "frequently"
}); // throws exception
The types of your namedAttributes are validated and coerced when namedAttributes is an object:
:::javascript
var People = Brace.Collection.extend();
var Person = Brace.Model.extend({
namedAttributes: {
name : "string", // validate primitives with typeof
otherNames : [ "string" ], // validate typed array-likes
birthDate : Date, // validate arbitrary ctors with instanceof,
// calls `new ctor(rawValue)` if necessary
children : People, // validate Backbone.Collections,
// coerces arrays and contained models if necessary
attributes : Array, // validate untyped array-likes
metadata : null || undefined || false // skip validation completely
}
});
People.model = Person;
var person = new Person({ name : 'Enigma' }); // ok
person.set('name', null); // ok
person.set('name', 'Nazim'); // ok
person.set('name', 4); // throws exception
person.set('otherNames', [ 'Ahmed' ]); // ok
person.set('otherNames', [ 1, 4 ]); // throws exception
person.set('attributes', [ 'one', 2, {} ]); // ok
person.set('attributes', 'The Dude'); // throws exception
person.set('birthDate', 'Mar 12 1960'); // ok
person.get('birthDate').toString(); // "Sat Mar 12 1960 00:00:00 GMT+1100 (AUS Eastern Daylight Time)"
person.set('children', [ { name : 'Adam' }, { name : 'Mariam' }, { name : 'Sarah' } ]); // ok
person.get('children'); // returns People instance containing three Person models.
For each event in namedEvents, on[Event] and trigger[Event] methods are generated:
:::javascript
person.onSleep(function(dream) { console.log("Dreaming about " + dream); } );
person.triggerSleep("Unicorns");
Brace allows a "mixins" property on models, views, collections and routers:
:::javascript
var Loggable = {
log: function(msg) {
console.log(msg);
}
};
var PersonView = Brace.View.extend({
mixins: [Loggable],
initialize: function() {
this.log("Initialized");
}
});
namedAttributes and namedEvents in mixins are respected:
:::javascript
var Selectable = {
namedAttributes: ["selected"],
namedEvents: ["select"],
initialize: function() {
this.on("change:selected", _.bind(function(model, selected) {
if (selected) {
this.triggerSelect();
}
}, this));
}
};
var Person = Brace.Model.extend({
mixins: [Selectable]
});
var person = new Person();
person.onSelect(function() { console.log("Person was selected"); });
person.setSelected(true);
person.getSelected();
person.triggerSelect();
Additionally, Brace composes
All other name clashes between mixins fail violently and forcefully at class declaration time (not at instance construction time).
:::javascript
var Runnable = {
run: function() {}
};
var RunModel = Brace.Model.extend({
mixins: [Runnable],
run: function() {}
}); // throws "Mixin error: class already has property 'run' defined"
FAQs
Brace is an extension to [Backbone](http://backbonejs.org) that adds mixins and self-documenting attributes & events.
The npm package @atlassian/backbone-brace receives a total of 0 weekly downloads. As such, @atlassian/backbone-brace popularity was classified as not popular.
We found that @atlassian/backbone-brace demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 16 open source maintainers 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
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.