Release: Version Packages#67
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
ff0e2c9 to
e148ab2
Compare
e148ab2 to
3f59e87
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@supergrain/kernel@5.0.0
Major Changes
b61db1b: Split side-effect primitives into a new package,
@supergrain/husk.New package:
@supergrain/husk@supergrain/huskis the layer between kernel's reactive core and application-specific data layers. It ships five primitives + their React hooks:resource(initial, setup)— inline, one-off reactive function with cleanup. Reactive reads insetupdrive reruns.defineResource(initial, setup)— returns a reusableResourceFactory<Args, T>. Each factory call produces an independent instance; callers pass anargsFnthunk whose reactive reads drive reruns. Setup reads are NOT tracked in the factory form — "what triggers a rerun" lives at the call site.dispose(resource)— free function; stops a resource permanently. Idempotent, safe on any object.reactivePromise(asyncFn)— inline async envelope (data,error,isPending,isResolved,isRejected,isSettled,isReady,promise). Reactive reads inasyncFn's sync prefix drive reruns; previous runs abort viaAbortSignal. Matches SWR / TanStack Query / Apollo / silo field names.reactiveTask(asyncFn)— imperative.run(...)command. Same envelope asreactivePromise, no auto-tracking.modifier(fn)+useModifier(m, ...args)— element-scoped setup/teardown. Args flow through an internal ref so fresh closures per render don't re-register; signal reads inside setup trigger targeted re-attach on the element without re-rendering the component.Install:
BREAKING: removed from
@supergrain/kernelThe following were moved out of
@supergrain/kerneland@supergrain/kernel/reactinto@supergrain/huskand@supergrain/husk/react:resource,defineResource,dispose,ResourceContext,ResourceFactoryreactivePromise,ReactivePromisereactiveTask,ReactiveTaskuseResource,useReactivePromise,useReactiveTaskmodifier,useModifier,ModifierMigration
Kernel continues to export the reactive core (
createReactive,computed,effect,signal,batch) and state-centric React bindings (tracked,useReactive,useComputed,useSignalEffect,createStoreContext,For).Why the split
kernel's tagline is "reactive store for React."
resource/reactivePromise/reactiveTask/modifierare side-effect primitives built on top of reactivity — different concern, different audience. The ecosystem models these as separate layers (TanStack Query is separate from any state library). Separating lets each package iterate independently and keeps kernel focused on state.Fix: resources created inside
tracked()render now propagate correctlyWhile splitting, surfaced a correctness bug: resources created inside a
tracked()component's render body did not re-run on their own reactive reads (setup reads forresource, argsFn reads fordefineResource). Root cause: alien-signals'effect()links a new effect as a dep ofactiveSubwhen one exists, so the resource's effect was becoming nested under tracked's effect instead of standing alone. The resource's effect callback would no longer fire independently on its deps changing.Fix: resources now create their effect with
activeSubreset toundefined, so the effect is always top-level regardless of where the resource is instantiated. Module-scope usage was unaffected; anyone usinguseResource/useReactivePromise/useReactiveTaskinside atracked()component with reactive reads in setup/argsFn will see the expected behavior now.Minor Changes
d4a918b: Add reactive Map and Set support.
createReactive()now acceptsMapandSetvalues (as root state or as nested values). Reads (get,has,size, iteration) are tracked per-key; writes (set,delete,add,clear) notify only the affected subscribers.@supergrain/silobucket storage is migrated fromRecord<string, …>toMapto use the new reactive collection support.@supergrain/husk@0.2.0
Minor Changes
b61db1b: Split side-effect primitives into a new package,
@supergrain/husk.New package:
@supergrain/husk@supergrain/huskis the layer between kernel's reactive core and application-specific data layers. It ships five primitives + their React hooks:resource(initial, setup)— inline, one-off reactive function with cleanup. Reactive reads insetupdrive reruns.defineResource(initial, setup)— returns a reusableResourceFactory<Args, T>. Each factory call produces an independent instance; callers pass anargsFnthunk whose reactive reads drive reruns. Setup reads are NOT tracked in the factory form — "what triggers a rerun" lives at the call site.dispose(resource)— free function; stops a resource permanently. Idempotent, safe on any object.reactivePromise(asyncFn)— inline async envelope (data,error,isPending,isResolved,isRejected,isSettled,isReady,promise). Reactive reads inasyncFn's sync prefix drive reruns; previous runs abort viaAbortSignal. Matches SWR / TanStack Query / Apollo / silo field names.reactiveTask(asyncFn)— imperative.run(...)command. Same envelope asreactivePromise, no auto-tracking.modifier(fn)+useModifier(m, ...args)— element-scoped setup/teardown. Args flow through an internal ref so fresh closures per render don't re-register; signal reads inside setup trigger targeted re-attach on the element without re-rendering the component.Install:
BREAKING: removed from
@supergrain/kernelThe following were moved out of
@supergrain/kerneland@supergrain/kernel/reactinto@supergrain/huskand@supergrain/husk/react:resource,defineResource,dispose,ResourceContext,ResourceFactoryreactivePromise,ReactivePromisereactiveTask,ReactiveTaskuseResource,useReactivePromise,useReactiveTaskmodifier,useModifier,ModifierMigration
Kernel continues to export the reactive core (
createReactive,computed,effect,signal,batch) and state-centric React bindings (tracked,useReactive,useComputed,useSignalEffect,createStoreContext,For).Why the split
kernel's tagline is "reactive store for React."
resource/reactivePromise/reactiveTask/modifierare side-effect primitives built on top of reactivity — different concern, different audience. The ecosystem models these as separate layers (TanStack Query is separate from any state library). Separating lets each package iterate independently and keeps kernel focused on state.Fix: resources created inside
tracked()render now propagate correctlyWhile splitting, surfaced a correctness bug: resources created inside a
tracked()component's render body did not re-run on their own reactive reads (setup reads forresource, argsFn reads fordefineResource). Root cause: alien-signals'effect()links a new effect as a dep ofactiveSubwhen one exists, so the resource's effect was becoming nested under tracked's effect instead of standing alone. The resource's effect callback would no longer fire independently on its deps changing.Fix: resources now create their effect with
activeSubreset toundefined, so the effect is always top-level regardless of where the resource is instantiated. Module-scope usage was unaffected; anyone usinguseResource/useReactivePromise/useReactiveTaskinside atracked()component with reactive reads in setup/argsFn will see the expected behavior now.Patch Changes
@supergrain/mill@5.0.0
Patch Changes
@supergrain/queries@0.0.3
Patch Changes
@supergrain/silo@5.0.0
Patch Changes
js-framework-benchmark-react-hooks-comparison@1.0.4
Patch Changes