-
Notifications
You must be signed in to change notification settings - Fork 1.3k
feat(qwik): Experimental support for synchronous QRL sync$()
.
#5545
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
Merged
+1,036
−220
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
✅ Deploy Preview for qwik-insights canceled.
|
7 tasks
Deploying with
|
Latest commit: |
787cd7f
|
Status: | ✅ Deploy successful! |
Preview URL: | https://153a6815.qwik-docs.pages.dev |
Branch Preview URL: | https://build-sync-qrl.qwik-docs.pages.dev |
78c2c11
to
ffba343
Compare
65693a4
to
371ad9b
Compare
$sync()
.sync$()
.
9248059
to
330322b
Compare
PatrickJS
approved these changes
Dec 12, 2023
works on my machine 👍 |
7 tasks
It is often desirable to have call API on events synchronously. For example, `event.preventDefault()` and `event.stopPropagation()` must be called synchronously in order to have a helpful effect. ```TypeScript <button onClick$={[ $sync(event => event.preventDefault()), $(() => { // normal behavior. }) ]}>Click Me</button> ``` The idea is that `$sync()` will be inlined into HTML. For this reason, the function, `$sync()`, must not only be a pure function but also can not depend on any external code, such as imports. The best way to think about it is that the function inside `$sync()` must be able to survive `fn.toString()` and then be reconstructed from the string into a proper function. In practice, this means that the function must be a simple function which can't: - Close over any state. - Close over any imports. Fix #5322 Fix #4496
* fix(qrl.ts): dedupe sync$ * refactor(core): sync$ inlineFns key
16f35b0
to
f52ee03
Compare
It is often desirable to have call API on events synchronously. For example, `event.preventDefault()` and `event.stopPropagation()` must be called synchronously in order to have a helpful effect. ```TypeScript <button onClick$={[ $sync(event => event.preventDefault()), $(() => { // normal behavior. }) ]}>Click Me</button> ``` The idea is that `$sync()` will be inlined into HTML. For this reason, the function, `$sync()`, must not only be a pure function but also can not depend on any external code, such as imports. The best way to think about it is that the function inside `$sync()` must be able to survive `fn.toString()` and then be reconstructed from the string into a proper function. In practice, this means that the function must be a simple function which can't: - Close over any state. - Close over any imports. Fix #5322 Fix #4496
f52ee03
to
787cd7f
Compare
kodiakhq bot
referenced
this pull request
in ascorbic/unpic-img
Dec 17, 2023
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@builder.io/qwik](https://qwik.builder.io/) ([source](https://togithub.com/BuilderIO/qwik/tree/HEAD/packages/qwik)) | [`1.3.0` -> `1.3.1`](https://renovatebot.com/diffs/npm/@builder.io%2fqwik/1.3.0/1.3.1) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>BuilderIO/qwik (@​builder.io/qwik)</summary> ### [`v1.3.1`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.3.1) [Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.3.0...v1.3.1) ##### What's Changed - fix(playground): block 1.3.0 by [@​wmertens](https://togithub.com/wmertens) in [https://github.com/BuilderIO/qwik/pull/5538](https://togithub.com/BuilderIO/qwik/pull/5538) - docs: show-updated-docs by [@​AmirSa12](https://togithub.com/AmirSa12) in [https://github.com/BuilderIO/qwik/pull/5516](https://togithub.com/BuilderIO/qwik/pull/5516) - docs: (add list item) Add qwik-d3 to the library list by [@​gilf](https://togithub.com/gilf) in [https://github.com/BuilderIO/qwik/pull/5544](https://togithub.com/BuilderIO/qwik/pull/5544) - docs: add qwik-storefront-ui library by [@​gioboa](https://togithub.com/gioboa) in [https://github.com/BuilderIO/qwik/pull/5548](https://togithub.com/BuilderIO/qwik/pull/5548) - docs: change image url by [@​gioboa](https://togithub.com/gioboa) in [https://github.com/BuilderIO/qwik/pull/5549](https://togithub.com/BuilderIO/qwik/pull/5549) - chore(starters): add type module to package.json by [@​nelsonprsousa](https://togithub.com/nelsonprsousa) in [https://github.com/BuilderIO/qwik/pull/5553](https://togithub.com/BuilderIO/qwik/pull/5553) - refactor(types): optimize, QRL props, PropsOf, track(Signal) type, ... by [@​wmertens](https://togithub.com/wmertens) in [https://github.com/BuilderIO/qwik/pull/5550](https://togithub.com/BuilderIO/qwik/pull/5550) - fix(repl): don't propose broken versions by [@​wmertens](https://togithub.com/wmertens) in [https://github.com/BuilderIO/qwik/pull/5560](https://togithub.com/BuilderIO/qwik/pull/5560) - fix: remove dependency on vitefu causing playground failures by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5562](https://togithub.com/BuilderIO/qwik/pull/5562) - fix: better deprecation notice on qwikevents by [@​wmertens](https://togithub.com/wmertens) in [https://github.com/BuilderIO/qwik/pull/5568](https://togithub.com/BuilderIO/qwik/pull/5568) - fix: use existing local .eslintrc configuration by [@​gioboa](https://togithub.com/gioboa) in [https://github.com/BuilderIO/qwik/pull/5563](https://togithub.com/BuilderIO/qwik/pull/5563) - test(lint): break up lint tests into separate files by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5572](https://togithub.com/BuilderIO/qwik/pull/5572) - refactor(qwik): add `__qwik_serializable__` brand to types by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5576](https://togithub.com/BuilderIO/qwik/pull/5576) - fix(lint): allow event methods to capture `PropFunction` by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5578](https://togithub.com/BuilderIO/qwik/pull/5578) - chore(eslint-plugin-qwik): add 'qwik/no-use-visible-task': 'warn' to strict by [@​maiieul](https://togithub.com/maiieul) in [https://github.com/BuilderIO/qwik/pull/5575](https://togithub.com/BuilderIO/qwik/pull/5575) - fix: `server$` and AbortSignal types by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5581](https://togithub.com/BuilderIO/qwik/pull/5581) - fix(qwik): restore bivarience hack by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5587](https://togithub.com/BuilderIO/qwik/pull/5587) - chore(insights): correct failing build by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5586](https://togithub.com/BuilderIO/qwik/pull/5586) - docs(usevisibletask$): reduce eslint noUseVisibleTask message + transfer to docs by [@​maiieul](https://togithub.com/maiieul) in [https://github.com/BuilderIO/qwik/pull/5583](https://togithub.com/BuilderIO/qwik/pull/5583) - docs: remove console warning by [@​gioboa](https://togithub.com/gioboa) in [https://github.com/BuilderIO/qwik/pull/5590](https://togithub.com/BuilderIO/qwik/pull/5590) - fix(qwik-city): Scroll Position doesn't reset to 0 when it was triggered by an Action. by [@​iamriajul](https://togithub.com/iamriajul) in [https://github.com/BuilderIO/qwik/pull/5588](https://togithub.com/BuilderIO/qwik/pull/5588) - feat(qwik): Experimental support for synchronous QRL `sync$()`. by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5545](https://togithub.com/BuilderIO/qwik/pull/5545) - chore: 1.3.1 by [@​mhevery](https://togithub.com/mhevery) in [https://github.com/BuilderIO/qwik/pull/5595](https://togithub.com/BuilderIO/qwik/pull/5595) ##### New Contributors - [@​AmirSa12](https://togithub.com/AmirSa12) made their first contribution in [https://github.com/BuilderIO/qwik/pull/5516](https://togithub.com/BuilderIO/qwik/pull/5516) - [@​iamriajul](https://togithub.com/iamriajul) made their first contribution in [https://github.com/BuilderIO/qwik/pull/5588](https://togithub.com/BuilderIO/qwik/pull/5588) **Full Changelog**: QwikDev/qwik@v1.3.0...v1.3.1 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 9pm on sunday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ascorbic/unpic-img). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuOTMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
It is often desirable to have call API on events synchronously. For example,
event.preventDefault()
andevent.stopPropagation()
must be called synchronously in order to have a helpful effect.The idea is that
$sync()
will be inlined into HTML. For this reason, the function,$sync()
, must not only be a pure function but also can not depend on any external code, such as imports.The best way to think about it is that the function inside
$sync()
must be able to survivefn.toString()
and then be reconstructed from the string into a proper function.In practice, this means that the function must be a simple function which can't:
Fix #5322
Fix #4496
Overview
What is it?
Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Use cases and why
Checklist: