effectable 1.0.0 → 1.1.0-canary.10

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.
Files changed (71) hide show
  1. package/README.md +9 -3
  2. package/build/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/build/bootstrap/bootstrap.js +18 -8
  4. package/build/bootstrap/bootstrap.js.map +1 -1
  5. package/build/bootstrap/types.d.ts +11 -3
  6. package/build/bootstrap/types.d.ts.map +1 -1
  7. package/build/component/Component.d.ts.map +1 -1
  8. package/build/component/Component.js +16 -4
  9. package/build/component/Component.js.map +1 -1
  10. package/build/component/GraphRuntime.d.ts +254 -24
  11. package/build/component/GraphRuntime.d.ts.map +1 -1
  12. package/build/component/GraphRuntime.js +1136 -239
  13. package/build/component/GraphRuntime.js.map +1 -1
  14. package/build/component/context.d.ts +3 -11
  15. package/build/component/context.d.ts.map +1 -1
  16. package/build/component/context.js +24 -23
  17. package/build/component/context.js.map +1 -1
  18. package/build/component/h.d.ts +14 -6
  19. package/build/component/h.d.ts.map +1 -1
  20. package/build/component/h.js +19 -1
  21. package/build/component/h.js.map +1 -1
  22. package/build/component/lifecycle.d.ts +11 -2
  23. package/build/component/lifecycle.d.ts.map +1 -1
  24. package/build/component/lifecycle.js +21 -4
  25. package/build/component/lifecycle.js.map +1 -1
  26. package/build/component/refs.d.ts +7 -5
  27. package/build/component/refs.d.ts.map +1 -1
  28. package/build/component/refs.js +45 -22
  29. package/build/component/refs.js.map +1 -1
  30. package/build/component/types.d.ts +16 -5
  31. package/build/component/types.d.ts.map +1 -1
  32. package/build/component/types.js.map +1 -1
  33. package/build/connect/connect.d.ts.map +1 -1
  34. package/build/connect/connect.js +143 -44
  35. package/build/connect/connect.js.map +1 -1
  36. package/build/connect/types.d.ts +2 -2
  37. package/build/connect/types.d.ts.map +1 -1
  38. package/build/runtime/BusDecorators.d.ts +6 -0
  39. package/build/runtime/BusDecorators.d.ts.map +1 -1
  40. package/build/runtime/BusDecorators.js +126 -56
  41. package/build/runtime/BusDecorators.js.map +1 -1
  42. package/build/runtime/CommandBus.d.ts +1 -1
  43. package/build/runtime/CommandBus.d.ts.map +1 -1
  44. package/build/runtime/CommandBus.js +6 -3
  45. package/build/runtime/CommandBus.js.map +1 -1
  46. package/build/runtime/EventBus.d.ts.map +1 -1
  47. package/build/runtime/EventBus.js +11 -3
  48. package/build/runtime/EventBus.js.map +1 -1
  49. package/build/runtime/HandleRegistry.d.ts +2 -1
  50. package/build/runtime/HandleRegistry.d.ts.map +1 -1
  51. package/build/runtime/HandleRegistry.js +38 -7
  52. package/build/runtime/HandleRegistry.js.map +1 -1
  53. package/build/runtime/QueryBus.d.ts +1 -1
  54. package/build/runtime/QueryBus.d.ts.map +1 -1
  55. package/build/runtime/QueryBus.js +6 -3
  56. package/build/runtime/QueryBus.js.map +1 -1
  57. package/build/store/createStore.d.ts +2 -2
  58. package/build/store/createStore.d.ts.map +1 -1
  59. package/build/store/createStore.js +31 -4
  60. package/build/store/createStore.js.map +1 -1
  61. package/build/store/middleware.d.ts +16 -1
  62. package/build/store/middleware.d.ts.map +1 -1
  63. package/build/store/middleware.js +28 -16
  64. package/build/store/middleware.js.map +1 -1
  65. package/build/store/selector.d.ts.map +1 -1
  66. package/build/store/selector.js +6 -2
  67. package/build/store/selector.js.map +1 -1
  68. package/build/store/types.d.ts +11 -4
  69. package/build/store/types.d.ts.map +1 -1
  70. package/build/store/types.js.map +1 -1
  71. package/package.json +10 -3
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Redux Store Creator with RxJS Support
3
3
  *
4
- * Implements createStore, compatible with Redux v4,
5
- * but using RxJS for reactive state management.
4
+ * Implements createStore with strict Redux v4 compatibility
5
+ * plus reactive RxJS extensions (state$, select).
6
6
  *
