coaction 0.2.0 → 1.1.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.
package/dist/index.js CHANGED
@@ -259,6 +259,7 @@ var createSelectorCreatorWithArray = (memoize = defaultMemoize) => {
259
259
  var createSelectorWithArray = createSelectorCreatorWithArray();
260
260
 
261
261
  // src/getRawState.ts
262
+ var clientExecuteSyncTimeoutMs = 1500;
262
263
  var getRawState = (store, internal, initialState, options) => {
263
264
  const rawState = {};
264
265
  const handle = (_rawState, _initialState, sliceKey) => {
@@ -337,31 +338,61 @@ var getRawState = (store, internal, initialState, options) => {
337
338
  };
338
339
  }
339
340
  const keys = sliceKey ? [sliceKey, key] : [key];
340
- return store.transport.emit("execute", keys, args).then(([result, sequence]) => {
341
- if (internal.sequence >= sequence) {
342
- if (result?.$$Error) {
343
- done?.(result);
344
- throw new Error(result.$$Error);
341
+ return store.transport.emit("execute", keys, args).then(async ([result, sequence]) => {
342
+ if (internal.sequence < sequence) {
343
+ if (process.env.NODE_ENV === "development") {
344
+ console.warn(
345
+ `The sequence of the action is not consistent.`,
346
+ sequence,
347
+ internal.sequence
348
+ );
345
349
  }
346
- done?.(result);
347
- return result;
348
- }
349
- if (process.env.NODE_ENV === "development") {
350
- console.warn(
351
- `The sequence of the action is not consistent.`,
352
- sequence,
353
- internal.sequence
354
- );
355
- }
356
- return new Promise((resolve) => {
357
- const unsubscribe = store.subscribe(() => {
358
- if (internal.sequence >= sequence) {
350
+ await new Promise((resolve, reject) => {
351
+ let settled = false;
352
+ let unsubscribe = () => {
353
+ };
354
+ let timeoutId;
355
+ const cleanup = () => {
359
356
  unsubscribe();
360
- done?.(result);
361
- resolve(result);
362
- }
357
+ if (typeof timeoutId !== "undefined") {
358
+ clearTimeout(timeoutId);
359
+ }
360
+ };
361
+ const finishResolve = () => {
362
+ if (settled) return;
363
+ settled = true;
364
+ cleanup();
365
+ resolve();
366
+ };
367
+ const finishReject = (error) => {
368
+ if (settled) return;
369
+ settled = true;
370
+ cleanup();
371
+ reject(error);
372
+ };
373
+ unsubscribe = store.subscribe(() => {
374
+ if (internal.sequence >= sequence) {
375
+ finishResolve();
376
+ }
377
+ });
378
+ timeoutId = setTimeout(() => {
379
+ void store.transport.emit("fullSync").then((latest) => {
380
+ const next = latest;
381
+ store.apply(JSON.parse(next.state));
382
+ internal.sequence = next.sequence;
383
+ finishResolve();
384
+ }).catch((error) => {
385
+ finishReject(error);
386
+ });
387
+ }, clientExecuteSyncTimeoutMs);
363
388
  });
364
- });
389
+ }
390
+ if (result?.$$Error) {
391
+ done?.(result);
392
+ throw new Error(result.$$Error);
393
+ }
394
+ done?.(result);
395
+ return result;
365
396
  });
366
397
  };
367
398
  } else {
package/dist/index.mjs CHANGED
@@ -234,6 +234,7 @@ var createSelectorCreatorWithArray = (memoize = defaultMemoize) => {
234
234
  var createSelectorWithArray = createSelectorCreatorWithArray();
235
235
 
236
236
  // src/getRawState.ts
237
+ var clientExecuteSyncTimeoutMs = 1500;
237
238
  var getRawState = (store, internal, initialState, options) => {
238
239
  const rawState = {};
239
240
  const handle = (_rawState, _initialState, sliceKey) => {
@@ -312,31 +313,61 @@ var getRawState = (store, internal, initialState, options) => {
312
313
  };
313
314
  }
314
315
  const keys = sliceKey ? [sliceKey, key] : [key];
315
- return store.transport.emit("execute", keys, args).then(([result, sequence]) => {
316
- if (internal.sequence >= sequence) {
317
- if (result?.$$Error) {
318
- done?.(result);
319
- throw new Error(result.$$Error);
316
+ return store.transport.emit("execute", keys, args).then(async ([result, sequence]) => {
317
+ if (internal.sequence < sequence) {
318
+ if (process.env.NODE_ENV === "development") {
319
+ console.warn(
320
+ `The sequence of the action is not consistent.`,
321
+ sequence,
322
+ internal.sequence
323
+ );
320
324
  }
321
- done?.(result);
322
- return result;
323
- }
324
- if (process.env.NODE_ENV === "development") {
325
- console.warn(
326
- `The sequence of the action is not consistent.`,
327
- sequence,
328
- internal.sequence
329
- );
330
- }
331
- return new Promise((resolve) => {
332
- const unsubscribe = store.subscribe(() => {
333
- if (internal.sequence >= sequence) {
325
+ await new Promise((resolve, reject) => {
326
+ let settled = false;
327
+ let unsubscribe = () => {
328
+ };
329
+ let timeoutId;
330
+ const cleanup = () => {
334
331
  unsubscribe();
335
- done?.(result);
336
- resolve(result);
337
- }
332
+ if (typeof timeoutId !== "undefined") {
333
+ clearTimeout(timeoutId);
334
+ }
335
+ };
336
+ const finishResolve = () => {
337
+ if (settled) return;
338
+ settled = true;
339
+ cleanup();
340
+ resolve();
341
+ };
342
+ const finishReject = (error) => {
343
+ if (settled) return;
344
+ settled = true;
345
+ cleanup();
346
+ reject(error);
347
+ };
348
+ unsubscribe = store.subscribe(() => {
349
+ if (internal.sequence >= sequence) {
350
+ finishResolve();
351
+ }
352
+ });
353
+ timeoutId = setTimeout(() => {
354
+ void store.transport.emit("fullSync").then((latest) => {
355
+ const next = latest;
356
+ store.apply(JSON.parse(next.state));
357
+ internal.sequence = next.sequence;
358
+ finishResolve();
359
+ }).catch((error) => {
360
+ finishReject(error);
361
+ });
362
+ }, clientExecuteSyncTimeoutMs);
338
363
  });
339
- });
364
+ }
365
+ if (result?.$$Error) {
366
+ done?.(result);
367
+ throw new Error(result.$$Error);
368
+ }
369
+ done?.(result);
370
+ return result;
340
371
  });
341
372
  };
342
373
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coaction",
3
- "version": "0.2.0",
3
+ "version": "1.1.0",
4
4
  "description": "A sleek JavaScript library designed for high-performance and multithreading web apps.",
5
5
  "keywords": [
6
6
  "coaction"