Releases: frost-js/state
Release list
v1.1.3
Patch release focused on correct StateStore merging and reactive property operations, with clearer documentation and simpler tests.
Fixed
- Corrected deep merges when existing nested stores share references or contain cycles, preserving independent source branches and existing values.
- Kept existing accessors and effect subscriptions connected after deleting state keys, including restoring keys through previously returned accessors.
- Made supported
Object.defineProperty()writes reactive and rejected unsupported descriptors without changing state. - Rejected
Object.freeze(),Object.seal(), andObject.preventExtensions()without leaving stores unusable. - Removed runtime string code generation from callable store construction.
Changed
- Updated the README to describe current state, effect, merge, deletion, and property descriptor behavior and corrected the batching example.
- Simplified repeated tests with named table-driven cases and moved the code-generation restriction check into a standalone fixture.
- Refreshed the published
dist/bundle artifacts and source maps.
v1.1.2
Patch release focused on repository branding and maintenance consistency. No runtime or breaking API changes.
Changed
- Moved the source repository to
frost-js/stateand updated package metadata, issue links, and README badges for the new location. - Updated the human-facing project name from FrostState to Frost State while preserving package names, filenames, repository paths, and JavaScript identifiers.
- Updated
@fr0st/eslint-configfrom5.0.2to5.0.3and refreshed the tooling dependency lockfile.
v1.1.1
Patch release focused on invariant-safe StateStore property handling and maintenance consistency. No breaking API changes.
Fixed
- Prevented Proxy invariant errors when reading or checking the non-configurable Function properties
arguments,caller, andprototypeon aStateStore. - Reserved those intrinsic keys without partially storing rejected assignments, while preserving
nameandlengthas enumerable state keys.
Changed
- Added regression coverage for callable proxy property access and reorganized tests into
test/unitandtest/support. - Expanded private
StateStoreJSDoc and clarified package-root ESM and publicdistandsrcsubpath usage. - Updated
@fr0st/eslint-configfrom5.0.1to5.0.2and refreshed the tooling dependency lockfile. - Normalized GitHub Actions workflow file permissions and refreshed the published
dist/bundle artifacts and source maps.
v1.1.0
Feature release focused on build and test tooling consistency, expanded ESM distribution, and automated coverage reporting. No breaking runtime API changes.
Added
- Added prebuilt ESM and minified ESM bundles with source maps alongside the existing UMD bundles.
- Added public
./dist/*and./src/*package subpath exports. - Added Vitest coverage reporting and Codecov upload configuration.
Changed
- Replaced Rollup, Terser, and Mocha with Vite and Vitest, following FrostCore conventions.
- Pointed package entry points at built ESM output and documented direct browser ESM usage.
- Updated
@fr0st/eslint-configfrom5.0.0to5.0.1and refreshed ESLint and the tooling lockfile. - Refreshed the published
dist/bundle artifacts and source maps.
v1.0.3
Maintenance release focused on development tooling consistency and test organization. No runtime API changes.
Changed
- Renamed the development scripts to
bundle,lint, andminify, and updated the build command, GitHub Actions workflows, and documentation. - Updated
@fr0st/eslint-configfrom4.0.0to5.0.0and refreshed the tooling dependency lockfile. - Moved the shared test
tickhelper intotest/support.js. - Normalized the GitHub Actions workflow files to LF line endings.
v1.0.2
Patch release focused on effect lifecycle reliability, safer store behavior, and stronger release verification. No breaking API changes.
Fixed
- Prevented state changes triggered during an effect from being dropped and made scheduled, synchronous, and stopped effects interact predictably.
- Rebuilt effect subscriptions after successful runs, retained prior subscriptions after failed runs, and cleaned up failed or collected weak effects.
- Made missing
StateStorekeys reactive without creating enumerable state, while preserving ordinary function property names as usable keys. - Added atomic reserved-key validation and cycle-safe deep wrapping and merging that preserves shared references.
Changed
- Added
effect.stop()and documented coalesced scheduling, synchronous cancellation, deep-store behavior, and reserved keys. - Strengthened CI with exclusive-test prevention, generated-bundle verification, and npm package validation.
- Updated
@fr0st/eslint-configfrom3.0.0to4.0.0and refreshed ESLint, Mocha, Rollup, Terser, and the lockfile. - Refreshed the published
dist/bundle artifacts and source maps.
v1.0.1
Maintenance release focused on development tooling updates. No runtime API changes.
Changed
- Updated
@fr0st/eslint-configfrom2.0.6to3.0.0. - Updated
rollupfrom4.59.1to4.60.0. - Refreshed
package-lock.jsonto capture the updated tooling dependency tree. - Refreshed the published
dist/bundle artifacts and source maps.
v1.0
Initial stable release of FrostState.
FrostState provides small reactive state primitives for values, effects, and keyed stores, with zero runtime dependencies and support for Node, bundlers, and a browser UMD bundle.
Highlights
- Added
useState(value)for callable reactive state accessors - Added
useEffect(callback, options)for dependency-tracked reactive effects - Added
StateStorefor proxy-backed keyed state - Added
StateStore.wrap(...)andStateStore.merge(...)for object-to-store workflows - Added browser UMD builds in
dist/exposed asglobalThis.State - Added JSDoc-powered IntelliSense across the public API
Runtime behavior
useEffect()runs immediately and schedules normal re-runs in a microtaskeffect.sync()is available for immediate re-executionStateStoreproperty reads return existing keys and property assignment writes keys- Missing
StateStoreproperty reads returnundefined - Missing keys read during effect tracking subscribe to later assignment without becoming visible keys
store.set(...)is shallow by default- Nested reactive stores are available through
StateStore.wrap(..., { deep: true })andStateStore.merge(..., { deep: true }) - API keys such as
use,set,has, andkeysare reserved
Quality
- Added test coverage for state access, effects, keyed stores, nested store behavior, reserved keys, and effect error handling
- Added CI for lint, test, build, and package validation
- Added npm publish workflow with provenance support
Notes
- The package is ESM-only
- Weak effects rely on
WeakRef