ccstate 3.0.0 → 4.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/README.md CHANGED
@@ -7,20 +7,18 @@
7
7
  ![NPM Version](https://img.shields.io/npm/v/ccstate)
8
8
  ![npm package minimized gzipped size](https://img.shields.io/bundlejs/size/ccstate)
9
9
  [![CI](https://github.com/e7h4n/ccstate/actions/workflows/ci.yaml/badge.svg)](https://github.com/e7h4n/ccstate/actions/workflows/ci.yaml)
10
- [![CodSpeed Badge](https://img.shields.io/endpoint?url=https://codspeed.io/badge.json)](https://codspeed.io/e7h4n/ccstate)
11
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
11
 
13
- CCState is a semantic, strict, and flexible state management library suitable for medium to large single-page applications with complex state management needs.
12
+ CCState is a modern signals-based state management library that elegantly implements async computed and read-write capability isolation based on signal features, making it suitable for medium to large web applications.
14
13
 
15
- The name of CCState comes from three basic data types: computed, command, and state.
14
+ The name of CCState comes from three basic types: `Computed`, `Command`, and `State`.
16
15
 
17
16
  ## Quick Features
18
17
 
19
- - 💯 Simple & Intuitive: Crystal-clear API design with just 3 data types and 2 operations
18
+ - 💯 Simple & Intuitive: Crystal-clear API design with just three types and two operations
20
19
  - ✅ Rock-solid Reliability: Comprehensive test coverage reaching 100% branch coverage
21
- - 🪶 Ultra-lightweight: Zero dependencies, only 500 lines of core code
22
- - 💡 Framework Agnostic: Seamlessly works with [React](docs/react.md), [Vue](docs/vue.md), or any UI framework
23
- - 🚀 Blazing Fast: Optimized performance from day one, 2x-7x faster than Jotai across scenarios
20
+ - ✈️ Intuitive async computation: using async/await or try/catch to process async flow as regular JavaScript without any additional concept
21
+ - 💡 Framework Agnostic: Seamlessly works with [React](docs/react.md), [Vue](docs/vue.md), [Solid.js](docs/solid.md), [Vanilla](docs/vanilla.md), or any UI framework
24
22
 
25
23
  ## Getting Started
26
24
 
@@ -37,16 +35,18 @@ pnpm add ccstate
37
35
  yarn add ccstate
38
36
  ```
39
37
 
40
- ### Create Data
38
+ ### Create Signals
41
39
 
42
40
  Use `state` to store a simple value unit, and use `computed` to create a derived computation logic:
43
41
 
44
42
  ```ts
45
- // data.js
43
+ // signals.js
46
44
  import { state, computed } from 'ccstate';
47
45
 
46
+ // a simple value unit which supports read/write
48
47
  export const userId$ = state('');
49
48
 
49
+ // intuitive async computation logic
50
50
  export const user$ = computed(async (get) => {
51
51
  const userId = get(userId$);
52
52
  if (!userId) return null;
@@ -56,14 +56,14 @@ export const user$ = computed(async (get) => {
56
56
  });
57
57
  ```
58
58
 
59
- ### Use data in React
59
+ ### Use signals in React
60
60
 
61
- Use `useGet` and `useSet` hooks in React to get/set data, and use `useResolved` to get Promise value.
61
+ Use `useGet` and `useSet` hooks in React to get/set signals, and use `useResolved` to get Promise value.
62
62
 
63
63
  ```jsx
64
- // App.js
64
+ // App.jsx
65
65
  import { useGet, useSet, useResolved } from 'ccstate-react';
66
- import { userId$, user$ } from './data';
66
+ import { userId$, user$ } from './signals';
67
67
 
68
68
  export default function App() {
69
69
  const userId = useGet(userId$);
@@ -87,27 +87,6 @@ export default function App() {
87
87
  }
88
88
  ```
89
89
 
90
- Use `createStore` and `StoreProvider` to provide a CCState store to React, all states and computations will only affect this isolated store.
91
-
92
- ```tsx
93
- // main.jsx
94
- import { createStore } from 'ccstate';
95
- import { StoreProvider } from 'ccstate-react';
96
- import { createRoot } from 'react-dom/client';
97
-
98
- import App from './App';
99
-
100
- const rootElement = document.getElementById('root');
101
- const root = createRoot(rootElement);
102
-
103
- const store = createStore();
104
- root.render(
105
- <StoreProvider value={store}>
106
- <App />
107
- </StoreProvider>,
108
- );
109
- ```
110
-
111
90
  That's it! [Click here to see the full example](https://codesandbox.io/p/sandbox/cr3xg6).
112
91
 
113
92
  Through these examples, you should have understood the basic usage of CCState. Next, you can read to learn about CCState's core APIs.
@@ -134,13 +113,14 @@ const user$ = state<({
134
113
  name: 'e7h4n',
135
114
  avatar: 'https://avatars.githubusercontent.com/u/813596',
136
115
  } | undefined>(undefined);
116
+
137
117
  store.set({
138
118
  name: 'yc-kanyun',
139
119
  avatar: 'https://avatars.githubusercontent.com/u/168416598'
140
120
  });
141
121
  ```
142
122
 
143
- These examples should be very easy to understand. You might notice a detail in the examples: all variables returned by `state` have a `$` suffix. This is a naming convention used to distinguish an CCState data type from other regular types. CCState data types must be accessed through the store's get/set methods, and since it's common to convert an CCState data type to a regular type using get, the `$` suffix helps avoid naming conflicts.
123
+ These examples should be very easy to understand. You might notice a detail in the examples: all variables returned by `state` have a `$` suffix. This is a naming convention used to distinguish an CCState signal type from other regular types. CCState signal types must be accessed through the store's get/set methods, and since it's common to convert an CCState signal type to a regular type using get, the `$` suffix helps avoid naming conflicts.
144
124
 
145
125
  ### Store
146
126
 
@@ -156,7 +136,7 @@ const otherStore = createStore(); // another new Map()
156
136
  otherStore.get(count$); // anotherMap[$count] ?? $count.init, returns 0
157
137
  ```
158
138
 
159
- This should be easy to understand. If `Store` only needed to support `State` types, a simple Map would be sufficient. However, CCState needs to support two additional data types. Next, let's introduce `Computed`, CCState's reactive computation unit.
139
+ This should be easy to understand. If `Store` only needed to support `State` types, a simple Map would be sufficient. However, CCState needs to support two additional signal types. Next, let's introduce `Computed`, CCState's reactive computation unit.
160
140
 
161
141
  ### Computed
162
142
 
@@ -181,13 +161,13 @@ Does this example seem less intuitive than `State`? Here's a mental model that m
181
161
  - `computed(fn)` returns an object `{read: fn}`, which is assigned to `user$`
182
162
  - When `store.get(user$)` encounters an object which has a read function, it calls that function: `user$.read(store.get)`
183
163
 
184
- This way, `Computed` receives a get accessor that can access other data in the store. This get accessor is similar to `store.get` and can be used to read both `State` and `Computed`. The reason CCState specifically passes a get method to `Computed`, rather than allowing direct access to the store within `Computed`, is to shield the logic within `Computed` from other store methods like `store.set`. The key characteristic of `Computed` is that it can only read states from the store but cannot modify them. In other words, `Computed` is side-effect free.
164
+ This way, `Computed` receives a get accessor that can access other signal in the store. This get accessor is similar to `store.get` and can be used to read both `State` and `Computed`. The reason CCState specifically passes a get method to `Computed`, rather than allowing direct access to the store within `Computed`, is to shield the logic within `Computed` from other store methods like `store.set`. The key characteristic of `Computed` is that it can only read states from the store but cannot modify them. In other words, `Computed` is side-effect free.
185
165
 
186
166
  In most cases, side-effect free computation logic is extremely useful. They can be executed any number of times and have few requirements regarding execution timing. `Computed` is one of the most powerful features in CCState, and you should try to write your logic as `Computed` whenever possible, unless you need to perform set operations on the `Store`.
187
167
 
188
168
  ### Command
189
169
 
190
- `Command` is CCState's logic unit for organizing side effects. It has both `set` and `get` accessors from the store, allowing it to not only read other data types but also modify `State` or call other `Command`.
170
+ `Command` is CCState's logic unit for organizing side effects. It has both `set` and `get` accessors from the store, allowing it to not only read other signal types but also modify `State` or call other `Command`.
191
171
 
192
172
  ```typescript
193
173
  import { command, createStore } from 'ccstate';
@@ -288,6 +268,14 @@ That's it! Next, you can learn how to use CCState in React.
288
268
 
289
269
  [Using in Vue](docs/vue.md)
290
270
 
271
+ ## Using in Solid.js
272
+
273
+ [Using in Solid.js](docs/solid.md)
274
+
275
+ ## Using in Vanilla
276
+
277
+ [Using in Vanilla](docs/vanilla.md)
278
+
291
279
  ### Testing & Debugging
292
280
 
293
281
  Testing Value/Computed should be as simple as testing a Map.
@@ -337,9 +325,9 @@ While Jotai is a great state management solution that has benefited the Motiff p
337
325
  - Should reduce reactive capabilities, especially the `onMount` capability - the framework shouldn't provide this ability
338
326
  - Some implicit magic operations, especially Promise wrapping, make the application execution process less transparent
339
327
 
340
- To address these issues, I got an idea: "What concepts in Jotai are essential? And which concepts create mental overhead for developers?". Rather than just discussing it theoretically, I decided to try implementing it myself. So I created CCState to express my thoughts on state management. Before detailing the differences from Jotai, we need to understand CCState's data types and subscription system.
328
+ To address these issues, I got an idea: "What concepts in Jotai are essential? And which concepts create mental overhead for developers?". Rather than just discussing it theoretically, I decided to try implementing it myself. So I created CCState to express my thoughts on state management. Before detailing the differences from Jotai, we need to understand CCState's signal types and subscription system.
341
329
 
342
- ### More semantic data types
330
+ ### More semantic atom types
343
331
 
344
332
  Like Jotai, CCState is also an Atom State solution. However, unlike Jotai, CCState doesn't expose Raw Atom, instead dividing Atoms into three types:
345
333
 
@@ -360,7 +348,7 @@ export const userIdChange$ = command(({ get, set }) => {
360
348
  });
361
349
 
362
350
  // ...
363
- import { userId$, userIdChange$ } from './data';
351
+ import { userId$, userIdChange$ } from './signals';
364
352
 
365
353
  function setupPage() {
366
354
  const store = createStore();
@@ -441,7 +429,7 @@ export function App() {
441
429
  When designing CCState, we wanted the trigger points for value changes to be completely detached from React's Mount/Unmount lifecycle and completely decoupled from React's rendering behavior.
442
430
 
443
431
  ```jsx
444
- // data.js
432
+ // signals.js
445
433
  export const userId$ = state(0)
446
434
  export const init$ = command(({set}) => {
447
435
  const userId = // ... parse userId from location search
@@ -821,10 +809,9 @@ So, I think the only way to implement `Computed`'s effect-less is to separate th
821
809
 
822
810
  Here are some new ideas:
823
811
 
824
- - Integration with svelte / solid.js
825
- - Enhance devtools
812
+ - Integration with svelte
813
+ - Enhance debug ability
826
814
  - Support viewing current subscription graph and related atom values
827
- - Enable logging and breakpoints for specific atoms in devtools
828
815
  - Performance improvements
829
816
  - Mount atomState directly on atoms when there's only one store in the application to reduce WeakMap lookup overhead
830
817
  - Support static declaration of upstream dependencies for Computed to improve performance by disabling runtime dependency analysis
package/core/index.cjs CHANGED
@@ -537,7 +537,7 @@ var AtomManager = /*#__PURE__*/function () {
537
537
  }
538
538
  var computedInterceptor = (_this$options = this.options) === null || _this$options === void 0 || (_this$options = _this$options.interceptor) === null || _this$options === void 0 ? void 0 : _this$options.computed;
539
539
  if (!computedInterceptor) {
540
- return this.computeComputedAtom(atom);
540
+ return this.computeComputedAtom(atom, ignoreMounted);
541
541
  }
542
542
  var result = {
543
543
  called: false
@@ -545,7 +545,7 @@ var AtomManager = /*#__PURE__*/function () {
545
545
  computedInterceptor(atom, function () {
546
546
  result = {
547
547
  called: true,
548
- data: _this2.computeComputedAtom(atom)
548
+ data: _this2.computeComputedAtom(atom, ignoreMounted)
549
549
  };
550
550
  return result.data.val;
551
551
  });
@@ -559,6 +559,7 @@ var AtomManager = /*#__PURE__*/function () {
559
559
  value: function computeComputedAtom(atom) {
560
560
  var _this3 = this,
561
561
  _this$options2;
562
+ var ignoreMounted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
562
563
  var self = atom;
563
564
  var atomState = this.atomStateMap.get(self);
564
565
  if (!atomState) {
@@ -572,7 +573,7 @@ var AtomManager = /*#__PURE__*/function () {
572
573
  var readDeps = new Map();
573
574
  atomState.dependencies = readDeps;
574
575
  var wrappedGet = function wrappedGet(depAtom) {
575
- var depState = _this3.readAtomState(depAtom);
576
+ var depState = _this3.readAtomState(depAtom, ignoreMounted);
576
577
 
577
578
  // get 可能发生在异步过程中,当重复调用时,只有最新的 get 过程会修改 deps
578
579
  if (atomState.dependencies === readDeps) {
@@ -1015,8 +1016,17 @@ function createStore() {
1015
1016
  var listenerManager = new ListenerManager();
1016
1017
  return new StoreImpl(atomManager, listenerManager);
1017
1018
  }
1019
+ var defaultStore = undefined;
1020
+ function getDefaultStore() {
1021
+ if (!defaultStore) {
1022
+ defaultStore = createStore();
1023
+ }
1024
+ return defaultStore;
1025
+ }
1018
1026
 
1019
1027
  exports.command = command;
1020
1028
  exports.computed = computed;
1021
1029
  exports.createStore = createStore;
1030
+ exports.getDefaultStore = getDefaultStore;
1022
1031
  exports.state = state;
1032
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/core/atom.ts","../../src/core/atom-manager.ts","../../src/core/store.ts"],"sourcesContent":["import type { Computed, Command, Read, State, Write } from '../../types/core/atom';\n\ninterface Options {\n debugLabel?: string;\n}\n\nlet globalId = 0;\n\nconst generateToString = (prefix: string, debugLabel?: string) => {\n const id = globalId++;\n const label = `${prefix}${String(id)}${debugLabel ? ':' + debugLabel : ''}`;\n return () => label;\n};\n\nexport function state<T>(init: T, options?: Options): State<T> {\n const ret: State<T> = {\n init,\n toString: generateToString('V', options?.debugLabel),\n };\n\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n\nexport function computed<T>(read: Read<T>, options?: Options): Computed<T> {\n const ret: Computed<T> = {\n read,\n toString: generateToString('C', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n\nexport function command<T, Args extends unknown[]>(write: Write<T, Args>, options?: Options): Command<T, Args> {\n const ret: Command<T, Args> = {\n write,\n toString: generateToString('F', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n","import type { ReadableAtom, Command, Getter, Computed, State } from '../../types/core/atom';\nimport type { StoreOptions } from '../../types/core/store';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport interface StateState<T> {\n mounted?: Mounted;\n val: T;\n epoch: number;\n}\n\nexport interface ComputedState<T> {\n mounted?: Mounted;\n val: T;\n dependencies: Map<ReadableAtom<unknown>, number>;\n epoch: number;\n abortController?: AbortController;\n}\n\ntype CommonReadableState<T> = StateState<T> | ComputedState<T>;\n\ntype AtomState<T> = StateState<T> | ComputedState<T>;\n\ninterface Mounted {\n listeners: Set<Command<unknown, []>>;\n readDepts: Set<ReadableAtom<unknown>>;\n}\n\nfunction canReadAsCompute<T>(atom: ReadableAtom<T>): atom is Computed<T> {\n return 'read' in atom;\n}\n\nfunction isComputedState<T>(state: CommonReadableState<T>): state is ComputedState<T> {\n return 'dependencies' in state;\n}\n\nexport class AtomManager {\n private atomStateMap = new WeakMap<ReadableAtom<unknown>, AtomState<unknown>>();\n\n constructor(private readonly options?: StoreOptions) {}\n\n private tryGetCachedState = <T>(atom: Computed<T>, ignoreMounted: boolean): ComputedState<T> | undefined => {\n const atomState = this.atomStateMap.get(atom) as ComputedState<T> | undefined;\n if (!atomState) {\n return undefined;\n }\n\n if (atomState.mounted && !ignoreMounted) {\n return atomState;\n }\n\n for (const [dep, epoch] of atomState.dependencies.entries()) {\n const depState = this.readAtomState(dep);\n if (depState.epoch !== epoch) {\n return undefined;\n }\n }\n\n return atomState;\n };\n\n private readComputedAtom<T>(atom: Computed<T>, ignoreMounted = false): ComputedState<T> {\n const cachedState = this.tryGetCachedState(atom, ignoreMounted);\n if (cachedState) {\n return cachedState;\n }\n\n const computedInterceptor = this.options?.interceptor?.computed;\n if (!computedInterceptor) {\n return this.computeComputedAtom(atom, ignoreMounted);\n }\n\n let result: DataWithCalledState<ComputedState<T>> = {\n called: false,\n } as DataWithCalledState<ComputedState<T>>;\n\n computedInterceptor(atom, () => {\n result = {\n called: true,\n data: this.computeComputedAtom(atom, ignoreMounted),\n };\n\n return result.data.val;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n }\n\n private computeComputedAtom<T>(atom: Computed<T>, ignoreMounted = false): ComputedState<T> {\n const self: Computed<T> = atom;\n let atomState: ComputedState<T> | undefined = this.atomStateMap.get(self) as ComputedState<T> | undefined;\n if (!atomState) {\n atomState = {\n dependencies: new Map<ReadableAtom<unknown>, number>(),\n epoch: -1,\n } as ComputedState<T>;\n this.atomStateMap.set(self, atomState);\n }\n\n const lastDeps = atomState.dependencies;\n const readDeps = new Map<ReadableAtom<unknown>, number>();\n atomState.dependencies = readDeps;\n const wrappedGet: Getter = (depAtom) => {\n const depState = this.readAtomState(depAtom, ignoreMounted);\n\n // get 可能发生在异步过程中,当重复调用时,只有最新的 get 过程会修改 deps\n if (atomState.dependencies === readDeps) {\n readDeps.set(depAtom, depState.epoch);\n\n const selfMounted = !!atomState.mounted;\n if (selfMounted && !depState.mounted) {\n this.mount(depAtom).readDepts.add(self);\n } else if (selfMounted && depState.mounted) {\n depState.mounted.readDepts.add(self);\n }\n }\n\n return depState.val;\n };\n\n const getInterceptor = this.options?.interceptor?.get;\n const ret = self.read(\n function <U>(depAtom: ReadableAtom<U>) {\n if (!getInterceptor) {\n return wrappedGet(depAtom);\n }\n\n let result: DataWithCalledState<U> = {\n called: false,\n } as DataWithCalledState<U>;\n\n const fn = () => {\n result = {\n called: true,\n data: wrappedGet(depAtom),\n };\n\n return result.data;\n };\n\n getInterceptor(depAtom, fn);\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n return result.data;\n },\n {\n get signal() {\n atomState.abortController?.abort(`abort ${self.debugLabel ?? 'anonymous'} atom`);\n atomState.abortController = new AbortController();\n return atomState.abortController.signal;\n },\n },\n );\n\n if (atomState.val !== ret) {\n atomState.val = ret;\n atomState.epoch += 1;\n }\n\n for (const key of lastDeps.keys()) {\n if (!readDeps.has(key)) {\n const depState = this.atomStateMap.get(key);\n if (depState?.mounted) {\n depState.mounted.readDepts.delete(self);\n this.tryUnmount(key);\n }\n }\n }\n\n return atomState;\n }\n\n private readStateAtom<T>(atom: State<T>): StateState<T> {\n const atomState = this.atomStateMap.get(atom);\n if (!atomState) {\n const initState = {\n val: atom.init,\n epoch: 0,\n };\n this.atomStateMap.set(atom, initState);\n return initState as StateState<T>;\n }\n\n return atomState as StateState<T>;\n }\n\n public readAtomState<T>(atom: State<T>, ignoreMounted?: boolean): StateState<T>;\n public readAtomState<T>(atom: Computed<T>, ignoreMounted?: boolean): ComputedState<T>;\n public readAtomState<T>(atom: State<T> | Computed<T>, ignoreMounted?: boolean): CommonReadableState<T>;\n public readAtomState<T>(\n atom: State<T> | Computed<T>,\n ignoreMounted = false,\n ): StateState<T> | ComputedState<T> | CommonReadableState<T> {\n if (canReadAsCompute(atom)) {\n return this.readComputedAtom(atom, ignoreMounted);\n }\n\n return this.readStateAtom(atom);\n }\n\n private tryGetMount(atom: ReadableAtom<unknown>): Mounted | undefined {\n return this.atomStateMap.get(atom)?.mounted;\n }\n\n public mount<T>(atom: ReadableAtom<T>): Mounted {\n const mounted = this.tryGetMount(atom);\n if (mounted) {\n return mounted;\n }\n\n this.options?.interceptor?.mount?.(atom);\n\n const atomState = this.readAtomState(atom);\n\n atomState.mounted = atomState.mounted ?? {\n listeners: new Set(),\n readDepts: new Set(),\n };\n\n if (isComputedState(atomState)) {\n for (const [dep] of Array.from(atomState.dependencies)) {\n const mounted = this.mount(dep);\n mounted.readDepts.add(atom);\n }\n }\n\n return atomState.mounted;\n }\n\n public tryUnmount<T>(atom: ReadableAtom<T>): void {\n const atomState = this.atomStateMap.get(atom);\n if (!atomState?.mounted || atomState.mounted.listeners.size || atomState.mounted.readDepts.size) {\n return;\n }\n\n this.options?.interceptor?.unmount?.(atom);\n\n if (isComputedState(atomState)) {\n for (const [dep] of Array.from(atomState.dependencies)) {\n const depState = this.readAtomState(dep);\n depState.mounted?.readDepts.delete(atom);\n this.tryUnmount(dep);\n }\n }\n\n atomState.mounted = undefined;\n }\n\n public inited(atom: ReadableAtom<unknown>) {\n return this.atomStateMap.has(atom);\n }\n}\n\nexport class ListenerManager {\n private pendingListeners = new Set<Command<unknown, []>>();\n\n markPendingListeners(atomManager: AtomManager, atom: ReadableAtom<unknown>) {\n let queue: ReadableAtom<unknown>[] = [atom];\n while (queue.length > 0) {\n const nextQueue: ReadableAtom<unknown>[] = [];\n for (const atom of queue) {\n const atomState = atomManager.readAtomState(atom, true);\n\n if (atomState.mounted?.listeners) {\n for (const listener of atomState.mounted.listeners) {\n this.pendingListeners.add(listener);\n }\n }\n\n const readDepts = atomState.mounted?.readDepts;\n if (readDepts) {\n for (const dep of Array.from(readDepts)) {\n nextQueue.push(dep);\n }\n }\n }\n\n queue = nextQueue;\n }\n }\n\n *notify(): Generator<Command<unknown, []>, void, unknown> {\n const pendingListeners = this.pendingListeners;\n this.pendingListeners = new Set();\n\n for (const listener of pendingListeners) {\n yield listener;\n }\n }\n}\n","import type { ReadableAtom, Command, Getter, State, Updater, Setter } from '../../types/core/atom';\nimport type { Store, StoreOptions, SubscribeOptions } from '../../types/core/store';\nimport { AtomManager, ListenerManager } from './atom-manager';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport class StoreImpl implements Store {\n constructor(\n protected readonly atomManager: AtomManager,\n protected readonly listenerManager: ListenerManager,\n protected readonly options?: StoreOptions,\n ) {}\n\n private innerSet = <T, Args extends unknown[]>(\n atom: State<T> | Command<T, Args>,\n ...args: [T | Updater<T>] | Args\n ): undefined | T => {\n if ('read' in atom) {\n return;\n }\n\n if ('write' in atom) {\n const ret = atom.write({ get: this.get, set: this.set }, ...(args as Args));\n return ret;\n }\n\n const newValue =\n typeof args[0] === 'function'\n ? (args[0] as Updater<T>)(this.atomManager.readAtomState(atom).val)\n : (args[0] as T);\n\n if (!this.atomManager.inited(atom)) {\n this.atomManager.readAtomState(atom).val = newValue;\n this.listenerManager.markPendingListeners(this.atomManager, atom);\n return;\n }\n const atomState = this.atomManager.readAtomState(atom);\n atomState.val = newValue;\n atomState.epoch += 1;\n this.listenerManager.markPendingListeners(this.atomManager, atom);\n return undefined;\n };\n\n get: Getter = <T>(atom: ReadableAtom<T>): T => {\n if (!this.options?.interceptor?.get) {\n return this.atomManager.readAtomState(atom).val;\n }\n let result: DataWithCalledState<T> = {\n called: false,\n } as DataWithCalledState<T>;\n\n const fnWithRet = () => {\n result = {\n called: true,\n data: this.atomManager.readAtomState(atom).val,\n };\n return result.data;\n };\n\n this.options.interceptor.get(atom, fnWithRet);\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n };\n\n private notify = () => {\n for (const listener of this.listenerManager.notify()) {\n let notifyed = false;\n const fn = () => {\n notifyed = true;\n return listener.write({ get: this.get, set: this.set });\n };\n if (this.options?.interceptor?.notify) {\n this.options.interceptor.notify(listener, fn);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- notify must call fn sync\n if (!notifyed) {\n throw new Error('interceptor must call fn sync');\n }\n } else {\n fn();\n }\n }\n };\n\n set: Setter = <T, Args extends unknown[]>(\n atom: State<T> | Command<T, Args>,\n ...args: [T | Updater<T>] | Args\n ): undefined | T => {\n let ret: T | undefined;\n const fn = () => {\n try {\n ret = this.innerSet(atom, ...args) as T | undefined;\n } finally {\n this.notify();\n }\n return ret;\n };\n\n if (this.options?.interceptor?.set) {\n if ('write' in atom) {\n this.options.interceptor.set(atom, fn, ...(args as Args));\n } else {\n this.options.interceptor.set(atom, fn, args[0] as T | Updater<T>);\n }\n } else {\n fn();\n }\n\n return ret;\n };\n\n private _subSingleAtom(\n target$: ReadableAtom<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n let unsub: (() => void) | undefined;\n const fn = () => {\n let subscribed = true;\n const mounted = this.atomManager.mount(target$);\n mounted.listeners.add(cb$);\n\n unsub = () => {\n if (!subscribed) {\n return;\n }\n\n const fn = () => {\n subscribed = false;\n mounted.listeners.delete(cb$);\n\n if (mounted.readDepts.size === 0 && mounted.listeners.size === 0) {\n this.atomManager.tryUnmount(target$);\n }\n\n options?.signal?.addEventListener('abort', fn);\n };\n\n if (this.options?.interceptor?.unsub) {\n this.options.interceptor.unsub(target$, cb$, fn);\n\n // subscribed should be false if interceptor called fn sync\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (subscribed) {\n throw new Error('interceptor must call fn sync');\n }\n } else {\n fn();\n }\n };\n\n options?.signal?.addEventListener('abort', unsub);\n };\n\n if (this.options?.interceptor?.sub) {\n this.options.interceptor.sub(target$, cb$, fn);\n } else {\n fn();\n }\n\n if (!unsub) {\n throw new Error('interceptor must call fn sync');\n }\n\n return unsub;\n }\n\n sub(\n targets$: ReadableAtom<unknown>[] | ReadableAtom<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n if (Array.isArray(targets$) && targets$.length === 0) {\n return () => void 0;\n }\n\n if (Array.isArray(targets$) && targets$.length === 1) {\n return this._subSingleAtom(targets$[0], cb$, options);\n } else if (!Array.isArray(targets$)) {\n return this._subSingleAtom(targets$, cb$, options);\n }\n\n const unsubscribes = new Set<() => void>();\n targets$.forEach((atom) => {\n unsubscribes.add(this._subSingleAtom(atom, cb$, options));\n });\n\n const unsub = () => {\n for (const unsubscribe of unsubscribes) {\n unsubscribe();\n }\n };\n\n return unsub;\n }\n}\n\nexport function createStore(): Store {\n const atomManager = new AtomManager();\n const listenerManager = new ListenerManager();\n\n return new StoreImpl(atomManager, listenerManager);\n}\n\nlet defaultStore: Store | undefined = undefined;\nexport function getDefaultStore(): Store {\n if (!defaultStore) {\n defaultStore = createStore();\n }\n return defaultStore;\n}\n"],"names":["globalId","generateToString","prefix","debugLabel","id","label","concat","String","state","init","options","ret","toString","computed","read","command","write","canReadAsCompute","atom","isComputedState","AtomManager","_this","_classCallCheck","_defineProperty","WeakMap","ignoreMounted","atomState","atomStateMap","get","undefined","mounted","_iterator","_createForOfIteratorHelper","dependencies","entries","_step","s","n","done","_step$value","_slicedToArray","value","dep","epoch","depState","readAtomState","err","e","f","_createClass","key","readComputedAtom","_this$options","_this2","arguments","length","cachedState","tryGetCachedState","computedInterceptor","interceptor","computeComputedAtom","result","called","data","val","Error","_this3","_this$options2","self","Map","set","lastDeps","readDeps","wrappedGet","depAtom","selfMounted","mount","readDepts","add","getInterceptor","fn","signal","_atomState$abortContr","_self$debugLabel","abortController","abort","AbortController","_iterator2","keys","_step2","has","tryUnmount","readStateAtom","initState","tryGetMount","_this$atomStateMap$ge","_this$options3","_this$options3$mount","_atomState$mounted","call","listeners","Set","_i","_Array$from","Array","from","_Array$from$_i","_this$options4","_this$options4$unmoun","size","unmount","_i2","_Array$from2","_depState$mounted","_Array$from2$_i","inited","ListenerManager","markPendingListeners","atomManager","queue","nextQueue","_iterator3","_step3","_atomState$mounted2","_atomState$mounted3","_iterator4","_step4","listener","pendingListeners","_i3","_Array$from3","push","_regeneratorRuntime","mark","notify","_iterator5","_step5","wrap","notify$","_context","prev","next","t0","finish","stop","StoreImpl","listenerManager","_len","args","_key","apply","_toConsumableArray","newValue","fnWithRet","_loop","notifyed","_len2","_key2","innerSet","_this$options$interce","_subSingleAtom","target$","cb$","unsub","_options$signal2","subscribed","_this2$options","_options$signal","addEventListener","sub","targets$","isArray","unsubscribes","forEach","unsubscribe","createStore","defaultStore","getDefaultStore"],"mappings":"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"}
package/core/index.d.cts CHANGED
@@ -48,5 +48,7 @@ type CallbackFunc<T> = Command<T, []>;
48
48
  type Subscribe = (atoms$: ReadableAtom<unknown>[] | ReadableAtom<unknown>, callback: CallbackFunc<unknown>, options?: SubscribeOptions) => () => void;
49
49
 
50
50
  declare function createStore(): Store;
51
+ declare function getDefaultStore(): Store;
51
52
 
52
- export { type Command, type Computed, type Getter, type Read, type Setter, type State, type Store, type Subscribe, type Updater, type Write, command, computed, createStore, state };
53
+ export { type Command, type Computed, type Getter, type Read, type Setter, type State, type Store, type Subscribe, type Updater, type Write, command, computed, createStore, getDefaultStore, state };
54
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/core/index.d.ts CHANGED
@@ -48,5 +48,7 @@ type CallbackFunc<T> = Command<T, []>;
48
48
  type Subscribe = (atoms$: ReadableAtom<unknown>[] | ReadableAtom<unknown>, callback: CallbackFunc<unknown>, options?: SubscribeOptions) => () => void;
49
49
 
50
50
  declare function createStore(): Store;
51
+ declare function getDefaultStore(): Store;
51
52
 
52
- export { type Command, type Computed, type Getter, type Read, type Setter, type State, type Store, type Subscribe, type Updater, type Write, command, computed, createStore, state };
53
+ export { type Command, type Computed, type Getter, type Read, type Setter, type State, type Store, type Subscribe, type Updater, type Write, command, computed, createStore, getDefaultStore, state };
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/core/index.js CHANGED
@@ -535,7 +535,7 @@ var AtomManager = /*#__PURE__*/function () {
535
535
  }
536
536
  var computedInterceptor = (_this$options = this.options) === null || _this$options === void 0 || (_this$options = _this$options.interceptor) === null || _this$options === void 0 ? void 0 : _this$options.computed;
537
537
  if (!computedInterceptor) {
538
- return this.computeComputedAtom(atom);
538
+ return this.computeComputedAtom(atom, ignoreMounted);
539
539
  }
540
540
  var result = {
541
541
  called: false
@@ -543,7 +543,7 @@ var AtomManager = /*#__PURE__*/function () {
543
543
  computedInterceptor(atom, function () {
544
544
  result = {
545
545
  called: true,
546
- data: _this2.computeComputedAtom(atom)
546
+ data: _this2.computeComputedAtom(atom, ignoreMounted)
547
547
  };
548
548
  return result.data.val;
549
549
  });
@@ -557,6 +557,7 @@ var AtomManager = /*#__PURE__*/function () {
557
557
  value: function computeComputedAtom(atom) {
558
558
  var _this3 = this,
559
559
  _this$options2;
560
+ var ignoreMounted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
560
561
  var self = atom;
561
562
  var atomState = this.atomStateMap.get(self);
562
563
  if (!atomState) {
@@ -570,7 +571,7 @@ var AtomManager = /*#__PURE__*/function () {
570
571
  var readDeps = new Map();
571
572
  atomState.dependencies = readDeps;
572
573
  var wrappedGet = function wrappedGet(depAtom) {
573
- var depState = _this3.readAtomState(depAtom);
574
+ var depState = _this3.readAtomState(depAtom, ignoreMounted);
574
575
 
575
576
  // get 可能发生在异步过程中,当重复调用时,只有最新的 get 过程会修改 deps
576
577
  if (atomState.dependencies === readDeps) {
@@ -1013,5 +1014,13 @@ function createStore() {
1013
1014
  var listenerManager = new ListenerManager();
1014
1015
  return new StoreImpl(atomManager, listenerManager);
1015
1016
  }
1017
+ var defaultStore = undefined;
1018
+ function getDefaultStore() {
1019
+ if (!defaultStore) {
1020
+ defaultStore = createStore();
1021
+ }
1022
+ return defaultStore;
1023
+ }
1016
1024
 
1017
- export { command, computed, createStore, state };
1025
+ export { command, computed, createStore, getDefaultStore, state };
1026
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/core/atom.ts","../../src/core/atom-manager.ts","../../src/core/store.ts"],"sourcesContent":["import type { Computed, Command, Read, State, Write } from '../../types/core/atom';\n\ninterface Options {\n debugLabel?: string;\n}\n\nlet globalId = 0;\n\nconst generateToString = (prefix: string, debugLabel?: string) => {\n const id = globalId++;\n const label = `${prefix}${String(id)}${debugLabel ? ':' + debugLabel : ''}`;\n return () => label;\n};\n\nexport function state<T>(init: T, options?: Options): State<T> {\n const ret: State<T> = {\n init,\n toString: generateToString('V', options?.debugLabel),\n };\n\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n\nexport function computed<T>(read: Read<T>, options?: Options): Computed<T> {\n const ret: Computed<T> = {\n read,\n toString: generateToString('C', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n\nexport function command<T, Args extends unknown[]>(write: Write<T, Args>, options?: Options): Command<T, Args> {\n const ret: Command<T, Args> = {\n write,\n toString: generateToString('F', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n","import type { ReadableAtom, Command, Getter, Computed, State } from '../../types/core/atom';\nimport type { StoreOptions } from '../../types/core/store';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport interface StateState<T> {\n mounted?: Mounted;\n val: T;\n epoch: number;\n}\n\nexport interface ComputedState<T> {\n mounted?: Mounted;\n val: T;\n dependencies: Map<ReadableAtom<unknown>, number>;\n epoch: number;\n abortController?: AbortController;\n}\n\ntype CommonReadableState<T> = StateState<T> | ComputedState<T>;\n\ntype AtomState<T> = StateState<T> | ComputedState<T>;\n\ninterface Mounted {\n listeners: Set<Command<unknown, []>>;\n readDepts: Set<ReadableAtom<unknown>>;\n}\n\nfunction canReadAsCompute<T>(atom: ReadableAtom<T>): atom is Computed<T> {\n return 'read' in atom;\n}\n\nfunction isComputedState<T>(state: CommonReadableState<T>): state is ComputedState<T> {\n return 'dependencies' in state;\n}\n\nexport class AtomManager {\n private atomStateMap = new WeakMap<ReadableAtom<unknown>, AtomState<unknown>>();\n\n constructor(private readonly options?: StoreOptions) {}\n\n private tryGetCachedState = <T>(atom: Computed<T>, ignoreMounted: boolean): ComputedState<T> | undefined => {\n const atomState = this.atomStateMap.get(atom) as ComputedState<T> | undefined;\n if (!atomState) {\n return undefined;\n }\n\n if (atomState.mounted && !ignoreMounted) {\n return atomState;\n }\n\n for (const [dep, epoch] of atomState.dependencies.entries()) {\n const depState = this.readAtomState(dep);\n if (depState.epoch !== epoch) {\n return undefined;\n }\n }\n\n return atomState;\n };\n\n private readComputedAtom<T>(atom: Computed<T>, ignoreMounted = false): ComputedState<T> {\n const cachedState = this.tryGetCachedState(atom, ignoreMounted);\n if (cachedState) {\n return cachedState;\n }\n\n const computedInterceptor = this.options?.interceptor?.computed;\n if (!computedInterceptor) {\n return this.computeComputedAtom(atom, ignoreMounted);\n }\n\n let result: DataWithCalledState<ComputedState<T>> = {\n called: false,\n } as DataWithCalledState<ComputedState<T>>;\n\n computedInterceptor(atom, () => {\n result = {\n called: true,\n data: this.computeComputedAtom(atom, ignoreMounted),\n };\n\n return result.data.val;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n }\n\n private computeComputedAtom<T>(atom: Computed<T>, ignoreMounted = false): ComputedState<T> {\n const self: Computed<T> = atom;\n let atomState: ComputedState<T> | undefined = this.atomStateMap.get(self) as ComputedState<T> | undefined;\n if (!atomState) {\n atomState = {\n dependencies: new Map<ReadableAtom<unknown>, number>(),\n epoch: -1,\n } as ComputedState<T>;\n this.atomStateMap.set(self, atomState);\n }\n\n const lastDeps = atomState.dependencies;\n const readDeps = new Map<ReadableAtom<unknown>, number>();\n atomState.dependencies = readDeps;\n const wrappedGet: Getter = (depAtom) => {\n const depState = this.readAtomState(depAtom, ignoreMounted);\n\n // get 可能发生在异步过程中,当重复调用时,只有最新的 get 过程会修改 deps\n if (atomState.dependencies === readDeps) {\n readDeps.set(depAtom, depState.epoch);\n\n const selfMounted = !!atomState.mounted;\n if (selfMounted && !depState.mounted) {\n this.mount(depAtom).readDepts.add(self);\n } else if (selfMounted && depState.mounted) {\n depState.mounted.readDepts.add(self);\n }\n }\n\n return depState.val;\n };\n\n const getInterceptor = this.options?.interceptor?.get;\n const ret = self.read(\n function <U>(depAtom: ReadableAtom<U>) {\n if (!getInterceptor) {\n return wrappedGet(depAtom);\n }\n\n let result: DataWithCalledState<U> = {\n called: false,\n } as DataWithCalledState<U>;\n\n const fn = () => {\n result = {\n called: true,\n data: wrappedGet(depAtom),\n };\n\n return result.data;\n };\n\n getInterceptor(depAtom, fn);\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n return result.data;\n },\n {\n get signal() {\n atomState.abortController?.abort(`abort ${self.debugLabel ?? 'anonymous'} atom`);\n atomState.abortController = new AbortController();\n return atomState.abortController.signal;\n },\n },\n );\n\n if (atomState.val !== ret) {\n atomState.val = ret;\n atomState.epoch += 1;\n }\n\n for (const key of lastDeps.keys()) {\n if (!readDeps.has(key)) {\n const depState = this.atomStateMap.get(key);\n if (depState?.mounted) {\n depState.mounted.readDepts.delete(self);\n this.tryUnmount(key);\n }\n }\n }\n\n return atomState;\n }\n\n private readStateAtom<T>(atom: State<T>): StateState<T> {\n const atomState = this.atomStateMap.get(atom);\n if (!atomState) {\n const initState = {\n val: atom.init,\n epoch: 0,\n };\n this.atomStateMap.set(atom, initState);\n return initState as StateState<T>;\n }\n\n return atomState as StateState<T>;\n }\n\n public readAtomState<T>(atom: State<T>, ignoreMounted?: boolean): StateState<T>;\n public readAtomState<T>(atom: Computed<T>, ignoreMounted?: boolean): ComputedState<T>;\n public readAtomState<T>(atom: State<T> | Computed<T>, ignoreMounted?: boolean): CommonReadableState<T>;\n public readAtomState<T>(\n atom: State<T> | Computed<T>,\n ignoreMounted = false,\n ): StateState<T> | ComputedState<T> | CommonReadableState<T> {\n if (canReadAsCompute(atom)) {\n return this.readComputedAtom(atom, ignoreMounted);\n }\n\n return this.readStateAtom(atom);\n }\n\n private tryGetMount(atom: ReadableAtom<unknown>): Mounted | undefined {\n return this.atomStateMap.get(atom)?.mounted;\n }\n\n public mount<T>(atom: ReadableAtom<T>): Mounted {\n const mounted = this.tryGetMount(atom);\n if (mounted) {\n return mounted;\n }\n\n this.options?.interceptor?.mount?.(atom);\n\n const atomState = this.readAtomState(atom);\n\n atomState.mounted = atomState.mounted ?? {\n listeners: new Set(),\n readDepts: new Set(),\n };\n\n if (isComputedState(atomState)) {\n for (const [dep] of Array.from(atomState.dependencies)) {\n const mounted = this.mount(dep);\n mounted.readDepts.add(atom);\n }\n }\n\n return atomState.mounted;\n }\n\n public tryUnmount<T>(atom: ReadableAtom<T>): void {\n const atomState = this.atomStateMap.get(atom);\n if (!atomState?.mounted || atomState.mounted.listeners.size || atomState.mounted.readDepts.size) {\n return;\n }\n\n this.options?.interceptor?.unmount?.(atom);\n\n if (isComputedState(atomState)) {\n for (const [dep] of Array.from(atomState.dependencies)) {\n const depState = this.readAtomState(dep);\n depState.mounted?.readDepts.delete(atom);\n this.tryUnmount(dep);\n }\n }\n\n atomState.mounted = undefined;\n }\n\n public inited(atom: ReadableAtom<unknown>) {\n return this.atomStateMap.has(atom);\n }\n}\n\nexport class ListenerManager {\n private pendingListeners = new Set<Command<unknown, []>>();\n\n markPendingListeners(atomManager: AtomManager, atom: ReadableAtom<unknown>) {\n let queue: ReadableAtom<unknown>[] = [atom];\n while (queue.length > 0) {\n const nextQueue: ReadableAtom<unknown>[] = [];\n for (const atom of queue) {\n const atomState = atomManager.readAtomState(atom, true);\n\n if (atomState.mounted?.listeners) {\n for (const listener of atomState.mounted.listeners) {\n this.pendingListeners.add(listener);\n }\n }\n\n const readDepts = atomState.mounted?.readDepts;\n if (readDepts) {\n for (const dep of Array.from(readDepts)) {\n nextQueue.push(dep);\n }\n }\n }\n\n queue = nextQueue;\n }\n }\n\n *notify(): Generator<Command<unknown, []>, void, unknown> {\n const pendingListeners = this.pendingListeners;\n this.pendingListeners = new Set();\n\n for (const listener of pendingListeners) {\n yield listener;\n }\n }\n}\n","import type { ReadableAtom, Command, Getter, State, Updater, Setter } from '../../types/core/atom';\nimport type { Store, StoreOptions, SubscribeOptions } from '../../types/core/store';\nimport { AtomManager, ListenerManager } from './atom-manager';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport class StoreImpl implements Store {\n constructor(\n protected readonly atomManager: AtomManager,\n protected readonly listenerManager: ListenerManager,\n protected readonly options?: StoreOptions,\n ) {}\n\n private innerSet = <T, Args extends unknown[]>(\n atom: State<T> | Command<T, Args>,\n ...args: [T | Updater<T>] | Args\n ): undefined | T => {\n if ('read' in atom) {\n return;\n }\n\n if ('write' in atom) {\n const ret = atom.write({ get: this.get, set: this.set }, ...(args as Args));\n return ret;\n }\n\n const newValue =\n typeof args[0] === 'function'\n ? (args[0] as Updater<T>)(this.atomManager.readAtomState(atom).val)\n : (args[0] as T);\n\n if (!this.atomManager.inited(atom)) {\n this.atomManager.readAtomState(atom).val = newValue;\n this.listenerManager.markPendingListeners(this.atomManager, atom);\n return;\n }\n const atomState = this.atomManager.readAtomState(atom);\n atomState.val = newValue;\n atomState.epoch += 1;\n this.listenerManager.markPendingListeners(this.atomManager, atom);\n return undefined;\n };\n\n get: Getter = <T>(atom: ReadableAtom<T>): T => {\n if (!this.options?.interceptor?.get) {\n return this.atomManager.readAtomState(atom).val;\n }\n let result: DataWithCalledState<T> = {\n called: false,\n } as DataWithCalledState<T>;\n\n const fnWithRet = () => {\n result = {\n called: true,\n data: this.atomManager.readAtomState(atom).val,\n };\n return result.data;\n };\n\n this.options.interceptor.get(atom, fnWithRet);\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n };\n\n private notify = () => {\n for (const listener of this.listenerManager.notify()) {\n let notifyed = false;\n const fn = () => {\n notifyed = true;\n return listener.write({ get: this.get, set: this.set });\n };\n if (this.options?.interceptor?.notify) {\n this.options.interceptor.notify(listener, fn);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- notify must call fn sync\n if (!notifyed) {\n throw new Error('interceptor must call fn sync');\n }\n } else {\n fn();\n }\n }\n };\n\n set: Setter = <T, Args extends unknown[]>(\n atom: State<T> | Command<T, Args>,\n ...args: [T | Updater<T>] | Args\n ): undefined | T => {\n let ret: T | undefined;\n const fn = () => {\n try {\n ret = this.innerSet(atom, ...args) as T | undefined;\n } finally {\n this.notify();\n }\n return ret;\n };\n\n if (this.options?.interceptor?.set) {\n if ('write' in atom) {\n this.options.interceptor.set(atom, fn, ...(args as Args));\n } else {\n this.options.interceptor.set(atom, fn, args[0] as T | Updater<T>);\n }\n } else {\n fn();\n }\n\n return ret;\n };\n\n private _subSingleAtom(\n target$: ReadableAtom<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n let unsub: (() => void) | undefined;\n const fn = () => {\n let subscribed = true;\n const mounted = this.atomManager.mount(target$);\n mounted.listeners.add(cb$);\n\n unsub = () => {\n if (!subscribed) {\n return;\n }\n\n const fn = () => {\n subscribed = false;\n mounted.listeners.delete(cb$);\n\n if (mounted.readDepts.size === 0 && mounted.listeners.size === 0) {\n this.atomManager.tryUnmount(target$);\n }\n\n options?.signal?.addEventListener('abort', fn);\n };\n\n if (this.options?.interceptor?.unsub) {\n this.options.interceptor.unsub(target$, cb$, fn);\n\n // subscribed should be false if interceptor called fn sync\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (subscribed) {\n throw new Error('interceptor must call fn sync');\n }\n } else {\n fn();\n }\n };\n\n options?.signal?.addEventListener('abort', unsub);\n };\n\n if (this.options?.interceptor?.sub) {\n this.options.interceptor.sub(target$, cb$, fn);\n } else {\n fn();\n }\n\n if (!unsub) {\n throw new Error('interceptor must call fn sync');\n }\n\n return unsub;\n }\n\n sub(\n targets$: ReadableAtom<unknown>[] | ReadableAtom<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n if (Array.isArray(targets$) && targets$.length === 0) {\n return () => void 0;\n }\n\n if (Array.isArray(targets$) && targets$.length === 1) {\n return this._subSingleAtom(targets$[0], cb$, options);\n } else if (!Array.isArray(targets$)) {\n return this._subSingleAtom(targets$, cb$, options);\n }\n\n const unsubscribes = new Set<() => void>();\n targets$.forEach((atom) => {\n unsubscribes.add(this._subSingleAtom(atom, cb$, options));\n });\n\n const unsub = () => {\n for (const unsubscribe of unsubscribes) {\n unsubscribe();\n }\n };\n\n return unsub;\n }\n}\n\nexport function createStore(): Store {\n const atomManager = new AtomManager();\n const listenerManager = new ListenerManager();\n\n return new StoreImpl(atomManager, listenerManager);\n}\n\nlet defaultStore: Store | undefined = undefined;\nexport function getDefaultStore(): Store {\n if (!defaultStore) {\n defaultStore = createStore();\n }\n return defaultStore;\n}\n"],"names":["globalId","generateToString","prefix","debugLabel","id","label","concat","String","state","init","options","ret","toString","computed","read","command","write","canReadAsCompute","atom","isComputedState","AtomManager","_this","_classCallCheck","_defineProperty","WeakMap","ignoreMounted","atomState","atomStateMap","get","undefined","mounted","_iterator","_createForOfIteratorHelper","dependencies","entries","_step","s","n","done","_step$value","_slicedToArray","value","dep","epoch","depState","readAtomState","err","e","f","_createClass","key","readComputedAtom","_this$options","_this2","arguments","length","cachedState","tryGetCachedState","computedInterceptor","interceptor","computeComputedAtom","result","called","data","val","Error","_this3","_this$options2","self","Map","set","lastDeps","readDeps","wrappedGet","depAtom","selfMounted","mount","readDepts","add","getInterceptor","fn","signal","_atomState$abortContr","_self$debugLabel","abortController","abort","AbortController","_iterator2","keys","_step2","has","tryUnmount","readStateAtom","initState","tryGetMount","_this$atomStateMap$ge","_this$options3","_this$options3$mount","_atomState$mounted","call","listeners","Set","_i","_Array$from","Array","from","_Array$from$_i","_this$options4","_this$options4$unmoun","size","unmount","_i2","_Array$from2","_depState$mounted","_Array$from2$_i","inited","ListenerManager","markPendingListeners","atomManager","queue","nextQueue","_iterator3","_step3","_atomState$mounted2","_atomState$mounted3","_iterator4","_step4","listener","pendingListeners","_i3","_Array$from3","push","_regeneratorRuntime","mark","notify","_iterator5","_step5","wrap","notify$","_context","prev","next","t0","finish","stop","StoreImpl","listenerManager","_len","args","_key","apply","_toConsumableArray","newValue","fnWithRet","_loop","notifyed","_len2","_key2","innerSet","_this$options$interce","_subSingleAtom","target$","cb$","unsub","_options$signal2","subscribed","_this2$options","_options$signal","addEventListener","sub","targets$","isArray","unsubscribes","forEach","unsubscribe","createStore","defaultStore","getDefaultStore"],"mappings":"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"}
package/debug/index.cjs CHANGED
@@ -559,7 +559,7 @@ var AtomManager = /*#__PURE__*/function () {
559
559
  }
560
560
  var computedInterceptor = (_this$options = this.options) === null || _this$options === void 0 || (_this$options = _this$options.interceptor) === null || _this$options === void 0 ? void 0 : _this$options.computed;
561
561
  if (!computedInterceptor) {
562
- return this.computeComputedAtom(atom);
562
+ return this.computeComputedAtom(atom, ignoreMounted);
563
563
  }
564
564
  var result = {
565
565
  called: false
@@ -567,7 +567,7 @@ var AtomManager = /*#__PURE__*/function () {
567
567
  computedInterceptor(atom, function () {
568
568
  result = {
569
569
  called: true,
570
- data: _this2.computeComputedAtom(atom)
570
+ data: _this2.computeComputedAtom(atom, ignoreMounted)
571
571
  };
572
572
  return result.data.val;
573
573
  });
@@ -581,6 +581,7 @@ var AtomManager = /*#__PURE__*/function () {
581
581
  value: function computeComputedAtom(atom) {
582
582
  var _this3 = this,
583
583
  _this$options2;
584
+ var ignoreMounted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
584
585
  var self = atom;
585
586
  var atomState = this.atomStateMap.get(self);
586
587
  if (!atomState) {
@@ -594,7 +595,7 @@ var AtomManager = /*#__PURE__*/function () {
594
595
  var readDeps = new Map();
595
596
  atomState.dependencies = readDeps;
596
597
  var wrappedGet = function wrappedGet(depAtom) {
597
- var depState = _this3.readAtomState(depAtom);
598
+ var depState = _this3.readAtomState(depAtom, ignoreMounted);
598
599
 
599
600
  // get 可能发生在异步过程中,当重复调用时,只有最新的 get 过程会修改 deps
600
601
  if (atomState.dependencies === readDeps) {
@@ -1153,15 +1154,15 @@ var ConsoleInterceptor = /*#__PURE__*/_createClass(function ConsoleInterceptor(w
1153
1154
  console.groupEnd();
1154
1155
  });
1155
1156
  _defineProperty(this, "set", function (atom$, fn) {
1157
+ var _console;
1156
1158
  if (!_this.shouldLog(atom$, 'set')) {
1157
1159
  fn();
1158
1160
  return;
1159
1161
  }
1160
- console.group('[R][SET] ' + atom$.toString());
1161
1162
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
1162
1163
  args[_key - 2] = arguments[_key];
1163
1164
  }
1164
- console.log('arg:', args);
1165
+ (_console = console).group.apply(_console, ['[R][SET] ' + atom$.toString(), '('].concat(args, [')']));
1165
1166
  console.log('ret:', fn());
1166
1167
  console.groupEnd();
1167
1168
  });
@@ -1209,11 +1210,12 @@ var ConsoleInterceptor = /*#__PURE__*/_createClass(function ConsoleInterceptor(w
1209
1210
  function createDebugStore() {
1210
1211
  var watches = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1211
1212
  var defaultActions = arguments.length > 1 ? arguments[1] : undefined;
1213
+ var parsedDefaultActions = defaultActions ? new Set(defaultActions) : undefined;
1212
1214
  var parsedWatches = watches.map(function (watch) {
1213
1215
  if (typeof watch === 'string' || watch instanceof RegExp) {
1214
1216
  return {
1215
1217
  target: watch,
1216
- actions: defaultActions ? new Set(defaultActions) : undefined
1218
+ actions: parsedDefaultActions
1217
1219
  };
1218
1220
  }
1219
1221
  if ('target' in watch) {
@@ -1221,7 +1223,7 @@ function createDebugStore() {
1221
1223
  }
1222
1224
  return {
1223
1225
  target: watch,
1224
- actions: defaultActions ? new Set(defaultActions) : undefined
1226
+ actions: parsedDefaultActions
1225
1227
  };
1226
1228
  });
1227
1229
  var interceptor = new ConsoleInterceptor(parsedWatches);
@@ -1229,3 +1231,4 @@ function createDebugStore() {
1229
1231
  }
1230
1232
 
1231
1233
  exports.createDebugStore = createDebugStore;
1234
+ //# sourceMappingURL=index.cjs.map