mobx 6.9.0 → 6.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ export interface GenericAbortSignal {
2
+ readonly aborted: boolean;
3
+ onabort?: ((...args: any) => any) | null;
4
+ addEventListener?: (...args: any) => any;
5
+ removeEventListener?: (...args: any) => any;
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx",
3
- "version": "6.9.0",
3
+ "version": "6.10.0",
4
4
  "description": "Simple, scalable state management.",
5
5
  "source": "src/mobx.ts",
6
6
  "main": "dist/index.js",
@@ -75,6 +75,6 @@
75
75
  "test:coverage": "yarn test -i --coverage",
76
76
  "test:size": "yarn import-size --report . observable computed autorun action",
77
77
  "test:check": "yarn test:types",
78
- "prepublish": "node ./scripts/prepublish.js && yarn build --target publish"
78
+ "prepublishOnly": "node ./scripts/prepublish.js && yarn build --target publish"
79
79
  }
80
80
  }
@@ -12,7 +12,8 @@ import {
12
12
  isFunction,
13
13
  isPlainObject,
14
14
  die,
15
- allowStateChanges
15
+ allowStateChanges,
16
+ GenericAbortSignal
16
17
  } from "../internal"
17
18
 
18
19
  export interface IAutorunOptions {
@@ -25,6 +26,7 @@ export interface IAutorunOptions {
25
26
  requiresObservable?: boolean
26
27
  scheduler?: (callback: () => void) => any
27
28
  onError?: (error: any) => void
29
+ signal?: GenericAbortSignal
28
30
  }
29
31
 
30
32
  /**
@@ -88,8 +90,10 @@ export function autorun(
88
90
  view(reaction)
89
91
  }
90
92
 
91
- reaction.schedule_()
92
- return reaction.getDisposer_()
93
+ if(!opts?.signal?.aborted) {
94
+ reaction.schedule_()
95
+ }
96
+ return reaction.getDisposer_(opts?.signal)
93
97
  }
94
98
 
95
99
  export type IReactionOptions<T, FireImmediately extends boolean> = IAutorunOptions & {
@@ -178,8 +182,10 @@ export function reaction<T, FireImmediately extends boolean = false>(
178
182
  firstTime = false
179
183
  }
180
184
 
181
- r.schedule_()
182
- return r.getDisposer_()
185
+ if(!opts?.signal?.aborted) {
186
+ r.schedule_()
187
+ }
188
+ return r.getDisposer_(opts?.signal)
183
189
  }
184
190
 
185
191
  function wrapErrorHandler(errorHandler, baseFn) {
@@ -23,10 +23,12 @@ import {
23
23
  // Fixes: https://github.com/mobxjs/mobx/issues/2325#issuecomment-691070022
24
24
  type NoInfer<T> = [T][T extends any ? 0 : never]
25
25
 
26
+ type MakeObservableOptions = Omit<CreateObservableOptions, "proxy">
27
+
26
28
  export function makeObservable<T extends object, AdditionalKeys extends PropertyKey = never>(
27
29
  target: T,
28
30
  annotations?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,
29
- options?: CreateObservableOptions
31
+ options?: MakeObservableOptions
30
32
  ): T {
31
33
  const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]
32
34
  startBatch()
@@ -53,7 +55,7 @@ const keysSymbol = Symbol("mobx-keys")
53
55
  export function makeAutoObservable<T extends object, AdditionalKeys extends PropertyKey = never>(
54
56
  target: T,
55
57
  overrides?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,
56
- options?: CreateObservableOptions
58
+ options?: MakeObservableOptions
57
59
  ): T {
58
60
  if (__DEV__) {
59
61
  if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {
package/src/api/trace.ts CHANGED
@@ -5,7 +5,7 @@ export function trace(thing?: any, enterBreakPoint?: boolean): void
5
5
  export function trace(enterBreakPoint?: boolean): void
6
6
  export function trace(...args: any[]): void {
7
7
  if (!__DEV__) {
8
- die(`trace() is not available in production builds`)
8
+ return
9
9
  }
10
10
  let enterBreakPoint = false
11
11
  if (typeof args[args.length - 1] === "boolean") {
package/src/api/when.ts CHANGED
@@ -6,17 +6,10 @@ import {
6
6
  createAction,
7
7
  getNextId,
8
8
  die,
9
- allowStateChanges
9
+ allowStateChanges,
10
+ GenericAbortSignal
10
11
  } from "../internal"
11
12
 
12
- // https://github.com/mobxjs/mobx/issues/3582
13
- interface GenericAbortSignal {
14
- readonly aborted: boolean
15
- onabort?: ((...args: any) => any) | null
16
- addEventListener?: (...args: any) => any
17
- removeEventListener?: (...args: any) => any
18
- }
19
-
20
13
  export interface IWhenOptions {
21
14
  name?: string
22
15
  timeout?: number
@@ -18,7 +18,7 @@ import {
18
18
  spyReportStart,
19
19
  startBatch,
20
20
  trace,
21
- trackDerivedFunction
21
+ trackDerivedFunction, GenericAbortSignal
22
22
  } from "../internal"
23
23
 
24
24
  /**
@@ -195,10 +195,15 @@ export class Reaction implements IDerivation, IReactionPublic {
195
195
  }
196
196
  }
197
197
 
198
- getDisposer_(): IReactionDisposer {
199
- const r = this.dispose.bind(this) as IReactionDisposer
200
- r[$mobx] = this
201
- return r
198
+ getDisposer_(abortSignal?: GenericAbortSignal): IReactionDisposer {
199
+ const dispose = (() => {
200
+ this.dispose()
201
+ abortSignal?.removeEventListener?.("abort", dispose)
202
+ }) as IReactionDisposer
203
+ abortSignal?.addEventListener?.("abort", dispose)
204
+ dispose[$mobx] = this
205
+
206
+ return dispose
202
207
  }
203
208
 
204
209
  toString() {
package/src/internal.ts CHANGED
@@ -18,6 +18,7 @@ export * from "./types/flowannotation"
18
18
  export * from "./types/computedannotation"
19
19
  export * from "./types/observableannotation"
20
20
  export * from "./types/autoannotation"
21
+ export * from "./types/generic-abort-signal"
21
22
  export * from "./api/observable"
22
23
  export * from "./api/computed"
23
24
  export * from "./core/action"
@@ -0,0 +1,7 @@
1
+ // https://github.com/mobxjs/mobx/issues/3582
2
+ export interface GenericAbortSignal {
3
+ readonly aborted: boolean
4
+ onabort?: ((...args: any) => any) | null
5
+ addEventListener?: (...args: any) => any
6
+ removeEventListener?: (...args: any) => any
7
+ }