ccstate 4.5.0 → 4.7.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 +60 -0
- package/core/index.cjs +16 -7
- package/core/index.cjs.map +1 -1
- package/core/index.js +16 -7
- package/core/index.js.map +1 -1
- package/debug/index.cjs +16 -7
- package/debug/index.cjs.map +1 -1
- package/debug/index.js +16 -7
- package/debug/index.js.map +1 -1
- package/index.cjs +16 -7
- package/index.cjs.map +1 -1
- package/index.js +16 -7
- package/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -260,6 +260,66 @@ Here's a simple rule of thumb:
|
|
|
260
260
|
|
|
261
261
|
That's it! Next, you can learn how to use CCState in React.
|
|
262
262
|
|
|
263
|
+
## Patterns
|
|
264
|
+
|
|
265
|
+
`CCState` has some unique programming patterns.
|
|
266
|
+
|
|
267
|
+
### Computed with Arguments
|
|
268
|
+
|
|
269
|
+
In some cases, the computation process of `Computed` relies on some external parameters. However, the function definition of `Computed` prevents it from receiving parameters, which is intentional, as the function's parameters do not have the ability to be reactively subscribed.
|
|
270
|
+
|
|
271
|
+
There are two techniques that allow `Computed` to handle external parameters. Below is a simple example to introduce these two methods.
|
|
272
|
+
|
|
273
|
+
#### Args as State/Computed
|
|
274
|
+
|
|
275
|
+
Consider a simple scenario where the API for obtaining user information requires a userId. Defining this userId as a `State`/`Computed` allows it to be retrieved during the process of obtaining user information in Computed.
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
const currentUserId$ = state<0>
|
|
279
|
+
const currentUser$ = computed(get => {
|
|
280
|
+
const userId = get(currentUserId$)
|
|
281
|
+
return fetch(`/api/users/${userId}`);
|
|
282
|
+
})
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
This technology is very useful for singleton data such as "currently logged-in user" and "currently opened product," as it directly reflects the responsive definition process of this data.
|
|
286
|
+
|
|
287
|
+
But for some types of data like list items, this technique is difficult to define a global id list `State`/`Computed`.
|
|
288
|
+
|
|
289
|
+
#### Args by function closure
|
|
290
|
+
|
|
291
|
+
We could pass some data into the calculation process of `Computed` through closure, for example:
|
|
292
|
+
|
|
293
|
+
```javascript
|
|
294
|
+
function getUser(userId) {
|
|
295
|
+
return computed((get) => {
|
|
296
|
+
return fetch(`/api/users/${userId}`);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Use such a list externally
|
|
301
|
+
const userList$ = state([]);
|
|
302
|
+
const addUser$ = command(({ set }, userId) => {
|
|
303
|
+
set(userList$, (x) => {
|
|
304
|
+
return [...x, getUser(userId)];
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
It is easy to see that `userId` passed by the function parameters do not have reactive capabilities. Therefore, we can use this technique to distinguish the semantics of reactive arguments and non-reactive arguments.
|
|
310
|
+
|
|
311
|
+
#### Other Technologies
|
|
312
|
+
|
|
313
|
+
The `Command` has the ability to receive parameters, so we can encapsulate the above example into a `Command`:
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
const getUser$ = command(({ set, get }, userId, sigal) => {
|
|
317
|
+
return fetch(`/api/users/${userId}`, { signal });
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
However, this method requires that the caller must also be a `Command` in order to access the `set` method, which can easily lead to destructive passing of `Command`. If a `Command` itself does not produce side effects, then it should be considered to be written as a `Computed`.
|
|
322
|
+
|
|
263
323
|
## Using in React
|
|
264
324
|
|
|
265
325
|
[Using in React](docs/react.md)
|
package/core/index.cjs
CHANGED
|
@@ -360,13 +360,18 @@ function tryGetCached(readComputed, computed$, context, mutation) {
|
|
|
360
360
|
if (!signalState) {
|
|
361
361
|
return undefined;
|
|
362
362
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
363
|
+
|
|
364
|
+
// If a computed is marked as potentially dirty, we should perform a
|
|
365
|
+
// thorough epoch check. Alternatively, we can check the mounted state since
|
|
366
|
+
// a mounted computed is always re-evaluated immediately.
|
|
367
|
+
var mayDirty = mutation === null || mutation === void 0 ? void 0 : mutation.potentialDirtyIds.has(computed$.id);
|
|
368
|
+
if (!mayDirty && signalState.mounted) {
|
|
367
369
|
return signalState;
|
|
368
370
|
}
|
|
369
371
|
if (checkEpoch(readComputed, signalState, context, mutation)) {
|
|
372
|
+
if (mayDirty) {
|
|
373
|
+
mutation === null || mutation === void 0 || mutation.potentialDirtyIds["delete"](computed$.id);
|
|
374
|
+
}
|
|
370
375
|
return signalState;
|
|
371
376
|
}
|
|
372
377
|
return undefined;
|
|
@@ -438,6 +443,7 @@ function evaluateComputed(readSignal, mount, unmount, computed$, context, mutati
|
|
|
438
443
|
return computedState.abortController.signal;
|
|
439
444
|
}
|
|
440
445
|
});
|
|
446
|
+
mutation === null || mutation === void 0 || mutation.potentialDirtyIds["delete"](computed$.id);
|
|
441
447
|
cleanupMissingDependencies(unmount, computed$, lastDeps, dependencies, context, mutation);
|
|
442
448
|
if (!shouldDistinct(computed$, evalVal, context)) {
|
|
443
449
|
computedState.val = evalVal;
|
|
@@ -446,6 +452,10 @@ function evaluateComputed(readSignal, mount, unmount, computed$, context, mutati
|
|
|
446
452
|
return computedState;
|
|
447
453
|
}
|
|
448
454
|
|
|
455
|
+
// Dirty markers are just 'potentially' dirty because we don't know if
|
|
456
|
+
// dependencies result will change. Pushing a computed to dirty markers doesn't
|
|
457
|
+
// mean it will re-evaluate immediately, just marks it for epoch checking in
|
|
458
|
+
// #tryGetCached. So the propagation is greedy to mark all dependants as dirty
|
|
449
459
|
function pushDirtyMarkers(signalState, context, mutation) {
|
|
450
460
|
var _signalState$mounted$, _signalState$mounted;
|
|
451
461
|
var queue = Array.from((_signalState$mounted$ = (_signalState$mounted = signalState.mounted) === null || _signalState$mounted === void 0 ? void 0 : _signalState$mounted.readDepts) !== null && _signalState$mounted$ !== void 0 ? _signalState$mounted$ : []);
|
|
@@ -456,7 +466,7 @@ function pushDirtyMarkers(signalState, context, mutation) {
|
|
|
456
466
|
try {
|
|
457
467
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
458
468
|
var computed$ = _step.value;
|
|
459
|
-
mutation.
|
|
469
|
+
mutation.potentialDirtyIds.add(computed$.id);
|
|
460
470
|
var computedState = context.stateMap.get(computed$);
|
|
461
471
|
// This computed$ is read from other computed$'s readDepts, so it must not be null and must have mounted
|
|
462
472
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -623,7 +633,7 @@ function set(readComputed, writable$, context, mutation) {
|
|
|
623
633
|
*/
|
|
624
634
|
function createMutation(context, _get, _set) {
|
|
625
635
|
var mutation = {
|
|
626
|
-
|
|
636
|
+
potentialDirtyIds: new Set(),
|
|
627
637
|
pendingListeners: new Set(),
|
|
628
638
|
visitor: {
|
|
629
639
|
get: function get(signal$) {
|
|
@@ -754,7 +764,6 @@ var _readComputed = function readComputed(computed$, context, mutation) {
|
|
|
754
764
|
if (cachedState) {
|
|
755
765
|
return cachedState;
|
|
756
766
|
}
|
|
757
|
-
mutation === null || mutation === void 0 || mutation.dirtyMarkers["delete"](computed$.id);
|
|
758
767
|
return withComputedInterceptor(function () {
|
|
759
768
|
return evaluateComputed(readSignal, mount, unmount, computed$, context, mutation);
|
|
760
769
|
}, computed$, (_context$interceptor = context.interceptor) === null || _context$interceptor === void 0 ? void 0 : _context$interceptor.computed);
|
package/core/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/core/signal/factory.ts","../../src/core/interceptor.ts","../../src/core/typing-util.ts","../../src/core/signal/signal.ts","../../src/core/signal/computed.ts","../../src/core/store/set.ts","../../src/core/signal/state.ts","../../src/core/store/sub.ts","../../src/core/store/store.ts"],"sourcesContent":["import type { Computed, Command, Read, State, Write } from '../../../types/core/signal';\n\ninterface Options {\n debugLabel?: string;\n}\n\nlet globalId = 0;\n\nconst generateToString = (id: number, prefix: string, debugLabel?: string) => {\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 id = globalId++;\n const ret: State<T> = {\n id,\n init,\n toString: generateToString(id, 'S', 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 id = globalId++;\n const ret: Computed<T> = {\n id,\n read,\n toString: generateToString(id, 'CPT', options?.debugLabel),\n };\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 id = globalId++;\n const ret: Command<T, Args> = {\n id,\n write,\n toString: generateToString(id, 'CMD', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n","import type { Command, Computed, Signal, State } from '../../types/core/signal';\nimport type {\n CallbackFunc,\n ComputedState,\n InterceptorComputed,\n InterceptorGet,\n InterceptorNotify,\n InterceptorSet,\n InterceptorSub,\n InterceptorUnsub,\n SetArgs,\n} from '../../types/core/store';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport function withSetInterceptor<T, Args extends SetArgs<T, unknown[]>>(\n fn: () => T | undefined,\n writable$: State<T> | Command<T, Args>,\n interceptor: InterceptorSet | undefined,\n ...args: Args\n): T | undefined {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T | undefined>;\n const wrappedFn = () => {\n result = { called: true, data: fn() };\n return result.data;\n };\n if ('write' in writable$) {\n interceptor(writable$, wrappedFn, ...args);\n } else {\n interceptor(writable$, wrappedFn, args[0]);\n }\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withGetInterceptor<T>(fn: () => T, signal: Signal<T>, interceptor?: InterceptorGet): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withComputedInterceptor<T>(\n fn: () => ComputedState<T>,\n signal: Computed<T>,\n interceptor?: InterceptorComputed,\n): ComputedState<T> {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<ComputedState<T>>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\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\nexport function withGeValInterceptor<T>(fn: () => T, signal: Signal<T>, interceptor?: InterceptorGet): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withSubInterceptor<T>(\n fn: () => void,\n signal: Signal<T>,\n callback$: Command<unknown, []>,\n interceptor?: InterceptorSub,\n) {\n if (!interceptor) {\n fn();\n return;\n }\n\n let result = { called: false } as DataWithCalledState<void>;\n\n interceptor(signal, callback$, () => {\n result = { called: true, data: undefined };\n fn();\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n}\n\nexport function withUnsubInterceptor<T>(\n fn: () => void,\n signal: Signal<T>,\n callback$: Command<unknown, []>,\n interceptor?: InterceptorUnsub,\n): void {\n if (!interceptor) {\n fn();\n return;\n }\n\n let result = { called: false } as DataWithCalledState<void>;\n\n interceptor(signal, callback$, () => {\n result = { called: true, data: undefined };\n fn();\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n}\n\nexport function withNotifyInterceptor<T>(fn: () => T, callback$: CallbackFunc<T>, interceptor?: InterceptorNotify): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(callback$, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n","import type { Computed, Signal } from '../../types/core/signal';\nimport type { ComputedState, SignalState } from '../../types/core/store';\n\nexport function canReadAsCompute<T>(atom: Signal<T>): atom is Computed<T> {\n return 'read' in atom;\n}\n\nexport function isComputedState<T>(state: SignalState<T>): state is ComputedState<T> {\n return 'dependencies' in state;\n}\n","import type { Signal } from '../../../types/core/signal';\nimport type { StoreContext } from '../../../types/core/store';\n\nexport function currentValue<T>(signal: Signal<T>, context: StoreContext): T | undefined {\n return context.stateMap.get(signal)?.val as T | undefined;\n}\n\nexport function shouldDistinct<T>(signal: Signal<T>, value: T, context: StoreContext) {\n return currentValue(signal, context) === value;\n}\n","import type { Computed, Getter, Signal } from '../../../types/core/signal';\nimport type {\n ComputedState,\n Mount,\n Mutation,\n ReadComputed,\n ReadSignal,\n StoreContext,\n Unmount,\n} from '../../../types/core/store';\nimport { withGeValInterceptor } from '../interceptor';\nimport { canReadAsCompute } from '../typing-util';\nimport { shouldDistinct } from './signal';\n\nfunction checkEpoch<T>(\n readComputed: ReadComputed,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): boolean {\n for (const [dep, epoch] of computedState.dependencies.entries()) {\n const depEpoch = canReadAsCompute(dep)\n ? readComputed(dep, context, mutation).epoch\n : context.stateMap.get(dep)?.epoch;\n\n if (depEpoch !== epoch) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function tryGetCached<T>(\n readComputed: ReadComputed,\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> | undefined {\n const signalState = context.stateMap.get(computed$) as ComputedState<T> | undefined;\n if (!signalState) {\n return undefined;\n }\n\n if (mutation?.dirtyMarkers.has(computed$.id)) {\n return undefined;\n }\n\n if (signalState.mounted) {\n return signalState;\n }\n\n if (checkEpoch(readComputed, signalState, context, mutation)) {\n return signalState;\n }\n\n return undefined;\n}\n\nfunction wrapGet<T>(\n readSignal: ReadSignal,\n mount: Mount,\n callerComputed$: Computed<T>,\n callerState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): [Getter, Map<Signal<unknown>, number>] {\n const readDeps = new Map<Signal<unknown>, number>();\n\n return [\n (dep$) => {\n const depState = readSignal(dep$, context, mutation);\n\n if (callerState.dependencies === readDeps) {\n readDeps.set(dep$, depState.epoch);\n\n const callerMounted = !!callerState.mounted;\n if (callerMounted && !depState.mounted) {\n mount(dep$, context, mutation).readDepts.add(callerComputed$);\n } else if (callerMounted && depState.mounted) {\n depState.mounted.readDepts.add(callerComputed$);\n }\n }\n\n return depState.val;\n },\n readDeps,\n ];\n}\n\nfunction getOrInitComputedState<T>(computed$: Computed<T>, context: StoreContext): ComputedState<T> {\n let computedState: ComputedState<T> | undefined = context.stateMap.get(computed$) as ComputedState<T> | undefined;\n if (!computedState) {\n computedState = {\n dependencies: new Map<Signal<unknown>, number>(),\n epoch: -1,\n } as ComputedState<T>;\n context.stateMap.set(computed$, computedState);\n }\n\n return computedState;\n}\n\nfunction cleanupMissingDependencies<T>(\n unmount: Unmount,\n computed$: Computed<T>,\n lastDeps: Map<Signal<unknown>, number>,\n currDeps: Map<Signal<unknown>, number>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const key of lastDeps.keys()) {\n if (!currDeps.has(key)) {\n const depState = context.stateMap.get(key);\n depState?.mounted?.readDepts.delete(computed$);\n unmount(key, context, mutation);\n }\n }\n}\n\nexport function evaluateComputed<T>(\n readSignal: ReadSignal,\n mount: Mount,\n unmount: Unmount,\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> {\n const computedState = getOrInitComputedState(computed$, context);\n\n const lastDeps = computedState.dependencies;\n\n const [_get, dependencies] = wrapGet(readSignal, mount, computed$, computedState, context, mutation);\n computedState.dependencies = dependencies;\n\n const evalVal = computed$.read(\n function <U>(depAtom: Signal<U>) {\n return withGeValInterceptor(() => _get(depAtom), depAtom, context.interceptor?.get);\n },\n {\n get signal() {\n computedState.abortController?.abort(`abort ${computed$.debugLabel ?? 'anonymous'} atom`);\n computedState.abortController = new AbortController();\n return computedState.abortController.signal;\n },\n },\n );\n\n cleanupMissingDependencies(unmount, computed$, lastDeps, dependencies, context, mutation);\n\n if (!shouldDistinct(computed$, evalVal, context)) {\n computedState.val = evalVal;\n computedState.epoch += 1;\n }\n\n return computedState;\n}\n","import type { Command, State, Computed, Signal, Updater, StateArg } from '../../../types/core/signal';\nimport type {\n Mutation,\n ReadComputed,\n StoreContext,\n StateState,\n StoreGet,\n StoreSet,\n SetArgs,\n} from '../../../types/core/store';\nimport { shouldDistinct } from '../signal/signal';\n\nfunction pushDirtyMarkers(signalState: StateState<unknown>, context: StoreContext, mutation: Mutation) {\n let queue: Computed<unknown>[] = Array.from(signalState.mounted?.readDepts ?? []);\n\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n mutation.dirtyMarkers.add(computed$.id);\n\n const computedState = context.stateMap.get(computed$);\n // This computed$ is read from other computed$'s readDepts, so it must not be null and must have mounted\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n for (const dep of computedState!.mounted!.readDepts) {\n nextQueue.push(dep);\n }\n }\n\n queue = nextQueue;\n }\n}\n\nfunction pullEvaluate(\n readComputed: ReadComputed,\n signalState: StateState<unknown>,\n context: StoreContext,\n mutation: Mutation,\n) {\n let queue: Computed<unknown>[] = Array.from(signalState.mounted?.readDepts ?? []);\n\n for (const listener of signalState.mounted?.listeners ?? []) {\n mutation.pendingListeners.add(listener);\n }\n\n const oldValues = new Map<Computed<unknown>, unknown>();\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n const oldValue = context.stateMap.get(computed$)?.val;\n oldValues.set(computed$, oldValue);\n\n const readDepts = context.stateMap.get(computed$)?.mounted?.readDepts;\n if (readDepts) {\n for (const dep of Array.from(readDepts)) {\n nextQueue.push(dep);\n }\n }\n }\n queue = nextQueue;\n }\n\n queue = Array.from(signalState.mounted?.readDepts ?? []);\n\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n const computedState = readComputed(computed$, context, mutation);\n if (oldValues.has(computed$) && oldValues.get(computed$) === computedState.val) {\n continue;\n }\n\n if (computedState.mounted?.listeners) {\n for (const listener of computedState.mounted.listeners) {\n mutation.pendingListeners.add(listener);\n }\n }\n\n const readDepts = computedState.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\nfunction propagationChanges(\n readComputed: ReadComputed,\n signalState: StateState<unknown>,\n context: StoreContext,\n mutation: Mutation,\n) {\n pushDirtyMarkers(signalState, context, mutation);\n pullEvaluate(readComputed, signalState, context, mutation);\n}\n\nfunction innerSetState<T>(\n readComputed: ReadComputed,\n signal$: State<T>,\n context: StoreContext,\n mutation: Mutation,\n val: StateArg<T>,\n) {\n let newValue: T;\n if (typeof val === 'function') {\n const updater = val as Updater<T>;\n newValue = updater((context.stateMap.get(signal$)?.val as T | undefined) ?? signal$.init);\n } else {\n newValue = val;\n }\n\n if (shouldDistinct(signal$, newValue, context)) {\n return;\n }\n\n const signalState = context.stateMap.get(signal$);\n if (!signalState) {\n context.stateMap.set(signal$, {\n val: newValue,\n epoch: 0,\n });\n return;\n }\n\n signalState.val = newValue;\n signalState.epoch += 1;\n propagationChanges(readComputed, signalState, context, mutation);\n\n return undefined;\n}\n\nexport function set<T, Args extends SetArgs<T, unknown[]>>(\n readComputed: ReadComputed,\n writable$: State<T> | Command<T, Args>,\n context: StoreContext,\n mutation: Mutation,\n ...args: Args\n): undefined | T {\n if ('read' in writable$) {\n return;\n }\n\n if ('write' in writable$) {\n return writable$.write(mutation.visitor, ...args);\n }\n\n innerSetState(readComputed, writable$, context, mutation, args[0]);\n return;\n}\n\n/**\n * Creates a mutation operation context. The Mutation remains unique throughout\n * the mutation cycle and can track side effects produced by this mutation operation\n *\n * This tracking is implemented by coloring the visitor function, so the Mutation\n * needs to wrap get & set functions and ensure that all get & set operations\n * executed in the mutation context come from the same Mutation\n *\n * @param context\n * @param get\n * @param set\n * @returns\n */\nexport function createMutation(context: StoreContext, get: StoreGet, set: StoreSet): Mutation {\n const mutation: Mutation = {\n dirtyMarkers: new Set(),\n pendingListeners: new Set(),\n visitor: {\n get: <T>(signal$: Signal<T>) => {\n return get(signal$, context, mutation);\n },\n set: <T, Args extends SetArgs<T, unknown[]>>(\n signal$: State<T> | Command<T, Args>,\n ...args: Args\n ): undefined | T => {\n return set<T, Args>(signal$, context, ...args);\n },\n },\n };\n\n return mutation;\n}\n","import type { State } from '../../../types/core/signal';\nimport type { StateState, StoreContext } from '../../../types/core/store';\n\nexport function readState<T>(state: State<T>, context: StoreContext): StateState<T> {\n const atomState = context.stateMap.get(state);\n if (!atomState) {\n const initState = {\n val: state.init,\n epoch: 0,\n };\n context.stateMap.set(state, initState);\n return initState as StateState<T>;\n }\n\n return atomState as StateState<T>;\n}\n","import type { Command, Computed, Signal } from '../../../types/core/signal';\nimport type {\n ComputedState,\n Mounted,\n Mutation,\n ReadSignal,\n SignalState,\n StoreContext,\n} from '../../../types/core/store';\nimport { withNotifyInterceptor, withSubInterceptor, withUnsubInterceptor } from '../interceptor';\nimport { isComputedState } from '../typing-util';\n\nfunction unmountComputedDependencies<T>(\n computed$: Computed<T>,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const [dep] of Array.from(computedState.dependencies)) {\n context.stateMap.get(dep)?.mounted?.readDepts.delete(computed$ as Computed<unknown>);\n unmount(dep, context, mutation);\n }\n}\n\nfunction mountComputedDependencies<T>(\n readSignal: ReadSignal,\n computed$: Computed<T>,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const [dep] of Array.from(computedState.dependencies)) {\n const mounted = mount(readSignal, dep, context, mutation);\n mounted.readDepts.add(computed$ as Computed<unknown>);\n }\n}\n\nfunction initMount<T>(readSignal: ReadSignal, signal$: Signal<T>, context: StoreContext, mutation?: Mutation): Mounted {\n context.interceptor?.mount?.(signal$);\n\n const signalState = readSignal(signal$, context, mutation);\n\n signalState.mounted = signalState.mounted ?? {\n listeners: new Set(),\n readDepts: new Set(),\n };\n\n if (isComputedState(signalState)) {\n mountComputedDependencies(readSignal, signal$ as Computed<unknown>, signalState, context, mutation);\n }\n\n return signalState.mounted;\n}\n\nexport function mount<T>(\n readSignal: ReadSignal,\n signal$: Signal<T>,\n context: StoreContext,\n mutation?: Mutation,\n): Mounted {\n const mounted = context.stateMap.get(signal$)?.mounted;\n if (mounted) {\n return mounted;\n }\n\n return initMount(readSignal, signal$, context, mutation);\n}\n\nfunction doUnmount<T>(\n signal$: Signal<T>,\n signalState: SignalState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): void {\n context.interceptor?.unmount?.(signal$);\n\n if (isComputedState(signalState)) {\n unmountComputedDependencies(signal$ as Computed<unknown>, signalState, context, mutation);\n }\n\n signalState.mounted = undefined;\n}\n\nexport function unmount<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): void {\n const signalState = context.stateMap.get(signal$);\n if (!signalState?.mounted || signalState.mounted.listeners.size || signalState.mounted.readDepts.size) {\n return;\n }\n\n doUnmount(signal$, signalState, context, mutation);\n}\n\nexport function subSingleSignal<T>(\n readSignal: ReadSignal,\n signal$: Signal<T>,\n callback$: Command<unknown, []>,\n context: StoreContext,\n signal: AbortSignal,\n) {\n withSubInterceptor(\n () => {\n const mounted = mount(readSignal, signal$, context);\n mounted.listeners.add(callback$);\n\n const unsub = () => {\n withUnsubInterceptor(\n () => {\n mounted.listeners.delete(callback$);\n\n if (mounted.readDepts.size === 0 && mounted.listeners.size === 0) {\n unmount(signal$, context);\n }\n },\n signal$,\n callback$,\n context.interceptor?.unsub,\n );\n };\n\n signal.addEventListener('abort', unsub, {\n once: true,\n });\n },\n signal$,\n callback$,\n context.interceptor?.sub,\n );\n}\n\nexport function notify(context: StoreContext, mutation: Mutation) {\n const pendingListeners = mutation.pendingListeners;\n mutation.pendingListeners = new Set();\n\n for (const listener of pendingListeners) {\n withNotifyInterceptor(\n () => {\n return listener.write(mutation.visitor);\n },\n listener,\n context.interceptor?.notify,\n );\n }\n}\n","import type { Command, Getter, Setter, Signal, State, Computed } from '../../../types/core/signal';\nimport type {\n StateMap,\n Store,\n StoreContext,\n StoreOptions,\n SubscribeOptions,\n ComputedState,\n Mounted,\n Mutation,\n ReadComputed,\n SignalState,\n StoreGet,\n StoreSet,\n SetArgs,\n} from '../../../types/core/store';\nimport { evaluateComputed, tryGetCached } from '../signal/computed';\nimport { withComputedInterceptor, withGetInterceptor, withSetInterceptor } from '../interceptor';\nimport { createMutation, set as innerSet } from './set';\nimport { readState } from '../signal/state';\nimport { canReadAsCompute } from '../typing-util';\nimport { mount as innerMount, unmount, subSingleSignal, notify } from './sub';\n\nconst readComputed: ReadComputed = <T>(\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> => {\n const cachedState = tryGetCached(readComputed, computed$, context, mutation);\n if (cachedState) {\n return cachedState;\n }\n\n mutation?.dirtyMarkers.delete(computed$.id);\n\n return withComputedInterceptor(\n () => {\n return evaluateComputed(readSignal, mount, unmount, computed$, context, mutation);\n },\n computed$,\n context.interceptor?.computed,\n );\n};\n\nfunction readSignal<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): SignalState<T> {\n if (canReadAsCompute(signal$)) {\n return readComputed(signal$, context, mutation);\n }\n\n return readState(signal$, context);\n}\n\nfunction mount<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): Mounted {\n return innerMount(readSignal, signal$, context, mutation);\n}\n\nfunction sub<T>(\n signals$: Signal<T>[] | Signal<T>,\n callback$: Command<unknown, []>,\n context: StoreContext,\n options?: SubscribeOptions,\n): () => void {\n if (Array.isArray(signals$) && signals$.length === 0) {\n return () => void 0;\n }\n\n const controller = new AbortController();\n const signal = options?.signal ? AbortSignal.any([controller.signal, options.signal]) : controller.signal;\n\n if (!Array.isArray(signals$)) {\n subSingleSignal(readSignal, signals$, callback$, context, signal);\n } else {\n signals$.forEach((atom) => {\n subSingleSignal(readSignal, atom, callback$, context, signal);\n });\n }\n\n return () => {\n controller.abort();\n };\n}\n\nconst get: StoreGet = (signal, context, mutation) => {\n return withGetInterceptor(\n () => {\n return readSignal(signal, context, mutation).val;\n },\n signal,\n context.interceptor?.get,\n );\n};\n\nconst set: StoreSet = <T, Args extends SetArgs<T, unknown[]>>(\n atom: State<T> | Command<T, Args>,\n context: StoreContext,\n ...args: Args\n): T | undefined => {\n return withSetInterceptor<T, Args>(\n () => {\n const mutation = createMutation(context, get, set);\n\n let ret: T | undefined;\n try {\n ret = innerSet<T, Args>(readComputed, atom, context, mutation, ...args);\n } finally {\n notify(context, mutation);\n }\n return ret;\n },\n atom,\n context.interceptor?.set,\n ...args,\n );\n};\n\nexport class StoreImpl implements Store {\n protected readonly stateMap: StateMap = new WeakMap();\n protected readonly context: StoreContext;\n\n constructor(protected readonly options?: StoreOptions) {\n this.context = {\n stateMap: this.stateMap,\n interceptor: this.options?.interceptor,\n };\n }\n\n get: Getter = <T>(atom: Signal<T>): T => {\n return get(atom, this.context);\n };\n\n set: Setter = <T, Args extends SetArgs<T, unknown[]>>(\n atom: State<T> | Command<T, Args>,\n ...args: Args\n ): undefined | T => {\n return set<T, Args>(atom, this.context, ...args);\n };\n\n sub(\n targets$: Signal<unknown>[] | Signal<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n return sub(targets$, cb$, this.context, options);\n }\n}\n\nexport function createStore(): Store {\n return new StoreImpl();\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","id","prefix","debugLabel","label","concat","String","state","init","options","ret","toString","computed","read","command","write","withSetInterceptor","fn","writable$","interceptor","result","called","wrappedFn","data","_len","arguments","length","args","Array","_key","apply","Error","withGetInterceptor","signal","withComputedInterceptor","val","withGeValInterceptor","withSubInterceptor","callback$","undefined","withUnsubInterceptor","withNotifyInterceptor","canReadAsCompute","atom","isComputedState","currentValue","context","_context$stateMap$get","stateMap","get","shouldDistinct","value","checkEpoch","readComputed","computedState","mutation","_iterator","_createForOfIteratorHelper","dependencies","entries","_step","s","n","done","_step$value","_slicedToArray","dep","epoch","depEpoch","err","e","f","tryGetCached","computed$","signalState","dirtyMarkers","has","mounted","wrapGet","readSignal","mount","callerComputed$","callerState","readDeps","Map","dep$","depState","set","callerMounted","readDepts","add","getOrInitComputedState","cleanupMissingDependencies","unmount","lastDeps","currDeps","_iterator2","keys","_step2","key","_depState$mounted","evaluateComputed","_wrapGet","_wrapGet2","_get","evalVal","depAtom","_context$interceptor","_computedState$abortC","_computed$$debugLabel","abortController","abort","AbortController","pushDirtyMarkers","_signalState$mounted$","_signalState$mounted","queue","from","nextQueue","push","pullEvaluate","_signalState$mounted$2","_signalState$mounted2","_signalState$mounted$3","_signalState$mounted3","_signalState$mounted$4","_signalState$mounted4","_iterator3","listeners","_step3","listener","pendingListeners","oldValues","_iterator4","_step4","_context$stateMap$get2","oldValue","_i","_Array$from","_iterator5","_step5","_computedState$mounte","_computedState$mounte2","_iterator6","_step6","_i2","_Array$from2","propagationChanges","innerSetState","signal$","newValue","_ref","_context$stateMap$get3","updater","visitor","createMutation","Set","_len2","_key2","readState","atomState","initState","unmountComputedDependencies","_Array$from$_i","mountComputedDependencies","_Array$from2$_i","initMount","_context$interceptor$","call","doUnmount","_context$interceptor2","_context$interceptor3","size","subSingleSignal","_context$interceptor5","unsub","_context$interceptor4","addEventListener","once","sub","notify","_loop","_context$interceptor6","cachedState","innerMount","signals$","isArray","controller","AbortSignal","any","forEach","innerSet","StoreImpl","_this","_this$options","_classCallCheck","_defineProperty","WeakMap","_createClass","targets$","cb$","createStore","defaultStore","getDefaultStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/core/signal/factory.ts","../../src/core/interceptor.ts","../../src/core/typing-util.ts","../../src/core/signal/signal.ts","../../src/core/signal/computed.ts","../../src/core/store/set.ts","../../src/core/signal/state.ts","../../src/core/store/sub.ts","../../src/core/store/store.ts"],"sourcesContent":["import type { Computed, Command, Read, State, Write } from '../../../types/core/signal';\n\ninterface Options {\n debugLabel?: string;\n}\n\nlet globalId = 0;\n\nconst generateToString = (id: number, prefix: string, debugLabel?: string) => {\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 id = globalId++;\n const ret: State<T> = {\n id,\n init,\n toString: generateToString(id, 'S', 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 id = globalId++;\n const ret: Computed<T> = {\n id,\n read,\n toString: generateToString(id, 'CPT', options?.debugLabel),\n };\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 id = globalId++;\n const ret: Command<T, Args> = {\n id,\n write,\n toString: generateToString(id, 'CMD', options?.debugLabel),\n };\n if (options?.debugLabel) {\n ret.debugLabel = options.debugLabel;\n }\n return ret;\n}\n","import type { Command, Computed, Signal, State } from '../../types/core/signal';\nimport type {\n CallbackFunc,\n ComputedState,\n InterceptorComputed,\n InterceptorGet,\n InterceptorNotify,\n InterceptorSet,\n InterceptorSub,\n InterceptorUnsub,\n SetArgs,\n} from '../../types/core/store';\n\ntype DataWithCalledState<T> =\n | {\n called: false;\n }\n | {\n called: true;\n data: T;\n };\n\nexport function withSetInterceptor<T, Args extends SetArgs<T, unknown[]>>(\n fn: () => T | undefined,\n writable$: State<T> | Command<T, Args>,\n interceptor: InterceptorSet | undefined,\n ...args: Args\n): T | undefined {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T | undefined>;\n const wrappedFn = () => {\n result = { called: true, data: fn() };\n return result.data;\n };\n if ('write' in writable$) {\n interceptor(writable$, wrappedFn, ...args);\n } else {\n interceptor(writable$, wrappedFn, args[0]);\n }\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withGetInterceptor<T>(fn: () => T, signal: Signal<T>, interceptor?: InterceptorGet): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withComputedInterceptor<T>(\n fn: () => ComputedState<T>,\n signal: Computed<T>,\n interceptor?: InterceptorComputed,\n): ComputedState<T> {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<ComputedState<T>>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\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\nexport function withGeValInterceptor<T>(fn: () => T, signal: Signal<T>, interceptor?: InterceptorGet): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(signal, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n\nexport function withSubInterceptor<T>(\n fn: () => void,\n signal: Signal<T>,\n callback$: Command<unknown, []>,\n interceptor?: InterceptorSub,\n) {\n if (!interceptor) {\n fn();\n return;\n }\n\n let result = { called: false } as DataWithCalledState<void>;\n\n interceptor(signal, callback$, () => {\n result = { called: true, data: undefined };\n fn();\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n}\n\nexport function withUnsubInterceptor<T>(\n fn: () => void,\n signal: Signal<T>,\n callback$: Command<unknown, []>,\n interceptor?: InterceptorUnsub,\n): void {\n if (!interceptor) {\n fn();\n return;\n }\n\n let result = { called: false } as DataWithCalledState<void>;\n\n interceptor(signal, callback$, () => {\n result = { called: true, data: undefined };\n fn();\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n}\n\nexport function withNotifyInterceptor<T>(fn: () => T, callback$: CallbackFunc<T>, interceptor?: InterceptorNotify): T {\n if (!interceptor) {\n return fn();\n }\n\n let result = { called: false } as DataWithCalledState<T>;\n\n interceptor(callback$, () => {\n result = { called: true, data: fn() };\n return result.data;\n });\n\n if (!result.called) {\n throw new Error('interceptor must call fn sync');\n }\n\n return result.data;\n}\n","import type { Computed, Signal } from '../../types/core/signal';\nimport type { ComputedState, SignalState } from '../../types/core/store';\n\nexport function canReadAsCompute<T>(atom: Signal<T>): atom is Computed<T> {\n return 'read' in atom;\n}\n\nexport function isComputedState<T>(state: SignalState<T>): state is ComputedState<T> {\n return 'dependencies' in state;\n}\n","import type { Signal } from '../../../types/core/signal';\nimport type { StoreContext } from '../../../types/core/store';\n\nexport function currentValue<T>(signal: Signal<T>, context: StoreContext): T | undefined {\n return context.stateMap.get(signal)?.val as T | undefined;\n}\n\nexport function shouldDistinct<T>(signal: Signal<T>, value: T, context: StoreContext) {\n return currentValue(signal, context) === value;\n}\n","import type { Computed, Getter, Signal } from '../../../types/core/signal';\nimport type {\n ComputedState,\n Mount,\n Mutation,\n ReadComputed,\n ReadSignal,\n StoreContext,\n Unmount,\n} from '../../../types/core/store';\nimport { withGeValInterceptor } from '../interceptor';\nimport { canReadAsCompute } from '../typing-util';\nimport { shouldDistinct } from './signal';\n\nfunction checkEpoch<T>(\n readComputed: ReadComputed,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): boolean {\n for (const [dep, epoch] of computedState.dependencies.entries()) {\n const depEpoch = canReadAsCompute(dep)\n ? readComputed(dep, context, mutation).epoch\n : context.stateMap.get(dep)?.epoch;\n\n if (depEpoch !== epoch) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function tryGetCached<T>(\n readComputed: ReadComputed,\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> | undefined {\n const signalState = context.stateMap.get(computed$) as ComputedState<T> | undefined;\n if (!signalState) {\n return undefined;\n }\n\n // If a computed is marked as potentially dirty, we should perform a\n // thorough epoch check. Alternatively, we can check the mounted state since\n // a mounted computed is always re-evaluated immediately.\n const mayDirty = mutation?.potentialDirtyIds.has(computed$.id);\n if (!mayDirty && signalState.mounted) {\n return signalState;\n }\n\n if (checkEpoch(readComputed, signalState, context, mutation)) {\n if (mayDirty) {\n mutation?.potentialDirtyIds.delete(computed$.id);\n }\n return signalState;\n }\n\n return undefined;\n}\n\nfunction wrapGet<T>(\n readSignal: ReadSignal,\n mount: Mount,\n callerComputed$: Computed<T>,\n callerState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): [Getter, Map<Signal<unknown>, number>] {\n const readDeps = new Map<Signal<unknown>, number>();\n\n return [\n (dep$) => {\n const depState = readSignal(dep$, context, mutation);\n\n if (callerState.dependencies === readDeps) {\n readDeps.set(dep$, depState.epoch);\n\n const callerMounted = !!callerState.mounted;\n if (callerMounted && !depState.mounted) {\n mount(dep$, context, mutation).readDepts.add(callerComputed$);\n } else if (callerMounted && depState.mounted) {\n depState.mounted.readDepts.add(callerComputed$);\n }\n }\n\n return depState.val;\n },\n readDeps,\n ];\n}\n\nfunction getOrInitComputedState<T>(computed$: Computed<T>, context: StoreContext): ComputedState<T> {\n let computedState: ComputedState<T> | undefined = context.stateMap.get(computed$) as ComputedState<T> | undefined;\n if (!computedState) {\n computedState = {\n dependencies: new Map<Signal<unknown>, number>(),\n epoch: -1,\n } as ComputedState<T>;\n context.stateMap.set(computed$, computedState);\n }\n\n return computedState;\n}\n\nfunction cleanupMissingDependencies<T>(\n unmount: Unmount,\n computed$: Computed<T>,\n lastDeps: Map<Signal<unknown>, number>,\n currDeps: Map<Signal<unknown>, number>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const key of lastDeps.keys()) {\n if (!currDeps.has(key)) {\n const depState = context.stateMap.get(key);\n depState?.mounted?.readDepts.delete(computed$);\n unmount(key, context, mutation);\n }\n }\n}\n\nexport function evaluateComputed<T>(\n readSignal: ReadSignal,\n mount: Mount,\n unmount: Unmount,\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> {\n const computedState = getOrInitComputedState(computed$, context);\n\n const lastDeps = computedState.dependencies;\n\n const [_get, dependencies] = wrapGet(readSignal, mount, computed$, computedState, context, mutation);\n computedState.dependencies = dependencies;\n\n const evalVal = computed$.read(\n function <U>(depAtom: Signal<U>) {\n return withGeValInterceptor(() => _get(depAtom), depAtom, context.interceptor?.get);\n },\n {\n get signal() {\n computedState.abortController?.abort(`abort ${computed$.debugLabel ?? 'anonymous'} atom`);\n computedState.abortController = new AbortController();\n return computedState.abortController.signal;\n },\n },\n );\n mutation?.potentialDirtyIds.delete(computed$.id);\n\n cleanupMissingDependencies(unmount, computed$, lastDeps, dependencies, context, mutation);\n\n if (!shouldDistinct(computed$, evalVal, context)) {\n computedState.val = evalVal;\n computedState.epoch += 1;\n }\n\n return computedState;\n}\n","import type { Command, State, Computed, Signal, Updater, StateArg } from '../../../types/core/signal';\nimport type {\n Mutation,\n ReadComputed,\n StoreContext,\n StateState,\n StoreGet,\n StoreSet,\n SetArgs,\n} from '../../../types/core/store';\nimport { shouldDistinct } from '../signal/signal';\n\n// Dirty markers are just 'potentially' dirty because we don't know if\n// dependencies result will change. Pushing a computed to dirty markers doesn't\n// mean it will re-evaluate immediately, just marks it for epoch checking in\n// #tryGetCached. So the propagation is greedy to mark all dependants as dirty\nfunction pushDirtyMarkers(signalState: StateState<unknown>, context: StoreContext, mutation: Mutation) {\n let queue: Computed<unknown>[] = Array.from(signalState.mounted?.readDepts ?? []);\n\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n mutation.potentialDirtyIds.add(computed$.id);\n\n const computedState = context.stateMap.get(computed$);\n // This computed$ is read from other computed$'s readDepts, so it must not be null and must have mounted\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n for (const dep of computedState!.mounted!.readDepts) {\n nextQueue.push(dep);\n }\n }\n\n queue = nextQueue;\n }\n}\n\nfunction pullEvaluate(\n readComputed: ReadComputed,\n signalState: StateState<unknown>,\n context: StoreContext,\n mutation: Mutation,\n) {\n let queue: Computed<unknown>[] = Array.from(signalState.mounted?.readDepts ?? []);\n\n for (const listener of signalState.mounted?.listeners ?? []) {\n mutation.pendingListeners.add(listener);\n }\n\n const oldValues = new Map<Computed<unknown>, unknown>();\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n const oldValue = context.stateMap.get(computed$)?.val;\n oldValues.set(computed$, oldValue);\n\n const readDepts = context.stateMap.get(computed$)?.mounted?.readDepts;\n if (readDepts) {\n for (const dep of Array.from(readDepts)) {\n nextQueue.push(dep);\n }\n }\n }\n queue = nextQueue;\n }\n\n queue = Array.from(signalState.mounted?.readDepts ?? []);\n\n while (queue.length > 0) {\n const nextQueue: Computed<unknown>[] = [];\n for (const computed$ of queue) {\n const computedState = readComputed(computed$, context, mutation);\n if (oldValues.has(computed$) && oldValues.get(computed$) === computedState.val) {\n continue;\n }\n\n if (computedState.mounted?.listeners) {\n for (const listener of computedState.mounted.listeners) {\n mutation.pendingListeners.add(listener);\n }\n }\n\n const readDepts = computedState.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\nfunction propagationChanges(\n readComputed: ReadComputed,\n signalState: StateState<unknown>,\n context: StoreContext,\n mutation: Mutation,\n) {\n pushDirtyMarkers(signalState, context, mutation);\n pullEvaluate(readComputed, signalState, context, mutation);\n}\n\nfunction innerSetState<T>(\n readComputed: ReadComputed,\n signal$: State<T>,\n context: StoreContext,\n mutation: Mutation,\n val: StateArg<T>,\n) {\n let newValue: T;\n if (typeof val === 'function') {\n const updater = val as Updater<T>;\n newValue = updater((context.stateMap.get(signal$)?.val as T | undefined) ?? signal$.init);\n } else {\n newValue = val;\n }\n\n if (shouldDistinct(signal$, newValue, context)) {\n return;\n }\n\n const signalState = context.stateMap.get(signal$);\n if (!signalState) {\n context.stateMap.set(signal$, {\n val: newValue,\n epoch: 0,\n });\n return;\n }\n\n signalState.val = newValue;\n signalState.epoch += 1;\n propagationChanges(readComputed, signalState, context, mutation);\n\n return undefined;\n}\n\nexport function set<T, Args extends SetArgs<T, unknown[]>>(\n readComputed: ReadComputed,\n writable$: State<T> | Command<T, Args>,\n context: StoreContext,\n mutation: Mutation,\n ...args: Args\n): undefined | T {\n if ('read' in writable$) {\n return;\n }\n\n if ('write' in writable$) {\n return writable$.write(mutation.visitor, ...args);\n }\n\n innerSetState(readComputed, writable$, context, mutation, args[0]);\n return;\n}\n\n/**\n * Creates a mutation operation context. The Mutation remains unique throughout\n * the mutation cycle and can track side effects produced by this mutation operation\n *\n * This tracking is implemented by coloring the visitor function, so the Mutation\n * needs to wrap get & set functions and ensure that all get & set operations\n * executed in the mutation context come from the same Mutation\n *\n * @param context\n * @param get\n * @param set\n * @returns\n */\nexport function createMutation(context: StoreContext, get: StoreGet, set: StoreSet): Mutation {\n const mutation: Mutation = {\n potentialDirtyIds: new Set(),\n pendingListeners: new Set(),\n visitor: {\n get: <T>(signal$: Signal<T>) => {\n return get(signal$, context, mutation);\n },\n set: <T, Args extends SetArgs<T, unknown[]>>(\n signal$: State<T> | Command<T, Args>,\n ...args: Args\n ): undefined | T => {\n return set<T, Args>(signal$, context, ...args);\n },\n },\n };\n\n return mutation;\n}\n","import type { State } from '../../../types/core/signal';\nimport type { StateState, StoreContext } from '../../../types/core/store';\n\nexport function readState<T>(state: State<T>, context: StoreContext): StateState<T> {\n const atomState = context.stateMap.get(state);\n if (!atomState) {\n const initState = {\n val: state.init,\n epoch: 0,\n };\n context.stateMap.set(state, initState);\n return initState as StateState<T>;\n }\n\n return atomState as StateState<T>;\n}\n","import type { Command, Computed, Signal } from '../../../types/core/signal';\nimport type {\n ComputedState,\n Mounted,\n Mutation,\n ReadSignal,\n SignalState,\n StoreContext,\n} from '../../../types/core/store';\nimport { withNotifyInterceptor, withSubInterceptor, withUnsubInterceptor } from '../interceptor';\nimport { isComputedState } from '../typing-util';\n\nfunction unmountComputedDependencies<T>(\n computed$: Computed<T>,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const [dep] of Array.from(computedState.dependencies)) {\n context.stateMap.get(dep)?.mounted?.readDepts.delete(computed$ as Computed<unknown>);\n unmount(dep, context, mutation);\n }\n}\n\nfunction mountComputedDependencies<T>(\n readSignal: ReadSignal,\n computed$: Computed<T>,\n computedState: ComputedState<T>,\n context: StoreContext,\n mutation?: Mutation,\n) {\n for (const [dep] of Array.from(computedState.dependencies)) {\n const mounted = mount(readSignal, dep, context, mutation);\n mounted.readDepts.add(computed$ as Computed<unknown>);\n }\n}\n\nfunction initMount<T>(readSignal: ReadSignal, signal$: Signal<T>, context: StoreContext, mutation?: Mutation): Mounted {\n context.interceptor?.mount?.(signal$);\n\n const signalState = readSignal(signal$, context, mutation);\n\n signalState.mounted = signalState.mounted ?? {\n listeners: new Set(),\n readDepts: new Set(),\n };\n\n if (isComputedState(signalState)) {\n mountComputedDependencies(readSignal, signal$ as Computed<unknown>, signalState, context, mutation);\n }\n\n return signalState.mounted;\n}\n\nexport function mount<T>(\n readSignal: ReadSignal,\n signal$: Signal<T>,\n context: StoreContext,\n mutation?: Mutation,\n): Mounted {\n const mounted = context.stateMap.get(signal$)?.mounted;\n if (mounted) {\n return mounted;\n }\n\n return initMount(readSignal, signal$, context, mutation);\n}\n\nfunction doUnmount<T>(\n signal$: Signal<T>,\n signalState: SignalState<T>,\n context: StoreContext,\n mutation?: Mutation,\n): void {\n context.interceptor?.unmount?.(signal$);\n\n if (isComputedState(signalState)) {\n unmountComputedDependencies(signal$ as Computed<unknown>, signalState, context, mutation);\n }\n\n signalState.mounted = undefined;\n}\n\nexport function unmount<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): void {\n const signalState = context.stateMap.get(signal$);\n if (!signalState?.mounted || signalState.mounted.listeners.size || signalState.mounted.readDepts.size) {\n return;\n }\n\n doUnmount(signal$, signalState, context, mutation);\n}\n\nexport function subSingleSignal<T>(\n readSignal: ReadSignal,\n signal$: Signal<T>,\n callback$: Command<unknown, []>,\n context: StoreContext,\n signal: AbortSignal,\n) {\n withSubInterceptor(\n () => {\n const mounted = mount(readSignal, signal$, context);\n mounted.listeners.add(callback$);\n\n const unsub = () => {\n withUnsubInterceptor(\n () => {\n mounted.listeners.delete(callback$);\n\n if (mounted.readDepts.size === 0 && mounted.listeners.size === 0) {\n unmount(signal$, context);\n }\n },\n signal$,\n callback$,\n context.interceptor?.unsub,\n );\n };\n\n signal.addEventListener('abort', unsub, {\n once: true,\n });\n },\n signal$,\n callback$,\n context.interceptor?.sub,\n );\n}\n\nexport function notify(context: StoreContext, mutation: Mutation) {\n const pendingListeners = mutation.pendingListeners;\n mutation.pendingListeners = new Set();\n\n for (const listener of pendingListeners) {\n withNotifyInterceptor(\n () => {\n return listener.write(mutation.visitor);\n },\n listener,\n context.interceptor?.notify,\n );\n }\n}\n","import type { Command, Getter, Setter, Signal, State, Computed } from '../../../types/core/signal';\nimport type {\n StateMap,\n Store,\n StoreContext,\n StoreOptions,\n SubscribeOptions,\n ComputedState,\n Mounted,\n Mutation,\n ReadComputed,\n SignalState,\n StoreGet,\n StoreSet,\n SetArgs,\n} from '../../../types/core/store';\nimport { evaluateComputed, tryGetCached } from '../signal/computed';\nimport { withComputedInterceptor, withGetInterceptor, withSetInterceptor } from '../interceptor';\nimport { createMutation, set as innerSet } from './set';\nimport { readState } from '../signal/state';\nimport { canReadAsCompute } from '../typing-util';\nimport { mount as innerMount, unmount, subSingleSignal, notify } from './sub';\n\nconst readComputed: ReadComputed = <T>(\n computed$: Computed<T>,\n context: StoreContext,\n mutation?: Mutation,\n): ComputedState<T> => {\n const cachedState = tryGetCached(readComputed, computed$, context, mutation);\n if (cachedState) {\n return cachedState;\n }\n\n return withComputedInterceptor(\n () => {\n return evaluateComputed(readSignal, mount, unmount, computed$, context, mutation);\n },\n computed$,\n context.interceptor?.computed,\n );\n};\n\nfunction readSignal<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): SignalState<T> {\n if (canReadAsCompute(signal$)) {\n return readComputed(signal$, context, mutation);\n }\n\n return readState(signal$, context);\n}\n\nfunction mount<T>(signal$: Signal<T>, context: StoreContext, mutation?: Mutation): Mounted {\n return innerMount(readSignal, signal$, context, mutation);\n}\n\nfunction sub<T>(\n signals$: Signal<T>[] | Signal<T>,\n callback$: Command<unknown, []>,\n context: StoreContext,\n options?: SubscribeOptions,\n): () => void {\n if (Array.isArray(signals$) && signals$.length === 0) {\n return () => void 0;\n }\n\n const controller = new AbortController();\n const signal = options?.signal ? AbortSignal.any([controller.signal, options.signal]) : controller.signal;\n\n if (!Array.isArray(signals$)) {\n subSingleSignal(readSignal, signals$, callback$, context, signal);\n } else {\n signals$.forEach((atom) => {\n subSingleSignal(readSignal, atom, callback$, context, signal);\n });\n }\n\n return () => {\n controller.abort();\n };\n}\n\nconst get: StoreGet = (signal, context, mutation) => {\n return withGetInterceptor(\n () => {\n return readSignal(signal, context, mutation).val;\n },\n signal,\n context.interceptor?.get,\n );\n};\n\nconst set: StoreSet = <T, Args extends SetArgs<T, unknown[]>>(\n atom: State<T> | Command<T, Args>,\n context: StoreContext,\n ...args: Args\n): T | undefined => {\n return withSetInterceptor<T, Args>(\n () => {\n const mutation = createMutation(context, get, set);\n\n let ret: T | undefined;\n try {\n ret = innerSet<T, Args>(readComputed, atom, context, mutation, ...args);\n } finally {\n notify(context, mutation);\n }\n return ret;\n },\n atom,\n context.interceptor?.set,\n ...args,\n );\n};\n\nexport class StoreImpl implements Store {\n protected readonly stateMap: StateMap = new WeakMap();\n protected readonly context: StoreContext;\n\n constructor(protected readonly options?: StoreOptions) {\n this.context = {\n stateMap: this.stateMap,\n interceptor: this.options?.interceptor,\n };\n }\n\n get: Getter = <T>(atom: Signal<T>): T => {\n return get(atom, this.context);\n };\n\n set: Setter = <T, Args extends SetArgs<T, unknown[]>>(\n atom: State<T> | Command<T, Args>,\n ...args: Args\n ): undefined | T => {\n return set<T, Args>(atom, this.context, ...args);\n };\n\n sub(\n targets$: Signal<unknown>[] | Signal<unknown>,\n cb$: Command<unknown, unknown[]>,\n options?: SubscribeOptions,\n ): () => void {\n return sub(targets$, cb$, this.context, options);\n }\n}\n\nexport function createStore(): Store {\n return new StoreImpl();\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","id","prefix","debugLabel","label","concat","String","state","init","options","ret","toString","computed","read","command","write","withSetInterceptor","fn","writable$","interceptor","result","called","wrappedFn","data","_len","arguments","length","args","Array","_key","apply","Error","withGetInterceptor","signal","withComputedInterceptor","val","withGeValInterceptor","withSubInterceptor","callback$","undefined","withUnsubInterceptor","withNotifyInterceptor","canReadAsCompute","atom","isComputedState","currentValue","context","_context$stateMap$get","stateMap","get","shouldDistinct","value","checkEpoch","readComputed","computedState","mutation","_iterator","_createForOfIteratorHelper","dependencies","entries","_step","s","n","done","_step$value","_slicedToArray","dep","epoch","depEpoch","err","e","f","tryGetCached","computed$","signalState","mayDirty","potentialDirtyIds","has","mounted","wrapGet","readSignal","mount","callerComputed$","callerState","readDeps","Map","dep$","depState","set","callerMounted","readDepts","add","getOrInitComputedState","cleanupMissingDependencies","unmount","lastDeps","currDeps","_iterator2","keys","_step2","key","_depState$mounted","evaluateComputed","_wrapGet","_wrapGet2","_get","evalVal","depAtom","_context$interceptor","_computedState$abortC","_computed$$debugLabel","abortController","abort","AbortController","pushDirtyMarkers","_signalState$mounted$","_signalState$mounted","queue","from","nextQueue","push","pullEvaluate","_signalState$mounted$2","_signalState$mounted2","_signalState$mounted$3","_signalState$mounted3","_signalState$mounted$4","_signalState$mounted4","_iterator3","listeners","_step3","listener","pendingListeners","oldValues","_iterator4","_step4","_context$stateMap$get2","oldValue","_i","_Array$from","_iterator5","_step5","_computedState$mounte","_computedState$mounte2","_iterator6","_step6","_i2","_Array$from2","propagationChanges","innerSetState","signal$","newValue","_ref","_context$stateMap$get3","updater","visitor","createMutation","Set","_len2","_key2","readState","atomState","initState","unmountComputedDependencies","_Array$from$_i","mountComputedDependencies","_Array$from2$_i","initMount","_context$interceptor$","call","doUnmount","_context$interceptor2","_context$interceptor3","size","subSingleSignal","_context$interceptor5","unsub","_context$interceptor4","addEventListener","once","sub","notify","_loop","_context$interceptor6","cachedState","innerMount","signals$","isArray","controller","AbortSignal","any","forEach","innerSet","StoreImpl","_this","_this$options","_classCallCheck","_defineProperty","WeakMap","_createClass","targets$","cb$","createStore","defaultStore","getDefaultStore"],"mappings":"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"}
|
package/core/index.js
CHANGED
|
@@ -358,13 +358,18 @@ function tryGetCached(readComputed, computed$, context, mutation) {
|
|
|
358
358
|
if (!signalState) {
|
|
359
359
|
return undefined;
|
|
360
360
|
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
361
|
+
|
|
362
|
+
// If a computed is marked as potentially dirty, we should perform a
|
|
363
|
+
// thorough epoch check. Alternatively, we can check the mounted state since
|
|
364
|
+
// a mounted computed is always re-evaluated immediately.
|
|
365
|
+
var mayDirty = mutation === null || mutation === void 0 ? void 0 : mutation.potentialDirtyIds.has(computed$.id);
|
|
366
|
+
if (!mayDirty && signalState.mounted) {
|
|
365
367
|
return signalState;
|
|
366
368
|
}
|
|
367
369
|
if (checkEpoch(readComputed, signalState, context, mutation)) {
|
|
370
|
+
if (mayDirty) {
|
|
371
|
+
mutation === null || mutation === void 0 || mutation.potentialDirtyIds["delete"](computed$.id);
|
|
372
|
+
}
|
|
368
373
|
return signalState;
|
|
369
374
|
}
|
|
370
375
|
return undefined;
|
|
@@ -436,6 +441,7 @@ function evaluateComputed(readSignal, mount, unmount, computed$, context, mutati
|
|
|
436
441
|
return computedState.abortController.signal;
|
|
437
442
|
}
|
|
438
443
|
});
|
|
444
|
+
mutation === null || mutation === void 0 || mutation.potentialDirtyIds["delete"](computed$.id);
|
|
439
445
|
cleanupMissingDependencies(unmount, computed$, lastDeps, dependencies, context, mutation);
|
|
440
446
|
if (!shouldDistinct(computed$, evalVal, context)) {
|
|
441
447
|
computedState.val = evalVal;
|
|
@@ -444,6 +450,10 @@ function evaluateComputed(readSignal, mount, unmount, computed$, context, mutati
|
|
|
444
450
|
return computedState;
|
|
445
451
|
}
|
|
446
452
|
|
|
453
|
+
// Dirty markers are just 'potentially' dirty because we don't know if
|
|
454
|
+
// dependencies result will change. Pushing a computed to dirty markers doesn't
|
|
455
|
+
// mean it will re-evaluate immediately, just marks it for epoch checking in
|
|
456
|
+
// #tryGetCached. So the propagation is greedy to mark all dependants as dirty
|
|
447
457
|
function pushDirtyMarkers(signalState, context, mutation) {
|
|
448
458
|
var _signalState$mounted$, _signalState$mounted;
|
|
449
459
|
var queue = Array.from((_signalState$mounted$ = (_signalState$mounted = signalState.mounted) === null || _signalState$mounted === void 0 ? void 0 : _signalState$mounted.readDepts) !== null && _signalState$mounted$ !== void 0 ? _signalState$mounted$ : []);
|
|
@@ -454,7 +464,7 @@ function pushDirtyMarkers(signalState, context, mutation) {
|
|
|
454
464
|
try {
|
|
455
465
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
456
466
|
var computed$ = _step.value;
|
|
457
|
-
mutation.
|
|
467
|
+
mutation.potentialDirtyIds.add(computed$.id);
|
|
458
468
|
var computedState = context.stateMap.get(computed$);
|
|
459
469
|
// This computed$ is read from other computed$'s readDepts, so it must not be null and must have mounted
|
|
460
470
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -621,7 +631,7 @@ function set(readComputed, writable$, context, mutation) {
|
|
|
621
631
|
*/
|
|
622
632
|
function createMutation(context, _get, _set) {
|
|
623
633
|
var mutation = {
|
|
624
|
-
|
|
634
|
+
potentialDirtyIds: new Set(),
|
|
625
635
|
pendingListeners: new Set(),
|
|
626
636
|
visitor: {
|
|
627
637
|
get: function get(signal$) {
|
|
@@ -752,7 +762,6 @@ var _readComputed = function readComputed(computed$, context, mutation) {
|
|
|
752
762
|
if (cachedState) {
|
|
753
763
|
return cachedState;
|
|
754
764
|
}
|
|
755
|
-
mutation === null || mutation === void 0 || mutation.dirtyMarkers["delete"](computed$.id);
|
|
756
765
|
return withComputedInterceptor(function () {
|
|
757
766
|
return evaluateComputed(readSignal, mount, unmount, computed$, context, mutation);
|
|
758
767
|
}, computed$, (_context$interceptor = context.interceptor) === null || _context$interceptor === void 0 ? void 0 : _context$interceptor.computed);
|