@mmstack/primitives 21.10.4 → 21.11.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmstack/primitives",
3
- "version": "21.10.4",
3
+ "version": "21.11.1",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "signals",
@@ -1244,6 +1244,15 @@ declare function nestedEffect(effectFn: (registerCleanup: EffectCleanupRegisterF
1244
1244
  bindToFrame?: (parent: Frame | null) => Frame | null;
1245
1245
  }): EffectRef;
1246
1246
 
1247
+ /**
1248
+ * Options for {@link keepPrevious}: the signal options of the held value, plus
1249
+ * `fallback` — what to yield while there is nothing to hold yet (the source has
1250
+ * never been defined). Once a defined value has been seen the fallback is never
1251
+ * yielded again; the previous value is.
1252
+ */
1253
+ type KeepPreviousOptions<T> = CreateSignalOptions<T> & {
1254
+ readonly fallback?: T;
1255
+ };
1247
1256
  /**
1248
1257
  * Wraps a signal so it HOLDS its last defined value whenever the source becomes
1249
1258
  * `undefined`, yielding that value instead of the gap. This is the foundation of
@@ -1257,10 +1266,10 @@ declare function nestedEffect(effectFn: (registerCleanup: EffectCleanupRegisterF
1257
1266
  * so it stays a drop-in replacement. (Angular's `resource` is itself linkedSignal-backed
1258
1267
  * and exposes a writable `value` for optimistic updates; this preserves that.)
1259
1268
  */
1260
- declare function keepPrevious<T>(value: MutableSignal<T>, opt?: CreateSignalOptions<T>): MutableSignal<T>;
1261
- declare function keepPrevious<T, U>(value: DerivedSignal<T, U>, opt?: CreateSignalOptions<U>): DerivedSignal<T, U>;
1262
- declare function keepPrevious<T>(value: WritableSignal<T>, opt?: CreateSignalOptions<T>): WritableSignal<T>;
1263
- declare function keepPrevious<T>(value: Signal<T>, opt?: CreateSignalOptions<T>): Signal<T>;
1269
+ declare function keepPrevious<T>(value: MutableSignal<T>, opt?: KeepPreviousOptions<T>): MutableSignal<T>;
1270
+ declare function keepPrevious<T, U>(value: DerivedSignal<T, U>, opt?: KeepPreviousOptions<U>): DerivedSignal<T, U>;
1271
+ declare function keepPrevious<T>(value: WritableSignal<T>, opt?: KeepPreviousOptions<T>): WritableSignal<T>;
1272
+ declare function keepPrevious<T>(value: Signal<T>, opt?: KeepPreviousOptions<T>): Signal<T>;
1264
1273
 
1265
1274
  /**
1266
1275
  * Reactively maps items from a source array to a new array, creating stable signals for each item.
@@ -2848,7 +2857,10 @@ type Key$2 = string | number;
2848
2857
  /**
2849
2858
  * One structural operation. `set` on a key that did not previously exist carries NO `prev`
2850
2859
  * property (an absent key is not the same as a key holding `undefined` — the merge3 lesson),
2851
- * which is what lets {@link invertBatch} invert an add into a delete.
2860
+ * which is what lets {@link invertBatch} invert an add into a delete. A JSON text transport
2861
+ * collapses an own `prev: undefined` into an absent `prev` (structured-clone and in-process
2862
+ * channels preserve the distinction) — wire-serialized batches were already not invertible,
2863
+ * see {@link invertBatch}.
2852
2864
  *
2853
2865
  * `clear` is a sync-layer intent, not a value change: it retires a per-path register (the
2854
2866
  * observed-remove half of a subtree replace) and contributes NOTHING to a value: {@link applyOps}
@@ -3408,7 +3420,8 @@ type SyncOp = StoreOp & {
3408
3420
  * The wire/journal record. `writer` is an opaque principal pseudonym (natural identity never
3409
3421
  * enters the envelope); `origin` identifies the emitting replica. All ops in one envelope share
3410
3422
  * the envelope stamp, and an envelope carries at most one op per path, so `(origin, hlc)` is a
3411
- * unique dot per path register.
3423
+ * unique dot per path register. Op VALUES are wire data under the JSON-fidelity law — see
3424
+ * {@link wireValueViolation}; emission lints them in dev mode.
3412
3425
  */
