feat: export parser sessions from the browser
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user