Skip to content

Conversation

@Ocean-OS
Copy link
Member

@Ocean-OS Ocean-OS commented Jul 20, 2025

This adds the $effect.allowed rune, an advanced feature that indicates whether an effect or async derived can be created in the current context. Effects and async deriveds can only be created when a root effect is active, and previously, the only way to know this was to try creating an effect and checking if it threw an error.
Closes #16366.

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • Prefix your PR title with feat:, fix:, chore:, or docs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.
  • If this PR changes code within packages/svelte/src, add a changeset (npx changeset).

Tests and linting

  • Run the tests with pnpm test and lint the project with pnpm lint
@github-actions
Copy link
Contributor

Playground

pnpm add https://pkg.pr.new/svelte@16458 
@changeset-bot
Copy link

changeset-bot bot commented Jul 20, 2025

🦋 Changeset detected

Latest commit: dd46f3c

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

This PR includes changesets to release 1 package
Name Type
svelte Minor

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

@7nik
Copy link
Contributor

7nik commented Jul 21, 2025

A bit of bikeshading: the name active_root_effect() confuses me. Also, I like Rich's $effect.allowed() name as more close to the rune's purpose.

@Ocean-OS
Copy link
Member Author

Yeah, I couldn't really think of a concise name for active_root_effect
I'm fine with whatever name we choose for the rune (as long as it makes sense), so I'll change it in a bit

@Ocean-OS Ocean-OS changed the title feat: add $effect.active rune feat: add $effect.allowed rune Jul 21, 2025
@rChaoz
Copy link
Contributor

rChaoz commented Aug 5, 2025

What about adding a parameter to $effect.tracking to avoid confusion between the 2, like $effect.tracking(true)?

@Ocean-OS
Copy link
Member Author

Ocean-OS commented Aug 5, 2025

What would the parameter do?

@rChaoz
Copy link
Contributor

rChaoz commented Aug 5, 2025

Indicate if currently inside a root effect, rather than a regular effect/derived. So, effect creation is tracked (and hooked up to a lifecycle), but not dependencies.

I hope I didn't misunderstand how this works under the hood, but if correct, the parameter being root: boolean = false makes sense.

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

Labels

None yet

3 participants