add tests on publish
This commit is contained in:
+1
-2
@@ -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
@@ -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/`);
|
||||
@@ -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=="],
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"typescript": "^5"
|
||||
},
|
||||
"dependencies": {
|
||||
"playwright": "^1.52.0",
|
||||
"terser": "^5.39.0"
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
Reference in New Issue
Block a user