react-better-model 0.2.2 → 1.0.0-beta

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 (99) hide show
  1. package/AGENTS.md +43 -0
  2. package/LICENSE +21 -4
  3. package/lib/ModelBase.d.ts +15 -0
  4. package/lib/ModelBase.d.ts.map +1 -0
  5. package/lib/ModelBase.js +91 -0
  6. package/lib/ModelBase.js.map +1 -0
  7. package/lib/ModelWithHooks.d.ts +9 -0
  8. package/lib/ModelWithHooks.d.ts.map +1 -0
  9. package/lib/ModelWithHooks.js +108 -0
  10. package/lib/ModelWithHooks.js.map +1 -0
  11. package/lib/common-types.d.ts +9 -0
  12. package/lib/common-types.d.ts.map +1 -0
  13. package/lib/{types.js → common-types.js} +1 -1
  14. package/lib/common-types.js.map +1 -0
  15. package/lib/create-model.d.ts +18 -0
  16. package/lib/create-model.d.ts.map +1 -0
  17. package/lib/create-model.js +78 -0
  18. package/lib/create-model.js.map +1 -0
  19. package/lib/create-model.test.d.ts +2 -0
  20. package/lib/create-model.test.d.ts.map +1 -0
  21. package/lib/create-model.test.js +80 -0
  22. package/lib/create-model.test.js.map +1 -0
  23. package/lib/index.d.ts +4 -8
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +22 -9
  26. package/lib/index.js.map +1 -1
  27. package/lib/src/ModelBase.d.ts +16 -0
  28. package/lib/src/ModelBase.d.ts.map +1 -0
  29. package/lib/src/ModelBase.js +97 -0
  30. package/lib/src/ModelBase.js.map +1 -0
  31. package/lib/src/ModelWithHooks.d.ts +8 -0
  32. package/lib/src/ModelWithHooks.d.ts.map +1 -0
  33. package/lib/src/ModelWithHooks.js +57 -0
  34. package/lib/src/ModelWithHooks.js.map +1 -0
  35. package/lib/src/common-types.d.ts +9 -0
  36. package/lib/src/common-types.d.ts.map +1 -0
  37. package/lib/src/common-types.js +3 -0
  38. package/lib/src/common-types.js.map +1 -0
  39. package/lib/src/create-model.d.ts +18 -0
  40. package/lib/src/create-model.d.ts.map +1 -0
  41. package/lib/src/create-model.js +78 -0
  42. package/lib/src/create-model.js.map +1 -0
  43. package/lib/src/index.d.ts +5 -0
  44. package/lib/src/index.d.ts.map +1 -0
  45. package/lib/src/index.js +34 -0
  46. package/lib/src/index.js.map +1 -0
  47. package/lib/src/utils.d.ts +4 -0
  48. package/lib/src/utils.d.ts.map +1 -0
  49. package/lib/src/utils.js +36 -0
  50. package/lib/src/utils.js.map +1 -0
  51. package/lib/tests/ModelBase.test.d.ts +2 -0
  52. package/lib/tests/ModelBase.test.d.ts.map +1 -0
  53. package/lib/tests/ModelBase.test.js +73 -0
  54. package/lib/tests/ModelBase.test.js.map +1 -0
  55. package/lib/tests/ModelWithHooks.test.d.ts +2 -0
  56. package/lib/tests/ModelWithHooks.test.d.ts.map +1 -0
  57. package/lib/tests/ModelWithHooks.test.js +108 -0
  58. package/lib/tests/ModelWithHooks.test.js.map +1 -0
  59. package/lib/tests/create-model.test.d.ts +2 -0
  60. package/lib/tests/create-model.test.d.ts.map +1 -0
  61. package/lib/tests/create-model.test.js +104 -0
  62. package/lib/tests/create-model.test.js.map +1 -0
  63. package/lib/tests/utils.test.d.ts +2 -0
  64. package/lib/tests/utils.test.d.ts.map +1 -0
  65. package/lib/tests/utils.test.js +30 -0
  66. package/lib/tests/utils.test.js.map +1 -0
  67. package/package.json +13 -11
  68. package/readme.md +212 -105
  69. package/lib/Model.d.ts +0 -23
  70. package/lib/Model.d.ts.map +0 -1
  71. package/lib/Model.js +0 -108
  72. package/lib/Model.js.map +0 -1
  73. package/lib/hooks/event-hooks.d.ts +0 -6
  74. package/lib/hooks/event-hooks.d.ts.map +0 -1
  75. package/lib/hooks/event-hooks.js +0 -19
  76. package/lib/hooks/event-hooks.js.map +0 -1
  77. package/lib/hooks/model-hooks.d.ts +0 -4
  78. package/lib/hooks/model-hooks.d.ts.map +0 -1
  79. package/lib/hooks/model-hooks.js +0 -9
  80. package/lib/hooks/model-hooks.js.map +0 -1
  81. package/lib/hooks/state-hooks.d.ts +0 -5
  82. package/lib/hooks/state-hooks.d.ts.map +0 -1
  83. package/lib/hooks/state-hooks.js +0 -19
  84. package/lib/hooks/state-hooks.js.map +0 -1
  85. package/lib/types.d.ts +0 -13
  86. package/lib/types.d.ts.map +0 -1
  87. package/lib/types.js.map +0 -1
  88. package/lib/utils/compose-providers.d.ts +0 -3
  89. package/lib/utils/compose-providers.d.ts.map +0 -1
  90. package/lib/utils/compose-providers.js +0 -19
  91. package/lib/utils/compose-providers.js.map +0 -1
  92. package/lib/utils/create-model.d.ts +0 -21
  93. package/lib/utils/create-model.d.ts.map +0 -1
  94. package/lib/utils/create-model.js +0 -84
  95. package/lib/utils/create-model.js.map +0 -1
  96. package/lib/utils/js-event-types.d.ts +0 -6
  97. package/lib/utils/js-event-types.d.ts.map +0 -1
  98. package/lib/utils/js-event-types.js +0 -9
  99. package/lib/utils/js-event-types.js.map +0 -1
