QwikDev / qwik

Instant-loading web apps, without effort
https://qwik.dev
MIT License
20.77k stars 1.29k forks source link

[🐞] Capturing closures inside server$ does not work #3189

Open mhevery opened 1 year ago

mhevery commented 1 year ago

Which component is affected?

Qwik Runtime

Describe the bug

6:04:20 PM [vite] Internal server error: invoke: qrl $captureRef$ must be defined inside useLexicalScope()
  File: /home/projects/qwik-starter-ydb5i8/src/routes/index.tsx:17:48
      at createError (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:163:17)
      at logError (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:157:54)
      at logErrorAndStop (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:167:17)
      at assertDefined (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:407:15)
      at Proxy.useLexicalScope (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:4991:9)
      at eval (/home/projects/qwik-starter-ydb5i8/src/routes/index.tsx:17:48)
      at invoke (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:1420:26)
      at eval (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:6776:35)
      at async invokeQRL (file://file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik/core.mjs:6795:24)
      at async pureServerFunction (file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik-city/vite/index.cjs:23722:26)
      at async Object.next (file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik-city/vite/index.cjs:23930:9)
      at async runNext (file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik-city/vite/index.cjs:24128:5)
      at async eval (file:///home/projects/qwik-starter-ydb5i8/node_modules/@builder.io/qwik-city/vite/index.cjs:24537:26)

Reproduction

https://stackblitz.com/edit/qwik-starter-ydb5i8?file=src%2Froutes%2Findex.tsx,package.json

Steps to reproduce

No response

System Info

n/a

Additional Information

No response

stackblitz[bot] commented 1 year ago

Fix this issue in StackBlitz Codeflow Start a new pull request in StackBlitz Codeflow.

gioboa commented 1 year ago

I tested the repo with Qwik 1.2.10 and it fails. const capitalize = $((v: string) => v[0].toUpperCase() + v.substring(1)); call is breaking the system.

export default component$(() => {
  const name = 'world';
  const capitalize = $((v: string) => v[0].toUpperCase() + v.substring(1));
  return (
    <div>
      <button
        onClick$={async () => {
          server$(async () => {
            console.log(`Hello ${await capitalize(name)}!`);
          })();
        }}
      >
        Click
      </button>
    </div>
  );
});

is it a priority task?

mhevery commented 1 year ago

It would be nice to fix....