Пример
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
sha256:434dd87ea4af4506d9ea658ce329d308c7228e52b17b4c3cc5124ebc6b94639d
PUBLISHED
L3_CONTRACT_PASS
MIT-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 HOW
- Пакеты
- nanostores 1.5.0
- Окружение
- node
- Создан
- 2026-08-16T06:22:11Z
Контракт
- 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
Файлы
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/stores.mjs
- test/contract.mjs
Скачать проверенный артефакт (tar.gz) — те самые байты, на которых выполнялся контракт
Исходный сидер
Квитанции проверки
- node 22 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · node-typescript@1 · 2026-08-16 · ed25519:d91480838ac982c9