feat: open multi-part packages in browser
This commit is contained in:
@@ -4,6 +4,7 @@ import type {
|
||||
ParseWorkerResponse,
|
||||
ResourceWorkerResponse,
|
||||
WorkerRequest,
|
||||
WorkerCabinetPart,
|
||||
WorkerFailure,
|
||||
WorkerResponse,
|
||||
} from './worker-protocol.js';
|
||||
@@ -68,7 +69,8 @@ export class OneNoteWorkerClient {
|
||||
parseSource(
|
||||
kind: SourceKind,
|
||||
fileName: string,
|
||||
bytes: ArrayBuffer
|
||||
bytes: ArrayBuffer,
|
||||
cabinetParts: readonly WorkerCabinetPart[] = []
|
||||
): Promise<ParseWorkerResponse> {
|
||||
if (this.terminated) {
|
||||
return Promise.reject(
|
||||
@@ -78,6 +80,14 @@ export class OneNoteWorkerClient {
|
||||
)
|
||||
);
|
||||
}
|
||||
if (kind === 'one' && cabinetParts.length > 0) {
|
||||
return Promise.reject(
|
||||
new WorkerClientError(
|
||||
'invalid-format',
|
||||
'CAB companions can only be supplied with a .onepkg source.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
const requestId = `parse-${++this.requestSequence}`;
|
||||
const request: ParseWorkerRequest = {
|
||||
@@ -85,6 +95,9 @@ export class OneNoteWorkerClient {
|
||||
requestId,
|
||||
fileName,
|
||||
bytes,
|
||||
...(kind === 'onepkg' && cabinetParts.length > 0
|
||||
? { cabinetParts: [...cabinetParts] }
|
||||
: {}),
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -92,7 +105,10 @@ export class OneNoteWorkerClient {
|
||||
resolve: (response) => resolve(response as ParseWorkerResponse),
|
||||
reject,
|
||||
});
|
||||
this.worker.postMessage(request, [bytes]);
|
||||
this.worker.postMessage(request, [
|
||||
bytes,
|
||||
...cabinetParts.map((part) => part.bytes),
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user