Ejemplo
nanostores 1.5.0: Handle nanostores 1.5 equality semantics via Object.is and eq/eqKey, error containment in notification queues, effect lifecycle, reverse onSet middleware pipelines, and batched debouncing across version boundaries
Muestra verificada para npm nanostores 1.5.0: Handle nanostores 1.5 equality semantics via Object.is and eq/eqKey, error containment in notification queues…
sha256:434dd87ea4af4506d9ea658ce329d308c7228e52b17b4c3cc5124ebc6b94639d
Esta red ofrece una sola cosa: una muestra que compila. La ejecutó en un sandbox y guardó el recibo firmado. No califica ni garantiza nada: si el mismo código compila donde estás no es algo que haya medido.
Cuántas claves de firma distintas presentaron un recibo de contrato aprobado. Una es solo el autor; más de una significa que alguien más también lo compiló. Una clave se genera sola y no tiene identidad registrada detrás, así que cuenta claves, no personas.
MIT-0
Evidencia de ejecución
El entorno declarado y las ejecuciones firmadas se muestran por separado, para que veas exactamente qué ejecutó esta muestra y dónde.
- Base de evidencia
- Contrato firmado aprobado
- Recibos de verificación
- 2
- Claves de firma que lo compilaron
- 2
Entorno declarado
node linux x64 node node npm
Entornos de las ejecuciones de verificación
| Entorno | Contrato | Etapas | Ejecución |
|---|---|---|---|
| node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-16 |
| node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-18 |
Caso
HOW- Objetivo
- Handle nanostores 1.5 equality semantics via Object.is and eq/eqKey, error containment in notification queues, effect lifecycle, reverse onSet middleware pipelines, and batched debouncing across version boundaries
- Paquetes
- Símbolos
-
- nanostores.atom
- nanostores.map
- nanostores.computed
- nanostores.batched
- nanostores.effect
- nanostores.onSet
- nanostores.onNotify
- nanostores.onStart
- nanostores.onStop
- nanostores.onMount
- nanostores.listenKeys
- nanostores.subscribeKeys
- nanostores.mapCreator
- nanostores.getKey
- nanostores.setByKey
- nanostores.setPath
- nanostores.cleanStores
- nanostores.STORE_UNMOUNT_DELAY
- Store.eq
- Store.eqKey
- Store.listen
- Store.subscribe
- Store.set
- Store.setKey
- Store.get
- Store.value
- Store.lc
- Entorno
- node
- Creado
- 2026-08-16T06:22:11Z
Contrato
- assert setting NaN on an atom holding NaN is a no-op under Object.is and triggers zero notifications, whereas strict inequality (!==) in earlier versions triggered notifications
- assert setting -0 on an atom holding 0 notifies listeners because Object.is(0, -0) is false, whereas strict equality (===) treated them as identical
- assert overriding $atom.eq allows custom equality functions to suppress listener notifications and keep previous object references when values are semantically identical
- assert map.eqKey compares existing and incoming field values with Object.is(prev, next, key), skipping object cloning and listener notification when values match
- assert an uncaught error thrown inside one listener during notify does not abort the notification loop: all subsequent listeners in the queue still execute before the error is rethrown
- assert effect runs immediately upon registration with unpacked positional arguments, mounts all passed stores by incrementing their listener counts, and executes cleanup functions before re-runs and on disposal
- assert onSet interceptors execute in reverse registration order (reduceRight) and pass a mutable shared context across interceptors
- assert calling abort() inside an onSet interceptor halts the mutation before store value update and notifies zero listeners
- assert onNotify interceptors can abort listener notifications while keeping the store value update intact
- assert onStart fires synchronously upon first subscription, onStop fires synchronously upon the last unbind, whereas onMount unmount cleanup is deferred by STORE_UNMOUNT_DELAY (1000ms)
- assert batched defers recomputations across rapid dependency updates via timer debouncing while computed recalculates synchronously on every change, and reading batched with .get() synchronously flushes the calculation
- assert subscribeKeys immediately primes the listener with current store value whereas listenKeys only fires on subsequent mutations, and listenKeys matches nested prefix keys upon dotted path updates
- assert mapCreator returns cached singleton stores by id while active and automatically evicts cached instances once unmounted after STORE_UNMOUNT_DELAY
- assert setPath and setByKey are immutable data transformation utilities that return cloned objects without mutating the original source, while getKey safely traverses nested paths from store state
- assert cleanStores resets store state in development mode and unmounts active stores synchronously
Archivos
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/stores.mjs
- test/contract.mjs