breaking: return bound query instance from requested#15739
Conversation
🦋 Changeset detectedLatest commit: 157d2b7 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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
left a comment
There was a problem hiding this comment.
Stellar work, just a few comments
| * the post-validation argument type. Do not read this property; it will always | ||
| * be `undefined`. Prefixed with `~` to sort to the bottom of IntelliSense. | ||
| */ | ||
| readonly ['~validated']?: Validated; |
There was a problem hiding this comment.
Our internal code doesn't use this either - is this really needed?
There was a problem hiding this comment.
It does -- it's how requested can figure out the type of arg. Without this property, the post-validation output type isn't stored anywhere, so it can't be used for later inference. Does that make sense? Happy to see a better way to do this 😆
There was a problem hiding this comment.
Figured out how to do it without
f499a45
into
main
This PR was opened by the [Changesets release](https://github.com/changesets/action) 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 ## @sveltejs/kit@2.58.0 ### Minor Changes - breaking: require `limit` in `requested` (as originally intended) ([#15739](#15739)) - feat: `RemoteQueryFunction` gains an optional third generic parameter `Validated` (defaulting to `Input`) that represents the argument type after schema validation/transformation ([#15739](#15739)) - breaking: `requested` now yields `{ arg, query }` entries instead of the validated argument ([#15739](#15739)) ### Patch Changes - fix: allow `query().current`, `.error`, `.loading`, and `.ready` to work in non-reactive contexts ([#15699](#15699)) - fix: prevent `deep_set` crash on nullish nested values ([#15600](#15600)) - fix: restore correct `RemoteFormFields` typing for nullable array fields (e.g. when a schema uses `.default([])`), so `.as('checkbox')` and friends work again ([#15723](#15723)) - fix: don't warn about removed SSI comments in `transformPageChunk` ([#15695](#15695)) Server-side include (SSI) directives like `<!--#include virtual="..." -->` are HTML comments that are replaced by servers such as nginx. Previously, removing them in `transformPageChunk` would trigger a false positive warning about breaking Svelte's hydration. Since SSI comments always start with `<!--#` and Svelte's hydration comments never do, they can be safely excluded from the check. - Change enhance function return type from void to MaybePromise<void>. ([#15710](#15710)) - fix: throw an error when `resolve` is called with an external URL ([#15733](#15733)) - fix: avoid FOUC for CSR-only pages by loading styles and fonts before CSR starts ([#15718](#15718)) - fix: reset form result on redirect ([#15724](#15724)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Alternative to #15738
Closes #15696
I realized while reviewing that there's a fundamental problem: If the query's validator lossily changes the input, there's no way to map the validated input back to the correct argument. Consider a validator that calls
Math.flooron its input number, then consider the following:This realization in hand, I further realized the only way to make this work is to somehow preserve the mapping of input arguments to validated arguments. The best way to do that is to return a bound instance of the query from
requested:Problem solved; the
queryinternally maintains the map of input argument => validated argument. Theargis still the validated argument in case you need to do something likeif (arg.id === id).