vitest-browser-qwik 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/{pure-BRpTMupH.js → pure-B8VHRLBL.js} +6 -6
- package/dist/{pure-1MgDxC6b.d.ts → pure-dqI6lsdL.d.ts} +2 -2
- package/dist/pure.d.ts +1 -1
- package/dist/pure.js +1 -1
- package/dist/ssr-plugin.js +33 -8
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ export default defineConfig({
|
|
|
43
43
|
|
|
44
44
|
```tsx
|
|
45
45
|
import { defineConfig } from 'vitest/config'
|
|
46
|
-
import { qwikVite } from '@
|
|
46
|
+
import { qwikVite } from '@qwik.dev/core/optimizer'
|
|
47
47
|
|
|
48
48
|
// optional, run the tests in SSR mode
|
|
49
49
|
import { testSSR } from 'vitest-browser-qwik/ssr-plugin'
|
|
@@ -97,7 +97,7 @@ test('renders counter with SSR', async () => {
|
|
|
97
97
|
### Hook Testing Example
|
|
98
98
|
|
|
99
99
|
```tsx
|
|
100
|
-
import { useSignal } from "@
|
|
100
|
+
import { useSignal } from "@qwik.dev/core";
|
|
101
101
|
import { expect, test } from "vitest";
|
|
102
102
|
import { renderHook } from "vitest-browser-qwik";
|
|
103
103
|
import { useCounter } from "./fixtures/useCounter";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as cleanup, c as renderServerHTML, i as SSRRenderOptions, o as render, r as RenderResult, s as renderHook } from "./pure-
|
|
2
|
-
import { JSXOutput } from "@
|
|
1
|
+
import { a as cleanup, c as renderServerHTML, i as SSRRenderOptions, o as render, r as RenderResult, s as renderHook } from "./pure-dqI6lsdL.js";
|
|
2
|
+
import { JSXOutput } from "@qwik.dev/core";
|
|
3
3
|
|
|
4
4
|
//#region src/index.d.ts
|
|
5
5
|
declare function renderSSR(jsxNode: JSXOutput): Promise<RenderResult>;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as renderServerHTML, n as render, r as renderHook, t as cleanup } from "./pure-
|
|
1
|
+
import { i as renderServerHTML, n as render, r as renderHook, t as cleanup } from "./pure-B8VHRLBL.js";
|
|
2
2
|
import { beforeEach } from "vitest";
|
|
3
3
|
import { page } from "vitest/browser";
|
|
4
4
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { utils } from "vitest/browser";
|
|
2
|
-
import { component$, render } from "@
|
|
3
|
-
import { getQwikLoaderScript } from "@
|
|
4
|
-
import { jsx } from "@
|
|
2
|
+
import { component$, render } from "@qwik.dev/core";
|
|
3
|
+
import { getQwikLoaderScript } from "@qwik.dev/core/server";
|
|
4
|
+
import { jsx } from "@qwik.dev/core/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/pure.tsx
|
|
7
7
|
const { debug, getElementLocatorSelectors } = utils;
|
|
@@ -40,10 +40,10 @@ function setupContainer(baseElement, container) {
|
|
|
40
40
|
baseElement
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
function render$1(ui, { container, baseElement } = {}) {
|
|
43
|
+
async function render$1(ui, { container, baseElement } = {}) {
|
|
44
44
|
csrQwikLoader();
|
|
45
45
|
const setup = setupContainer(baseElement, container);
|
|
46
|
-
render(setup.container, ui);
|
|
46
|
+
await render(setup.container, ui);
|
|
47
47
|
return createRenderResult(setup.container, setup.baseElement);
|
|
48
48
|
}
|
|
49
49
|
function setHTMLWithScripts(container, html) {
|
|
@@ -66,7 +66,7 @@ async function renderHook(hook) {
|
|
|
66
66
|
const renderPromise = new Promise((resolve) => {
|
|
67
67
|
resolveRender = resolve;
|
|
68
68
|
});
|
|
69
|
-
const screen = render$1(/* @__PURE__ */ jsx(component$(() => {
|
|
69
|
+
const screen = await render$1(/* @__PURE__ */ jsx(component$(() => {
|
|
70
70
|
resultContainer.value = hook();
|
|
71
71
|
resolveRender();
|
|
72
72
|
return /* @__PURE__ */ jsx("div", { "data-testid": "hook-result" });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Locator, LocatorSelectors, PrettyDOMOptions } from "vitest/browser";
|
|
2
|
-
import { JSXOutput } from "@
|
|
2
|
+
import { JSXOutput } from "@qwik.dev/core";
|
|
3
3
|
|
|
4
4
|
//#region src/pure.d.ts
|
|
5
5
|
interface RenderResult extends LocatorSelectors {
|
|
@@ -20,7 +20,7 @@ interface SSRRenderOptions {
|
|
|
20
20
|
declare function render$1(ui: JSXOutput, {
|
|
21
21
|
container,
|
|
22
22
|
baseElement
|
|
23
|
-
}?: RenderOptions): RenderResult
|
|
23
|
+
}?: RenderOptions): Promise<RenderResult>;
|
|
24
24
|
declare function renderServerHTML(html: string, {
|
|
25
25
|
container,
|
|
26
26
|
baseElement
|
package/dist/pure.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as cleanup, c as renderServerHTML, i as SSRRenderOptions, n as RenderOptions, o as render, r as RenderResult, s as renderHook, t as RenderHookResult } from "./pure-
|
|
1
|
+
import { a as cleanup, c as renderServerHTML, i as SSRRenderOptions, n as RenderOptions, o as render, r as RenderResult, s as renderHook, t as RenderHookResult } from "./pure-dqI6lsdL.js";
|
|
2
2
|
export { RenderHookResult, RenderOptions, RenderResult, SSRRenderOptions, cleanup, render, renderHook, renderServerHTML };
|
package/dist/pure.js
CHANGED
package/dist/ssr-plugin.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { dirname, relative, resolve } from "node:path";
|
|
2
|
-
import { symbolMapper } from "@builder.io/qwik/optimizer";
|
|
3
2
|
import MagicString from "magic-string";
|
|
4
3
|
import { parseSync } from "oxc-parser";
|
|
5
4
|
import { ResolverFactory } from "oxc-resolver";
|
|
@@ -212,21 +211,48 @@ function hasCommandsImport(node) {
|
|
|
212
211
|
if (!isImportDeclaration(node) || node.source?.value !== "vitest/browser" || !node.specifiers) return false;
|
|
213
212
|
return node.specifiers.some((spec) => spec.type === "ImportSpecifier" && spec.imported.type === "Identifier" && spec.imported.name === "commands");
|
|
214
213
|
}
|
|
214
|
+
const getClientModule = async (viteServer, moduleId) => {
|
|
215
|
+
const clientEnv = viteServer.environments.client;
|
|
216
|
+
await clientEnv.fetchModule(moduleId);
|
|
217
|
+
const resolved = await clientEnv.moduleGraph.resolveUrl(moduleId);
|
|
218
|
+
if (!resolved) throw new Error(`Could not resolve module "${moduleId}" in client environment`);
|
|
219
|
+
const module = clientEnv.moduleGraph.getModuleById(resolved[1]);
|
|
220
|
+
console.log("Resolved client module", moduleId, resolved, module);
|
|
221
|
+
if (!module) throw new Error(`Module "${moduleId}" not found in client module graph.`);
|
|
222
|
+
return module;
|
|
223
|
+
};
|
|
215
224
|
async function renderComponentToSSR(ctx, Component, props = {}) {
|
|
216
225
|
const viteServer = ctx.project.vite;
|
|
217
|
-
const { jsx } = await viteServer.ssrLoadModule("@
|
|
226
|
+
const { jsx } = await viteServer.ssrLoadModule("@qwik.dev/core");
|
|
218
227
|
const jsxElement = jsx(Component, props);
|
|
219
|
-
const { renderToStream } = await viteServer.ssrLoadModule("@
|
|
220
|
-
|
|
228
|
+
const { renderToStream } = await viteServer.ssrLoadModule("@qwik.dev/core/server");
|
|
229
|
+
const mapping = {};
|
|
230
|
+
const module = await getClientModule(viteServer, ctx.testPath);
|
|
231
|
+
for (const importedModule of module?.importedModules || []) {
|
|
232
|
+
const meta = importedModule.info?.meta;
|
|
233
|
+
if (meta?.segment) {
|
|
234
|
+
const symbol = meta.segment.hash;
|
|
235
|
+
if (symbol) mapping[symbol] = `/@fs${importedModule.id}`;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const handlersId = (await getClientModule(viteServer, "@qwik.dev/core/handlers.mjs")).id;
|
|
239
|
+
const handlersExports = await viteServer.ssrLoadModule("@qwik.dev/core/handlers.mjs");
|
|
240
|
+
for (const key of Object.keys(handlersExports)) if (key.startsWith("_")) mapping[key] = handlersId;
|
|
241
|
+
const qwikManifest = {
|
|
242
|
+
manifestHash: "dev",
|
|
243
|
+
mapping
|
|
244
|
+
};
|
|
245
|
+
console.log(mapping);
|
|
246
|
+
let html = "<script>var _import=(s)=>{console.log('importing', s);return import(s)}<\/script>";
|
|
221
247
|
await renderToStream(jsxElement, {
|
|
248
|
+
manifest: qwikManifest,
|
|
222
249
|
containerTagName: "div",
|
|
223
250
|
base: "/",
|
|
224
|
-
qwikLoader: { include: "always" },
|
|
225
|
-
symbolMapper: globalThis.qwikSymbolMapper,
|
|
226
251
|
stream: { write(chunk) {
|
|
227
|
-
html += chunk;
|
|
252
|
+
html += chunk.replace(/=import\(/g, "=_import(");
|
|
228
253
|
} }
|
|
229
254
|
});
|
|
255
|
+
console.log("FINAL HTML", html);
|
|
230
256
|
return { html };
|
|
231
257
|
}
|
|
232
258
|
|
|
@@ -377,7 +403,6 @@ function testSSR() {
|
|
|
377
403
|
}
|
|
378
404
|
},
|
|
379
405
|
configResolved(config) {
|
|
380
|
-
globalThis.qwikSymbolMapper = symbolMapper;
|
|
381
406
|
if (config.test?.browser?.enabled) config.test.browser.commands = {
|
|
382
407
|
...config.test.browser.commands,
|
|
383
408
|
renderSSR: renderSSRCommand,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vitest-browser-qwik",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Render Qwik components using Vitest Browser Mode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,26 +40,26 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@oxc-project/types": "^0.95.0",
|
|
43
|
-
"magic-string": "^0.30.
|
|
43
|
+
"magic-string": "^0.30.17",
|
|
44
44
|
"oxc-parser": "^0.95.0",
|
|
45
|
-
"oxc-resolver": "^11.
|
|
45
|
+
"oxc-resolver": "^11.11.1"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@
|
|
48
|
+
"@qwik.dev/core": "*",
|
|
49
49
|
"vite": ">=6.3.5",
|
|
50
|
-
"vitest": "^4.0.
|
|
50
|
+
"vitest": "^4.0.18"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@biomejs/biome": "2.0.0",
|
|
54
|
-
"@
|
|
55
|
-
"@
|
|
56
|
-
"@types/node": "^22.
|
|
54
|
+
"@playwright/test": "see flake.nix",
|
|
55
|
+
"@qwik.dev/core": "*",
|
|
56
|
+
"@types/node": "^22.15.17",
|
|
57
57
|
"@vitest/browser-playwright": "^4.0.18",
|
|
58
|
-
"bumpp": "^10.3.2",
|
|
59
|
-
"ignore": "^7.0.5",
|
|
60
58
|
"magic-regexp": "^0.10.0",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
59
|
+
"bumpp": "^10.1.0",
|
|
60
|
+
"ignore": "^7.0.5",
|
|
61
|
+
"tsdown": "^0.15.9",
|
|
62
|
+
"typescript": "^5.8.3",
|
|
63
63
|
"vitest": "^4.0.18"
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|