add tests on publish

This commit is contained in:
Tiago
2025-05-11 19:17:21 +01:00
parent cd1a0cd64d
commit 347d90789f
7 changed files with 141 additions and 26 deletions
+1 -2
View File
@@ -9,8 +9,7 @@
"docs:build": "cd docs && bun run build",
"docs:preview": "cd docs && bun run preview",
"widget:build": "cd widget && bun run build.js",
"widget:publish": "cd widget && cd src && sudo npm publish --access public",
"server:publish": "cd server && sudo npm publish --access public",
"server:publish": "cd server && bunx tsc && sudo npm publish --access public",
"solver:publish": "cd solver && sudo npm publish --access public",
"cli:publish": "cd solver-cli && sudo npm publish --access public",
"wasm:publish": "cd solver-cli && sudo npm publish --access public"
+66 -22
View File
@@ -1,34 +1,78 @@
import fs from "fs/promises";
import { chromium } from "playwright";
import { minify } from "terser";
console.time("build");
const paths = [
["./src/src/cap.js", "./src/cap.min.js"],
["./src/src/cap.js", "./src/cap.compat.min.js"],
["./src/src/cap-floating.js", "./src/cap-floating.min.js"],
];
paths.forEach(async function ([inpath, outpath]) {
const input = await fs.readFile(inpath, "utf-8");
await Promise.all(
paths.map(async function ([inpath, outpath]) {
const input = await fs.readFile(inpath, "utf-8");
const minified = (
await minify(input, {
compress: {
drop_console: true,
dead_code: true,
reduce_vars: true,
drop_console: false,
},
output: {
beautify: false,
comments: false,
},
})
).code
.split("\\n")
.map((e) => {
return e.trimStart();
})
.join("\\n");
const minified = (
await minify(input, {
compress: {
drop_console: true,
dead_code: true,
reduce_vars: true,
drop_console: false,
},
output: {
beautify: false,
comments: false,
},
})
).code
.split("\\n")
.map((e) => {
return e.trimStart();
})
.join("\\n");
await fs.writeFile(outpath, minified);
await fs.writeFile(outpath, minified);
})
);
console.timeEnd("build");
console.time("test");
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
const server = Bun.serve({
port: 3000,
routes: {
"/": () => {
return new Response(Bun.file("./test.html"));
},
"/failed": () => {
console.error("test failed, quitting");
process.exit(1);
},
"/solved": () => {
console.timeEnd("test");
server.stop();
browser.close();
const publish = prompt("\npublish package to npm? (y/N)");
if (publish === "y") {
Bun.spawn({
cmd: ["bun", "publish", "--access", "public"],
cwd: "./src",
stdout: "inherit",
});
}
process.exit(0)
},
},
});
await page.goto(`http://localhost:3000/`);
+7
View File
@@ -4,6 +4,7 @@
"": {
"name": "widget",
"dependencies": {
"playwright": "^1.52.0",
"terser": "^5.39.0",
},
"devDependencies": {
@@ -41,6 +42,12 @@
"commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
"fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
"playwright": ["playwright@1.52.0", "", { "dependencies": { "playwright-core": "1.52.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw=="],
"playwright-core": ["playwright-core@1.52.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg=="],
"source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
"source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
+1
View File
@@ -8,6 +8,7 @@
"typescript": "^5"
},
"dependencies": {
"playwright": "^1.52.0",
"terser": "^5.39.0"
}
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+64
View File
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script>
window.CAP_CUSTOM_FETCH = async (url, options) => {
if (url === "/api/challenge") {
const browserCrypto = window.crypto;
return new Response(
JSON.stringify({
challenge: Array.from({ length: 5 }, () => [
Array.from(browserCrypto.getRandomValues(new Uint8Array(Math.ceil(32 / 2))))
.map((byte) => byte.toString(16).padStart(2, "0"))
.join("")
.slice(0, 32),
Array.from(browserCrypto.getRandomValues(new Uint8Array(Math.ceil(2 / 2))))
.map((byte) => byte.toString(16).padStart(2, "0"))
.join("")
.slice(0, 4),
]),
token: "",
expires: new Date().getTime() + 6000 * 100,
}),
{
status: 200,
headers: { "Content-Type": "application/json" },
}
);
}
if (url === "/api/redeem") {
return new Response(
JSON.stringify({
success: true,
token: "ok",
expires: new Date().getTime() + 1000 * 60,
}),
{
status: 200,
headers: { "Content-Type": "application/json" },
}
);
}
return await window.fetch(url, options);
};
</script>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/@cap.js/widget"></script>
<cap-widget data-cap-api-endpoint="/api/"></cap-widget>
<script>
const widget = document.querySelector("cap-widget");
widget.solve();
widget.addEventListener("solve", function (e) {
fetch(e.detail.token === "ok" ? "/solved" : "/failed");
});
</script>
</body>
</html>