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.
bookshelf-scopes
Advanced tools
Giving you Rails like scopes in Bookshelf.js.
If you add in the plugin like so:
var bookshelf = require('bookshelf')(knex);
bookshelf.plugin(require('bookshelf-scopes'));
You will then be able to add a scopes property on your models that will give you a Knex query builder as the first argument and then followed by any additional arguments. See examples below.
Also just like rails we can set a default. See examples below.
You can define a model with scopes and an active function like this:
var TestModel = bookshelf.Model.extend({
tableName: 'testmodel',
scopes: {
active: function(qb) {
qb.where({status: 'Active'});
},
nameContains: function(gb, text) {
qb.where(knex.raw('name LIKE ?', '%' + name + '%'));
}
}
});
You can now run code like this to get all Active:
TestModel.active().fetchAll().then(function(allActiveTests) {
...
});
You can also get all active where name contains test as well:
TestModel.active().nameContains('test').fetchAll().then(function(allActiveTests) {
...
});
You can define a model with scopes and default like this:
var TestModel = bookshelf.Model.extend({
tableName: 'testmodel',
scopes: {
default: function(qb) {
qb.where({archived: 0});
}
}
});
Now if you call fetchAll or fetch on any of your queries you will only get items that have archive set to 0:
TestModel.fetchAll().then(function(allUnArchived) {
...
});
If you need to query without the default scope you can call unscoped like so:
TestModel.unscoped().fetchAll().then(function(allModels) {
...
});
You can define a bunch of scope functions you can also combine them in another scope function.
var TestModel = bookshelf.Model.extend({
tableName: 'testmodel',
scopes: {
running: function(qb) {
qb.where({running: 0});
},
byDate: function(qb, date) {
qb.where('created_date', '>=', date);
},
runningByDate: function(qb, date) {
this.running(qb);
this.byDate(qb, date);
}
}
});
Now you can use the combined scope method as well to make things more readable.
TestModel.runningByDate('2015-01-01').fetchAll().then(function(allUnArchived) {
...
});
If in your model you set an initialize you will need to call addScope() to add default scope if you want it
var TestModel = bookshelf.Model.extend({
tableName: 'testmodel',
scopes: {
default: function(qb) {
qb.where({status: 'Active'});
}
},
initialize: function() {
this.addScope(); //Now default scope is set, all other scopes work regardless.
this.newValue = 1;
}
});
Then calls to fetchAll will include it.
TestModel.fetchAll().then(function(allActive) {
...
});
FAQs
Giving you Rails like scopes in Bookshelf.js.
The npm package bookshelf-scopes receives a total of 149 weekly downloads. As such, bookshelf-scopes popularity was classified as not popular.
We found that bookshelf-scopes demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 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.