@solidjs/signals 2.0.0-rc.14 → 2.0.0-rc.15
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/dist/dev-shared.js +248 -189
- package/dist/dev.attribution.js +124 -41
- package/dist/dev.js +553 -322
- package/dist/observe/affects.js +34 -31
- package/dist/observe/boundaries.js +166 -132
- package/dist/observe/core/async.js +90 -83
- package/dist/observe/core/attribution-queries.js +1 -1
- package/dist/observe/core/attribution.js +281 -197
- package/dist/observe/core/constants.js +7 -2
- package/dist/observe/core/context.js +3 -3
- package/dist/observe/core/core.js +277 -245
- package/dist/observe/core/dev.js +3 -3
- package/dist/observe/core/effect.js +21 -21
- package/dist/observe/core/external.js +2 -2
- package/dist/observe/core/graph.js +25 -25
- package/dist/observe/core/heap.js +9 -9
- package/dist/observe/core/lanes.js +206 -160
- package/dist/observe/core/owner.js +27 -27
- package/dist/observe/core/scheduler.js +92 -86
- package/dist/observe/core/verdict.js +66 -54
- package/dist/observe/map.js +35 -35
- package/dist/observe/reveal.js +24 -24
- package/dist/observe/signals.js +38 -28
- package/dist/observe/store/affects.js +75 -68
- package/dist/observe/store/hooks.js +13 -0
- package/dist/observe/store/index.js +0 -2
- package/dist/observe/store/optimistic.js +67 -34
- package/dist/observe/store/projection.js +37 -31
- package/dist/observe/store/reconcile.js +32 -30
- package/dist/observe/store/store.js +128 -85
- package/dist/prod/affects.js +34 -31
- package/dist/prod/boundaries.js +143 -109
- package/dist/prod/core/async.js +64 -67
- package/dist/prod/core/constants.js +7 -2
- package/dist/prod/core/context.js +3 -3
- package/dist/prod/core/core.js +302 -270
- package/dist/prod/core/effect.js +38 -38
- package/dist/prod/core/external.js +4 -4
- package/dist/prod/core/graph.js +27 -27
- package/dist/prod/core/heap.js +30 -30
- package/dist/prod/core/lanes.js +257 -211
- package/dist/prod/core/owner.js +39 -39
- package/dist/prod/core/scheduler.js +125 -119
- package/dist/prod/core/verdict.js +70 -58
- package/dist/prod/map.js +73 -73
- package/dist/prod/reveal.js +38 -38
- package/dist/prod/signals.js +30 -20
- package/dist/prod/store/affects.js +75 -68
- package/dist/prod/store/hooks.js +13 -0
- package/dist/prod/store/index.js +0 -2
- package/dist/prod/store/optimistic.js +114 -81
- package/dist/prod/store/projection.js +30 -24
- package/dist/prod/store/reconcile.js +32 -30
- package/dist/prod/store/store.js +136 -93
- package/dist/types/boundaries.d.ts +4 -0
- package/dist/types/core/attribution.d.ts +6 -2
- package/dist/types/core/constants.d.ts +5 -0
- package/dist/types/core/core.d.ts +33 -3
- package/dist/types/core/lanes.d.ts +10 -0
- package/dist/types/core/scheduler.d.ts +12 -6
- package/dist/types/core/types.d.ts +0 -6
- package/dist/types/store/affects.d.ts +11 -0
- package/dist/types/store/hooks.d.ts +48 -0
- package/dist/types/store/index.d.ts +0 -1
- package/dist/types/store/store.d.ts +3 -38
- package/package.json +1 -1
|
@@ -87,6 +87,11 @@ export declare const CONFIG_STAGED: number;
|
|
|
87
87
|
* parking flush they see the committed value and hold nothing, and are
|
|
88
88
|
* re-derived at the landing. Set at the park seam on every staged node. */
|
|
89
89
|
export declare const CONFIG_HELD: number;
|
|
90
|
+
/** A member of the uncommitted frame a held pass built (ruling A): set at
|
|
91
|
+
* the park seam on every computed under a staged node (`holdFrame`). Never
|
|
92
|
+
* shown, it has no screen: its reads are its transaction's, whichever flush
|
|
93
|
+
* runs it (`bornInto`, #4010). Cleared by its commit. */
|
|
94
|
+
export declare const CONFIG_HELD_FRAME: number;
|
|
90
95
|
/** A15's reveal corollary (#3305): a commit published this flight's inputs
|
|
91
96
|
* beneath it — the node was pending, nothing staged, when it committed — so
|
|
92
97
|
* its committed value is torn against the visible frame. A render effect
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Transaction } from "./scheduler.js";
|
|
1
2
|
import type { Computed, NodeExtension, NodeOptions, Owner, Signal } from "./types.js";
|
|
2
3
|
export declare const PRIMITIVE_IN_FORBIDDEN_SCOPE_MESSAGE = "[PRIMITIVE_IN_FORBIDDEN_SCOPE] Cannot create reactive primitives inside createTrackedEffect or owner-backed onSettled";
|
|
3
4
|
export declare const PRIMITIVE_IN_EFFECT_CALLBACK_MESSAGE: string;
|
|
@@ -32,6 +33,24 @@ export declare function computed<T>(fn: (prev: T) => T | PromiseLike<T> | AsyncI
|
|
|
32
33
|
export declare function ext(el: {
|
|
33
34
|
_x: NodeExtension | null;
|
|
34
35
|
}): NodeExtension;
|
|
36
|
+
/** A tracked read of a held node (the reader derives from its transaction's
|
|
37
|
+
* world): the reading pass is marked as having read it (born-held decision
|
|
38
|
+
* in `recompute`), and the flush joins the node's transaction — unless the
|
|
39
|
+
* reader is a render effect. A render effect is the frame, not a derivation
|
|
40
|
+
* (rule 3): in that transaction's own flush, or born into it (uninitialized,
|
|
41
|
+
* A29), it reads the staged value and holds nothing of its own; otherwise it
|
|
42
|
+
* reads the committed value instead (`frameRead`). A node born into the
|
|
43
|
+
* future has no committed value: every reader joins it. A first pass is
|
|
44
|
+
* something not ready under a loading boundary that has not shown content:
|
|
45
|
+
* the boundary collects it and shows its fallback, and the pass is the
|
|
46
|
+
* boundary's, not the tick's (A29's boundary exemption, #3540). */
|
|
47
|
+
export declare function joinPass(c: Computed<any>, el: Signal<any> | Computed<any>): void;
|
|
48
|
+
/** A node born into transaction `t`: held by it and never committed (A29,
|
|
49
|
+
* ruling A) — uninitialized (born held), or a member of the frame one of its
|
|
50
|
+
* held passes built (CONFIG_HELD_FRAME). Its branch exists only in `t`: it
|
|
51
|
+
* has no screen to read, so it reads `t`'s values, whichever flush runs it,
|
|
52
|
+
* and keeps staging (#4010). */
|
|
53
|
+
export declare function bornInto(c: Computed<any>, t: Transaction): unknown;
|
|
35
54
|
/**
|
|
36
55
|
* Build an Effect node with all effect-specific fields baked into a single object literal,
|
|
37
56
|
* so V8 sees the full hidden class shape at construction time. Effects always run in lazy
|
|
@@ -209,8 +228,9 @@ export declare function serve(el: Signal<any> | Computed<any>, c: Computed<any>
|
|
|
209
228
|
* write never shows through the lane. A verdict lane's work likewise: the
|
|
210
229
|
* lane holds verdicts, not the frame's other stagings (#3851) — except a
|
|
211
230
|
* verdict reader, which answered for itself (the lane seam, lanes.ts). Not
|
|
212
|
-
* a read of a node born staged: it has no committed value to
|
|
213
|
-
* and a re-run would read the same staging and re-queue every
|
|
231
|
+
* a read of a node born staged at all: it has no committed value to
|
|
232
|
+
* re-derive on, and a re-run would read the same staging and re-queue every
|
|
233
|
+
* round (#3969: nor does it make a later lane read a re-derive, `enterLane`). */
|
|
214
234
|
export declare function stagedRead(c: Computed<any>, el?: Signal<any> | Computed<any>): void;
|
|
215
235
|
/** A10 for a staged node: a verdict reader (the pass entered a window) that
|
|
216
236
|
* also reads a frame's proposal plainly sees the screen — `[latest(q), q()]`
|
|
@@ -219,13 +239,23 @@ export declare function stagedRead(c: Computed<any>, el?: Signal<any> | Computed
|
|
|
219
239
|
* #3322 — one run, on the committed world), or with the hold. Before any
|
|
220
240
|
* transaction the answer is the seam's and the reader watches it
|
|
221
241
|
* (verdict.ts). A node born into the future has no screen: its staging is
|
|
222
|
-
* its only value (A29).
|
|
242
|
+
* its only value (A29). Nor has a reader born into the flush's transaction
|
|
243
|
+
* (`bornInto`, #4010): its branch exists only there. */
|
|
223
244
|
export declare function stagedScreen(c: Computed<any>): boolean;
|
|
224
245
|
export declare function ownedScopeWriteMessage(owner: Owner): string;
|
|
225
246
|
/** A28 (4) — written inside a recompute that runs OUTSIDE a flush (a
|
|
226
247
|
* creation-time compute): promoted at that pass's end, visible to the rest of
|
|
227
248
|
* the block. Cold: only contextual writes reach here. */
|
|
228
249
|
export declare function notePromotedWrite(el: Signal<any> | Computed<any>): void;
|
|
250
|
+
/** Cold half of setSignal's snapshot arm (see there), shared with a store
|
|
251
|
+
* container's structural notify: first write during capture to a plain
|
|
252
|
+
* signal without a live snapshot records the pre-write value. Only plain
|
|
253
|
+
* user signals qualify. Computeds reach setSignal from an
|
|
254
|
+
* async landing (asyncWrite), and a value arriving from async during the pass
|
|
255
|
+
* REVEALS — the creation-time arm skips pending computeds for the same
|
|
256
|
+
* reason. Firewall leaves belong to a projection whose compute is the tree's
|
|
257
|
+
* own work, captured (or deliberately not) at creation. */
|
|
258
|
+
export declare function captureWriteSnapshot<T>(el: Signal<T> | Computed<T>, current: T): void;
|
|
229
259
|
export declare function setSignal<T>(el: Signal<T> | Computed<T>, v: T | ((prev: T) => T)): T;
|
|
230
260
|
/**
|
|
231
261
|
* User-facing setter for the memo form of `createSignal(fn)`. A write applies
|
|
@@ -48,6 +48,16 @@ export declare function verdictLane(t: Transaction): Transaction;
|
|
|
48
48
|
* propagation (async.ts `propagateStatus`), the node gone pending. */
|
|
49
49
|
export declare function laneStage(el: Computed<any>, l: Transaction, create: boolean, errored: boolean | Computed<any>): boolean;
|
|
50
50
|
export declare function supersede(n: Signal<any> | Computed<any>, value: unknown, changed: boolean): void;
|
|
51
|
+
/** Truth readers (`until`, `refresh`; CONFIG_AUTHORITATIVE) — pay-for-use:
|
|
52
|
+
* the first one installs these on GlobalQueue (signals.ts `watch`).
|
|
53
|
+
*
|
|
54
|
+
* A truth reader's read of a lane node: the lane's value when it is the
|
|
55
|
+
* truth (#3943), else the truth staged beneath a guess, else the committed
|
|
56
|
+
* value. */
|
|
57
|
+
export declare function truthRead(el: Signal<any> | Computed<any>): unknown;
|
|
58
|
+
/** A guess confirmed: its lane's truth readers re-read — of the lane's
|
|
59
|
+
* derivations too, which may be the truth now (#3943). */
|
|
60
|
+
export declare function truthConfirmed(l: Transaction): void;
|
|
51
61
|
/** Lanes. A lane's node is read by its reader's kind: an authoritative
|
|
52
62
|
* reader (`until`) sees the truth — staged beneath a guess, else committed
|
|
53
63
|
* — and is no lane's; an untracked read sees the lane's latest value (A17:
|
|
@@ -202,12 +202,18 @@ export declare class GlobalQueue implements IQueue {
|
|
|
202
202
|
* link's refreshed from the inner store, whose commits it never learned
|
|
203
203
|
* while the guess served the reads (store/store.ts, §7b). */
|
|
204
204
|
static _slotCovered: ((n: Signal<any>) => unknown) | undefined;
|
|
205
|
-
/**
|
|
206
|
-
*
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
static
|
|
205
|
+
/** The store's row judgment for a guessed slot (optimistic.ts): the truth
|
|
206
|
+
* is the guess's echo when reconcile would write nothing into it. */
|
|
207
|
+
static _echoes: ((guess: unknown, truth: unknown) => boolean) | undefined;
|
|
208
|
+
/** Truth readers (lanes.ts `truthRead`/`truthConfirmed`), installed by the
|
|
209
|
+
* first `until`/`refresh` (signals.ts `watch`). */
|
|
210
|
+
static _truth: ((el: any) => unknown) | undefined;
|
|
211
|
+
static _confirmed: ((l: Transaction) => void) | undefined;
|
|
212
|
+
/** `affects()` on a store (store/affects.ts): a store's node for a key
|
|
213
|
+
* (store/store.ts `getNode`); a bare registration (birth inheritance); a
|
|
214
|
+
* witnessed mark on an untracked probe (verdict.ts). */
|
|
215
|
+
static _storeNode: ((t: any, key: PropertyKey) => Signal<any>) | undefined;
|
|
216
|
+
static _storeWrappable: ((v: unknown) => boolean) | undefined;
|
|
211
217
|
static _mark: ((node: Signal<any> | Computed<any>) => void) | undefined;
|
|
212
218
|
static _witnessMark: (() => void) | undefined;
|
|
213
219
|
/** An older question's truth was held beneath a guess (lanes.ts
|
|
@@ -86,12 +86,6 @@ export interface NodeExtension {
|
|
|
86
86
|
/** L2 — the transaction holding this node while CONFIG_HELD is set
|
|
87
87
|
* (`holdNode`); resolved through merges by `txOf`. */
|
|
88
88
|
_transaction: Transaction | null;
|
|
89
|
-
/** L2 — the transaction a first pass that went pending was born into (it
|
|
90
|
-
* read a held node, or a verdict lane's mount read a staging of the
|
|
91
|
-
* flush — the born-held arm's conditions): its first answer lands into it
|
|
92
|
-
* while it is live; the hold never waits for the node's first load (the
|
|
93
|
-
* direction rule, #3800). Consumed at the landing. */
|
|
94
|
-
_bornIn: Transaction | null;
|
|
95
89
|
/** The node's current flight re-asks the same question (a `refresh()`,
|
|
96
90
|
* A19 exc. 2 / A24): verdict-quiet — `isPending` reads false for it —
|
|
97
91
|
* through its landing until the commit. */
|
|
@@ -1 +1,12 @@
|
|
|
1
|
+
import type { Computed, Signal } from "../core/types.js";
|
|
2
|
+
import { type StoreTarget } from "./target.js";
|
|
3
|
+
type Marked = Signal<any> | Computed<any>;
|
|
4
|
+
/** The nodes an `affects(store[, key])` declaration marks (affects.ts
|
|
5
|
+
* registers each). */
|
|
6
|
+
export declare function storeMarks(t: StoreTarget, key: PropertyKey | undefined): Marked[];
|
|
7
|
+
/** `affects()` calls it before a store-targeted declaration (idempotent). */
|
|
8
|
+
export declare function installStoreAffects(): void;
|
|
9
|
+
/** The carrier's last mark released (affects.ts): its scope dies, and the
|
|
10
|
+
* nodes that inherited the mark release theirs. */
|
|
11
|
+
export declare function releaseMarkScope(carrier: Marked): void;
|
|
1
12
|
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store — the engine's optional-machinery slots, in a module of their own so
|
|
3
|
+
* an installer reaches them without importing store.ts (whose top level
|
|
4
|
+
* installs the engine): the store half of `affects()` installs through here
|
|
5
|
+
* from `affects()`, and an app without stores carries none of the engine.
|
|
6
|
+
* A slot no installer reaches stays `null`, and a bundler folds its sites.
|
|
7
|
+
*/
|
|
8
|
+
import type { Signal } from "../core/types.js";
|
|
9
|
+
import type { StoreTarget } from "./target.js";
|
|
10
|
+
/** The optimistic machinery (optimistic.ts, S4), installed when it loads
|
|
11
|
+
* — a plain store pays nothing for it (#2883): the plain paths reach it
|
|
12
|
+
* only through a family with `opt` set, which only `createOptimisticStore`
|
|
13
|
+
* sets. */
|
|
14
|
+
export interface OptHooks {
|
|
15
|
+
/** A user setter's draft on an optimistic family: a clone of the
|
|
16
|
+
* writer's view (a staging already on the target is set aside). */
|
|
17
|
+
draft(t: StoreTarget): Record<PropertyKey, any>;
|
|
18
|
+
/** The setter's exit: the draft becomes guesses; returns the staging the
|
|
19
|
+
* draft set aside (`null`: none). */
|
|
20
|
+
writes(t: StoreTarget, pb: Record<PropertyKey, any>): Record<PropertyKey, any> | null;
|
|
21
|
+
/** `src` with the lanes' values over it (`writer`: the next write's base
|
|
22
|
+
* — the unflushed guesses too). */
|
|
23
|
+
view(t: StoreTarget, src: Record<PropertyKey, any>, writer?: boolean): Record<PropertyKey, any>;
|
|
24
|
+
/** An untracked `key in store`: the presence guess, or `undefined`. */
|
|
25
|
+
has(t: StoreTarget, key: PropertyKey): boolean | undefined;
|
|
26
|
+
/** A guessed key's descriptor (`null`: removed; `undefined`: no guess). */
|
|
27
|
+
descriptor(t: StoreTarget, key: PropertyKey): PropertyDescriptor | null | undefined;
|
|
28
|
+
/** The flush's commit: targets no lane holds leave `overlaid`. */
|
|
29
|
+
sweep(): void;
|
|
30
|
+
/** The container comparator's lane arm: an arrangement guess against a
|
|
31
|
+
* landing (or another arrangement), by row identity. */
|
|
32
|
+
arrangement(t: StoreTarget, a: any, b: any): boolean;
|
|
33
|
+
/** A user's `reconcile` on an optimistic family: the keyed diff written
|
|
34
|
+
* into the draft. */
|
|
35
|
+
reconcile(draft: any, incoming: any, keyFn: ((item: any) => any) | null): void;
|
|
36
|
+
}
|
|
37
|
+
export declare let optHooks: OptHooks | null;
|
|
38
|
+
export declare function installOptHooks(hooks: OptHooks): void;
|
|
39
|
+
/** The store half of `affects()` (store/affects.ts), installed by the first
|
|
40
|
+
* store-targeted declaration: a node born on a covered record inherits the
|
|
41
|
+
* live mark; an untracked verdict probe through a record with no node is
|
|
42
|
+
* witnessed. */
|
|
43
|
+
export interface AffectsHooks {
|
|
44
|
+
_born(t: StoreTarget, node: Signal<any>, key: PropertyKey): void;
|
|
45
|
+
_witness(t: StoreTarget, key: PropertyKey | undefined): void;
|
|
46
|
+
}
|
|
47
|
+
export declare let affectsHooks: AffectsHooks | null;
|
|
48
|
+
export declare function installAffectsHooks(hooks: AffectsHooks): void;
|
|
@@ -8,7 +8,6 @@ export { $PROXY, $RECORD, $TARGET, $TRACK, isWrappable, markRaw } from "./types.
|
|
|
8
8
|
export { storeIsShallow, storeHasFamily, storeHasOptimisticFamily } from "./store.js";
|
|
9
9
|
export { storePath } from "./storePath.js";
|
|
10
10
|
export type { StorePathRange, PathSetter, Part, CustomPartial, ArrayFilterFn } from "./storePath.js";
|
|
11
|
-
import "./affects.js";
|
|
12
11
|
import { createOptimisticStore } from "./optimistic.js";
|
|
13
12
|
import { createProjection } from "./projection.js";
|
|
14
13
|
import type { NoFn, ProjectionOptions, ProjectionStoreReturn, Store, StoreOptions, StoreReturn } from "./types.js";
|
|
@@ -1,43 +1,5 @@
|
|
|
1
1
|
import type { Signal } from "../core/types.js";
|
|
2
2
|
import { type StoreFamily, type StoreTarget } from "./target.js";
|
|
3
|
-
/** The optimistic machinery (optimistic.ts, S4), installed when it loads
|
|
4
|
-
* — a plain store pays nothing for it (#2883): the plain paths reach it
|
|
5
|
-
* only through a family with `opt` set, which only `createOptimisticStore`
|
|
6
|
-
* sets. */
|
|
7
|
-
export interface OptHooks {
|
|
8
|
-
/** A user setter's draft on an optimistic family: a clone of the
|
|
9
|
-
* writer's view (a staging already on the target is set aside). */
|
|
10
|
-
draft(t: StoreTarget): Record<PropertyKey, any>;
|
|
11
|
-
/** The setter's exit: the draft becomes guesses; returns the staging the
|
|
12
|
-
* draft set aside (`null`: none). */
|
|
13
|
-
writes(t: StoreTarget, pb: Record<PropertyKey, any>): Record<PropertyKey, any> | null;
|
|
14
|
-
/** `src` with the lanes' values over it (`writer`: the next write's base
|
|
15
|
-
* — the unflushed guesses too). */
|
|
16
|
-
view(t: StoreTarget, src: Record<PropertyKey, any>, writer?: boolean): Record<PropertyKey, any>;
|
|
17
|
-
/** An untracked `key in store`: the presence guess, or `undefined`. */
|
|
18
|
-
has(t: StoreTarget, key: PropertyKey): boolean | undefined;
|
|
19
|
-
/** A guessed key's descriptor (`null`: removed; `undefined`: no guess). */
|
|
20
|
-
descriptor(t: StoreTarget, key: PropertyKey): PropertyDescriptor | null | undefined;
|
|
21
|
-
/** The flush's commit: targets no lane holds leave `overlaid`. */
|
|
22
|
-
sweep(): void;
|
|
23
|
-
/** The container comparator's lane arm: an arrangement guess against a
|
|
24
|
-
* landing (or another arrangement), by row identity. */
|
|
25
|
-
arrangement(t: StoreTarget, a: any, b: any): boolean;
|
|
26
|
-
/** A user's `reconcile` on an optimistic family: the keyed diff written
|
|
27
|
-
* into the draft. */
|
|
28
|
-
reconcile(draft: any, incoming: any, keyFn: ((item: any) => any) | null): void;
|
|
29
|
-
}
|
|
30
|
-
export declare let optHooks: OptHooks | null;
|
|
31
|
-
export declare function installOptHooks(hooks: OptHooks): void;
|
|
32
|
-
/** The store half of `affects()` (store/affects.ts), installed with the
|
|
33
|
-
* stores: a node born on a covered record inherits the live mark; an
|
|
34
|
-
* untracked verdict probe through a record with no node is witnessed. */
|
|
35
|
-
export interface AffectsHooks {
|
|
36
|
-
born(t: StoreTarget, node: Signal<any>, key: PropertyKey): void;
|
|
37
|
-
witness(t: StoreTarget, key: PropertyKey | undefined): void;
|
|
38
|
-
}
|
|
39
|
-
export declare let affectsHooks: AffectsHooks | null;
|
|
40
|
-
export declare function installAffectsHooks(hooks: AffectsHooks): void;
|
|
41
3
|
import { type StoreOptions } from "./types.js";
|
|
42
4
|
export { $PROXY, $TARGET, $TRACK, markRaw } from "./types.js";
|
|
43
5
|
export type SetStoreFunction<T> = (fn: (draft: T) => T | void) => void;
|
|
@@ -145,6 +107,9 @@ export declare function notifyFold(t: StoreTarget, old: Record<PropertyKey, any>
|
|
|
145
107
|
* "adoption is eager by contract" — and the node keeps the frame committed
|
|
146
108
|
* readers under a hold still see), `t.v` otherwise. */
|
|
147
109
|
export declare function committed(t: StoreTarget): Record<PropertyKey, any>;
|
|
110
|
+
/** The same row at a slot, as the adoption pairs rows (reconcile.ts): two
|
|
111
|
+
* objects whose keys agree — positionally for an unkeyed family. */
|
|
112
|
+
export declare function sameRow(pv: any, nv: any, keyFn: ((item: any) => any) | null): boolean;
|
|
148
113
|
/** A chained backing's child (§7b): a raw the inner family owns, or holds
|
|
149
114
|
* at this key, is served as the inner store's wrapper — never a fresh
|
|
150
115
|
* raw-keyed one — so the chained targets are the same objects across
|
package/package.json
CHANGED