mobx
Version:
Simple, scalable state management.
66 lines (63 loc) • 2.23 kB
text/typescript
import { globalState, isolateGlobalState, setReactionScheduler } from "../internal"
const NEVER = "never"
const ALWAYS = "always"
const OBSERVED = "observed"
// const IF_AVAILABLE = "ifavailable"
export function configure(options: {
enforceActions?: "never" | "always" | "observed"
computedRequiresReaction?: boolean
/**
* Warn if you try to create to derivation / reactive context without accessing any observable.
*/
reactionRequiresObservable?: boolean
/**
* Warn if observables are accessed outside a reactive context
*/
observableRequiresReaction?: boolean
isolateGlobalState?: boolean
disableErrorBoundaries?: boolean
safeDescriptors?: boolean
reactionScheduler?: (f: () => void) => void
useProxies?: "always" | "never" | "ifavailable"
}): void {
if (options.isolateGlobalState === true) {
isolateGlobalState()
}
const { useProxies, enforceActions } = options
if (useProxies !== undefined) {
globalState.useProxies =
useProxies === ALWAYS
? true
: useProxies === NEVER
? false
: typeof Proxy !== "undefined"
}
if (useProxies === "ifavailable") {
globalState.verifyProxies = true
}
if (enforceActions !== undefined) {
const ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED
globalState.enforceActions = ea
globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true
}
;[
"computedRequiresReaction",
"reactionRequiresObservable",
"observableRequiresReaction",
"disableErrorBoundaries",
"safeDescriptors"
].forEach(key => {
if (key in options) {
globalState[key] = !!options[key]
}
})
globalState.allowStateReads = !globalState.observableRequiresReaction
if (__DEV__ && globalState.disableErrorBoundaries === true) {
console.warn(
"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled."
)
}
if (options.reactionScheduler) {
setReactionScheduler(options.reactionScheduler)
}
}