7
7
  * @module Effectable/store/createStore
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"createStore.d.ts","sourceRoot":"","sources":["../../src/store/createStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAY,MAAM,SAAS,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAC7C,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,YAAY,EAAE,CAAC,EACf,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CA+Gb"}
1
+ {"version":3,"file":"createStore.d.ts","sourceRoot":"","sources":["../../src/store/createStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAY,MAAM,SAAS,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAC7C,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,YAAY,EAAE,CAAC,EACf,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAyJb"}
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * Redux Store Creator with RxJS Support
4
4
  *
5
- * Implements createStore, compatible with Redux v4,
6
- * but using RxJS for reactive state management.
5
+ * Implements createStore with strict Redux v4 compatibility
6
+ * plus reactive RxJS extensions (state$, select).
7
7
  *
8
8
  * @module Effectable/store/createStore
9
9
  */
@@ -46,6 +46,8 @@ function createStore(reducer, initialState, enhancer) {
46
46
  const state$ = new rxjs_1.BehaviorSubject(initialState);
47
47
  // Flag to prevent dispatch while a reducer is running
48
48
  let isDispatching = false;
49
+ // Flag to track if the store has been destroyed
50
+ let isDestroyed = false;
49
51
  /**
50
52
  * Base dispatch without middleware
51
53
  *
@@ -56,10 +58,24 @@ function createStore(reducer, initialState, enhancer) {
56
58
  * @returns The same action
57
59
  */
58
60
  function dispatch(action) {
59
- // Action validation
61
+ // Guard: store has been destroyed
62
+ if (isDestroyed) {
63
+ throw new Error('Cannot dispatch an action after the store has been destroyed.');
64
+ }
65
+ // Action validation - strict plain object check (Redux-compatible)
60
66
  if (typeof action !== 'object' || action === null) {
61
67
  throw new Error('Actions must be plain objects. Use custom middleware for async actions.');
62
68
  }
69
+ // Reject arrays (typeof [] === 'object' but not a plain object)
70
+ if (Array.isArray(action)) {
71
+ throw new Error('Actions must be plain objects. Use custom middleware for async actions.');
72
+ }
73
+ // Reject class instances and Object.create(null) (strict Redux v4 behavior)
74
+ // Real Redux only accepts objects with Object.prototype
75
+ const proto = Object.getPrototypeOf(action);
76
+ if (proto !== Object.prototype) {
77
+ throw new Error('Actions must be plain objects. Use custom middleware for async actions.');
78
+ }
63
79
  if (typeof action.type === 'undefined') {
64
80
  throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');
65
81
  }
@@ -74,6 +90,11 @@ function createStore(reducer, initialState, enhancer) {
74
90
  const currentState = state$.getValue();
75
91
  // Call reducer to get the new state
76
92
  newState = reducer(currentState, action);
93
+ // Redux-compatible: reject undefined state from reducer
94
+ if (typeof newState === 'undefined') {
95
+ throw new Error(`Reducer returned undefined when handling action "${action.type}". ` +
96
+ 'To ignore an action, you must explicitly return the previous state.');
97
+ }
77
98
  }
78
99
  finally {
79
100
  // Important: reset the flag before notifying subscribers
@@ -89,7 +110,12 @@ function createStore(reducer, initialState, enhancer) {
89
110
  *
90
111
  * @returns Current Store state
91
112
  */
92
- const getState = () => state$.getValue();
113
+ const getState = () => {
114
+ if (isDestroyed) {
115
+ throw new Error('Cannot access state after the store has been destroyed.');
116
+ }
117
+ return state$.getValue();
118
+ };
93
119
  /**
94
120
  * Universal select method for applying selectors
95
121
  *
@@ -118,6 +144,7 @@ function createStore(reducer, initialState, enhancer) {
118
144
  * store.destroy();
119
145
  */
120
146
  const destroy = () => {
147
+ isDestroyed = true;
121
148
  state$.complete();
122
149
  };
123
150
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../src/store/createStore.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA+BH,kCAmHC;AAhJD,+BAAmD;AACnD,8CAA2D;AAG3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,WAAW,CACzB,OAAsB,EACtB,YAAe,EACf,QAA8B;IAE9B,4EAA4E;IAC5E,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;IAED,8CAA8C;IAC9C,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,sBAAe,CAAI,YAAY,CAAC,CAAC;IAEpD,sDAAsD;IACtD,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B;;;;;;;;OAQG;IACH,SAAS,QAAQ,CAAe,MAAS;QACvC,oBAAoB;QACpB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,QAAW,CAAC;QAChB,IAAI,CAAC;YACH,aAAa,GAAG,IAAI,CAAC;YAErB,oBAAoB;YACpB,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAEvC,oCAAoC;YACpC,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,yDAAyD;YACzD,+DAA+D;YAC/D,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,yEAAyE;QACzE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,MAAM,QAAQ,GAAG,GAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE5C;;;;;;;;;;;;;OAaG;IACH,MAAM,MAAM,GAAG,CAAI,UAA0B,EAAiB,EAAE;QAC9D,OAAO,MAAM,CAAC,IAAI,CAChB,IAAA,eAAG,EAAC,UAAU,CAAC,EACf,IAAA,gCAAoB,GAAE,CACvB,CAAC;IACJ,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,MAAM,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,4CAA4C;QAC3E,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../src/store/createStore.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,27 @@
7
7
  *
8
8
  * @module Effectable/store/middleware
9
9
  */
10
+ import { Action, MiddlewareAPI, MiddlewareInput, StoreEnhancer } from './types';
11
+ /**
12
+ * Dispatch-shaped function used to type the wrap-mode chain.
13
+ * Method-syntax bivariance lets {@link DispatchMethod} satisfy this type under
14
+ * `strictFunctionTypes`, so wrap-mode `D extends DispatchFn` typechecks without `as`.
15
+ */
16
+ type DispatchFn = {
17
+ bivarianceHack(action: unknown): unknown | Promise<unknown>;
18
+ }['bivarianceHack'];
10
19
  /**
11
20
  * Supports two modes:
12
21
  * 1. `applyMiddleware(api, rawDispatch, ...middlewares)` — wrap an existing dispatch
13
22
  * 2. `applyMiddleware(...middlewares)` — legacy enhancer-style for compatibility
14
23
  * 3. Middleware may arrive as default-export functions from slice modules.
24
+ *
25
+ * Wrap-mode overload is first so `applyMiddleware(api, rawDispatch, ...)` is not
26
+ * parsed as enhancer-style rest middlewares.
15
27
  */
16
- export declare function applyMiddleware(...args: unknown[]): unknown;
28
+ export declare function applyMiddleware<S, D extends DispatchFn>(api: MiddlewareAPI<D, S>, rawDispatch: D, ...middlewares: unknown[]): D;
29
+ export declare function applyMiddleware(): StoreEnhancer;
30
+ export declare function applyMiddleware<S = unknown, A extends Action = Action>(...middlewares: Array<MiddlewareInput<unknown, S>>): StoreEnhancer<S, A>;
17
31
  /**
18
32
  * Compose function for function composition
19
33
  *
@@ -35,4 +49,5 @@ export declare function applyMiddleware(...args: unknown[]): unknown;
35
49
  * Rarely needed for external use.
36
50
  */
37
51
  export declare function compose<T>(...funcs: Array<(arg: T) => T>): (arg: T) => T;
52
+ export {};
38
53
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/store/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8CH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAoB5D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAG,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAiBzE"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/store/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAA4B,aAAa,EAAE,eAAe,EAAyB,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjI;;;;GAIG;AACH,KAAK,UAAU,GAAG;IAChB,cAAc,CAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D,CAAC,gBAAgB,CAAC,CAAC;AA2DpB;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,SAAS,UAAU,EACrD,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,WAAW,EAAE,CAAC,EACd,GAAG,WAAW,EAAE,OAAO,EAAE,GACxB,CAAC,CAAC;AACL,wBAAgB,eAAe,IAAK,aAAa,CAAC;AAClD,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACpE,GAAG,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GACjD,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AA+BvB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAG,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAiBzE"}
@@ -11,6 +11,13 @@
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.applyMiddleware = applyMiddleware;
13
13
  exports.compose = compose;
14
+ const types_1 = require("./types");
15
+ function hasGetState(value) {
16
+ return typeof value === 'object' && value !== null && 'getState' in value;
17
+ }
18
+ function isWrapModeArgs(args) {
19
+ return args.length > 1 && hasGetState(args[0]);
20
+ }
14
21
  /**
15
22
  * Normalizes middleware: a function or a default-export module `{ default: fn }`.
16
23
  *
@@ -18,12 +25,12 @@ exports.compose = compose;
18
25
  * @returns {Middleware<unknown, S, D>}
19
26
  */
20
27
  function coerceMiddleware(middleware) {
21
- if (typeof middleware === 'function') {
28
+ if ((0, types_1.isMiddleware)(middleware)) {
22
29
  return middleware;
23
30
  }
24
31
  if (typeof middleware === 'object' && middleware !== null && Object.hasOwn(middleware, 'default')) {
25
32
  const defaultExport = Reflect.get(middleware, 'default');
26
- if (typeof defaultExport === 'function') {
33
+ if ((0, types_1.isMiddleware)(defaultExport)) {
27
34
  return defaultExport;
28
35
  }
29
36
  }
@@ -32,32 +39,37 @@ function coerceMiddleware(middleware) {
32
39
  function wrapDispatch(api, rawDispatch, middlewares) {
33
40
  const chain = middlewares.reduceRight((next, middleware) => {
34
41
  const coerced = coerceMiddleware(middleware);
35
- // FIXME: teach middleware so action can carry a type and the output has a known type
36
- const resolvedMiddleware = coerced(api);
37
- return resolvedMiddleware(next);
42
+ return coerced(api)(next);
38
43
  }, rawDispatch);
39
44
  api.dispatch = chain;
40
45
  return chain;
41
46
  }
42
- /**
43
- * Supports two modes:
44
- * 1. `applyMiddleware(api, rawDispatch, ...middlewares)` — wrap an existing dispatch
45
- * 2. `applyMiddleware(...middlewares)` — legacy enhancer-style for compatibility
46
- * 3. Middleware may arrive as default-export functions from slice modules.
47
- */
47
+ function dispatchWhileConstructing(_action) {
48
+ throw new Error('Dispatching while constructing your middleware is not allowed. ' +
49
+ 'Other middleware would not be applied to this dispatch.');
50
+ }
48
51
  function applyMiddleware(...args) {
49
- if (args.length > 1 && typeof args[0] === 'object' && args[0] !== null && 'getState' in args[0]) {
52
+ if (isWrapModeArgs(args)) {
50
53
  const [api, rawDispatch, ...middlewares] = args;
51
- return wrapDispatch(api, rawDispatch, middlewares);
54
+ // Same construction invariant as enhancer mode (PR #55): while middleware
55
+ // factories run, api.dispatch must not reach rawDispatch / a half-built chain.
56
+ const previousDispatch = api.dispatch;
57
+ api.dispatch = dispatchWhileConstructing;
58
+ try {
59
+ return wrapDispatch(api, rawDispatch, middlewares);
60
+ }
61
+ catch (error) {
62
+ api.dispatch = previousDispatch;
63
+ throw error;
64
+ }
52
65
  }
53
- const middlewares = args;
54
66
  return (createStore) => (reducer, initialState) => {
55
67
  const store = createStore(reducer, initialState);
56
68
  const api = {
57
69
  getState: store.getState,
58
- dispatch: null,
70
+ dispatch: dispatchWhileConstructing,
59
71
  };
60
- const dispatch = wrapDispatch(api, store.dispatch, middlewares);
72
+ const dispatch = wrapDispatch(api, store.dispatch, args);
61
73
  return {
62
74
  ...store,
63
75
  dispatch,
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/store/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/store/middleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/store/selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/store/selector.ts"],"names":[],"mappings":"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"}
@@ -36,10 +36,14 @@ function defaultMemoize(func) {
36
36
  let called = false;
37
37
  let recomputationCount = 0;
38
38
  const memoized = (arg) => {
39
- // If never called or the argument changed — recompute
39
+ // If never called or the argument changed — recompute.
40
+ // Only commit cache slots after `func` succeeds: if `func` throws after
41
+ // `lastArg` was already updated, a later call with the same arg would
42
+ // shallow-equal-hit and return a stale `lastResult` (silent wrong value).
40
43
  if (!called || !shallowEqual(arg, lastArg)) {
44
+ const nextResult = func(arg);
41
45
  lastArg = arg;
42
- lastResult = func(arg);
46
+ lastResult = nextResult;
43
47
  called = true;
44
48
  recomputationCount++;
45
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/store/selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/store/selector.ts"],"names":[],"mappings":"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"}
@@ -179,11 +179,11 @@ export interface MiddlewareAPI<D = Dispatch, S = unknown> {
179
179
  * Middleware can:
180
180
  * - Intercept actions
181
181
  * - Perform side-effects
182
- * - Dispatch new actions
182
+ * - Dispatch new actions via api.dispatch()
183
+ * - Read state via api.getState()
183
184
  * - Modify or block actions
184
185
  * - Call next() multiple times
185
186
  * - Use async/await
186
- * - Subscribe to state$ for reactive logic
187
187
  *
188
188
  * @template S - State type
189
189
  * @template A - Action type
@@ -204,7 +204,7 @@ export interface MiddlewareAPI<D = Dispatch, S = unknown> {
204
204
  * return result;
205
205
  * };
206
206
  */
207
- export interface Middleware<DispatchExt = {}, S = unknown, D = Dispatch> {
207
+ export interface Middleware<_DispatchExt = {}, S = unknown, D = Dispatch> {
208
208
  /**
209
209
  * Creates middleware in redux-style format `(api) => (next) => (action)`.
210
210
  * `next(action)` forwards the action down the current chain.
@@ -217,6 +217,13 @@ export interface Middleware<DispatchExt = {}, S = unknown, D = Dispatch> {
217
217
  */
218
218
  (api: MiddlewareAPI<D, S>): (next: D) => (action: unknown) => unknown | Promise<unknown>;
219
219
  }
220
+ /**
221
+ * Middleware argument accepted by enhancer-mode `applyMiddleware`.
222
+ * Matches runtime: a middleware function or a module namespace `{ default: fn }`.
223
+ */
224
+ export type MiddlewareInput<DispatchExt = {}, S = unknown, D = Dispatch> = Middleware<DispatchExt, S, D> | {
225
+ default: Middleware<DispatchExt, S, D>;
226
+ };
220
227
  /**
221
228
  * Memoized selector
222
229
  *
@@ -255,5 +262,5 @@ export declare function isAction(obj: any): obj is Action;
255
262
  /**
256
263
  * Type guard to check whether a function is Middleware
257
264
  */
258
- export declare function isMiddleware<DispatchExt = {}, S = unknown, D extends Dispatch = Dispatch>(fn: any): fn is Middleware<DispatchExt, S, D>;
265
+ export declare function isMiddleware<DispatchExt = {}, S = unknown, D = Dispatch>(fn: unknown): fn is Middleware<DispatchExt, S, D>;
259
266
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA0SH,4BAEC;AAKD,oCAIC;AAlBD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,QAAQ,CAAE,GAAQ;IAChC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAC1B,EAAO;IAEP,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAoTH,4BAEC;AAKD,oCAIC;AAlBD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,QAAQ,CAAE,GAAQ;IAChC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAC1B,EAAW;IAEX,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effectable",
3
- "version": "1.0.0",
3
+ "version": "1.1.0-canary.10",
4
4
  "description": "Declarative reactive runtime for Node.js: bootstrap, Redux-style RxJS store, Component lifecycle, class-based connect, and GraphRuntime.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -81,7 +81,10 @@
81
81
  "build": "npm run clean && tsc --project ./tsconfig.build.json && npm run build:license",
82
82
  "build:license": "cp ./LICENSE ./build/LICENSE",
83
83
  "typecheck": "tsc --noEmit --project ./tsconfig.json",
84
+ "lint": "eslint .",
85
+ "lint:fix": "eslint . --fix",
84
86
  "test": "jest --config ./jest.config.js --runInBand",
87
+ "test:pack-smoke": "node ./scripts/pack-smoke.cjs",
85
88
  "test:watch": "jest --config ./jest.config.js --watch",
86
89
  "test:spec": "jest --config ./jest.config.js --runInBand --testPathPatterns=spec",
87
90
  "test:entity": "jest --config ./jest.config.js --runInBand --testPathPatterns=entity",
@@ -96,7 +99,7 @@
96
99
  "access": "public"
97
100
  },
98
101
  "engines": {
99
- "node": ">=18.18.0",
102
+ "node": ">=22",
100
103
  "npm": ">=9"
101
104
  },
102
105
  "dependencies": {
@@ -108,9 +111,13 @@
108
111
  "@commitlint/config-conventional": "^21.2.0",
109
112
  "@semantic-release/changelog": "^7.0.0",
110
113
  "@semantic-release/git": "^11.0.1",
111
- "conventional-changelog-conventionalcommits": "^10.2.1",
112
114
  "@types/jest": "^29.5.14",
113
115
  "@types/node": "^22.16.0",
116
+ "@typescript-eslint/eslint-plugin": "^8.67.0",
117
+ "@typescript-eslint/parser": "^8.67.0",
118
+ "conventional-changelog-conventionalcommits": "^10.2.1",
119
+ "eslint": "^10.8.1",
120
+ "eslint-plugin-unused-imports": "^4.4.1",
114
121
  "jest": "^30.1.3",
115
122
  "lefthook": "^2.1.10",
116
123
  "semantic-release": "^25.0.9",