-
Notifications
You must be signed in to change notification settings - Fork 405
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
fix(ssr-compiler): harmonize some wire errors #5062
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I kept the todos which don't seem to be covered by tests. I could add tests for those and fix them, but it might be better to do in a follow-up PR.
'wire/errors/throws-on-computed-key/index.js', | ||
'wire/errors/throws-when-colliding-prop-then-method/index.js', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems there are some open questions regarding these two, which is discussed in several open issues such as:
- Warn on duplicate getters/setters/props/methods #5029
- @wire does not like computed property keys #4988
Among others... So I don't think this PR will address these.
/* | ||
* Copyright (c) 2024, Salesforce, Inc. | ||
* All rights reserved. | ||
* SPDX-License-Identifier: MIT | ||
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT | ||
*/ | ||
import { generateErrorMessage, type LWCErrorInfo } from '@lwc/errors'; | ||
|
||
// This type extracts the arguments in a string. Example: "Error {0} {1}" -> [string, string] | ||
type ExtractArguments<T extends string> = T extends `${string}{${number}}${infer R}` | ||
? [string, ...ExtractArguments<R>] | ||
: []; | ||
|
||
export function generateError<const T extends LWCErrorInfo>( | ||
error: T, | ||
...args: ExtractArguments<T['message']> | ||
): Error { | ||
return new Error(generateErrorMessage(error, args)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes sure placeholders in the error messages become required arguments so it's a type error if you miss any or provide extras.
}, | ||
}; | ||
} as const; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Allows typing the message placeholders (as described in the comment above). Hopefully this is ok.
} | ||
|
||
const hasTrack = decorators.some(({ expression }) => | ||
is.identifier(expression, { name: 'track' }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{ name: 'track' }
You can do that?! 🤯
Co-authored-by: Will Harney <[email protected]>
Co-authored-by: Will Harney <[email protected]>
Co-authored-by: Will Harney <[email protected]>
Co-authored-by: Will Harney <[email protected]>
? N extends Numbers // Is `N` in the union of seen numbers? | ||
? ExtractArguments<R, Numbers, Args> // new `N`, add an argument | ||
: ExtractArguments<R, N | Numbers, [string, ...Args]> // `N` already accounted for | ||
: Args; // No `N` found, nothing more to check |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great! I think in a post-PR fixup, we could potentially move this into @lwc/errors
itself, since other packages could benefit from better typing here (e.g. @lwc/babel-plugin-component
).
/nucleus test |
* test(ssr): add tests for nested elements in slots (#5048) * fix(compiler): log warning for missing name/namespace (#4825) * test(karma): remove unnecessary IE11-related code (#5054) * fix: replace barrel exports from `lwc` with `@lwc/ssr-runtime` (#5034) * fix: replace barrel from `lwc` package with '@lwc/ssr-runtime' * fix: handle * barrel case and corresponding tests * fix: function naming * fix: barrel import test parity * fix: include optional exported alias for export all declaration replacement, tests * chore: explain function name massaging in test * fix: deep clone objects and optimize tests * fix: remove unused shared file * test(karma): add test for for:each issue #4889 (#5053) * fix(ssr): missing bookends for slotted lwc:if not at the top-level (#5027) Co-authored-by: Nolan Lawson <[email protected]> * fix(ssr): fix HTML comment bookends for if blocks (#5055) Co-authored-by: Will Harney <[email protected]> * fix(ssr-compiler): namespace and name should be optional in ComponentTransformOptions (#5058) * test(ssr): test `if` with adjacent text (#5056) * test(karma): reduce #4889 even further (#5060) * fix(ssr): fix `style` attribute rendering (#5061) * fix(ssr-compiler): harmonize some wire errors (#5062) Co-authored-by: Will Harney <[email protected]> * fix: only call callback when needed @W-17420330 (#5064) * fix: only call callback when needed @W-17420330 * chore: simplify test * fix: use correct class check * fix(ssr): render from superclass (#5063) Co-authored-by: Nolan Lawson <[email protected]> * test(ssr): add more superclass tests (#5065) * fix: use correct shadow root @W-17441501 (#5070) * fix: use correct shadow root @W-17441501 * chore: yagni i guess * chore: 🛩️📦 * If you read this, tell me so! * fix(ssr): align csr and ssr reflective behavior (#5050) * chore: release v8.12.2 @W-17485572 (#5075) --------- Co-authored-by: Nolan Lawson <[email protected]> Co-authored-by: jhefferman-sfdc <[email protected]> Co-authored-by: Matheus Cardoso <[email protected]> Co-authored-by: Nolan Lawson <[email protected]> Co-authored-by: Eugene Kashida <[email protected]>
Details
Partially addresses #5032
Fixes 8 expected failures.
Does this pull request introduce a breaking change?
Does this pull request introduce an observable change?
GUS work item