okgeometry-api 1.1.11 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mesh-boolean.protocol.d.ts +0 -2
- package/dist/mesh-boolean.protocol.d.ts.map +1 -1
- package/dist/mesh-boolean.protocol.js.map +1 -1
- package/dist/mesh-boolean.worker.d.ts.map +1 -1
- package/dist/mesh-boolean.worker.js +7 -16
- package/dist/mesh-boolean.worker.js.map +1 -1
- package/dist/wasm-base64.d.ts +1 -1
- package/dist/wasm-base64.d.ts.map +1 -1
- package/dist/wasm-base64.js +1 -1
- package/dist/wasm-base64.js.map +1 -1
- package/dist/wasm-bindings.js +1 -1
- package/package.json +1 -1
- package/src/Mesh.ts +14 -14
- package/src/mesh-boolean.pool.ts +74 -74
- package/src/mesh-boolean.protocol.ts +25 -27
- package/src/mesh-boolean.worker.ts +55 -66
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.js +1 -1
package/dist/wasm-base64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-base64.js","sourceRoot":"","sources":["../src/wasm-base64.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"wasm-base64.js","sourceRoot":"","sources":["../src/wasm-base64.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,sthyDAAsthyD,CAAC"}
|
package/dist/wasm-bindings.js
CHANGED
|
@@ -1688,7 +1688,7 @@ export function version() {
|
|
|
1688
1688
|
function __wbg_get_imports() {
|
|
1689
1689
|
const import0 = {
|
|
1690
1690
|
__proto__: null,
|
|
1691
|
-
|
|
1691
|
+
__wbg___okgeometry_boolean_should_cancel_9b2919fd8513410f: function () {
|
|
1692
1692
|
const ret = globalThis.__okgeometry_boolean_should_cancel();
|
|
1693
1693
|
return ret;
|
|
1694
1694
|
},
|
package/package.json
CHANGED
package/src/Mesh.ts
CHANGED
|
@@ -17,24 +17,24 @@ import {
|
|
|
17
17
|
disposeMeshBooleanWorkerPools,
|
|
18
18
|
runMeshBooleanInWorkerPool,
|
|
19
19
|
} from "./mesh-boolean.pool.js";
|
|
20
|
-
import { MeshBooleanExecutionError } from "./mesh-boolean.protocol.js";
|
|
21
|
-
import type {
|
|
22
|
-
MeshBooleanAsyncOptions,
|
|
23
|
-
MeshBooleanLimits,
|
|
24
|
-
MeshBooleanOptions,
|
|
25
|
-
} from "./mesh-boolean.protocol.js";
|
|
20
|
+
import { MeshBooleanExecutionError } from "./mesh-boolean.protocol.js";
|
|
21
|
+
import type {
|
|
22
|
+
MeshBooleanAsyncOptions,
|
|
23
|
+
MeshBooleanLimits,
|
|
24
|
+
MeshBooleanOptions,
|
|
25
|
+
} from "./mesh-boolean.protocol.js";
|
|
26
26
|
import * as wasm from "./wasm-bindings.js";
|
|
27
27
|
import { mesh_topology_metrics } from "./wasm-bindings.js";
|
|
28
28
|
|
|
29
29
|
export { MeshBooleanExecutionError };
|
|
30
|
-
export type {
|
|
31
|
-
MeshBooleanAsyncOptions,
|
|
32
|
-
MeshBooleanLimits,
|
|
33
|
-
MeshBooleanOptions,
|
|
34
|
-
MeshBooleanErrorCode,
|
|
35
|
-
MeshBooleanErrorPayload,
|
|
36
|
-
MeshBooleanProgressEvent,
|
|
37
|
-
} from "./mesh-boolean.protocol.js";
|
|
30
|
+
export type {
|
|
31
|
+
MeshBooleanAsyncOptions,
|
|
32
|
+
MeshBooleanLimits,
|
|
33
|
+
MeshBooleanOptions,
|
|
34
|
+
MeshBooleanErrorCode,
|
|
35
|
+
MeshBooleanErrorPayload,
|
|
36
|
+
MeshBooleanProgressEvent,
|
|
37
|
+
} from "./mesh-boolean.protocol.js";
|
|
38
38
|
|
|
39
39
|
export interface PlanarRectangle {
|
|
40
40
|
corners: [Point, Point, Point, Point];
|
package/src/mesh-boolean.pool.ts
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MeshBooleanExecutionError,
|
|
3
|
-
type MeshBooleanAsyncOptions,
|
|
4
|
-
type MeshBooleanErrorPayload,
|
|
5
|
-
type MeshBooleanOperation,
|
|
6
|
-
type MeshBooleanOptions,
|
|
7
|
-
type MeshBooleanProgressEvent,
|
|
8
|
-
type MeshBooleanWorkerRequest,
|
|
9
|
-
type MeshBooleanWorkerResponse,
|
|
10
|
-
} from "./mesh-boolean.protocol.js";
|
|
1
|
+
import {
|
|
2
|
+
MeshBooleanExecutionError,
|
|
3
|
+
type MeshBooleanAsyncOptions,
|
|
4
|
+
type MeshBooleanErrorPayload,
|
|
5
|
+
type MeshBooleanOperation,
|
|
6
|
+
type MeshBooleanOptions,
|
|
7
|
+
type MeshBooleanProgressEvent,
|
|
8
|
+
type MeshBooleanWorkerRequest,
|
|
9
|
+
type MeshBooleanWorkerResponse,
|
|
10
|
+
} from "./mesh-boolean.protocol.js";
|
|
11
11
|
|
|
12
12
|
interface PoolAcquireOptions {
|
|
13
13
|
size?: number;
|
|
14
14
|
workerFactory?: () => Worker;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
interface BooleanJob {
|
|
18
|
-
id: number;
|
|
19
|
-
operation: MeshBooleanOperation;
|
|
20
|
-
options: MeshBooleanOptions;
|
|
21
|
-
onProgress?: (event: MeshBooleanProgressEvent) => void;
|
|
22
|
-
signal?: AbortSignal;
|
|
23
|
-
timeoutMs?: number;
|
|
24
|
-
bufferA: ArrayBuffer;
|
|
17
|
+
interface BooleanJob {
|
|
18
|
+
id: number;
|
|
19
|
+
operation: MeshBooleanOperation;
|
|
20
|
+
options: MeshBooleanOptions;
|
|
21
|
+
onProgress?: (event: MeshBooleanProgressEvent) => void;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
bufferA: ArrayBuffer;
|
|
25
25
|
bufferB: ArrayBuffer;
|
|
26
26
|
trustedInputA: boolean;
|
|
27
27
|
trustedInputB: boolean;
|
|
28
28
|
cancelView?: Int32Array;
|
|
29
|
-
timeoutToken?: number;
|
|
30
|
-
abortHandler?: () => void;
|
|
31
|
-
resolve: (value: Float64Array) => void;
|
|
32
|
-
reject: (reason: Error) => void;
|
|
33
|
-
}
|
|
29
|
+
timeoutToken?: number;
|
|
30
|
+
abortHandler?: () => void;
|
|
31
|
+
resolve: (value: Float64Array) => void;
|
|
32
|
+
reject: (reason: Error) => void;
|
|
33
|
+
}
|
|
34
34
|
|
|
35
35
|
interface WorkerSlot {
|
|
36
36
|
id: number;
|
|
@@ -127,22 +127,22 @@ export class MeshBooleanWorkerPool {
|
|
|
127
127
|
const job: BooleanJob = {
|
|
128
128
|
id: jobId,
|
|
129
129
|
operation,
|
|
130
|
-
options: {
|
|
131
|
-
allowUnsafe: options?.allowUnsafe ?? true,
|
|
132
|
-
limits: options?.limits,
|
|
133
|
-
debugForceFaceID: options?.debugForceFaceID,
|
|
134
|
-
},
|
|
135
|
-
onProgress: options?.onProgress,
|
|
136
|
-
signal: options?.signal,
|
|
137
|
-
timeoutMs: options?.timeoutMs,
|
|
138
|
-
bufferA: new Float64Array(bufferA).buffer,
|
|
130
|
+
options: {
|
|
131
|
+
allowUnsafe: options?.allowUnsafe ?? true,
|
|
132
|
+
limits: options?.limits,
|
|
133
|
+
debugForceFaceID: options?.debugForceFaceID,
|
|
134
|
+
},
|
|
135
|
+
onProgress: options?.onProgress,
|
|
136
|
+
signal: options?.signal,
|
|
137
|
+
timeoutMs: options?.timeoutMs,
|
|
138
|
+
bufferA: new Float64Array(bufferA).buffer,
|
|
139
139
|
bufferB: new Float64Array(bufferB).buffer,
|
|
140
|
-
trustedInputA,
|
|
141
|
-
trustedInputB,
|
|
142
|
-
cancelView: createCancellationView(),
|
|
143
|
-
resolve,
|
|
144
|
-
reject,
|
|
145
|
-
};
|
|
140
|
+
trustedInputA,
|
|
141
|
+
trustedInputB,
|
|
142
|
+
cancelView: createCancellationView(),
|
|
143
|
+
resolve,
|
|
144
|
+
reject,
|
|
145
|
+
};
|
|
146
146
|
|
|
147
147
|
if (job.signal?.aborted) {
|
|
148
148
|
this.rejectJob(job, rejectPayload("worker_aborted", `Boolean ${operation} aborted.`));
|
|
@@ -239,9 +239,9 @@ export class MeshBooleanWorkerPool {
|
|
|
239
239
|
continue;
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
slot.currentJobId = job.id;
|
|
243
|
-
this.running.set(job.id, job);
|
|
244
|
-
this.emitProgress(job, "running", slot.id);
|
|
242
|
+
slot.currentJobId = job.id;
|
|
243
|
+
this.running.set(job.id, job);
|
|
244
|
+
this.emitProgress(job, "running", slot.id);
|
|
245
245
|
|
|
246
246
|
if (job.timeoutMs !== undefined && Number.isFinite(job.timeoutMs) && job.timeoutMs > 0) {
|
|
247
247
|
job.timeoutToken = setTimeout(() => {
|
|
@@ -300,18 +300,18 @@ export class MeshBooleanWorkerPool {
|
|
|
300
300
|
return;
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
if (data.ok) {
|
|
304
|
-
this.finishRunningJob(slot, job, undefined, new Float64Array(data.buffer));
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
this.finishRunningJob(
|
|
309
|
-
slot,
|
|
310
|
-
job,
|
|
311
|
-
new MeshBooleanExecutionError(data.error),
|
|
312
|
-
undefined,
|
|
313
|
-
);
|
|
314
|
-
}
|
|
303
|
+
if (data.ok) {
|
|
304
|
+
this.finishRunningJob(slot, job, undefined, new Float64Array(data.buffer));
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
this.finishRunningJob(
|
|
309
|
+
slot,
|
|
310
|
+
job,
|
|
311
|
+
new MeshBooleanExecutionError(data.error),
|
|
312
|
+
undefined,
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
315
|
|
|
316
316
|
private failWorker(slot: WorkerSlot, payload: MeshBooleanErrorPayload): void {
|
|
317
317
|
const jobId = slot.currentJobId;
|
|
@@ -371,18 +371,18 @@ export class MeshBooleanWorkerPool {
|
|
|
371
371
|
this.dispatch();
|
|
372
372
|
}
|
|
373
373
|
|
|
374
|
-
private finishRunningJob(
|
|
375
|
-
slot: WorkerSlot,
|
|
376
|
-
job: BooleanJob,
|
|
377
|
-
error: Error | undefined,
|
|
378
|
-
result: Float64Array | undefined,
|
|
379
|
-
): void {
|
|
380
|
-
this.running.delete(job.id);
|
|
381
|
-
slot.currentJobId = null;
|
|
382
|
-
this.cleanupJob(job);
|
|
383
|
-
|
|
384
|
-
if (error) {
|
|
385
|
-
job.reject(error);
|
|
374
|
+
private finishRunningJob(
|
|
375
|
+
slot: WorkerSlot,
|
|
376
|
+
job: BooleanJob,
|
|
377
|
+
error: Error | undefined,
|
|
378
|
+
result: Float64Array | undefined,
|
|
379
|
+
): void {
|
|
380
|
+
this.running.delete(job.id);
|
|
381
|
+
slot.currentJobId = null;
|
|
382
|
+
this.cleanupJob(job);
|
|
383
|
+
|
|
384
|
+
if (error) {
|
|
385
|
+
job.reject(error);
|
|
386
386
|
} else if (result) {
|
|
387
387
|
job.resolve(result);
|
|
388
388
|
} else {
|
|
@@ -410,15 +410,15 @@ export class MeshBooleanWorkerPool {
|
|
|
410
410
|
}
|
|
411
411
|
|
|
412
412
|
private emitProgress(job: BooleanJob, stage: MeshBooleanProgressEvent["stage"], workerId?: number): void {
|
|
413
|
-
if (!job.onProgress) return;
|
|
414
|
-
job.onProgress({
|
|
415
|
-
stage,
|
|
416
|
-
jobId: job.id,
|
|
417
|
-
workerId,
|
|
418
|
-
queueSize: this.queue.length,
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
}
|
|
413
|
+
if (!job.onProgress) return;
|
|
414
|
+
job.onProgress({
|
|
415
|
+
stage,
|
|
416
|
+
jobId: job.id,
|
|
417
|
+
workerId,
|
|
418
|
+
queueSize: this.queue.length,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
422
|
|
|
423
423
|
let defaultPoolSizeOverride: number | undefined;
|
|
424
424
|
const defaultPools = new Map<number, MeshBooleanWorkerPool>();
|
|
@@ -36,14 +36,14 @@ export interface MeshBooleanErrorPayload {
|
|
|
36
36
|
details?: string;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
export type MeshBooleanJobStage = "queued" | "running" | "completed";
|
|
40
|
-
|
|
41
|
-
export interface MeshBooleanProgressEvent {
|
|
42
|
-
stage: MeshBooleanJobStage;
|
|
43
|
-
jobId: number;
|
|
44
|
-
workerId?: number;
|
|
45
|
-
queueSize: number;
|
|
46
|
-
}
|
|
39
|
+
export type MeshBooleanJobStage = "queued" | "running" | "completed";
|
|
40
|
+
|
|
41
|
+
export interface MeshBooleanProgressEvent {
|
|
42
|
+
stage: MeshBooleanJobStage;
|
|
43
|
+
jobId: number;
|
|
44
|
+
workerId?: number;
|
|
45
|
+
queueSize: number;
|
|
46
|
+
}
|
|
47
47
|
|
|
48
48
|
export interface MeshBooleanAsyncOptions extends MeshBooleanOptions {
|
|
49
49
|
/**
|
|
@@ -62,11 +62,11 @@ export interface MeshBooleanAsyncOptions extends MeshBooleanOptions {
|
|
|
62
62
|
* Override worker pool size for this call.
|
|
63
63
|
*/
|
|
64
64
|
poolSize?: number;
|
|
65
|
-
/**
|
|
66
|
-
* Observe coarse-grained job stage changes.
|
|
67
|
-
*/
|
|
68
|
-
onProgress?: (event: MeshBooleanProgressEvent) => void;
|
|
69
|
-
}
|
|
65
|
+
/**
|
|
66
|
+
* Observe coarse-grained job stage changes.
|
|
67
|
+
*/
|
|
68
|
+
onProgress?: (event: MeshBooleanProgressEvent) => void;
|
|
69
|
+
}
|
|
70
70
|
|
|
71
71
|
export interface MeshBooleanWorkerRequest {
|
|
72
72
|
kind: "mesh-boolean-request";
|
|
@@ -92,21 +92,19 @@ export interface MeshBooleanWorkerCancel {
|
|
|
92
92
|
|
|
93
93
|
export type MeshBooleanWorkerInbound = MeshBooleanWorkerRequest | MeshBooleanWorkerCancel;
|
|
94
94
|
|
|
95
|
-
export interface MeshBooleanWorkerSuccessResponse {
|
|
96
|
-
kind: "mesh-boolean-result";
|
|
97
|
-
jobId: number;
|
|
98
|
-
ok: true;
|
|
99
|
-
buffer: ArrayBuffer;
|
|
100
|
-
|
|
101
|
-
}
|
|
95
|
+
export interface MeshBooleanWorkerSuccessResponse {
|
|
96
|
+
kind: "mesh-boolean-result";
|
|
97
|
+
jobId: number;
|
|
98
|
+
ok: true;
|
|
99
|
+
buffer: ArrayBuffer;
|
|
100
|
+
}
|
|
102
101
|
|
|
103
|
-
export interface MeshBooleanWorkerErrorResponse {
|
|
104
|
-
kind: "mesh-boolean-result";
|
|
105
|
-
jobId: number;
|
|
106
|
-
ok: false;
|
|
107
|
-
error: MeshBooleanErrorPayload;
|
|
108
|
-
|
|
109
|
-
}
|
|
102
|
+
export interface MeshBooleanWorkerErrorResponse {
|
|
103
|
+
kind: "mesh-boolean-result";
|
|
104
|
+
jobId: number;
|
|
105
|
+
ok: false;
|
|
106
|
+
error: MeshBooleanErrorPayload;
|
|
107
|
+
}
|
|
110
108
|
|
|
111
109
|
export type MeshBooleanWorkerResponse = MeshBooleanWorkerSuccessResponse | MeshBooleanWorkerErrorResponse;
|
|
112
110
|
|
|
@@ -33,15 +33,8 @@ function isCancelled(jobId: number, cancelView: Int32Array | undefined): boolean
|
|
|
33
33
|
return cancelledJobs.has(jobId) || readCancelRequested(cancelView);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
workerGlobal.__okgeometry_boolean_should_cancel = () =>
|
|
37
|
-
readCancelRequested(workerGlobal.__okgeometryBooleanCancelFlag ?? undefined);
|
|
38
|
-
|
|
39
|
-
function nowMs(): number {
|
|
40
|
-
if (typeof performance !== "undefined" && typeof performance.now === "function") {
|
|
41
|
-
return performance.now();
|
|
42
|
-
}
|
|
43
|
-
return Date.now();
|
|
44
|
-
}
|
|
36
|
+
workerGlobal.__okgeometry_boolean_should_cancel = () =>
|
|
37
|
+
readCancelRequested(workerGlobal.__okgeometryBooleanCancelFlag ?? undefined);
|
|
45
38
|
|
|
46
39
|
function toErrorMessage(error: unknown): string {
|
|
47
40
|
if (error instanceof Error) return error.message;
|
|
@@ -53,27 +46,25 @@ function makeError(code: MeshBooleanErrorPayload["code"], message: string, detai
|
|
|
53
46
|
return { code, message, details };
|
|
54
47
|
}
|
|
55
48
|
|
|
56
|
-
function postError(jobId: number,
|
|
57
|
-
const response: MeshBooleanWorkerErrorResponse = {
|
|
58
|
-
kind: "mesh-boolean-result",
|
|
59
|
-
jobId,
|
|
60
|
-
ok: false,
|
|
61
|
-
error: payload,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
workerScope.postMessage(response, [buffer]);
|
|
76
|
-
}
|
|
49
|
+
function postError(jobId: number, payload: MeshBooleanErrorPayload): void {
|
|
50
|
+
const response: MeshBooleanWorkerErrorResponse = {
|
|
51
|
+
kind: "mesh-boolean-result",
|
|
52
|
+
jobId,
|
|
53
|
+
ok: false,
|
|
54
|
+
error: payload,
|
|
55
|
+
};
|
|
56
|
+
workerScope.postMessage(response);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function postSuccess(jobId: number, buffer: ArrayBuffer): void {
|
|
60
|
+
const response: MeshBooleanWorkerSuccessResponse = {
|
|
61
|
+
kind: "mesh-boolean-result",
|
|
62
|
+
jobId,
|
|
63
|
+
ok: true,
|
|
64
|
+
buffer,
|
|
65
|
+
};
|
|
66
|
+
workerScope.postMessage(response, [buffer]);
|
|
67
|
+
}
|
|
77
68
|
|
|
78
69
|
async function ensureWorkerInit(): Promise<void> {
|
|
79
70
|
if (isInitialized()) return;
|
|
@@ -91,26 +82,25 @@ workerScope.addEventListener("message", async (event: MessageEvent<MeshBooleanWo
|
|
|
91
82
|
cancelledJobs.add(message.jobId);
|
|
92
83
|
return;
|
|
93
84
|
}
|
|
94
|
-
|
|
95
|
-
if (message.kind !== "mesh-boolean-request") return;
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
85
|
+
|
|
86
|
+
if (message.kind !== "mesh-boolean-request") return;
|
|
87
|
+
const jobId = message.jobId;
|
|
88
|
+
const cancelView = message.cancelBuffer ? new Int32Array(message.cancelBuffer) : undefined;
|
|
89
|
+
|
|
90
|
+
if (isCancelled(jobId, cancelView)) {
|
|
91
|
+
postError(jobId, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
|
|
92
|
+
cancelledJobs.delete(jobId);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
105
95
|
|
|
106
96
|
try {
|
|
107
|
-
await ensureWorkerInit();
|
|
108
|
-
|
|
109
|
-
if (isCancelled(jobId, cancelView)) {
|
|
110
|
-
postError(jobId,
|
|
111
|
-
cancelledJobs.delete(jobId);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
97
|
+
await ensureWorkerInit();
|
|
98
|
+
|
|
99
|
+
if (isCancelled(jobId, cancelView)) {
|
|
100
|
+
postError(jobId, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
|
|
101
|
+
cancelledJobs.delete(jobId);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
114
104
|
|
|
115
105
|
workerGlobal.__okgeometryBooleanCancelFlag = cancelView ?? null;
|
|
116
106
|
|
|
@@ -134,24 +124,23 @@ workerScope.addEventListener("message", async (event: MessageEvent<MeshBooleanWo
|
|
|
134
124
|
} else {
|
|
135
125
|
result = meshA.intersect(meshB, options);
|
|
136
126
|
}
|
|
137
|
-
|
|
138
|
-
if (isCancelled(jobId, cancelView)) {
|
|
139
|
-
postError(jobId,
|
|
140
|
-
cancelledJobs.delete(jobId);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const payload = new Float64Array(result.rawBuffer);
|
|
145
|
-
postSuccess(jobId,
|
|
146
|
-
} catch (error) {
|
|
147
|
-
const details = toErrorMessage(error);
|
|
148
|
-
const cancelled = isCancelled(jobId, cancelView) || details.toLowerCase().includes("cancel");
|
|
149
|
-
postError(
|
|
150
|
-
jobId,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
cancelled ?
|
|
154
|
-
cancelled ? `Boolean ${message.operation} aborted.` : `Boolean ${message.operation} failed.`,
|
|
127
|
+
|
|
128
|
+
if (isCancelled(jobId, cancelView)) {
|
|
129
|
+
postError(jobId, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
|
|
130
|
+
cancelledJobs.delete(jobId);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const payload = new Float64Array(result.rawBuffer);
|
|
135
|
+
postSuccess(jobId, payload.buffer);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
const details = toErrorMessage(error);
|
|
138
|
+
const cancelled = isCancelled(jobId, cancelView) || details.toLowerCase().includes("cancel");
|
|
139
|
+
postError(
|
|
140
|
+
jobId,
|
|
141
|
+
makeError(
|
|
142
|
+
cancelled ? "worker_aborted" : "kernel_error",
|
|
143
|
+
cancelled ? `Boolean ${message.operation} aborted.` : `Boolean ${message.operation} failed.`,
|
|
155
144
|
cancelled ? undefined : details,
|
|
156
145
|
),
|
|
157
146
|
);
|