mirror of
https://github.com/flynx/features.js.git
synced 2025-10-29 10:20:09 +00:00
added ability to depend on exclusive tags...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
9b7e90e241
commit
eb90a1c388
28
features.js
28
features.js
@ -42,6 +42,9 @@ var args2array = function(a){ return [].slice.call(a) }
|
|||||||
// making each sub-feature a strict dependency.
|
// making each sub-feature a strict dependency.
|
||||||
// .depends - feature dependencies -- tags of features that must setup
|
// .depends - feature dependencies -- tags of features that must setup
|
||||||
// before the feature (list | null)
|
// before the feature (list | null)
|
||||||
|
// NOTE: a feature can depend on an exclusive tag, this will
|
||||||
|
// remove the need to track which specific exclusive
|
||||||
|
// tagged feature is loaded...
|
||||||
// .exclusive - feature exclusivity tags (list | null)
|
// .exclusive - feature exclusivity tags (list | null)
|
||||||
// an exclusivity group enforces that only one feature in
|
// an exclusivity group enforces that only one feature in
|
||||||
// it will be run, i.e. the first / highest priority.
|
// it will be run, i.e. the first / highest priority.
|
||||||
@ -348,6 +351,8 @@ var FeatureSetProto = {
|
|||||||
var missing = {}
|
var missing = {}
|
||||||
var conflicts = {}
|
var conflicts = {}
|
||||||
|
|
||||||
|
var exclusive = {}
|
||||||
|
|
||||||
|
|
||||||
// reverse dependency cache...
|
// reverse dependency cache...
|
||||||
var dependants = {}
|
var dependants = {}
|
||||||
@ -394,6 +399,7 @@ var FeatureSetProto = {
|
|||||||
|
|
||||||
var deps = that[k].depends || []
|
var deps = that[k].depends || []
|
||||||
var refs = that[k].suggested || []
|
var refs = that[k].suggested || []
|
||||||
|
var excl = that[k].exclusive || []
|
||||||
|
|
||||||
deps.forEach(function(n){
|
deps.forEach(function(n){
|
||||||
// expand lst with dependencies....
|
// expand lst with dependencies....
|
||||||
@ -408,6 +414,12 @@ var FeatureSetProto = {
|
|||||||
refs.forEach(function(n){
|
refs.forEach(function(n){
|
||||||
lst.indexOf(n) < 0 && lst.push(n)
|
lst.indexOf(n) < 0 && lst.push(n)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// build exclusive table...
|
||||||
|
excl.forEach(function(n){
|
||||||
|
var l = exclusive[n] = exclusive[n] || []
|
||||||
|
l.indexOf(k) < 0 && l.push(k)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort features by priority or position...
|
// sort features by priority or position...
|
||||||
@ -435,7 +447,7 @@ var FeatureSetProto = {
|
|||||||
.filter(function(e){ return disabled.indexOf(e) < 0 })
|
.filter(function(e){ return disabled.indexOf(e) < 0 })
|
||||||
// build the sort table: [ <priority>, <index>, <elem> ]
|
// build the sort table: [ <priority>, <index>, <elem> ]
|
||||||
.map(function(e, i){ return [ that[e].getPriority(), i, e ] })
|
.map(function(e, i){ return [ that[e].getPriority(), i, e ] })
|
||||||
// do the sort...
|
// sort by priority then index...
|
||||||
// NOTE: JS compares lists as strings so we have to compare
|
// NOTE: JS compares lists as strings so we have to compare
|
||||||
// the list manually...
|
// the list manually...
|
||||||
.sort(function(a, b){ return a[0] - b[0] || a[1] - b[1] })
|
.sort(function(a, b){ return a[0] - b[0] || a[1] - b[1] })
|
||||||
@ -539,7 +551,19 @@ var FeatureSetProto = {
|
|||||||
|
|
||||||
for(var i=0; i < lst.length; i++){
|
for(var i=0; i < lst.length; i++){
|
||||||
var k = lst[i]
|
var k = lst[i]
|
||||||
var depends = that[k].depends || []
|
var depends = (that[k].depends || []).slice()
|
||||||
|
|
||||||
|
// replace dependencies that are exclusive tags...
|
||||||
|
Object.keys(exclusive).forEach(function(e){
|
||||||
|
var i = depends.indexOf(e)
|
||||||
|
i >= 0
|
||||||
|
&& exclusive[e].forEach(function(f){
|
||||||
|
if(lst.indexOf(f) >= 0){
|
||||||
|
console.log('EXCL->DEP', e, f)
|
||||||
|
depends[i] = f
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
// list of dependencies to move...
|
// list of dependencies to move...
|
||||||
var move = []
|
var move = []
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ig-features",
|
"name": "ig-features",
|
||||||
"version": "2.1.0",
|
"version": "2.2.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "features.js",
|
"main": "features.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -24,6 +24,6 @@
|
|||||||
"homepage": "https://github.com/flynx/features.js#readme",
|
"homepage": "https://github.com/flynx/features.js#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ig-object": "^1.0.0",
|
"ig-object": "^1.0.0",
|
||||||
"ig-actions": "^1.0.0"
|
"ig-actions": "^1.6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user