3413
3426
  type OpEnvelope = {
3414
3427
  readonly proto: number;
@@ -3541,6 +3554,11 @@ type RegisterCheckpoint = {
3541
3554
  readonly siblings: readonly SyncSibling[];
3542
3555
  readonly water: Readonly<Record<string, Hlc>>;
3543
3556
  };
3557
+ /** One register's live siblings, as {@link ConvergingApply.liveUnder} reports them. */
3558
+ type LiveRegister = {
3559
+ readonly path: readonly Key[];
3560
+ readonly siblings: readonly SyncSibling[];
3561
+ };
3544
3562
  type ConvergingApply = {
3545
3563
  /**
3546
3564
  * Fold an envelope into the per-path registers and return the materialization deltas the
@@ -3573,6 +3591,12 @@ type ConvergingApply = {
3573
3591
  captureFrontier(): DotFrontier;
3574
3592
  /** The live (causally-maximal) siblings at a path: the emission-frontier read. */
3575
3593
  liveAt(path: readonly Key[]): readonly SyncSibling[];
3594
+ /**
3595
+ * The live registers at and under a path, shallow-first: what a reader compares its own
3596
+ * observation frontier against to tell "someone wrote here since I looked" for a whole
3597
+ * subtree (a fork's conflict projection). Registers with no live sibling are omitted.
3598
+ */
3599
+ liveUnder(path: readonly Key[]): readonly LiveRegister[];
3576
3600
  /**
3577
3601
  * Deepest-live-wins materialization of the whole tree from the current register state: the
3578
3602
  * root register's fold value with every live descendant fold grafted on. This is what a
@@ -3699,6 +3723,11 @@ type OpSync<T = unknown> = {
3699
3723
  * never saw. Scoped and synchronous, like {@link override}.
3700
3724
  */
3701
3725
  commitScope(frontier: DotFrontier, fn: () => void): void;
3726
+ /**
3727
+ * Read the live registers at and under a path (see {@link ConvergingApply.liveUnder}). A pure
3728
+ * read of what this peer has applied: pending local writes are not in it until they flush.
3729
+ */
3730
+ liveUnder(path: readonly Key[]): readonly LiveRegister[];
3702
3731
  /** Per-origin latest versions — the handshake watermark. */
3703
3732
  watermark(): Record<string, number>;
3704
3733
  /** The full checkpoint (root + register state + watermark), for answering a peer's hello. */
@@ -4681,4 +4710,4 @@ type CreateHistoryOptions<T> = Omit<CreateSignalOptions<T[]>, 'equal'> & {
4681
4710
  declare function withHistory<T>(sourceOrValue: WritableSignal<T> | T, opt?: CreateHistoryOptions<T>): SignalWithHistory<T>;
4682
4711
 
4683
4712
  export { CONCURRENCY_INSTRUMENTATION, MmActivity, MmTransition, MmViewTransitionName, OP_PROTO_VERSION, PAUSABLE_OPTIONS, PERSISTED_STORE_OPTIONS, POS_SEGMENT, SuspenseBoundary, SuspenseBoundaryBase, UnscopedSuspenseBoundary, activeTransaction, applyOps, batteryStatus, bridgeScopeToPendingTasks, chunked, clipboard, combineWith, compareHlc, compareSiblings, compareTotal, createAttributedPending, createConvergingApply, createForwardingScope, createHlcClock, createStoreContext, createTransaction, createTransitionScope, debounce, debounced, defaultFold, deferredValue, derived, diffOps, distinct, elementSize, elementVisibility, extendStore, filter, filterWith, focusWithin, forkStore, geolocation, getTransitionScope, holdUntilReady, idle, indexArray, injectPaused, injectRegisterResource, injectStartTransaction, injectStartTransition, injectTransitionScope, insertElement, invertBatch, isConflicted, isDerivation, isLeaf, isMutable, isOpaque, isStore, isStored, keepPrevious, keyArray, keyedArray, keyedContainer, latest, lww, map, mapArray, mapObject, mediaQuery, merge3, mergeThree, mousePosition, moveElement, mutable, mutableStore, nestedEffect, networkStatus, opLog, opSync, opaque, orderedEntries, orientation, pageVisibility, pairwise, pausableComputed, pausableEffect, pausableSignal, perfCustomTracks, persist, persistedStore, pipeable, piped, pointerDrag, policyStrategy, pooled, pooledArray, pooledKeys, pooledMap, pooledSet, posBetween, prefersDarkMode, prefersReducedMotion, preserve, projection, provideConcurrencyInstrumentation, provideForwardingTransitionScope, providePausableOptions, providePaused, providePersistedStoreOptions, provideTransitionScope, rebalanceContainer, rebaseOps, reconcile, registerResource, removeElement, resolvePause, scan, scrollPosition, select, sensor, sensors, signalFromEvent, startWith, store, storeHistory, stored, syncedFork, tabSync, tap, throttle, throttled, toFakeDerivation, toFakeSignalDerivation, toStore, toWritable, traced, until, use, validateEnvelope, windowSize, withHistory, wrappedContainer };
4684
- export type { AsyncStore, BatteryStatus, ClipboardSignal, Computation, ConcurrencyInstrumentation, Conflicted, ContainerEntry, ContainerNode, ConvergingApply, CreateChunkedOptions, CreateDebouncedOptions, CreateHistoryOptions, CreateLatestOptions, CreateOpLogOptions, CreatePooledOptions, CreateProvidedPooledOptions, CreateStoredOptions, CreateThrottledOptions, CreateTransitionScopeOptions, DebouncedSignal, DeferStrategy, DeferredSignal, DeferredValueOptions, DerivedSignal, Dot, DotFrontier, DuplicateKeyPolicy, ElementSize, ElementSizeOptions, ElementSizeSignal, ElementVisibilityOptions, ElementVisibilitySignal, ExtendStoreOptions, FoldFn, FoldPolicyEntry, FoldResult, Fork, ForkStoreOptions, ForkStrategy, ForwardingTransitionScope, Frame, GeolocationOptions, GeolocationSignal, Hlc, HlcClock, IdleOptions, IdleSignal, KeyedContainer, KeyedContainerConfig, LatestSignal, MergeContext, MergeFn, MergePolicyEntry, MmTransitionContext, MousePositionOptions, MousePositionSignal, MutableSignal, MutableSignalStore, NetworkStatusSignal, OpBatch, OpEnvelope, OpLog, OpLogDriver, OpSync, OpSyncCheckpoint, OpSyncOptions, Opaque, OrderedEntry, PausableOptions, PauseOption, PersistHandle, PersistOptions, PersistedStore, PersistedStoreDefaults, PersistedStoreOptions, PipeableSignal, PointerDragOptions, PointerDragSignal, PointerDragState, PointerModifiers, PointerPoint, ProjectionOptions, RebaseResult, ReconcileFn, ReconcileKey, RegisterCheckpoint, RegisterOptions, ResourceLike, ScreenOrientation, ScreenOrientationState, ScrollPosition, ScrollPositionOptions, ScrollPositionSignal, SelfKeyedContainer, SensorRunOptions, SignalFromEventOptions, SignalStore, SignalWithHistory, StoreHistory, StoreHistoryOptions, StoreOp, StoreOptions, StoreTabSyncOptions, StoredSignal, SuspendType, SyncOp, SyncSibling, SyncSignalOptions, SyncedFork, TabSyncBus, ThrottledSignal, Traced, Transaction, TransactionRef, TransitionRef, TransitionScope, UntilOptions, UseSource, Vivify, WindowSize, WindowSizeOptions, WindowSizeSignal, WithVivify, WritableSignalStore, toStoreOptions };
4713
+ export type { AsyncStore, BatteryStatus, ClipboardSignal, Computation, ConcurrencyInstrumentation, Conflicted, ContainerEntry, ContainerNode, ConvergingApply, CreateChunkedOptions, CreateDebouncedOptions, CreateHistoryOptions, CreateLatestOptions, CreateOpLogOptions, CreatePooledOptions, CreateProvidedPooledOptions, CreateStoredOptions, CreateThrottledOptions, CreateTransitionScopeOptions, DebouncedSignal, DeferStrategy, DeferredSignal, DeferredValueOptions, DerivedSignal, Dot, DotFrontier, DuplicateKeyPolicy, ElementSize, ElementSizeOptions, ElementSizeSignal, ElementVisibilityOptions, ElementVisibilitySignal, ExtendStoreOptions, FoldFn, FoldPolicyEntry, FoldResult, Fork, ForkStoreOptions, ForkStrategy, ForwardingTransitionScope, Frame, GeolocationOptions, GeolocationSignal, Hlc, HlcClock, IdleOptions, IdleSignal, KeepPreviousOptions, KeyedContainer, KeyedContainerConfig, LatestSignal, LiveRegister, MergeContext, MergeFn, MergePolicyEntry, MmTransitionContext, MousePositionOptions, MousePositionSignal, MutableSignal, MutableSignalStore, NetworkStatusSignal, OpBatch, OpEnvelope, OpLog, OpLogDriver, OpSync, OpSyncCheckpoint, OpSyncOptions, Opaque, OrderedEntry, PausableOptions, PauseOption, PersistHandle, PersistOptions, PersistedStore, PersistedStoreDefaults, PersistedStoreOptions, PipeableSignal, PointerDragOptions, PointerDragSignal, PointerDragState, PointerModifiers, PointerPoint, ProjectionOptions, RebaseResult, ReconcileFn, ReconcileKey, RegisterCheckpoint, RegisterOptions, ResourceLike, ScreenOrientation, ScreenOrientationState, ScrollPosition, ScrollPositionOptions, ScrollPositionSignal, SelfKeyedContainer, SensorRunOptions, SignalFromEventOptions, SignalStore, SignalWithHistory, StoreHistory, StoreHistoryOptions, StoreOp, StoreOptions, StoreTabSyncOptions, StoredSignal, SuspendType, SyncOp, SyncSibling, SyncSignalOptions, SyncedFork, TabSyncBus, ThrottledSignal, Traced, Transaction, TransactionRef, TransitionRef, TransitionScope, UntilOptions, UseSource, Vivify, WindowSize, WindowSizeOptions, WindowSizeSignal, WithVivify, WritableSignalStore, toStoreOptions };