41 lines
1.3 KiB
Markdown
41 lines
1.3 KiB
Markdown
|
|
```typescript title="WASM"
|
||
|
|
import init, { extractBytes } from "kreuzberg-wasm";
|
||
|
|
|
||
|
|
await init();
|
||
|
|
|
||
|
|
// Note: WASM has no native batch API; use Promise.all with per-item error handling
|
||
|
|
const files = document.getElementById("files") as HTMLInputElement;
|
||
|
|
const fileList = files.files || [];
|
||
|
|
|
||
|
|
// Extract multiple files concurrently (simulated batch)
|
||
|
|
const extractionPromises = Array.from(fileList).map(async (file) => {
|
||
|
|
try {
|
||
|
|
const bytes = new Uint8Array(await file.arrayBuffer());
|
||
|
|
const result = await extractBytes(bytes, file.type || "application/octet-stream", undefined);
|
||
|
|
return { file: file.name, success: true, result };
|
||
|
|
} catch (err) {
|
||
|
|
return {
|
||
|
|
file: file.name,
|
||
|
|
success: false,
|
||
|
|
error: err instanceof Error ? err.message : String(err),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
const results = await Promise.all(extractionPromises);
|
||
|
|
|
||
|
|
// Process results with per-item error handling
|
||
|
|
results.forEach((item) => {
|
||
|
|
if (item.success) {
|
||
|
|
console.log(`✓ ${item.file}: ${item.result.content.length} characters`);
|
||
|
|
} else {
|
||
|
|
console.error(`✗ ${item.file}: ${item.error}`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// Summary
|
||
|
|
const succeeded = results.filter((r) => r.success).length;
|
||
|
|
const failed = results.filter((r) => !r.success).length;
|
||
|
|
console.log(`Extracted ${succeeded}/${results.length} files (${failed} errors)`);
|
||
|
|
```
|