/
extend-params.js
47 lines (40 loc) · 1.33 KB
/
extend-params.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var computed = require('mutant/computed')
var MutantArray = require('mutant/array')
var resolveAvailable = require('lib/resolve-available')
module.exports = function extendParams (obs) {
var paramOverrideStack = MutantArray([])
obs.overrideParams = function (params) {
paramOverrideStack.push(params)
return function release () {
paramOverrideStack.delete(params)
}
}
var raw = {}
var paramLookup = computed([obs.params, obs.paramValues, paramOverrideStack], function (params, values, overrides) {
var result = {}
var rawResult = {}
for (var i = 0; i < params.length; i++) {
var key = params[i]
var override = paramOverrideStack.get(paramOverrideStack.getLength() - 1)
if (override && override[i] != null) {
result[key] = typeof override[i] === 'function' ? override[i]() : override[i] || 0
rawResult[key] = override[i]
} else {
result[key] = values && values[key] || 0
rawResult[key] = obs.paramValues.get(key)
}
}
raw = rawResult
return result
})
paramLookup.get = function (key) {
return raw[key]
}
paramLookup.keys = function (key) {
return Object.keys(raw)
}
obs.context.paramLookup = paramLookup
obs.resolveAvailableParam = function (id, lastId) {
return resolveAvailable(obs.params(), id, lastId)
}
}