
Security News
Package Maintainers Call for Improvements to GitHub’s New npm Security Plan
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
@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.
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.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.