Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

future-proof invalidate() #6493

Merged
merged 9 commits into from
Sep 1, 2022
Merged

future-proof invalidate() #6493

merged 9 commits into from
Sep 1, 2022

Conversation

Rich-Harris
Copy link
Member

@Rich-Harris Rich-Harris commented Aug 31, 2022

Closes #6354.

Related to #6489, #6274 and #5305 (we can remove the breaking change label from the latter two once this is merged).

It's very possible that we'd need to add an options object to invalidate(...) in future. Since overloaded functions are a terrible idea, that'd mean that to accommodate the no-argument case where you want to invalidate everything, we'd have to do this...

invalidate(undefined, {...});

...which is sinful. A better approach, which happens to be clearer and easier to document, is to create a new invalidateAll function:

<script>
-  import { invalidate } from '$app/navigation';
+  import { invalidateAll } from '$app/navigation';
</script>

-<button on:click={() => invalidate()}>reload</button>
+<button on:click={() => invalidateAll()}>reload</button>

Separately, I think it's probably more useful if the predicate form takes a URL instead of a string:

-invalidate((dep) => dep.includes('/some/matched/pathname'));
+invalidate((url) => url.pathname.startsWith('/some/matched/pathname'));

Unfortunately this second part is the sort of breaking change that's basically impossible to add a runtime error for. If people think a string (i.e. url.href) is preferable, then we could keep it as it is.

Please don't delete this checklist! 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
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests

  • Run the tests with pnpm test and lint the project with pnpm lint and pnpm check

Changesets

  • If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpm changeset and following the prompts. All changesets should be patch until SvelteKit 1.0

@changeset-bot
Copy link

changeset-bot bot commented Aug 31, 2022

🦋 Changeset detected

Latest commit: 6657fc9

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

This PR includes changesets to release 2 packages
Name Type
@sveltejs/kit Patch
create-svelte 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

@dummdidumm dummdidumm merged commit db51d12 into master Sep 1, 2022
@dummdidumm dummdidumm deleted the future-proof-invalidate branch September 1, 2022 08:53
@github-actions github-actions bot mentioned this pull request Sep 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

invalidate('...') doesn't work after navigating to a page with parameters
3 participants