package/AGENTS.md ADDED
@@ -0,0 +1,43 @@
1
+ # Repository Guidelines
2
+
3
+ ## Project Structure & Module Organization
4
+ - Source: `src/` — core classes and helpers (`ModelBase`, `Model`, `create-model`).
5
+ - Entry: `src/index.ts` re-exports the public API.
6
+ - Build output: `lib/` (generated by TypeScript; never edit).
7
+ - Docs: root `*.md` and `Docs/*.MD` contain API notes and guides.
8
+
9
+ ## Build, Test, and Development Commands
10
+ - `yarn build` or `npm run build`: Compile to `lib/` via `tsc`.
11
+ - `npx tsc -w`: Rebuild on change for local development.
12
+ - `yarn prepare`: Runs on install/publish to ensure artifacts are fresh.
13
+
14
+ ## Architecture & Usage
15
+ - Create a model by extending `Model<Events>` and pass initial state into `super` (ModelBase constructor now requires state).
16
+ ```ts
17
+ type Events = { 'clear-todos': undefined }
18
+ class TodoModel extends Model<Events> {
19
+ state = { todos: [], showDone: true }
20
+ constructor() { super({ todos: [], showDone: true }) }
21
+ addTodo = (title: string) => this.setState({ todos: [...this.state.todos, { title, done: false, id: Date.now() }] })
22
+ }
23
+ export const { Provider: TodoProvider, useModel: useTodo } = createModel(TodoModel)
24
+ ```
25
+ - In components, access the instance via `useModel()` inside the corresponding Provider.
26
+ - State: `const [show, setShow] = model.useState('showDone')`
27
+ - Selector: `const visible = model.useMapper(s => s.todos.filter(t => show ? true : !t.done))`
28
+ - Events: `const clear = model.useEvent('clear-todos')` and `model.useEvent('clear-todos', cb)` to subscribe.
29
+ - Provider may accept a `value` (prebuilt instance) for external control.
30
+
31
+ ## Coding Style & Naming Conventions
32
+ - Indentation: 2 spaces. TypeScript-first; avoid `any` in public types.
33
+ - Components: PascalCase; hooks start with `use*`; React files `*.tsx`.
34
+ - Exports: prefer named exports; expose public API via `src/index.ts`.
35
+ - Event keys: typed string literals (e.g., `'clear-todos'`).
36
+
37
+ ## Testing Guidelines
38
+ - Suggested stack: Jest + `ts-jest`. Place tests next to sources (`*.test.ts(x)`) or under `__tests__/`.
39
+ - Cover model behavior (state transitions, reducers, events) and hook usage.
40
+
41
+ ## Commit & Pull Request Guidelines
42
+ - Commits: small, imperative, and typed (Conventional Commits recommended).
43
+ - PRs: include summary, rationale, usage snippet, and note any API changes; update affected docs.
package/LICENSE CHANGED
@@ -1,7 +1,24 @@
1
- Copyright 2024 Igor Pougatch
1
+ This is free and unencumbered software released into the public domain.
2
2
 
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
4
7
 
5
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
6
15
 
