forked from mobxjs/mobx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrace.ts
More file actions
31 lines (29 loc) · 1.19 KB
/
trace.ts
File metadata and controls
31 lines (29 loc) · 1.19 KB
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
import { TraceMode, fail, getAtom, globalState } from "../internal"
export function trace(thing?: any, prop?: string, enterBreakPoint?: boolean): void
export function trace(thing?: any, enterBreakPoint?: boolean): void
export function trace(enterBreakPoint?: boolean): void
export function trace(...args: any[]): void {
let enterBreakPoint = false
if (typeof args[args.length - 1] === "boolean") enterBreakPoint = args.pop()
const derivation = getAtomFromArgs(args)
if (!derivation) {
return fail(
process.env.NODE_ENV !== "production" &&
`'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly`
)
}
if (derivation.isTracing === TraceMode.NONE) {
console.log(`[mobx.trace] '${derivation.name}' tracing enabled`)
}
derivation.isTracing = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG
}
function getAtomFromArgs(args): any {
switch (args.length) {
case 0:
return globalState.trackingDerivation
case 1:
return getAtom(args[0])
case 2:
return getAtom(args[0], args[1])
}
}