Skip to content

Releases: frost-js/state

v1.1.3

Choose a tag to compare

@elusivecodes elusivecodes released this 05 Sep 13:17

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(), and Object.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

Choose a tag to compare

@elusivecodes elusivecodes released this 29 Aug 06:58

Patch release focused on repository branding and maintenance consistency. No runtime or breaking API changes.

Changed

  • Moved the source repository to frost-js/state and 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-config from 5.0.2 to 5.0.3 and refreshed the tooling dependency lockfile.

v1.1.1

Choose a tag to compare

@elusivecodes elusivecodes released this 28 Aug 23:36

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, and prototype on a StateStore.
  • Reserved those intrinsic keys without partially storing rejected assignments, while preserving name and length as enumerable state keys.

Changed

  • Added regression coverage for callable proxy property access and reorganized tests into test/unit and test/support.
  • Expanded private StateStore JSDoc and clarified package-root ESM and public dist and src subpath usage.
  • Updated @fr0st/eslint-config from 5.0.1 to 5.0.2 and refreshed the tooling dependency lockfile.
  • Normalized GitHub Actions workflow file permissions and refreshed the published dist/ bundle artifacts and source maps.

v1.1.0

Choose a tag to compare

@elusivecodes elusivecodes released this 28 Aug 13:11

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-config from 5.0.0 to 5.0.1 and refreshed ESLint and the tooling lockfile.
  • Refreshed the published dist/ bundle artifacts and source maps.

v1.0.3

Choose a tag to compare

@elusivecodes elusivecodes released this 27 Aug 07:05

Maintenance release focused on development tooling consistency and test organization. No runtime API changes.

Changed

  • Renamed the development scripts to bundle, lint, and minify, and updated the build command, GitHub Actions workflows, and documentation.
  • Updated @fr0st/eslint-config from 4.0.0 to 5.0.0 and refreshed the tooling dependency lockfile.
  • Moved the shared test tick helper into test/support.js.
  • Normalized the GitHub Actions workflow files to LF line endings.

v1.0.2

Choose a tag to compare

@elusivecodes elusivecodes released this 15 Aug 06:58

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 StateStore keys 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-config from 3.0.0 to 4.0.0 and refreshed ESLint, Mocha, Rollup, Terser, and the lockfile.
  • Refreshed the published dist/ bundle artifacts and source maps.

v1.0.1

Choose a tag to compare

@elusivecodes elusivecodes released this 22 Mar 13:04

Maintenance release focused on development tooling updates. No runtime API changes.

Changed

  • Updated @fr0st/eslint-config from 2.0.6 to 3.0.0.
  • Updated rollup from 4.59.1 to 4.60.0.
  • Refreshed package-lock.json to capture the updated tooling dependency tree.
  • Refreshed the published dist/ bundle artifacts and source maps.

v1.0

Choose a tag to compare

@elusivecodes elusivecodes released this 21 Mar 12:07

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 StateStore for proxy-backed keyed state
  • Added StateStore.wrap(...) and StateStore.merge(...) for object-to-store workflows
  • Added browser UMD builds in dist/ exposed as globalThis.State
  • Added JSDoc-powered IntelliSense across the public API

Runtime behavior

  • useEffect() runs immediately and schedules normal re-runs in a microtask
  • effect.sync() is available for immediate re-execution
  • StateStore property reads return existing keys and property assignment writes keys
  • Missing StateStore property reads return undefined
  • 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 }) and StateStore.merge(..., { deep: true })
  • API keys such as use, set, has, and keys are 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