Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"@babel/core": "^7.18.10",
"@babel/plugin-syntax-typescript": "^7.18.6",
"@babel/plugin-transform-react-jsx": "^7.18.10",
"@playwright/test": "^1.51.1",
"@playwright/test": "^1.59.1",
"@preact/preset-vite": "^2.8.2",
"@preact/signals": "^1.2.3",
"@prefresh/vite": "^2.4.5",
Expand Down
11 changes: 9 additions & 2 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,23 @@ const config: PlaywrightTestConfig = {
ignoreHTTPSErrors: true,
video: "on-first-retry",
trace: "retain-on-failure",
actionTimeout: 10 * 1000,
navigationTimeout: 20 * 1000,
},
expect: {
timeout: 5 * 1000,
},
testDir: path.join(__dirname, "test-e2e", "tests"),
testMatch: "**/*.test.ts",
forbidOnly: !!process.env.CI,
// retries: 3,
timeout: 10 * 1000,
timeout: 20 * 1000,
workers: process.env.CI ? 2 : undefined,
webServer: {
command: "npm run dev",
url: "http://localhost:8100/",
timeout: 120 * 1000,
reuseExistingServer: true,
reuseExistingServer: !process.env.CI,
},
};
export default config;
2 changes: 2 additions & 0 deletions test-e2e/fixtures/devtools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const store = setupInlineDevtools(container, window);

// @ts-ignore
window.parent.store = store;
// @ts-ignore
window.__PREACT_DEVTOOLS_READY__ = true;
store.subscribe((name, msg) => {
window.parent.postMessage(
{ type: name, data: msg, source: "preact-devtools-to-client" },
Expand Down
27 changes: 10 additions & 17 deletions test-e2e/fixtures/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,15 @@ async function loadFixture() {
params.set("preact", encodeURIComponent(preact.replace(/\./g, "_")));
}

try {
await import(/* @vite-ignore */ source.toString());
} catch (err) {
// eslint-disable-next-line no-console
console.log(err);
}
await import(/* @vite-ignore */ source.toString());
}
}

async function waitForDevtoolsInit() {
const iframe = document.querySelector("iframe");
return new Promise(r => {
iframe.addEventListener("load", r);
});
const iframe = document.querySelector("#devtools") as HTMLIFrameElement;
while ((iframe.contentWindow as any)?.__PREACT_DEVTOOLS_READY__ !== true) {
await new Promise(r => setTimeout(r, 16));
}
}

(async () => {
Expand Down Expand Up @@ -110,9 +105,9 @@ async function waitForDevtoolsInit() {
const log = (window.log = []);
window.addEventListener("message", e => {
if (e.data.source === "preact-page-hook") {
(document.querySelector(
"#devtools",
) as HTMLIFrameElement).contentWindow.postMessage(e.data, "*");
(
document.querySelector("#devtools") as HTMLIFrameElement
).contentWindow.postMessage(e.data, "*");
log.push(e.data);
} else if (
e.data.source === "preact-devtools-to-client" &&
Expand All @@ -132,9 +127,7 @@ async function waitForDevtoolsInit() {
});

await waitForDevtoolsInit();

document.querySelector("iframe").contentWindow.postMessage("foobar", "*");

await loadFixture();
document.querySelector("iframe").contentWindow.postMessage("foobar", "*");
// @ts-ignore
window.__PREACT_E2E_READY__ = true;
})();
46 changes: 23 additions & 23 deletions test-e2e/fixtures/load-preact-version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import * as tar from "tar";
* on demand.
*/
export function loadPreactVersion(): Plugin {
const pending = new Map<string, Array<() => void>>();
const pending = new Map<string, Promise<void>>();
const cache = new Map<string, any>();
const extracted = new Set<string>();

const versionReg = /preact@([^/]+)/;
const tarDir = path.join(__dirname, "vendor", "preact");
Expand Down Expand Up @@ -54,28 +55,33 @@ export function loadPreactVersion(): Plugin {
};
} else {
const versionDir = path.join(cacheDir, version);
// Check if someone is already resolving
const inProgress = pending.get(version);
if (inProgress) {
return new Promise(r => {
inProgress.push(() => r(cache.get(version)!));
});
}

// Check for tarball or folder
const tarball = path.join(tarDir, `preact-${version}.tgz`);
const folder = path.join(tarDir, `preact-${version}`);
if (fs.existsSync(tarball)) {
if (!fs.existsSync(versionDir)) {
fs.mkdirSync(versionDir, { recursive: true });
if (!extracted.has(version)) {
let extraction = pending.get(version);
if (!extraction) {
if (!fs.existsSync(versionDir)) {
fs.mkdirSync(versionDir, { recursive: true });
}

extraction = tar
.extract({
file: tarball,
cwd: versionDir,
strip: 1,
})
.then(() => {
extracted.add(version);
})
.finally(() => pending.delete(version));
pending.set(version, extraction);
}

await extraction;
}

await tar.extract({
file: tarball,
cwd: versionDir,
strip: 1,
});

let importee = id.replace(/@[^/]+/, "");

const mappings = {
Expand Down Expand Up @@ -113,9 +119,6 @@ export function loadPreactVersion(): Plugin {
};

cache.set(id, out);

const fns = pending.get(version) || [];
await Promise.all(fns.map(fn => fn()));
return out;
} else if (fs.existsSync(folder)) {
let importee = id.replace(/@[^/]+/, "");
Expand All @@ -142,9 +145,6 @@ export function loadPreactVersion(): Plugin {
};

cache.set(id, out);

const fns = pending.get(version) || [];
await Promise.all(fns.map(fn => fn()));
return out;
}
}
Expand Down
20 changes: 4 additions & 16 deletions test-e2e/fixtures/rewrite-preact-version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,18 @@ export function rewritePreactVersion(): Plugin {
const PROTOCOL = "relative://";
const PREFIX = "@fixture:";

let preactVersion = "";

return {
name: "preact:version",
enforce: "pre",
configureServer(server) {
server.middlewares.use((req, res, next) => {
const url = new URL(req.originalUrl, "https://localhost");
const version = url.searchParams.get("preact");
if (version) {
preactVersion = version.replace(/\./g, "_");
}

next();
});
},
resolveId(id) {
const url = new URL(id, PROTOCOL);
const version = url.searchParams.get("preact");
if (version) {
return `@fixture:${id}`;
}

if (id === `@preact/signals@${preactVersion}`) {
return `@fixture-signals:${preactVersion}`;
if (id.startsWith("@preact/signals@")) {
return `@fixture-signals:${id.slice("@preact/signals@".length)}`;
}
},
load(id) {
Expand All @@ -61,8 +48,9 @@ export function rewritePreactVersion(): Plugin {
},
transform(code, id) {
if (id.startsWith("@fixture-signals")) {
const version = id.slice("@fixture-signals:".length);
const res = transformSync(code, {
plugins: [[rewriteImportPlugin, { version: preactVersion }]],
plugins: [[rewriteImportPlugin, { version }]],
})!;
return {
code: res.code,
Expand Down
Loading
Loading