diff --git a/packages/qwik/src/optimizer/core/src/inlined_fn.rs b/packages/qwik/src/optimizer/core/src/inlined_fn.rs
index bac3d46e4a9..61296d96e2e 100644
--- a/packages/qwik/src/optimizer/core/src/inlined_fn.rs
+++ b/packages/qwik/src/optimizer/core/src/inlined_fn.rs
@@ -8,6 +8,7 @@ use swc_ecmascript::ast;
use swc_ecmascript::codegen::text_writer::JsWriter;
use swc_ecmascript::transforms::fixer;
use swc_ecmascript::transforms::hygiene::hygiene_with_config;
+use swc_ecmascript::transforms::optimization;
use swc_ecmascript::visit::{Visit, VisitWith};
use swc_ecmascript::{
utils::private_ident,
@@ -199,6 +200,10 @@ pub fn render_expr(expr: &ast::Expr) -> String {
};
expr.visit_mut_with(&mut hygiene_with_config(Default::default()));
expr.visit_mut_with(&mut fixer(None));
+ expr.visit_mut_with(&mut optimization::simplify::dce::dce(
+ Default::default(),
+ Default::default(),
+ ));
emitter
.emit_module(&ast::Module {
span: DUMMY_SP,
diff --git a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_drop_side_effects.snap b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_drop_side_effects.snap
index be9a0ec0531..4216034d5db 100644
--- a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_drop_side_effects.snap
+++ b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_drop_side_effects.snap
@@ -1,8 +1,7 @@
---
source: packages/qwik/src/optimizer/core/src/test.rs
-assertion_line: 821
+assertion_line: 822
expression: output
-snapshot_kind: text
---
==INPUT==
@@ -39,9 +38,9 @@ export default component$(() => {
============================= test.js ==
import { serverQrl } from "@qwik.dev/router";
+import { qrlDEV } from "@qwik.dev/core";
import { _noopQrlDEV } from "@qwik.dev/core";
import { componentQrl } from "@qwik.dev/core";
-import { qrlDEV } from "@qwik.dev/core";
const i_LUXeXe0DQrg = ()=>import("./test.tsx_test_component_LUXeXe0DQrg");
import { sideEffect } from './secret';
(function() {
@@ -93,6 +92,34 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
]
}
*/
+============================= test.tsx_api_server_JonPp043gH0.js (ENTRY POINT)==
+
+export const api_server_JonPp043gH0 = ()=>{
+ supabase.from('ffg').do(dfd);
+};
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"sCAoB2B;IAC1B,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "api_server_JonPp043gH0",
+ "entry": null,
+ "displayName": "test.tsx_api_server",
+ "hash": "JonPp043gH0",
+ "canonicalFilename": "test.tsx_api_server_JonPp043gH0",
+ "path": "",
+ "extension": "js",
+ "parent": null,
+ "ctxKind": "function",
+ "ctxName": "server$",
+ "captures": false,
+ "loc": [
+ 433,
+ 473
+ ]
+}
+*/
============================= test.tsx_test_component_LUXeXe0DQrg.js (ENTRY POINT)==
import { _jsxSorted } from "@qwik.dev/core";
diff --git a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_noop_dev_mode.snap b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_noop_dev_mode.snap
index dc3704fd721..e4149015d66 100644
--- a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_noop_dev_mode.snap
+++ b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_noop_dev_mode.snap
@@ -1,8 +1,7 @@
---
source: packages/qwik/src/optimizer/core/src/test.rs
-assertion_line: 3814
+assertion_line: 3816
expression: output
-snapshot_kind: text
---
==INPUT==
@@ -45,6 +44,39 @@ export const App = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrlDEV(i_ckEPmXZlub0
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;;AAGA,OAAO,MAAM,oBAAM;;;;;IAoBhB\"}")
+============================= test.tsx_App_component_Cmp_p_shouldRemove_uU0MG0jvQD4.js (ENTRY POINT)==
+
+import { useLexicalScope } from "@qwik.dev/core";
+export const App_component_Cmp_p_shouldRemove_uU0MG0jvQD4 = ()=>{
+ const [stuff] = useLexicalScope();
+ return stuff.count;
+};
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";4DAgBmB;;WAAM,MAAM,KAAK\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "App_component_Cmp_p_shouldRemove_uU0MG0jvQD4",
+ "entry": null,
+ "displayName": "test.tsx_App_component_Cmp_p_shouldRemove",
+ "hash": "uU0MG0jvQD4",
+ "canonicalFilename": "test.tsx_App_component_Cmp_p_shouldRemove_uU0MG0jvQD4",
+ "path": "",
+ "extension": "js",
+ "parent": "App_component_ckEPmXZlub0",
+ "ctxKind": "eventHandler",
+ "ctxName": "shouldRemove$",
+ "captures": true,
+ "loc": [
+ 350,
+ 367
+ ],
+ "captureNames": [
+ "stuff"
+ ]
+}
+*/
============================= test.tsx_App_component_ckEPmXZlub0.js (ENTRY POINT)==
import { _jsxSorted } from "@qwik.dev/core";
@@ -116,6 +148,66 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
]
}
*/
+============================= test.tsx_App_component_serverStuff_ebyHaP15ytQ.js (ENTRY POINT)==
+
+import { useLexicalScope } from "@qwik.dev/core";
+export const App_component_serverStuff_ebyHaP15ytQ = async ()=>{
+ const [stuff] = useLexicalScope();
+ // should be removed but keep scope
+ console.log(stuff.count);
+};
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";qDAKc;;IACZ,mCAAmC;IACnC,QAAQ,GAAG,CAAC,MAAM,KAAK\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "App_component_serverStuff_ebyHaP15ytQ",
+ "entry": null,
+ "displayName": "test.tsx_App_component_serverStuff",
+ "hash": "ebyHaP15ytQ",
+ "canonicalFilename": "test.tsx_App_component_serverStuff_ebyHaP15ytQ",
+ "path": "",
+ "extension": "js",
+ "parent": "App_component_ckEPmXZlub0",
+ "ctxKind": "function",
+ "ctxName": "serverStuff$",
+ "captures": true,
+ "loc": [
+ 154,
+ 235
+ ],
+ "captureNames": [
+ "stuff"
+ ]
+}
+*/
+============================= test.tsx_App_component_Cmp_p_onClick_vuXzfUTkpto.js (ENTRY POINT)==
+
+export const App_component_Cmp_p_onClick_vuXzfUTkpto = ()=>console.log('warn');
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"uDAiBc,IAAM,QAAQ,GAAG,CAAC\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "App_component_Cmp_p_onClick_vuXzfUTkpto",
+ "entry": null,
+ "displayName": "test.tsx_App_component_Cmp_p_onClick",
+ "hash": "vuXzfUTkpto",
+ "canonicalFilename": "test.tsx_App_component_Cmp_p_onClick_vuXzfUTkpto",
+ "path": "",
+ "extension": "js",
+ "parent": "App_component_ckEPmXZlub0",
+ "ctxKind": "eventHandler",
+ "ctxName": "onClick$",
+ "captures": false,
+ "loc": [
+ 383,
+ 408
+ ]
+}
+*/
== DIAGNOSTICS ==
[]
diff --git a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_reg_ctx_name_segments.snap b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_reg_ctx_name_segments.snap
index a12d1260b39..93eb400feef 100644
--- a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_reg_ctx_name_segments.snap
+++ b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_reg_ctx_name_segments.snap
@@ -1,8 +1,7 @@
---
source: packages/qwik/src/optimizer/core/src/test.rs
-assertion_line: 865
+assertion_line: 866
expression: output
-snapshot_kind: text
---
==INPUT==
@@ -13,7 +12,7 @@ export const Works = component$((props) => {
const text = 'hola';
return (
<>
-
console.log('in server', text))}>
+ server$(() => console.log('in server', text))}>
foo()}>
>
);
@@ -23,25 +22,23 @@ export const Works = component$((props) => {
import "./foo";
import { componentQrl } from "@qwik.dev/core";
-import { serverQrl } from "@qwik.dev/core";
-import { _regSymbol } from "@qwik.dev/core";
import { inlinedQrl } from "@qwik.dev/core";
-import { _jsxSorted } from "@qwik.dev/core";
import { _noopQrl } from "@qwik.dev/core";
+import { _jsxSorted } from "@qwik.dev/core";
import { Fragment as _Fragment } from "@qwik.dev/core/jsx-runtime";
export const Works = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl((props)=>{
return /*#__PURE__*/ _jsxSorted(_Fragment, null, null, [
- /*#__PURE__*/ _jsxSorted("div", {
- onClick$: serverQrl(/*#__PURE__*/ inlinedQrl(/*#__PURE__*/ _regSymbol(()=>console.log('in server', 'hola'), "gcSPFNpGYgg"), "Works_component_Fragment_div_onClick_server_gcSPFNpGYgg"))
- }, null, null, 2, null),
/*#__PURE__*/ _jsxSorted("div", null, {
onClick$: /*#__PURE__*/ _noopQrl("Works_component_Fragment_div_onClick_nO4DPVZWP7g")
+ }, null, 3, null),
+ /*#__PURE__*/ _jsxSorted("div", null, {
+ onClick$: /*#__PURE__*/ _noopQrl("Works_component_Fragment_div_onClick_1_GlJs0t0HdXk")
}, null, 3, null)
- ], 1, "u6_0");
+ ], 3, "u6_0");
}, "Works_component_t45qL4vNGv0"));
-Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;;;;;;;AAGA,OAAO,MAAM,sBAAQ,sCAAW,CAAC;IAEhC,qBACC;sBACA,WAAC;YAAI,UAAU,4DAAQ,IAAM,QAAQ,GAAG,CAAC,aAH7B;;sBAIZ,WAAC;YAAI,QAAQ;;;AAGf,mCAAG\"}")
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;;;;;AAGA,OAAO,MAAM,sBAAQ,sCAAW,CAAC;IAEhC,qBACC;sBACA,WAAC;YAAI,QAAQ;;sBACb,WAAC;YAAI,QAAQ;;;AAGf,mCAAG\"}")
== DIAGNOSTICS ==
[]
diff --git a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_client_code.snap b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_client_code.snap
index 3c8cf855aa1..90cbd6aeb68 100644
--- a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_client_code.snap
+++ b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_client_code.snap
@@ -1,8 +1,7 @@
---
source: packages/qwik/src/optimizer/core/src/test.rs
-assertion_line: 1929
+assertion_line: 1930
expression: output
-snapshot_kind: text
---
==INPUT==
@@ -28,6 +27,7 @@ export const Parent = component$(() => {
useTask$(() => {
// Code
+ runSomething();
});
return (
@@ -50,11 +50,11 @@ import "./keep";
import "../keep2";
import { componentQrl } from "@qwik.dev/core";
import { useClientMountQrl } from "@qwik.dev/core";
+import { useLexicalScope } from "@qwik.dev/core";
+import { inlinedQrl } from "@qwik.dev/core";
import { _noopQrl } from "@qwik.dev/core";
import { useTaskQrl } from "@qwik.dev/core";
-import { inlinedQrl } from "@qwik.dev/core";
import { _wrapProp } from "@qwik.dev/core";
-import { useLexicalScope } from "@qwik.dev/core";
import { _jsxSorted } from "@qwik.dev/core";
import { useStore } from '@qwik.dev/core';
export const Parent = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(()=>{
@@ -66,7 +66,8 @@ export const Parent = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(()=>{
state
]));
useTaskQrl(/*#__PURE__*/ inlinedQrl(()=>{
- // Code
+ // Code
+ runSomething();
}, "Parent_component_useTask_ngmvcygWux8"));
return /*#__PURE__*/ _jsxSorted("div", null, {
shouldRemove$: /*#__PURE__*/ _noopQrl("Parent_component_div_shouldRemove_EBj69wTX1do", [
@@ -90,7 +91,7 @@ export const Parent = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(()=>{
}, "Parent_component_t6Wy3C0Q0XM"));
-Some("{\"version\":3,\"sources\":[\"/user/qwik/src/components/component.tsx\"],\"names\":[],\"mappings\":\";;;;;;;;;;AACA,SAAsC,QAAQ,QAAkB,iBAAiB;AAQjF,OAAO,MAAM,uBAAS,sCAAW;IAChC,MAAM,QAAQ,SAAS;QACtB,MAAM;IACP;IAEA,qBAAqB;IACrB;;;IAKA,oCAAS;IACR,OAAO;IACR;IAEA,qBACC,WAAC;QACA,aAAa;;;QACb,QAAQ;;;;sBAER,WAAC;YACA,QAAQ,2BAAE,IAAM,QAAQ,GAAG,CAAC;YAC5B,OAAO,2BAAE;;uBAAM,MAAM,IAAI;;;;;kBAEzB;;AAGJ,oCAAG\"}")
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/components/component.tsx\"],\"names\":[],\"mappings\":\";;;;;;;;;;AACA,SAAsC,QAAQ,QAAkB,iBAAiB;AAQjF,OAAO,MAAM,uBAAS,sCAAW;IAChC,MAAM,QAAQ,SAAS;QACtB,MAAM;IACP;IAEA,qBAAqB;IACrB;;;IAKA,oCAAS;QACR,OAAO;QACP;IACD;IAEA,qBACC,WAAC;QACA,aAAa;;;QACb,QAAQ;;;;sBAER,WAAC;YACA,QAAQ,2BAAE,IAAM,QAAQ,GAAG,CAAC;YAC5B,OAAO,2BAAE;;uBAAM,MAAM,IAAI;;;;;kBAEzB;;AAGJ,oCAAG\"}")
== DIAGNOSTICS ==
[]
diff --git a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_server_code.snap b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_server_code.snap
index 4a07442bbf6..146fa7a7e4b 100644
--- a/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_server_code.snap
+++ b/packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_strip_server_code.snap
@@ -1,8 +1,7 @@
---
source: packages/qwik/src/optimizer/core/src/test.rs
-assertion_line: 1822
+assertion_line: 1823
expression: output
-snapshot_kind: text
---
==INPUT==
@@ -28,10 +27,10 @@ export const Parent = component$(() => {
serverStuff$(async () => {
// should be removed too
const a = $(() => {
- // from $(), should not be removed
+ dontRemoveThisDollar();
});
const b = client$(() => {
- // from clien$(), should not be removed
+ dontRemoveThisClient();
});
return [a,b];
})
@@ -39,7 +38,7 @@ export const Parent = component$(() => {
serverLoader$(handler);
useTask$(() => {
- // Code
+ runSomething();
});
return (
@@ -97,11 +96,11 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
============================= test.tsx_Parent_component_serverStuff_a_2ca3HLDC7yc.js (ENTRY POINT)==
export const s_2ca3HLDC7yc = ()=>{
-// from $(), should not be removed
+ dontRemoveThisDollar();
};
-Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAqBc;AACX,kCAAkC;AACnC\"}")
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAqBc;IACX;AACD\"}")
/*
{
"origin": "test.tsx",
@@ -118,18 +117,18 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
"captures": false,
"loc": [
538,
- 587
+ 576
]
}
*/
============================= test.tsx_Parent_component_serverStuff_b_client_v9qawr2Inkk.js (ENTRY POINT)==
export const s_v9qawr2Inkk = ()=>{
-// from clien$(), should not be removed
+ dontRemoveThisClient();
};
-Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAwBoB;AACjB,uCAAuC;AACxC\"}")
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAwBoB;IACjB;AACD\"}")
/*
{
"origin": "test.tsx",
@@ -145,8 +144,35 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
"ctxName": "client$",
"captures": false,
"loc": [
- 610,
- 664
+ 599,
+ 637
+ ]
+}
+*/
+============================= test.tsx_Parent_component_serverLoader_k1L0DiPQV1I.js (ENTRY POINT)==
+
+import { handler } from "serverless";
+export const s_k1L0DiPQV1I = handler;
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";6BA8Be\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "s_k1L0DiPQV1I",
+ "entry": null,
+ "displayName": "test.tsx_Parent_component_serverLoader",
+ "hash": "k1L0DiPQV1I",
+ "canonicalFilename": "test.tsx_Parent_component_serverLoader_k1L0DiPQV1I",
+ "path": "",
+ "extension": "js",
+ "parent": "s_0TaiDayHrlo",
+ "ctxKind": "function",
+ "ctxName": "serverLoader$",
+ "captures": false,
+ "loc": [
+ 676,
+ 683
]
}
*/
@@ -197,7 +223,7 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
"captures": false,
"loc": [
279,
- 835
+ 816
]
}
*/
@@ -222,19 +248,57 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
"ctxName": "onClick$",
"captures": false,
"loc": [
- 775,
- 802
+ 756,
+ 783
+ ]
+}
+*/
+============================= test.tsx_Parent_component_serverStuff_r1qAHX7Opp0.js (ENTRY POINT)==
+
+import { clientQrl } from "@qwik.dev/core";
+import { qrl } from "@qwik.dev/core";
+const i_2ca3HLDC7yc = ()=>import("./test.tsx_Parent_component_serverStuff_a_2ca3HLDC7yc");
+const i_v9qawr2Inkk = ()=>import("./test.tsx_Parent_component_serverStuff_b_client_v9qawr2Inkk");
+export const s_r1qAHX7Opp0 = async ()=>{
+ // should be removed too
+ const a = /*#__PURE__*/ qrl(i_2ca3HLDC7yc, "s_2ca3HLDC7yc");
+ const b = clientQrl(/*#__PURE__*/ qrl(i_v9qawr2Inkk, "s_v9qawr2Inkk"));
+ return [
+ a,
+ b
+ ];
+};
+
+
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;;;6BAmBc;IACZ,wBAAwB;IACxB,MAAM;IAGN,MAAM,IAAI;IAGV,OAAO;QAAC;QAAE;KAAE;AACb\"}")
+/*
+{
+ "origin": "test.tsx",
+ "name": "s_r1qAHX7Opp0",
+ "entry": null,
+ "displayName": "test.tsx_Parent_component_serverStuff",
+ "hash": "r1qAHX7Opp0",
+ "canonicalFilename": "test.tsx_Parent_component_serverStuff_r1qAHX7Opp0",
+ "path": "",
+ "extension": "js",
+ "parent": "s_0TaiDayHrlo",
+ "ctxKind": "function",
+ "ctxName": "serverStuff$",
+ "captures": false,
+ "loc": [
+ 483,
+ 658
]
}
*/
============================= test.tsx_Parent_component_useTask_1_P8oRQhHsurk.js (ENTRY POINT)==
export const s_P8oRQhHsurk = ()=>{
-// Code
+ runSomething();
};
-Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAgCU;AACR,OAAO;AACR\"}")
+Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"6BAgCU;IACR;AACD\"}")
/*
{
"origin": "test.tsx",
@@ -250,8 +314,8 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
"ctxName": "useTask$",
"captures": false,
"loc": [
- 724,
- 744
+ 697,
+ 725
]
}
*/
diff --git a/packages/qwik/src/optimizer/core/src/test.rs b/packages/qwik/src/optimizer/core/src/test.rs
index f267b977b76..347c3727a89 100644
--- a/packages/qwik/src/optimizer/core/src/test.rs
+++ b/packages/qwik/src/optimizer/core/src/test.rs
@@ -871,7 +871,7 @@ export const Works = component$((props) => {
const text = 'hola';
return (
<>
- console.log('in server', text))}>
+ server$(() => console.log('in server', text))}>
foo()}>
>
);
@@ -1843,10 +1843,10 @@ export const Parent = component$(() => {
serverStuff$(async () => {
// should be removed too
const a = $(() => {
- // from $(), should not be removed
+ dontRemoveThisDollar();
});
const b = client$(() => {
- // from clien$(), should not be removed
+ dontRemoveThisClient();
});
return [a,b];
})
@@ -1854,7 +1854,7 @@ export const Parent = component$(() => {
serverLoader$(handler);
useTask$(() => {
- // Code
+ runSomething();
});
return (
@@ -1950,6 +1950,7 @@ export const Parent = component$(() => {
useTask$(() => {
// Code
+ runSomething();
});
return (
diff --git a/packages/qwik/src/optimizer/core/src/transform.rs b/packages/qwik/src/optimizer/core/src/transform.rs
index e00561f347d..de12bad0be3 100644
--- a/packages/qwik/src/optimizer/core/src/transform.rs
+++ b/packages/qwik/src/optimizer/core/src/transform.rs
@@ -685,30 +685,9 @@ impl<'a> QwikTransform<'a> {
hash,
};
let should_emit = self.should_emit_segment(&segment_data);
- if should_emit {
- for id in &segment_data.local_idents {
- if !self.options.global_collect.exports.contains_key(id) {
- if self.options.global_collect.root.contains_key(id) {
- self.ensure_export(id);
- }
- if invalid_decl.iter().any(|entry| entry.0 == *id) {
- HANDLER.with(|handler| {
- handler
- .struct_err_with_code(
- &format!(
- "Reference to identifier '{}' can not be used inside a Qrl($) scope because it's a function",
- id.0
- ),
- errors::get_diagnostic_id(errors::Error::FunctionReference),
- )
- .emit();
- });
- }
- }
- }
- }
- if !should_emit {
- (self.create_noop_qrl(&symbol_name, segment_data), is_const)
+
+ let result = if is_empty_function(&folded) {
+ self.create_noop_qrl(&symbol_name, segment_data.clone())
} else if self.is_inline() {
let folded = if !segment_data.scoped_idents.is_empty() {
let new_local = self.ensure_core_import(&USE_LEXICAL_SCOPE);
@@ -728,15 +707,41 @@ impl<'a> QwikTransform<'a> {
} else {
folded
};
- (
- self.create_inline_qrl(segment_data, folded, symbol_name, span),
- is_const,
- )
+ self.create_inline_qrl(segment_data.clone(), folded, symbol_name.clone(), span)
} else {
- (
- self.create_segment(segment_data, folded, symbol_name, span, segment_hash),
- is_const,
+ self.create_segment(
+ segment_data.clone(),
+ folded,
+ symbol_name.clone(),
+ span,
+ segment_hash,
)
+ };
+
+ if should_emit {
+ for id in &segment_data.local_idents {
+ if !self.options.global_collect.exports.contains_key(id) {
+ if self.options.global_collect.root.contains_key(id) {
+ self.ensure_export(id);
+ }
+ if invalid_decl.iter().any(|entry| entry.0 == *id) {
+ HANDLER.with(|handler| {
+ handler
+ .struct_err_with_code(
+ &format!(
+ "Reference to identifier '{}' can not be used inside a Qrl($) scope because it's a function",
+ id.0
+ ),
+ errors::get_diagnostic_id(errors::Error::FunctionReference),
+ )
+ .emit();
+ });
+ }
+ }
+ }
+ (result, is_const)
+ } else {
+ (self.create_noop_qrl(&symbol_name, segment_data), is_const)
}
}
@@ -2737,6 +2742,21 @@ fn is_text_only(node: &str) -> bool {
)
}
+fn is_empty_function(expr: &ast::Expr) -> bool {
+ match expr {
+ ast::Expr::Arrow(arrow) => match &*arrow.body {
+ ast::BlockStmtOrExpr::BlockStmt(block) => block.stmts.is_empty(),
+ ast::BlockStmtOrExpr::Expr(_) => false,
+ },
+ ast::Expr::Fn(fn_expr) => fn_expr
+ .function
+ .body
+ .as_ref()
+ .map_or(true, |body| body.stmts.is_empty()),
+ _ => false,
+ }
+}
+
fn process_node_props(pat: &ast::Pat) -> Vec {
let mut identifiers = vec![];
let mut processed_scope_data: Vec = vec![];