UNPKG

931 BJavaScriptView Raw
1
2var Permissions = require('./permissions')
3var u = require('./util')
4
5module.exports =
6
7function createLocalCall(api, manifest, perms) {
8 perms = Permissions(perms)
9
10 function has(type, name) {
11 return type === u.get(manifest, name)
12 }
13
14 function localCall(type, name, args) {
15
16 if(name === 'emit')
17 throw new Error('emit has been removed')
18
19 //is there a way to know whether it's sync or async?
20 if(type === 'async')
21 if(has('sync', name)) {
22 var cb = args.pop(), value
23 try { value = u.get(api, name).apply(this, args) }
24 catch (err) { return cb(err) }
25 return cb(null, value)
26 }
27
28 if (!has(type, name))
29 throw new Error('no '+type+':'+name)
30
31 return u.get(api, name).apply(this, args)
32 }
33
34 return function (type, name, args) {
35 var err = perms.pre(name, args)
36 if(err) throw err
37 return localCall.call(this, type, name, args)
38 }
39}
40