-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
configure.ts
96 lines (94 loc) · 3.14 KB
/
configure.ts
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import {
globalState,
fail,
isolateGlobalState,
deprecated,
reserveArrayBuffer,
setReactionScheduler
} from "../internal"
export function configure(options: {
enforceActions?: boolean | "strict" | "never" | "always" | "observed"
computedRequiresReaction?: boolean
/**
* (Experimental)
* Warn if you try to create to derivation / reactive context without accessing any observable.
*/
reactionRequiresObservable?: boolean
/**
* (Experimental)
* Warn if observables are accessed outside a reactive context
*/
observableRequiresReaction?: boolean
computedConfigurable?: boolean
isolateGlobalState?: boolean
disableErrorBoundaries?: boolean
arrayBuffer?: number
reactionScheduler?: (f: () => void) => void
}): void {
const {
enforceActions,
computedRequiresReaction,
computedConfigurable,
disableErrorBoundaries,
arrayBuffer,
reactionScheduler,
reactionRequiresObservable,
observableRequiresReaction
} = options
if (options.isolateGlobalState === true) {
isolateGlobalState()
}
if (enforceActions !== undefined) {
if (typeof enforceActions === "boolean" || enforceActions === "strict")
deprecated(
`Deprecated value for 'enforceActions', use 'false' => '"never"', 'true' => '"observed"', '"strict"' => "'always'" instead`
)
let ea
switch (enforceActions) {
case true:
case "observed":
ea = true
break
case false:
case "never":
ea = false
break
case "strict":
case "always":
ea = "strict"
break
default:
fail(
`Invalid value for 'enforceActions': '${enforceActions}', expected 'never', 'always' or 'observed'`
)
}
globalState.enforceActions = ea
globalState.allowStateChanges = ea === true || ea === "strict" ? false : true
}
if (computedRequiresReaction !== undefined) {
globalState.computedRequiresReaction = !!computedRequiresReaction
}
if (reactionRequiresObservable !== undefined) {
globalState.reactionRequiresObservable = !!reactionRequiresObservable
}
if (observableRequiresReaction !== undefined) {
globalState.observableRequiresReaction = !!observableRequiresReaction
globalState.allowStateReads = !globalState.observableRequiresReaction
}
if (computedConfigurable !== undefined) {
globalState.computedConfigurable = !!computedConfigurable
}
if (disableErrorBoundaries !== undefined) {
if (disableErrorBoundaries === true)
console.warn(
"WARNING: Debug feature only. MobX will NOT recover from errors if this is on."
)
globalState.disableErrorBoundaries = !!disableErrorBoundaries
}
if (typeof arrayBuffer === "number") {
reserveArrayBuffer(arrayBuffer)
}
if (reactionScheduler) {
setReactionScheduler(reactionScheduler)
}
}