1 | import { TraceMode, die, getAtom, globalState } from "../internal"
|
2 |
|
3 | export function trace(thing?: any, prop?: string, enterBreakPoint?: boolean): void
|
4 | export function trace(thing?: any, enterBreakPoint?: boolean): void
|
5 | export function trace(enterBreakPoint?: boolean): void
|
6 | export function trace(...args: any[]): void {
|
7 | if (!__DEV__) die(`trace() is not available in production builds`)
|
8 | let enterBreakPoint = false
|
9 | if (typeof args[args.length - 1] === "boolean") enterBreakPoint = args.pop()
|
10 | const derivation = getAtomFromArgs(args)
|
11 | if (!derivation) {
|
12 | return die(
|
13 | `'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly`
|
14 | )
|
15 | }
|
16 | if (derivation.isTracing_ === TraceMode.NONE) {
|
17 | console.log(`[mobx.trace] '${derivation.name_}' tracing enabled`)
|
18 | }
|
19 | derivation.isTracing_ = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG
|
20 | }
|
21 |
|
22 | function getAtomFromArgs(args): any {
|
23 | switch (args.length) {
|
24 | case 0:
|
25 | return globalState.trackingDerivation
|
26 | case 1:
|
27 | return getAtom(args[0])
|
28 | case 2:
|
29 | return getAtom(args[0], args[1])
|
30 | }
|
31 | }
|