diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f2f7f0ec5..99fa2469d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -129,6 +129,7 @@ jobs: run: | pnpm i --ignore-workspace --registry http://localhost:4874/ pnpm build + pnpm run test:browser - uses: denoland/setup-deno@v1 with: diff --git a/e2e/svelte/.gitignore b/e2e/svelte/.gitignore index 6635cf554..b43d835cc 100644 --- a/e2e/svelte/.gitignore +++ b/e2e/svelte/.gitignore @@ -8,3 +8,4 @@ node_modules !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* +pnpm-lock.yaml \ No newline at end of file diff --git a/e2e/svelte/package.json b/e2e/svelte/package.json index 49a41f99e..1d0eed788 100644 --- a/e2e/svelte/package.json +++ b/e2e/svelte/package.json @@ -2,25 +2,30 @@ "name": "myapp", "version": "0.0.1", "private": true, + "packageManager": "pnpm@8.10.5", "scripts": { "dev": "vite dev", "build": "vite build", "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "test:browser": "vitest run --browser.name=chrome --browser.headless" }, "devDependencies": { - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/kit": "^1.5.0", - "svelte": "^3.54.0", + "@sveltejs/adapter-auto": "^3.2.0", + "@sveltejs/kit": "^2.5.9", + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@vitest/browser": "^1.6.0", + "svelte": "^4.2.17", "svelte-check": "^3.0.1", "tslib": "^2.4.1", "typescript": "^5.0.0", - "vite": "^4.3.0" + "vite": "^5.2.11", + "vitest": "^1.6.0" }, "type": "module", "dependencies": { - "@huggingface/inference": "*", - "@huggingface/hub": "*" + "@huggingface/hub": "*", + "@huggingface/inference": "*" } } diff --git a/e2e/svelte/src/test.spec.ts b/e2e/svelte/src/test.spec.ts new file mode 100644 index 000000000..fa96579e2 --- /dev/null +++ b/e2e/svelte/src/test.spec.ts @@ -0,0 +1,37 @@ +import { assert, it, describe } from "vitest"; +import { __internal_sha256 } from "@huggingface/hub"; + +const lfsContent = "0123456789".repeat(1_000_000); + +describe("hub", () => { + it("should compute sha256 with webworker", async function () { + const blob = new Blob([lfsContent]); + + const iterator = __internal_sha256(blob, { useWebWorker: { minSize: 1 } }); + // Get return value of the generator + const values: number[] = []; + while (1) { + const { done, value } = await iterator.next(); + if (done) { + assert.strictEqual(value, "d52fcc26b48dbd4d79b125eb0a29b803ade07613c67ac7c6f2751aefef008486"); + + const builtInResult = await crypto.subtle.digest("SHA-256", await blob.arrayBuffer()); + const hex = + builtInResult instanceof ArrayBuffer + ? new Uint8Array(builtInResult).reduce((acc, i) => acc + i.toString(16).padStart(2, "0"), "") + : builtInResult; + assert.strictEqual(hex, "d52fcc26b48dbd4d79b125eb0a29b803ade07613c67ac7c6f2751aefef008486"); + break; + } + + if (typeof value === "number") { + values.push(value); + } + } + + // Check that we received progress values, which should happen with a webworker + assert(values.length > 2); + assert.strictEqual(values[0], 0); + assert.strictEqual(values[values.length - 1], 1); + }, 60_000); +}); diff --git a/e2e/svelte/svelte.config.js b/e2e/svelte/svelte.config.js index 456afa84b..5181b3568 100644 --- a/e2e/svelte/svelte.config.js +++ b/e2e/svelte/svelte.config.js @@ -1,5 +1,5 @@ import adapter from "@sveltejs/adapter-auto"; -import { vitePreprocess } from "@sveltejs/kit/vite"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; /** @type {import('@sveltejs/kit').Config} */ const config = { @@ -9,7 +9,7 @@ const config = { kit: { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. - // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter(), },