okgeometry-api 0.4.3 → 0.4.5

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.
@@ -0,0 +1,85 @@
1
+ export type MeshBooleanOperation = "union" | "subtraction" | "intersection";
2
+ export interface MeshBooleanLimits {
3
+ maxInputFacesPerMesh: number;
4
+ maxCombinedInputFaces: number;
5
+ maxFaceProduct: number;
6
+ }
7
+ export interface MeshBooleanOptions {
8
+ /**
9
+ * Override one or more safety limits for this operation.
10
+ */
11
+ limits?: Partial<MeshBooleanLimits>;
12
+ /**
13
+ * Skip safety limits and force boolean execution.
14
+ */
15
+ allowUnsafe?: boolean;
16
+ }
17
+ export type MeshBooleanErrorCode = "worker_unavailable" | "worker_crashed" | "worker_protocol" | "worker_aborted" | "worker_timeout" | "kernel_error";
18
+ export interface MeshBooleanErrorPayload {
19
+ code: MeshBooleanErrorCode;
20
+ message: string;
21
+ details?: string;
22
+ }
23
+ export type MeshBooleanJobStage = "queued" | "running" | "completed";
24
+ export interface MeshBooleanProgressEvent {
25
+ stage: MeshBooleanJobStage;
26
+ jobId: number;
27
+ workerId?: number;
28
+ queueSize: number;
29
+ }
30
+ export interface MeshBooleanAsyncOptions extends MeshBooleanOptions {
31
+ /**
32
+ * Abort the worker job when this signal is aborted.
33
+ */
34
+ signal?: AbortSignal;
35
+ /**
36
+ * Optional timeout in milliseconds.
37
+ */
38
+ timeoutMs?: number;
39
+ /**
40
+ * Optional custom worker factory (for app-level worker pooling/reuse).
41
+ */
42
+ workerFactory?: () => Worker;
43
+ /**
44
+ * Override worker pool size for this call.
45
+ */
46
+ poolSize?: number;
47
+ /**
48
+ * Observe coarse-grained job stage changes.
49
+ */
50
+ onProgress?: (event: MeshBooleanProgressEvent) => void;
51
+ }
52
+ export interface MeshBooleanWorkerRequest {
53
+ kind: "mesh-boolean-request";
54
+ jobId: number;
55
+ operation: MeshBooleanOperation;
56
+ bufferA: ArrayBuffer;
57
+ bufferB: ArrayBuffer;
58
+ options: MeshBooleanOptions;
59
+ }
60
+ export interface MeshBooleanWorkerCancel {
61
+ kind: "mesh-boolean-cancel";
62
+ jobId: number;
63
+ }
64
+ export type MeshBooleanWorkerInbound = MeshBooleanWorkerRequest | MeshBooleanWorkerCancel;
65
+ export interface MeshBooleanWorkerSuccessResponse {
66
+ kind: "mesh-boolean-result";
67
+ jobId: number;
68
+ ok: true;
69
+ buffer: ArrayBuffer;
70
+ elapsedMs: number;
71
+ }
72
+ export interface MeshBooleanWorkerErrorResponse {
73
+ kind: "mesh-boolean-result";
74
+ jobId: number;
75
+ ok: false;
76
+ error: MeshBooleanErrorPayload;
77
+ elapsedMs: number;
78
+ }
79
+ export type MeshBooleanWorkerResponse = MeshBooleanWorkerSuccessResponse | MeshBooleanWorkerErrorResponse;
80
+ export declare class MeshBooleanExecutionError extends Error {
81
+ readonly code: MeshBooleanErrorCode;
82
+ readonly details?: string;
83
+ constructor(payload: MeshBooleanErrorPayload);
84
+ }
85
+ //# sourceMappingURL=mesh-boolean.protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-boolean.protocol.d.ts","sourceRoot":"","sources":["../src/mesh-boolean.protocol.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,GAAG,uBAAuB,CAAC;AAE1F,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,yBAAyB,GAAG,gCAAgC,GAAG,8BAA8B,CAAC;AAE1G,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,uBAAuB;CAM7C"}
@@ -0,0 +1,9 @@
1
+ export class MeshBooleanExecutionError extends Error {
2
+ constructor(payload) {
3
+ super(payload.message);
4
+ this.name = "MeshBooleanExecutionError";
5
+ this.code = payload.code;
6
+ this.details = payload.details;
7
+ }
8
+ }
9
+ //# sourceMappingURL=mesh-boolean.protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-boolean.protocol.js","sourceRoot":"","sources":["../src/mesh-boolean.protocol.ts"],"names":[],"mappings":"AAmGA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAIlD,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mesh-boolean.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-boolean.worker.d.ts","sourceRoot":"","sources":["../src/mesh-boolean.worker.ts"],"names":[],"mappings":"AAgIA,OAAO,EAAE,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { init, isInitialized } from "./engine.js";
2
+ import { Mesh } from "./Mesh.js";
3
+ const workerScope = self;
4
+ const cancelledJobs = new Set();
5
+ let initPromise = null;
6
+ function nowMs() {
7
+ if (typeof performance !== "undefined" && typeof performance.now === "function") {
8
+ return performance.now();
9
+ }
10
+ return Date.now();
11
+ }
12
+ function toErrorMessage(error) {
13
+ if (error instanceof Error)
14
+ return error.message;
15
+ if (typeof error === "string")
16
+ return error;
17
+ return String(error);
18
+ }
19
+ function makeError(code, message, details) {
20
+ return { code, message, details };
21
+ }
22
+ function postError(jobId, startedAt, payload) {
23
+ const response = {
24
+ kind: "mesh-boolean-result",
25
+ jobId,
26
+ ok: false,
27
+ error: payload,
28
+ elapsedMs: Math.max(0, nowMs() - startedAt),
29
+ };
30
+ workerScope.postMessage(response);
31
+ }
32
+ function postSuccess(jobId, startedAt, buffer) {
33
+ const response = {
34
+ kind: "mesh-boolean-result",
35
+ jobId,
36
+ ok: true,
37
+ buffer,
38
+ elapsedMs: Math.max(0, nowMs() - startedAt),
39
+ };
40
+ workerScope.postMessage(response, [buffer]);
41
+ }
42
+ async function ensureWorkerInit() {
43
+ if (isInitialized())
44
+ return;
45
+ if (!initPromise) {
46
+ initPromise = init();
47
+ }
48
+ await initPromise;
49
+ }
50
+ workerScope.addEventListener("message", async (event) => {
51
+ const message = event.data;
52
+ if (!message)
53
+ return;
54
+ if (message.kind === "mesh-boolean-cancel") {
55
+ cancelledJobs.add(message.jobId);
56
+ return;
57
+ }
58
+ if (message.kind !== "mesh-boolean-request")
59
+ return;
60
+ const startedAt = nowMs();
61
+ const jobId = message.jobId;
62
+ if (cancelledJobs.has(jobId)) {
63
+ postError(jobId, startedAt, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
64
+ cancelledJobs.delete(jobId);
65
+ return;
66
+ }
67
+ try {
68
+ await ensureWorkerInit();
69
+ if (cancelledJobs.has(jobId)) {
70
+ postError(jobId, startedAt, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
71
+ cancelledJobs.delete(jobId);
72
+ return;
73
+ }
74
+ const meshA = Mesh.fromBuffer(new Float64Array(message.bufferA));
75
+ const meshB = Mesh.fromBuffer(new Float64Array(message.bufferB));
76
+ const options = {
77
+ allowUnsafe: message.options.allowUnsafe ?? true,
78
+ limits: message.options.limits,
79
+ };
80
+ let result;
81
+ if (message.operation === "union") {
82
+ result = meshA.union(meshB, options);
83
+ }
84
+ else if (message.operation === "subtraction") {
85
+ result = meshA.subtract(meshB, options);
86
+ }
87
+ else {
88
+ result = meshA.intersect(meshB, options);
89
+ }
90
+ if (cancelledJobs.has(jobId)) {
91
+ postError(jobId, startedAt, makeError("worker_aborted", `Boolean ${message.operation} aborted.`));
92
+ cancelledJobs.delete(jobId);
93
+ return;
94
+ }
95
+ const payload = new Float64Array(result.rawBuffer);
96
+ postSuccess(jobId, startedAt, payload.buffer);
97
+ }
98
+ catch (error) {
99
+ postError(jobId, startedAt, makeError("kernel_error", `Boolean ${message.operation} failed.`, toErrorMessage(error)));
100
+ }
101
+ finally {
102
+ cancelledJobs.delete(jobId);
103
+ }
104
+ });
105
+ //# sourceMappingURL=mesh-boolean.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-boolean.worker.js","sourceRoot":"","sources":["../src/mesh-boolean.worker.ts"],"names":[],"mappings":"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"}