Skip to content

Fix action() callbacks returning -1 corrupting the context - #265

Open
QuentinRoy wants to merge 3 commits into
matthewp:mainfrom
QuentinRoy:fix/action-return-value
Open

Fix action() callbacks returning -1 corrupting the context#265
QuentinRoy wants to merge 3 commits into
matthewp:mainfrom
QuentinRoy:fix/action-return-value

Conversation

@QuentinRoy

@QuentinRoy QuentinRoy commented Jul 30, 2026

Copy link
Copy Markdown

Summary

action() is supposed to ignore whatever the callback returns and keep the existing context (at least that's what the source tends to indicate, the docs seem outdated, c.f. #266).

There is a particularly edge case where it breaks: if the callback returns -1. The current implementation runs the result through !!~fn(ctx, ev) && ctx, and ~-1 becomes 0, so the reducer returns false instead of the original context.

I assume this somewhat surprising syntax was introduced to save bytes. Unless returning -1 from an action was intended as some kind of escape hatch to clear context, but I cannot think of any use case for it, and it is untested. So I suspect it is a bug. Fortunately, the fix is simple and even shorter (5 chars removed, 3 added, excluding white spaces):

export let action = fn => reduce((ctx, ev) => (fn(ctx, ev), ctx));

This change adds a regression test for that case and replaces the old reducer with the version above so action() always returns the existing context after running the callback.

Testing

  • npm test in packages/core
  • npm run bundlesize in packages/core

@changeset-bot

changeset-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

馃 Changeset detected

Latest commit: 550827e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
robot3 Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@QuentinRoy QuentinRoy changed the title Fix action() ignoring -1 return values Prevent action() returning -1 to break context Jul 30, 2026
@QuentinRoy QuentinRoy changed the title Prevent action() returning -1 to break context Fix action() callbacks returning -1 corrupting the context Jul 30, 2026
@matthewp

Copy link
Copy Markdown
Owner

Thanks! I'm AFK for another day, will review tomorrow. Looks good I think though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants