-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodule.mjs
More file actions
52 lines (40 loc) · 845 Bytes
/
module.mjs
File metadata and controls
52 lines (40 loc) · 845 Bytes
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
48
49
50
51
52
import {
awaitSymbol,
call,
ref
} from './symbol.mjs'
function instrument (name) {
function reference (...args) {
const called = instrument(name)
called.toJSON = () => ({
[call]: call,
call: true,
ref: reference,
args
})
return called
}
reference.then = (resolve) => {
const awaited = instrument(name)
delete awaited.then
awaited.toJSON = () => ({
[awaitSymbol]: awaitSymbol,
await: true,
ref: reference
})
return resolve(awaited)
}
reference.toJSON = () => ({
[ref]: ref,
reference: true,
name
})
return reference
}
export default function module (schema) {
if (!Array.isArray(schema)) return module(Object.keys(schema))
return schema.reduce((api, name) => {
api[name] = instrument(name)
return api
}, {})
}