7
- THE SOFTWARE IS PROVIDED AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org/>
@@ -0,0 +1,15 @@
1
+ import { EventSubscription, EventSubscriptions, EventsScheme, StatePlaceholder, StateSubscription, StateSubscriptions, ValueSubscription, ValueSubscriptions } from "./common-types";
2
+ export declare abstract class ModelBase<TEvents extends EventsScheme = EventsScheme> {
3
+ protected valueSubscriptions: ValueSubscriptions<StatePlaceholder>;
4
+ protected stateSubscriptions: StateSubscriptions<StatePlaceholder>;
5
+ protected eventListeners: EventSubscriptions<EventsScheme>;
6
+ onStateChange: (subscription: StateSubscription<typeof this['state']>) => () => void;
7
+ onValueChange: <K extends keyof this["state"]>(key: K, subscription: ValueSubscription<typeof this['state']>) => () => void;
8
+ onValuesChange: <K extends keyof this["state"]>(keys: readonly K[], subscription: StateSubscription<typeof this['state']>) => () => void;
9
+ setState: (delta: Partial<StatePlaceholder<typeof this['state']>>) => void;
10
+ reduce: (reducer: (state: typeof this['state']) => Partial<typeof this['state']>) => void;
11
+ onEvent: <K extends keyof TEvents>(key: K, subscription: EventSubscription<TEvents, K>) => () => void;
12
+ dispatch: <K extends keyof TEvents>(key: K, data?: (TEvents[K] extends undefined ? never : TEvents[K]) | undefined) => void;
13
+ abstract state: StatePlaceholder;
14
+ }
15
+ //# sourceMappingURL=ModelBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelBase.d.ts","sourceRoot":"","sources":["../src/ModelBase.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,gBAAgB,CAAA;AAyDvB,8BAAsB,SAAS,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY;IAC1E,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAY;IAC9E,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAY;IAC9E,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAY;IAEtE,aAAa,iBAAkB,kBAAkB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,gBAMrE;IAED,aAAa,wDAEE,kBAAkB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,gBAcrD;IAED,cAAc,oEAEC,kBAAkB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,gBAUrD;IAED,QAAQ,UAAW,QAAQ,iBAAiB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAMjE;IAED,MAAM,oBAAqB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,UAIhF;IAED,OAAO,+FAaN;IAED,QAAQ,oHAEP;IAED,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAChC"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelBase = void 0;
4
+ //#region utils
5
+ function updateSingleKeySubscriber(subs, key, currentVal, prevVal, uniqueSubsSet) {
6
+ var _a;
7
+ (_a = subs.get(key)) === null || _a === void 0 ? void 0 : _a.forEach((subscription) => {
8
+ if (!(uniqueSubsSet === null || uniqueSubsSet === void 0 ? void 0 : uniqueSubsSet.has(subscription))) {
9
+ uniqueSubsSet === null || uniqueSubsSet === void 0 ? void 0 : uniqueSubsSet.add(subscription);
10
+ subscription(currentVal, prevVal);
11
+ }
12
+ });
13
+ }
14
+ function updateKeySubscribers(subs, delta, prevState) {
15
+ const keyVals = Object.entries(delta);
16
+ const subscribersSetRef = new WeakSet();
17
+ for (const [key, val] of keyVals) {
18
+ const prevVal = prevState[key];
19
+ if (subs.has(key) && !Object.is(val, prevVal)) {
20
+ updateSingleKeySubscriber(subs, key, val, prevVal, subscribersSetRef);
21
+ }
22
+ }
23
+ }
24
+ function updateStateChangeSubscribers(subs, currentState, prevState) {
25
+ subs.forEach(subscription => subscription(currentState, prevState));
26
+ }
27
+ function updateEventListeners(eventListeners, key, data) {
28
+ var _a;
29
+ (_a = eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.forEach((subscription) => subscription(data));
30
+ }
31
+ //#endregion utils
32
+ class ModelBase {
33
+ constructor() {
34
+ this.valueSubscriptions = new Map();
35
+ this.stateSubscriptions = new Set();
36
+ this.eventListeners = new Map();
37
+ this.onStateChange = (subscription) => {
38
+ this.stateSubscriptions.add(subscription);
39
+ return () => {
40
+ this.stateSubscriptions.delete(subscription);
41
+ };
42
+ };
43
+ this.onValueChange = (key, subscription) => {
44
+ let subscriptions = this.valueSubscriptions.get(key);
45
+ if (!subscriptions) {
46
+ subscriptions = new Set();
47
+ this.valueSubscriptions.set(key, subscriptions);
48
+ }
49
+ subscriptions.add(subscription);
50
+ return () => {
51
+ subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.delete(subscription);
52
+ };
53
+ };
54
+ this.onValuesChange = (keys, subscription) => {
55
+ return this.onStateChange((currentState, prevState) => {
56
+ for (const key of keys) {
57
+ if (!Object.is(prevState[key], currentState[key])) {
58
+ subscription(currentState, prevState);
59
+ break;
60
+ }
61
+ }
62
+ });
63
+ };
64
+ this.setState = (delta) => {
65
+ const prevState = Object.assign({}, this.state);
66
+ this.state = Object.assign(Object.assign({}, this.state), delta);
67
+ updateStateChangeSubscribers(this.stateSubscriptions, this.state, prevState);
68
+ updateKeySubscribers(this.valueSubscriptions, delta, prevState);
69
+ };
70
+ this.reduce = (reducer) => {
71
+ const nextState = reducer(Object.assign({}, this.state));
72
+ this.setState(nextState);
73
+ };
74
+ this.onEvent = (key, subscription) => {
75
+ let nsListeners = this.eventListeners.get(key);
76
+ if (!nsListeners) {
77
+ nsListeners = new Set();
78
+ this.eventListeners.set(key, nsListeners);
79
+ }
80
+ nsListeners.add(subscription);
81
+ return () => {
82
+ nsListeners.delete(subscription);
83
+ };
84
+ };
85
+ this.dispatch = (key, data) => {
86
+ updateEventListeners(this.eventListeners, key, data);
87
+ };
88
+ }
89
+ }
90
+ exports.ModelBase = ModelBase;
91
+ //# sourceMappingURL=ModelBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelBase.js","sourceRoot":"","sources":["../src/ModelBase.ts"],"names":[],"mappings":";;;AAWA,eAAe;AACf,SAAS,yBAAyB,CAIjC,IAA2B,EAC3B,GAAM,EACN,UAAgB,EAChB,OAAa,EACb,aAAsD;;IAEtD,MAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,0CAAE,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QACvC,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC,YAAY,CAAC,CAAA,EAAE;YACtC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC,YAAY,CAAC,CAAA;YAChC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;SACjC;IACF,CAAC,CAAC,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAC5B,IAA2B,EAC3B,KAAiB,EACjB,SAAY;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAErC,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAiC,CAAA;IAEtE,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE;QACjC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAe,CAAA;QAE5C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;YAC9C,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;SACrE;KACD;AACF,CAAC;AAED,SAAS,4BAA4B,CACpC,IAA2B,EAC3B,YAAe,EACf,SAAY;IAEZ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAA;AACpE,CAAC;AAGD,SAAS,oBAAoB,CAI3B,cAA2C,EAAE,GAAM,EAAE,IAAQ;;IAC9D,MAAA,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,0CAAE,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAK,CAAC,CAAC,CAAA;AACxE,CAAC;AACD,kBAAkB;AAElB,MAAsB,SAAS;IAA/B;QACW,uBAAkB,GAAyC,IAAI,GAAG,EAAE,CAAA;QACpE,uBAAkB,GAAyC,IAAI,GAAG,EAAE,CAAA;QACpE,mBAAc,GAAqC,IAAI,GAAG,EAAE,CAAA;QAEtE,kBAAa,GAAG,CAAC,YAAqD,EAAE,EAAE;YACzE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAEzC,OAAO,GAAG,EAAE;gBACX,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC7C,CAAC,CAAA;QACF,CAAC,CAAA;QAED,kBAAa,GAAG,CACf,GAAM,EACN,YAAqD,EACpD,EAAE;YACH,IAAI,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAEpD,IAAI,CAAC,aAAa,EAAE;gBACnB,aAAa,GAAG,IAAI,GAAG,EAAE,CAAA;gBACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;aAC/C;YAED,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAE/B,OAAO,GAAG,EAAE;gBACX,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YACpC,CAAC,CAAA;QACF,CAAC,CAAA;QAED,mBAAc,GAAG,CAChB,IAAkB,EAClB,YAAqD,EACpD,EAAE;YACH,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE;gBACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;wBAClD,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;wBACrC,MAAK;qBACL;iBACD;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAA;QAED,aAAQ,GAAG,CAAC,KAAsD,EAAE,EAAE;YACrE,MAAM,SAAS,qBAAQ,IAAI,CAAC,KAAK,CAAE,CAAA;YACnC,IAAI,CAAC,KAAK,mCAAQ,IAAI,CAAC,KAAK,GAAK,KAAK,CAAE,CAAA;YAExC,4BAA4B,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAC5E,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;QAChE,CAAC,CAAA;QAED,WAAM,GAAG,CAAC,OAAuE,EAAE,EAAE;YACpF,MAAM,SAAS,GAAG,OAAO,mBAAM,IAAI,CAAC,KAAK,EAAG,CAAA;YAE5C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC,CAAA;QAED,YAAO,GAAG,CAA0B,GAAM,EAAE,YAA2C,EAAE,EAAE;YAC1F,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAyB,CAAC,CAAA;YAEpE,IAAI,CAAC,WAAW,EAAE;gBACjB,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA;gBACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAyB,EAAE,WAAW,CAAC,CAAA;aAC/D;YAED,WAAW,CAAC,GAAG,CAAC,YAAmE,CAAC,CAAA;YAEpF,OAAO,GAAG,EAAE;gBACX,WAAY,CAAC,MAAM,CAAC,YAAmE,CAAC,CAAA;YACzF,CAAC,CAAA;QACF,CAAC,CAAA;QAED,aAAQ,GAAG,CAA0B,GAAM,EAAE,IAAwD,EAAE,EAAE;YACxG,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,GAAyB,EAAE,IAAI,CAAC,CAAA;QAC3E,CAAC,CAAA;IAGF,CAAC;CAAA;AA/ED,8BA+EC"}
@@ -0,0 +1,9 @@
1
+ import { ModelBase } from './ModelBase';
2
+ import { EventSubscription, EventsScheme } from './common-types';
3
+ export declare abstract class Model<E extends EventsScheme = {}> extends ModelBase<E> {
4
+ useState: <K extends keyof this["state"]>(key: K) => [this["state"][K], (v: this["state"][K]) => void];
5
+ useMapper: <T>(mapper: (state: typeof this['state'], prevState: typeof this['state']) => T) => T;
6
+ useStateEffect: (effect: (state: typeof this['state'], prevState: typeof this['state']) => unknown) => void;
7
+ useEvent: <K extends keyof E>(ns: K, cb?: EventSubscription<E, K> | undefined) => (data?: (E[K] extends undefined ? never : E[K]) | undefined) => void;
8
+ }
9
+ //# sourceMappingURL=ModelWithHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelWithHooks.d.ts","sourceRoot":"","sources":["../src/ModelWithHooks.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACN,iBAAiB,EACjB,YAAY,EAEZ,MAAM,gBAAgB,CAAA;AAuBvB,8BAAsB,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,EAAE,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC5E,QAAQ,yFAA6G,IAAI,EAuBxH;IAED,SAAS,sBAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,OAAO,IAAI,CAAC,OAAO,CAAC,aAgDpF;IAED,cAAc,mBAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,UAiClG;IAED,QAAQ,+IAYP;CACD"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = void 0;
4
+ const react_1 = require("react");
5
+ const ModelBase_1 = require("./ModelBase");
6
+ // Create a shallow proxy to record which state keys a consumer reads.
7
+ function makeProxy(state, recordDependency) {
8
+ const proxy = {};
9
+ for (const [key, value] of Object.entries(state)) {
10
+ Object.defineProperty(proxy, key, {
11
+ enumerable: true,
12
+ configurable: false,
13
+ get() {
14
+ recordDependency(key);
15
+ return value;
16
+ },
17
+ });
18
+ }
19
+ return proxy;
20
+ }
21
+ class Model extends ModelBase_1.ModelBase {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.useState = (key) => {
25
+ const setValue = (0, react_1.useCallback)((v) => {
26
+ const previousValue = this.state[key];
27
+ // Avoid useless updates when value is unchanged.
28
+ if (Object.is(previousValue, v))
29
+ return;
30
+ const nextStatePatch = {};
31
+ nextStatePatch[key] = v;
32
+ this.setState(nextStatePatch);
33
+ }, [key]);
34
+ const getSnapshot = (0, react_1.useCallback)(() => this.state[key], [key]);
35
+ const val = (0, react_1.useSyncExternalStore)((cb) => this.onValueChange(key, () => cb()), getSnapshot, getSnapshot);
36
+ return [val, setValue];
37
+ };
38
+ this.useMapper = (mapper) => {
39
+ const latestMapperRef = (0, react_1.useRef)(mapper);
40
+ const previousStateRef = (0, react_1.useRef)(this.state);
41
+ const derivedValueRef = (0, react_1.useRef)(mapper(this.state, this.state));
42
+ // Keep mapper ref fresh without re-subscribing.
43
+ (0, react_1.useEffect)(() => {
44
+ latestMapperRef.current = mapper;
45
+ }, [mapper]);
46
+ const dependencyKeysRef = (0, react_1.useRef)(new Set());
47
+ const dependencyProxy = (0, react_1.useMemo)(() => {
48
+ return makeProxy(this.state, k => {
49
+ dependencyKeysRef.current.add(k);
50
+ });
51
+ }, []);
52
+ const dependencyKeys = (0, react_1.useMemo)(() => {
53
+ dependencyKeysRef.current = new Set();
54
+ // Execute mapper on the proxy to collect touched keys.
55
+ mapper(dependencyProxy, previousStateRef.current);
56
+ return Array.from(dependencyKeysRef.current);
57
+ }, [mapper]);
58
+ const getSnapshot = (0, react_1.useCallback)(() => {
59
+ if (previousStateRef.current !== this.state) {
60
+ derivedValueRef.current = latestMapperRef.current(this.state, previousStateRef.current);
61
+ previousStateRef.current = this.state;
62
+ return derivedValueRef.current;
63
+ }
64
+ return derivedValueRef.current;
65
+ }, []);
66
+ const subscribe = (0, react_1.useCallback)((onChange) => {
67
+ return this.onValuesChange(dependencyKeys, onChange);
68
+ }, [dependencyKeys]);
69
+ return (0, react_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
70
+ };
71
+ this.useStateEffect = (effect) => {
72
+ const latestEffectRef = (0, react_1.useRef)(effect);
73
+ const previousStateRef = (0, react_1.useRef)(Object.assign({}, this.state));
74
+ const dependencyKeysRef = (0, react_1.useRef)(new Set());
75
+ const dependencyProxy = (0, react_1.useMemo)(() => {
76
+ return makeProxy(this.state, k => {
77
+ dependencyKeysRef.current.add(k);
78
+ });
79
+ }, []);
80
+ // Keep effect ref current; subscription uses the ref.
81
+ (0, react_1.useEffect)(() => {
82
+ latestEffectRef.current = effect;
83
+ }, [effect]);
84
+ const dependencyKeys = (0, react_1.useMemo)(() => {
85
+ dependencyKeysRef.current = new Set();
86
+ // Execute effect once to discover which keys it reads.
87
+ effect(dependencyProxy, previousStateRef.current);
88
+ return Array.from(dependencyKeysRef.current);
89
+ }, [effect]);
90
+ (0, react_1.useEffect)(() => this.onValuesChange(dependencyKeys, () => {
91
+ latestEffectRef.current(this.state, previousStateRef.current);
92
+ previousStateRef.current = Object.assign({}, this.state);
93
+ }), [dependencyKeys]);
94
+ };
95
+ this.useEvent = (ns, cb) => {
96
+ (0, react_1.useEffect)(() => {
97
+ let removeListener = () => { };
98
+ if (!!cb) {
99
+ removeListener = this.onEvent(ns, cb);
100
+ }
101
+ return removeListener;
102
+ }, [ns, cb]);
103
+ return (data) => this.dispatch(ns, data);
104
+ };
105
+ }
106
+ }
107
+ exports.Model = Model;
108
+ //# sourceMappingURL=ModelWithHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelWithHooks.js","sourceRoot":"","sources":["../src/ModelWithHooks.ts"],"names":[],"mappings":";;;AAAA,iCAMc;AAEd,2CAAuC;AAOvC,sEAAsE;AACtE,SAAS,SAAS,CACjB,KAAuB,EACvB,gBAAqC;IAErC,MAAM,KAAK,GAAG,EAAE,CAAA;IAEhB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACjD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;YACjC,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,GAAG;gBACF,gBAAgB,CAAC,GAAG,CAAC,CAAA;gBACrB,OAAO,KAAK,CAAA;YACb,CAAC;SACD,CAAC,CAAA;KACF;IAED,OAAO,KAAK,CAAA;AACb,CAAC;AAED,MAAsB,KAAmC,SAAQ,qBAAY;IAA7E;;QACC,aAAQ,GAAG,CAAuC,GAAM,EAAmE,EAAE;YAC5H,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,CAA0B,EAAE,EAAE;gBAC3D,MAAM,aAAa,GAAI,IAAI,CAAC,KAA8B,CAAC,GAAG,CAAC,CAAA;gBAE/D,iDAAiD;gBACjD,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;oBAAE,OAAM;gBAEvC,MAAM,cAAc,GAAkC,EAAE,CAAA;gBAExD,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAEvB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;YAC9B,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;YAET,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;YAE7D,MAAM,GAAG,GAAqC,IAAA,4BAAoB,EACjE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAC3C,WAAW,EACX,WAAW,CACX,CAAA;YAED,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACvB,CAAC,CAAA;QAED,cAAS,GAAG,CAAI,MAA2E,EAAE,EAAE;YAC9F,MAAM,eAAe,GAAG,IAAA,cAAM,EAAC,MAAM,CAAC,CAAA;YAEtC,MAAM,gBAAgB,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,eAAe,GAAG,IAAA,cAAM,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAE9D,gDAAgD;YAChD,IAAA,iBAAS,EAAC,GAAG,EAAE;gBACd,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;YACjC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;YAEZ,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAC,IAAI,GAAG,EAAU,CAAC,CAAA;YAEnD,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;gBACpC,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;oBAChC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;YACH,CAAC,EAAE,EAAE,CAAC,CAAA;YAEN,MAAM,cAAc,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;gBACnC,iBAAiB,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;gBAErC,uDAAuD;gBACvD,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAEjD,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC7C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;YAEZ,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;gBACpC,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE;oBAC5C,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;oBACvF,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAA;oBAErC,OAAO,eAAe,CAAC,OAAO,CAAA;iBAC9B;gBAED,OAAO,eAAe,CAAC,OAAO,CAAA;YAC/B,CAAC,EAAE,EAAE,CAAC,CAAA;YAEN,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,CAAC,QAAoB,EAAE,EAAE;gBACtD,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;YACrD,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;YAEpB,OAAO,IAAA,4BAAoB,EAC1B,SAAS,EACT,WAAW,EACX,WAAW,CACX,CAAA;QACF,CAAC,CAAA;QAED,mBAAc,GAAG,CAAC,MAAiF,EAAE,EAAE;YACtG,MAAM,eAAe,GAAG,IAAA,cAAM,EAAC,MAAM,CAAC,CAAA;YACtC,MAAM,gBAAgB,GAAG,IAAA,cAAM,oBAAM,IAAI,CAAC,KAAK,EAAG,CAAA;YAElD,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAC,IAAI,GAAG,EAAU,CAAC,CAAA;YAEnD,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;gBACpC,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;oBAChC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;YACH,CAAC,EAAE,EAAE,CAAC,CAAA;YAEN,sDAAsD;YACtD,IAAA,iBAAS,EAAC,GAAG,EAAE;gBACd,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;YACjC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;YAEZ,MAAM,cAAc,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;gBACnC,iBAAiB,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;gBAErC,uDAAuD;gBACvD,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAEjD,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC7C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;YAEZ,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAClC,cAAc,EACd,GAAG,EAAE;gBACJ,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAC7D,gBAAgB,CAAC,OAAO,qBAAQ,IAAI,CAAC,KAAK,CAAE,CAAA;YAC7C,CAAC,CACD,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;QACrB,CAAC,CAAA;QAED,aAAQ,GAAG,CAAoB,EAAK,EAAE,EAA4B,EAAE,EAAE;YACrE,IAAA,iBAAS,EAAC,GAAG,EAAE;gBACd,IAAI,cAAc,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;gBAE9B,IAAI,CAAC,CAAC,EAAE,EAAE;oBACT,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;iBACrC;gBAED,OAAO,cAAc,CAAA;YACtB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YAEZ,OAAO,CAAC,IAA4C,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACjF,CAAC,CAAA;IACF,CAAC;CAAA;AA5HD,sBA4HC"}
@@ -0,0 +1,9 @@
1
+ export type ValueSubscription<S, K extends keyof S = keyof S> = (currentValue: S[K], prevValue: S[K]) => void;
2
+ export type ValueSubscriptions<S> = Map<keyof S, Set<ValueSubscription<S, keyof S>>>;
3
+ export type StateSubscription<S> = (currentState: S, prevState: S) => unknown;
4
+ export type StateSubscriptions<S> = Set<StateSubscription<S>>;
5
+ export type EventSubscription<E, K extends keyof E = keyof E> = (eventData: E[K]) => void;
6
+ export type EventSubscriptions<E> = Map<keyof E, Set<EventSubscription<E, keyof E>>>;
7
+ export type EventsScheme = Record<string, unknown>;
8
+ export type StatePlaceholder<T extends Record<PropertyKey, unknown> = Record<PropertyKey, unknown>> = T | Record<PropertyKey, unknown>;
9
+ //# sourceMappingURL=common-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-types.d.ts","sourceRoot":"","sources":["../src/common-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AAC7G,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACpF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,OAAO,CAAA;AAC7E,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AACzF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACpF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAClD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=common-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-types.js","sourceRoot":"","sources":["../src/common-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import React, { ProviderProps } from 'react';
2
+ import { Model } from './ModelWithHooks';
3
+ import { ModelBase } from './ModelBase';
4
+ import { EventsScheme } from './common-types';
5
+ type Ctor<TEvents extends {}, TModel extends ModelBase<TEvents>> = new (...args: any[]) => TModel;
6
+ export type ModelProviderProps<TEvents extends EventsScheme, TModel extends ModelBase<TEvents>> = Omit<ProviderProps<TModel>, 'value'> & {
7
+ value?: TModel;
8
+ state?: TModel['state'];
9
+ onChange?: (state: TModel['state'], prevState: TModel['state']) => void;
10
+ };
11
+ export declare function createModel<TEvents extends {} = {}, TModel extends Model<TEvents> = Model<TEvents>>(CName: Ctor<TEvents, TModel>): {
12
+ Ctx: React.Context<TModel>;
13
+ create: (state?: TModel["state"]) => TModel;
14
+ Provider: ({ value, state, onChange, ...props }: ModelProviderProps<TEvents, TModel>) => React.JSX.Element;
15
+ useModel: () => TModel;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=create-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-model.d.ts","sourceRoot":"","sources":["../src/create-model.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEb,aAAa,EAIb,MAAM,OAAO,CAAA;AAEd,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,KAAK,IAAI,CAAC,OAAO,SAAS,EAAE,EAAE,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;AAEjG,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,YAAY,EAAE,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG;IACxI,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CACvE,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,EAAE,GAAG,EAAE,EAAE,MAAM,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;;qBA0CxG,MAAM,CAAC,OAAO,CAAC;qDAlCpC,mBAAmB,OAAO,EAAE,MAAM,CAAC;;EA4CtC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.createModel = void 0;
38
+ const react_1 = __importStar(require("react"));
39
+ function createModel(CName) {
40
+ const Ctx = (0, react_1.createContext)({});
41
+ function Provider(_a) {
42
+ var { value, state, onChange } = _a, props = __rest(_a, ["value", "state", "onChange"]);
43
+ const model = (0, react_1.useMemo)(() => value || new CName(), []);
44
+ (0, react_1.useEffect)(() => {
45
+ if (state) {
46
+ model.setState(state);
47
+ }
48
+ }, [state]);
49
+ (0, react_1.useEffect)(() => {
50
+ let listener = () => { };
51
+ if (onChange) {
52
+ listener = model.onStateChange(onChange);
53
+ }
54
+ return () => {
55
+ listener();
56
+ };
57
+ }, [onChange]);
58
+ return react_1.default.createElement(Ctx.Provider, Object.assign({}, props, { value: model }));
59
+ }
60
+ function useModel() {
61
+ const model = (0, react_1.useContext)(Ctx);
62
+ if (!model) {
63
+ throw new Error(`[useModel]: Could not find model\n${JSON.stringify(Ctx, null, 2)}`);
64
+ }
65
+ return model;
66
+ }
67
+ function create(state) {
68
+ return new CName(state);
69
+ }
70
+ return {
71
+ Ctx,
72
+ create,
73
+ Provider,
74
+ useModel,
75
+ };
76
+ }
77
+ exports.createModel = createModel;
78
+ //# sourceMappingURL=create-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-model.js","sourceRoot":"","sources":["../src/create-model.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAMc;AAcd,SAAgB,WAAW,CAA0E,KAA4B;IAChI,MAAM,GAAG,GAAG,IAAA,qBAAa,EAAS,EAAY,CAAC,CAAA;IAE/C,SAAS,QAAQ,CAAC,EAKoB;YALpB,EACjB,KAAK,EACL,KAAK,EACL,QAAQ,OAE6B,EADlC,KAAK,cAJS,8BAKjB,CADQ;QAER,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;QAErD,IAAA,iBAAS,EAAC,GAAG,EAAE;YACd,IAAI,KAAK,EAAE;gBACV,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;aACrB;QACF,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAEX,IAAA,iBAAS,EAAC,GAAG,EAAE;YACd,IAAI,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;YAExB,IAAI,QAAQ,EAAE;gBACb,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;aACxC;YAED,OAAO,GAAG,EAAE;gBACX,QAAQ,EAAE,CAAA;YACX,CAAC,CAAA;QACF,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEd,OAAO,8BAAC,GAAG,CAAC,QAAQ,oBAAK,KAAK,IAAE,KAAK,EAAE,KAAK,IAAI,CAAA;IACjD,CAAC;IAED,SAAS,QAAQ;QAChB,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;SACpF;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAED,SAAS,MAAM,CAAC,KAAuB;QACtC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,OAAO;QACN,GAAG;QACH,MAAM;QACN,QAAQ;QACR,QAAQ;KACR,CAAA;AACF,CAAC;AApDD,kCAoDC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=create-model.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-model.test.d.ts","sourceRoot":"","sources":["../src/create-model.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const react_1 = __importDefault(require("react"));
16
+ const react_2 = require("@testing-library/react");
17
+ const create_model_1 = require("./create-model");
18
+ const ModelWithHooks_1 = require("./ModelWithHooks");
19
+ class CounterModel extends ModelWithHooks_1.Model {
20
+ constructor(initialState) {
21
+ super();
22
+ this.state = { count: 0 };
23
+ this.increment = () => this.setState({ count: this.state.count + 1 });
24
+ if (initialState) {
25
+ this.state = initialState;
26
+ }
27
+ }
28
+ }
29
+ const { Provider: CounterProvider, useModel: useCounter, create: createCounter, } = (0, create_model_1.createModel)(CounterModel);
30
+ afterEach(() => {
31
+ (0, react_2.cleanup)();
32
+ });
33
+ function CounterConsumer({ onModelReady, }) {
34
+ const model = useCounter();
35
+ const [count, setCount] = model.useState('count');
36
+ react_1.default.useEffect(() => {
37
+ onModelReady === null || onModelReady === void 0 ? void 0 : onModelReady(model);
38
+ }, [model, onModelReady]);
39
+ return (react_1.default.createElement("div", null,
40
+ react_1.default.createElement("span", { "data-testid": "count" }, count),
41
+ react_1.default.createElement("button", { onClick: () => setCount(count + 1) }, "inc")));
42
+ }
43
+ describe('createModel', () => {
44
+ test('provides a lazily-created model instance via Provider and useModel', () => {
45
+ let providedModel;
46
+ (0, react_2.render)(react_1.default.createElement(CounterProvider, null,
47
+ react_1.default.createElement(CounterConsumer, { onModelReady: (model) => { providedModel = model; } })));
48
+ expect(providedModel).toBeInstanceOf(CounterModel);
49
+ expect(react_2.screen.getByTestId('count').textContent).toBe('0');
50
+ react_2.fireEvent.click(react_2.screen.getByText('inc'));
51
+ expect(react_2.screen.getByTestId('count').textContent).toBe('1');
52
+ expect(providedModel === null || providedModel === void 0 ? void 0 : providedModel.state.count).toBe(1);
53
+ });
54
+ test('reuses an externally provided model instance', () => {
55
+ const existingModel = new CounterModel({ count: 5 });
56
+ let seenModel;
57
+ (0, react_2.render)(react_1.default.createElement(CounterProvider, { value: existingModel },
58
+ react_1.default.createElement(CounterConsumer, { onModelReady: (model) => { seenModel = model; } })));
59
+ expect(seenModel).toBe(existingModel);
60
+ expect(react_2.screen.getByTestId('count').textContent).toBe('5');
61
+ });
62
+ test('applies incoming state prop and notifies onChange listeners', () => __awaiter(void 0, void 0, void 0, function* () {
63
+ const onChange = jest.fn();
64
+ (0, react_2.render)(react_1.default.createElement(CounterProvider, { state: { count: 2 }, onChange: onChange },
65
+ react_1.default.createElement(CounterConsumer, null)));
66
+ yield (0, react_2.waitFor)(() => expect(react_2.screen.getByTestId('count').textContent).toBe('2'));
67
+ expect(onChange).toHaveBeenCalledTimes(1);
68
+ expect(onChange).toHaveBeenCalledWith({ count: 2 }, { count: 0 });
69
+ }));
70
+ test('create helper returns a fresh model with optional initial state', () => {
71
+ const seededModel = createCounter({ count: 10 });
72
+ const defaultModel = createCounter();
73
+ expect(seededModel).toBeInstanceOf(CounterModel);
74
+ expect(defaultModel).toBeInstanceOf(CounterModel);
75
+ expect(seededModel.state.count).toBe(10);
76
+ expect(defaultModel.state.count).toBe(0);
77
+ expect(seededModel).not.toBe(defaultModel);
78
+ });
79
+ });
80
+ //# sourceMappingURL=create-model.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-model.test.js","sourceRoot":"","sources":["../src/create-model.test.tsx"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,9 +1,5 @@
1
- export * from './types';
2
- export * from './hooks/event-hooks';
3
- export * from './hooks/state-hooks';
4
- export * from './hooks/model-hooks';
5
- export * from './Model';
6
- export * from './utils/compose-providers';
7
- export * from './utils/js-event-types';
8
- export * from './utils/create-model';
1
+ export * from './ModelWithHooks';
2
+ export * from './ModelBase';
3
+ export * from './create-model';
4
+ export * as ModelTypes from './common-types';
9
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,SAAS,CAAA;AACvB,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAA"}
package/lib/index.js CHANGED
@@ -1,21 +1,34 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
8
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
9
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
20
  };
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
12
28
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./types"), exports);
14
- __exportStar(require("./hooks/event-hooks"), exports);
15
- __exportStar(require("./hooks/state-hooks"), exports);
16
- __exportStar(require("./hooks/model-hooks"), exports);
17
- __exportStar(require("./Model"), exports);
18
- __exportStar(require("./utils/compose-providers"), exports);
19
- __exportStar(require("./utils/js-event-types"), exports);
20
- __exportStar(require("./utils/create-model"), exports);
29
+ exports.ModelTypes = void 0;
30
+ __exportStar(require("./ModelWithHooks"), exports);
31
+ __exportStar(require("./ModelBase"), exports);
32
+ __exportStar(require("./create-model"), exports);
33
+ exports.ModelTypes = __importStar(require("./common-types"));
21
34
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAuB;AACvB,sDAAmC;AACnC,sDAAmC;AACnC,sDAAmC;AACnC,0CAAuB;AACvB,4DAAyC;AACzC,yDAAsC;AACtC,uDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,8CAA2B;AAC3B,iDAA8B;AAC9B,6DAA4C"}