feat: export parser sessions from the browser

This commit is contained in:
2026-07-22 19:50:19 +02:00
parent 239bb3c465
commit f21d97de21
7 changed files with 355 additions and 18 deletions

View File

@@ -1,10 +1,12 @@
import type {
ExportWorkerResponse,
PageWorkerResponse,
ParseWorkerRequest,
ParseWorkerResponse,
ResourceWorkerResponse,
WorkerRequest,
WorkerCabinetPart,
WorkerExportFormat,
WorkerFailure,
WorkerResponse,
} from './worker-protocol.js';
@@ -20,7 +22,11 @@ export interface WorkerPort {
type PendingRequest = {
resolve: (
response: ParseWorkerResponse | PageWorkerResponse | ResourceWorkerResponse
response:
| ParseWorkerResponse
| PageWorkerResponse
| ResourceWorkerResponse
| ExportWorkerResponse
) => void;
reject: (error: WorkerClientError) => void;
};
@@ -172,6 +178,34 @@ export class OneNoteWorkerClient {
});
}
exportSession(
sessionId: string,
format: WorkerExportFormat
): Promise<ExportWorkerResponse> {
if (this.terminated) {
return Promise.reject(
new WorkerClientError(
'worker-failure',
'The local parser worker has already been terminated.'
)
);
}
const requestId = `export-${++this.requestSequence}`;
return new Promise((resolve, reject) => {
this.pending.set(requestId, {
resolve: (response) => resolve(response as ExportWorkerResponse),
reject,
});
this.worker.postMessage({
type: 'export-session',
requestId,
sessionId,
format,
});
});
}
terminate(): void {
if (this.terminated) return;
this.terminated = true;