@nexigen/entity-normalizer 0.3.1 → 0.4.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.
@@ -5,22 +5,30 @@ export declare class AsyncDuck<TParams, TResult> {
5
5
  private _error;
6
6
  private _data;
7
7
  private _hasEverRun;
8
+ private _inFlight;
9
+ private _lastSuccessParams?;
10
+ private _lastRunSucceeded;
8
11
  private fn;
9
12
  private _keyed;
10
13
  private _proxy?;
11
- private _pendingPromise;
12
14
  private _lastRunParams?;
15
+ private _abortController;
16
+ private _tokenCounter;
17
+ private _activeToken;
13
18
  constructor(fn: (params?: TParams) => Promise<TResult>);
14
19
  getKeyed(key: string): AsyncDuck<TParams, TResult>;
15
20
  private setLoading;
16
21
  private setSuccess;
17
22
  private setError;
23
+ private abortAndInvalidate;
18
24
  reset(): void;
25
+ cancel(): void;
19
26
  private sleep;
20
27
  private runWithRetry;
21
28
  run(options?: RunOptions<TParams, TResult>): Promise<TResult | undefined>;
22
29
  refresh(): Promise<TResult | undefined>;
23
30
  get isLoading(): boolean;
31
+ get isInFlight(): boolean;
24
32
  get isRetrying(): boolean;
25
33
  get isError(): boolean;
26
34
  get isSuccess(): boolean;
@@ -1,4 +1,5 @@
1
- import { makeObservable, observable, action } from 'mobx';
1
+ import { makeObservable, observable, action, runInAction } from 'mobx';
2
+ import { CanceledError, isCanceled } from './cancel';
2
3
  import { executionAsyncContext } from './execution-context';
3
4
  import { DUCK_TAG } from './marker';
4
5
  import { defaultRetryStrategy } from './retry';
@@ -9,8 +10,12 @@ export class AsyncDuck {
9
10
  this._error = null;
10
11
  this._data = null;
11
12
  this._hasEverRun = false;
13
+ this._inFlight = false;
14
+ this._lastRunSucceeded = false;
12
15
  this._keyed = new Map();
13
- this._pendingPromise = null;
16
+ this._abortController = null;
17
+ this._tokenCounter = 0;
18
+ this._activeToken = 0;
14
19
  this.fn = fn;
15
20
  this._proxy = new Proxy(this, {
16
21
  get: (target, prop) => {
@@ -35,6 +40,7 @@ export class AsyncDuck {
35
40
  setSuccess: action,
36
41
  setError: action,
37
42
  reset: action,
43
+ cancel: action,
38
44
  });
39
45
  }
40
46
  // -------------------------------------
@@ -60,6 +66,8 @@ export class AsyncDuck {
60
66
  this._isLoading = false;
61
67
  this._isRetrying = false;
62
68
  this._hasEverRun = true;
69
+ this._lastRunSucceeded = true;
70
+ this._lastSuccessParams = this._lastRunParams;
63
71
  onSuccess?.(data);
64
72
  }
65
73
  setError(err, onError) {
@@ -68,43 +76,86 @@ export class AsyncDuck {
68
76
  this._isLoading = false;
69
77
  this._isRetrying = false;
70
78
  this._hasEverRun = true;
79
+ this._lastRunSucceeded = false;
71
80
  onError?.(normalized);
72
81
  }
82
+ abortAndInvalidate() {
83
+ if (this._abortController && (this._isLoading || this._isRetrying)) {
84
+ this._abortController.abort();
85
+ }
86
+ this._abortController = null;
87
+ this._activeToken = ++this._tokenCounter;
88
+ }
73
89
  reset() {
74
- this._isLoading = false;
75
- this._isRetrying = false;
90
+ this.cancel();
76
91
  this._error = null;
77
92
  this._data = null;
78
93
  this._hasEverRun = false;
79
- this._pendingPromise = null;
94
+ this._lastSuccessParams = undefined;
80
95
  this._lastRunParams = undefined;
81
96
  }
97
+ cancel() {
98
+ this.abortAndInvalidate();
99
+ this.setLoading(false);
100
+ }
82
101
  // -------------------------------------
83
102
  // UTILS
84
103
  // -------------------------------------
85
- sleep(ms) {
86
- return new Promise(resolve => setTimeout(resolve, ms));
104
+ sleep(ms, signal) {
105
+ return new Promise((resolve, reject) => {
106
+ if (!signal) {
107
+ setTimeout(resolve, ms);
108
+ return;
109
+ }
110
+ if (signal.aborted) {
111
+ reject(new CanceledError());
112
+ return;
113
+ }
114
+ let timer = null;
115
+ const onAbort = () => {
116
+ if (timer) {
117
+ clearTimeout(timer);
118
+ }
119
+ reject(new CanceledError());
120
+ };
121
+ timer = setTimeout(() => {
122
+ signal.removeEventListener('abort', onAbort);
123
+ resolve();
124
+ }, ms);
125
+ signal.addEventListener('abort', onAbort, { once: true });
126
+ });
87
127
  }
88
128
  // -------------------------------------
89
129
  // RETRY ENGINE
90
130
  // -------------------------------------
91
- async runWithRetry(params, retryStrategy) {
131
+ async runWithRetry(params, retryStrategy, signal) {
92
132
  const retry = { ...defaultRetryStrategy, ...retryStrategy };
93
133
  const max = retry.retries ?? 0;
94
134
  for (let attempt = 1; attempt <= max + 1; attempt++) {
135
+ if (signal?.aborted) {
136
+ throw new CanceledError();
137
+ }
95
138
  try {
96
139
  return await this.fn(params);
97
140
  }
98
141
  catch (error) {
142
+ if (isCanceled(error, signal)) {
143
+ throw new CanceledError();
144
+ }
99
145
  const normalized = error instanceof Error ? error : new Error(String(error));
100
146
  const should = retry.shouldRetry?.(normalized) ?? false;
101
147
  const isLast = attempt > max;
102
148
  if (!should || isLast) {
103
149
  throw normalized;
104
150
  }
105
- this._isRetrying = true;
106
- const delay = retry.backoff ? retry.delayMs * attempt : retry.delayMs;
107
- await this.sleep(delay);
151
+ runInAction(() => {
152
+ this._isRetrying = true;
153
+ });
154
+ const baseDelay = retry.delayMs ?? 0;
155
+ const delay = retry.backoff ? baseDelay * attempt : baseDelay;
156
+ if (delay > 0) {
157
+ await this.sleep(delay, signal);
158
+ }
108
159
  }
109
160
  }
110
161
  throw new Error('Unexpected retry exit');
@@ -113,8 +164,12 @@ export class AsyncDuck {
113
164
  // PUBLIC RUN
114
165
  // -------------------------------------
115
166
  async run(options) {
167
+ if (this._inFlight) {
168
+ return undefined;
169
+ }
170
+ this._inFlight = true;
116
171
  if (options?.skip) {
117
- return;
172
+ return undefined;
118
173
  }
119
174
  if (options?.key) {
120
175
  return this.getKeyed(options.key).run({
@@ -122,41 +177,51 @@ export class AsyncDuck {
122
177
  key: undefined,
123
178
  });
124
179
  }
125
- if (this._pendingPromise) {
126
- return this._pendingPromise;
127
- }
128
- if (this._isLoading || this._isRetrying) {
129
- return this._pendingPromise;
130
- }
180
+ const token = this._activeToken;
181
+ const controller = new AbortController();
182
+ this._abortController = controller;
131
183
  const { params, onSuccess, onError, retryStrategy } = options ?? {};
132
- if (params !== undefined) {
133
- this._lastRunParams = params;
134
- }
135
- const isRetry = !!retryStrategy;
136
- this.setLoading(isRetry);
137
- this._pendingPromise = (async () => {
184
+ this._lastRunParams = params;
185
+ this.setLoading(!!retryStrategy);
186
+ return executionAsyncContext.withAbort(controller.signal, async () => {
138
187
  try {
188
+ const signal = executionAsyncContext.currentSignal();
139
189
  const result = retryStrategy
140
- ? await this.runWithRetry(params, retryStrategy)
190
+ ? await this.runWithRetry(params, retryStrategy, signal)
141
191
  : await this.fn(params);
192
+ if (this._activeToken !== token) {
193
+ return undefined;
194
+ }
195
+ if (controller.signal.aborted) {
196
+ return undefined;
197
+ }
142
198
  this.setSuccess(result, onSuccess);
143
199
  return result;
144
200
  }
145
201
  catch (err) {
202
+ if (this._activeToken !== token) {
203
+ return undefined;
204
+ }
205
+ if (isCanceled(err, controller.signal)) {
206
+ this._isLoading = false;
207
+ this._isRetrying = false;
208
+ return undefined;
209
+ }
146
210
  this.setError(err, onError);
147
211
  return undefined;
148
212
  }
149
213
  finally {
150
- this._pendingPromise = null;
214
+ this._inFlight = false;
151
215
  }
152
- })();
153
- return this._pendingPromise;
216
+ });
154
217
  }
155
218
  refresh() {
156
- if (!this._lastRunParams) {
219
+ if (!this._lastRunSucceeded) {
157
220
  return Promise.resolve(undefined);
158
221
  }
159
- return executionAsyncContext.runWith('refresh', () => this.run({ params: this._lastRunParams }));
222
+ this._inFlight = false;
223
+ this.abortAndInvalidate();
224
+ return executionAsyncContext.withIntent('refresh', () => this.run({ params: this._lastSuccessParams }));
160
225
  }
161
226
  // -------------------------------------
162
227
  // GETTERS
@@ -164,6 +229,9 @@ export class AsyncDuck {
164
229
  get isLoading() {
165
230
  return this._isLoading;
166
231
  }
232
+ get isInFlight() {
233
+ return this._inFlight;
234
+ }
167
235
  get isRetrying() {
168
236
  return this._isRetrying;
169
237
  }
@@ -1 +1 @@
1
- {"version":3,"file":"async-duck.js","sourceRoot":"","sources":["../../src/async/async-duck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-duck.js","sourceRoot":"","sources":["../../src/async/async-duck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare class CanceledError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ export declare function isCanceled(err: unknown, signal?: AbortSignal | null): boolean;
@@ -0,0 +1,32 @@
1
+ export class CanceledError extends Error {
2
+ constructor(message = 'canceled') {
3
+ super(message);
4
+ this.name = 'CanceledError';
5
+ }
6
+ }
7
+ export function isCanceled(err, signal) {
8
+ if (signal?.aborted) {
9
+ return true;
10
+ }
11
+ if (!err || typeof err !== 'object') {
12
+ return false;
13
+ }
14
+ const anyErr = err;
15
+ // DOM / fetch
16
+ if (anyErr?.name === 'AbortError') {
17
+ return true;
18
+ }
19
+ // axios v1
20
+ if (anyErr?.name === 'CanceledError') {
21
+ return true;
22
+ }
23
+ if (anyErr?.code === 'ERR_CANCELED') {
24
+ return true;
25
+ }
26
+ // internal
27
+ if (err instanceof CanceledError) {
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/async/cancel.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAO,GAAG,UAAU;QAC9B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,MAA2B;IAClE,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,GAAU,CAAC;IAE1B,cAAc;IACd,IAAI,MAAM,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;IACX,IAAI,MAAM,EAAE,IAAI,KAAK,eAAe,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;IACX,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -2,9 +2,13 @@ import { type ExecutionIntent } from './types';
2
2
  import type { PublicExecutionContext } from './public';
3
3
  export declare class ExecutionContext {
4
4
  private stack;
5
- runWith<T>(intent: ExecutionIntent, fn: () => Promise<T>): Promise<T>;
6
- current(): ExecutionIntent;
5
+ private push;
6
+ private pop;
7
+ private current;
8
+ withIntent<T>(intent: ExecutionIntent, fn: () => Promise<T>): Promise<T>;
7
9
  is(intent: ExecutionIntent): boolean;
10
+ withAbort<T>(signal: AbortSignal, fn: () => Promise<T>): Promise<T>;
11
+ currentSignal(): AbortSignal | null;
8
12
  }
9
13
  export declare function createExecutionContext(): PublicExecutionContext;
10
14
  export declare const executionAsyncContext: PublicExecutionContext;
@@ -2,20 +2,49 @@ export class ExecutionContext {
2
2
  constructor() {
3
3
  this.stack = [];
4
4
  }
5
- async runWith(intent, fn) {
6
- this.stack.push(intent);
5
+ push(frame) {
6
+ this.stack.push(frame);
7
+ }
8
+ pop() {
9
+ this.stack.pop();
10
+ }
11
+ current() {
12
+ return (this.stack[this.stack.length - 1] ?? {
13
+ intent: 'normal',
14
+ signal: null,
15
+ });
16
+ }
17
+ async withIntent(intent, fn) {
18
+ const parent = this.current();
19
+ this.push({
20
+ intent,
21
+ signal: parent.signal,
22
+ });
7
23
  try {
8
24
  return await fn();
9
25
  }
10
26
  finally {
11
- this.stack.pop();
27
+ this.pop();
12
28
  }
13
29
  }
14
- current() {
15
- return this.stack[this.stack.length - 1] ?? 'normal';
16
- }
17
30
  is(intent) {
18
- return this.current() === intent;
31
+ return this.current().intent === intent;
32
+ }
33
+ async withAbort(signal, fn) {
34
+ const parent = this.current();
35
+ this.push({
36
+ intent: parent.intent,
37
+ signal,
38
+ });
39
+ try {
40
+ return await fn();
41
+ }
42
+ finally {
43
+ this.pop();
44
+ }
45
+ }
46
+ currentSignal() {
47
+ return this.current().signal;
19
48
  }
20
49
  }
21
50
  export function createExecutionContext() {
@@ -1 +1 @@
1
- {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/async/execution-context.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,gBAAgB;IAA7B;QACU,UAAK,GAAsB,EAAE,CAAC;IAkBxC,CAAC;IAhBC,KAAK,CAAC,OAAO,CAAI,MAAuB,EAAE,EAAoB;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;IACvD,CAAC;IAED,EAAE,CAAC,MAAuB;QACxB,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAChC,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/async/execution-context.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,gBAAgB;IAA7B;QACU,UAAK,GAAqB,EAAE,CAAC;IA2DvC,CAAC;IAzDS,IAAI,CAAC,KAAqB;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAEO,GAAG;QACT,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAEO,OAAO;QACb,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI;YACnC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI;SACb,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAuB,EACvB,EAAoB;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC;YACR,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,EAAE,CAAC,MAAuB;QACxB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,MAAmB,EAAE,EAAoB;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAChC,sBAAsB,EAAE,CAAC"}
@@ -14,13 +14,15 @@ export type RunOptions<TParams, TResult> = {
14
14
  retryStrategy?: RetryStrategy;
15
15
  };
16
16
  export interface PublicExecutionContext {
17
- runWith<T>(intent: ExecutionIntent, fn: () => Promise<T>): Promise<T>;
18
- current(): ExecutionIntent;
17
+ withIntent<T>(intent: ExecutionIntent, fn: () => Promise<T>): Promise<T>;
19
18
  is(intent: ExecutionIntent): boolean;
19
+ withAbort<T>(signal: AbortSignal, fn: () => Promise<T>): Promise<T>;
20
+ currentSignal(): AbortSignal | null;
20
21
  }
21
22
  export interface PublicAsyncDuck<TParams, TResult> {
22
23
  run(options?: RunOptions<TParams, TResult>): Promise<TResult | undefined>;
23
24
  refresh(): Promise<TResult | undefined>;
25
+ cancel(): void;
24
26
  readonly isLoading: boolean;
25
27
  readonly isRetrying: boolean;
26
28
  readonly isError: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexigen/entity-normalizer",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Reactive entity infrastructure for complex client applications, built on MobX.",
5
5
  "license": "MIT",
6
6
  "type": "module",