@aura3d/addons 0.0.0-stage → 5.0.0
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/README.md +11 -2
- package/dist/effects/AsciiOutput.d.ts +60 -0
- package/dist/effects/AsciiOutput.d.ts.map +1 -0
- package/dist/effects/AsciiOutput.js +187 -0
- package/dist/effects/AsciiOutput.js.map +1 -0
- package/dist/effects/OutlineOutput.d.ts +58 -0
- package/dist/effects/OutlineOutput.d.ts.map +1 -0
- package/dist/effects/OutlineOutput.js +274 -0
- package/dist/effects/OutlineOutput.js.map +1 -0
- package/dist/effects/StereoOutputs.d.ts +106 -0
- package/dist/effects/StereoOutputs.d.ts.map +1 -0
- package/dist/effects/StereoOutputs.js +315 -0
- package/dist/effects/StereoOutputs.js.map +1 -0
- package/dist/generators/EnvironmentGenerators.d.ts +100 -0
- package/dist/generators/EnvironmentGenerators.d.ts.map +1 -0
- package/dist/generators/EnvironmentGenerators.js +477 -0
- package/dist/generators/EnvironmentGenerators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/MarchingCubes.d.ts +80 -0
- package/dist/objects/MarchingCubes.d.ts.map +1 -0
- package/dist/objects/MarchingCubes.js +289 -0
- package/dist/objects/MarchingCubes.js.map +1 -0
- package/dist/objects/SpecializedObjects.d.ts +150 -0
- package/dist/objects/SpecializedObjects.d.ts.map +1 -0
- package/dist/objects/SpecializedObjects.js +544 -0
- package/dist/objects/SpecializedObjects.js.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts +76 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.js +279 -0
- package/dist/renderers/SpatialDOMRenderer.js.map +1 -0
- package/dist/renderers/VectorRenderer.d.ts +98 -0
- package/dist/renderers/VectorRenderer.d.ts.map +1 -0
- package/dist/renderers/VectorRenderer.js +253 -0
- package/dist/renderers/VectorRenderer.js.map +1 -0
- package/dist/tools/Fracture.d.ts +87 -0
- package/dist/tools/Fracture.d.ts.map +1 -0
- package/dist/tools/Fracture.js +422 -0
- package/dist/tools/Fracture.js.map +1 -0
- package/dist/tools/Sculptor.d.ts +84 -0
- package/dist/tools/Sculptor.d.ts.map +1 -0
- package/dist/tools/Sculptor.js +207 -0
- package/dist/tools/Sculptor.js.map +1 -0
- package/dist/tools/TubePainter.d.ts +47 -0
- package/dist/tools/TubePainter.d.ts.map +1 -0
- package/dist/tools/TubePainter.js +170 -0
- package/dist/tools/TubePainter.js.map +1 -0
- package/dist/utils/WorkerPool.d.ts +93 -0
- package/dist/utils/WorkerPool.d.ts.map +1 -0
- package/dist/utils/WorkerPool.js +360 -0
- package/dist/utils/WorkerPool.js.map +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
export class WorkerPoolError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.name = "WorkerPoolError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Bounded, opt-in processing pool. Exactly one task is sent to each worker at a
|
|
11
|
+
* time. Cancelling an executing task terminates its worker, so CPU-bound work
|
|
12
|
+
* that cannot process a cancel message cannot retain a slot indefinitely. A new
|
|
13
|
+
* worker is created for the next task. Queued tasks are removed without sending
|
|
14
|
+
* or transferring their payloads.
|
|
15
|
+
*/
|
|
16
|
+
export class WorkerPool {
|
|
17
|
+
createWorker;
|
|
18
|
+
size;
|
|
19
|
+
maxQueue;
|
|
20
|
+
workers = new Set();
|
|
21
|
+
queue = [];
|
|
22
|
+
nextId = 1;
|
|
23
|
+
disposed = false;
|
|
24
|
+
creating = 0;
|
|
25
|
+
draining = false;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
if (!Number.isSafeInteger(options.size) || options.size < 1) {
|
|
28
|
+
throw new RangeError("WorkerPool size must be a positive safe integer");
|
|
29
|
+
}
|
|
30
|
+
const maxQueue = options.maxQueue ?? 64;
|
|
31
|
+
if (!Number.isSafeInteger(maxQueue) || maxQueue < 0) {
|
|
32
|
+
throw new RangeError("WorkerPool maxQueue must be a non-negative safe integer");
|
|
33
|
+
}
|
|
34
|
+
if (typeof options.createWorker !== "function")
|
|
35
|
+
throw new TypeError("WorkerPool requires a worker factory");
|
|
36
|
+
this.createWorker = options.createWorker;
|
|
37
|
+
this.size = options.size;
|
|
38
|
+
this.maxQueue = maxQueue;
|
|
39
|
+
}
|
|
40
|
+
get workerCount() { return this.workers.size; }
|
|
41
|
+
get pendingCount() { return this.queue.length; }
|
|
42
|
+
get activeCount() {
|
|
43
|
+
let count = 0;
|
|
44
|
+
for (const slot of this.workers)
|
|
45
|
+
if (slot.active)
|
|
46
|
+
count++;
|
|
47
|
+
return count;
|
|
48
|
+
}
|
|
49
|
+
run(payload, options = {}) {
|
|
50
|
+
if (this.disposed)
|
|
51
|
+
return Promise.reject(disposedError());
|
|
52
|
+
if (options.signal?.aborted)
|
|
53
|
+
return Promise.reject(abortError());
|
|
54
|
+
if (this.nextId > Number.MAX_SAFE_INTEGER)
|
|
55
|
+
return Promise.reject(new RangeError("WorkerPool request IDs exhausted"));
|
|
56
|
+
// Waiting tasks reserve either an available execution slot or a queue slot.
|
|
57
|
+
// Counting the queue is essential while a factory is running: it may call
|
|
58
|
+
// run() synchronously, before drain() can open the remaining workers.
|
|
59
|
+
const outstanding = this.activeCount + this.creating + this.queue.length;
|
|
60
|
+
if (outstanding >= this.size + this.maxQueue) {
|
|
61
|
+
return Promise.reject(new WorkerPoolError("queue-full", "WorkerPool waiting queue is full"));
|
|
62
|
+
}
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const task = {
|
|
65
|
+
id: this.nextId++, payload, transfer: [...(options.transfer ?? [])], resolve, reject,
|
|
66
|
+
signal: options.signal, settled: false
|
|
67
|
+
};
|
|
68
|
+
if (task.signal) {
|
|
69
|
+
task.abort = () => this.cancel(task);
|
|
70
|
+
task.signal.addEventListener("abort", task.abort, { once: true });
|
|
71
|
+
}
|
|
72
|
+
this.queue.push(task);
|
|
73
|
+
if (task.signal?.aborted)
|
|
74
|
+
this.cancel(task);
|
|
75
|
+
else
|
|
76
|
+
this.drain();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Rejects all work, removes listeners and terminates every owned worker. Idempotent. */
|
|
80
|
+
dispose() {
|
|
81
|
+
if (this.disposed)
|
|
82
|
+
return;
|
|
83
|
+
this.disposed = true;
|
|
84
|
+
for (const task of this.queue.splice(0))
|
|
85
|
+
this.reject(task, disposedError());
|
|
86
|
+
for (const slot of [...this.workers]) {
|
|
87
|
+
if (slot.active)
|
|
88
|
+
this.reject(slot.active, disposedError());
|
|
89
|
+
this.retire(slot);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
drain() {
|
|
93
|
+
if (this.draining)
|
|
94
|
+
return;
|
|
95
|
+
this.draining = true;
|
|
96
|
+
try {
|
|
97
|
+
while (!this.disposed && this.queue.length > 0) {
|
|
98
|
+
let slot = [...this.workers].find((candidate) => !candidate.active);
|
|
99
|
+
if (!slot && this.workers.size + this.creating >= this.size)
|
|
100
|
+
return;
|
|
101
|
+
const task = this.queue.shift();
|
|
102
|
+
if (!slot) {
|
|
103
|
+
this.creating++;
|
|
104
|
+
try {
|
|
105
|
+
slot = this.openWorker();
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
this.reject(task, workerError("WorkerPool could not create a worker", error));
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
this.creating--;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (this.disposed || task.settled) {
|
|
116
|
+
// A supplied factory can synchronously dispose the pool or abort work.
|
|
117
|
+
if (this.disposed) {
|
|
118
|
+
this.reject(task, disposedError());
|
|
119
|
+
this.retire(slot);
|
|
120
|
+
}
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
slot.active = task;
|
|
124
|
+
try {
|
|
125
|
+
slot.worker.postMessage({ type: "task", id: task.id, payload: task.payload }, task.transfer);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// postMessage can fail, for example if a payload cannot be cloned.
|
|
129
|
+
if (slot.active === task) {
|
|
130
|
+
this.reject(task, workerError("WorkerPool could not send a task", error));
|
|
131
|
+
this.retire(slot);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
this.draining = false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
openWorker() {
|
|
141
|
+
const worker = this.createWorker();
|
|
142
|
+
const slot = {
|
|
143
|
+
worker,
|
|
144
|
+
message: (event) => this.receive(slot, event.data),
|
|
145
|
+
error: (event) => {
|
|
146
|
+
if (typeof event.preventDefault === "function")
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
this.failWorker(slot, event.message || "WorkerPool worker failed");
|
|
149
|
+
},
|
|
150
|
+
messageError: () => this.failWorker(slot, "WorkerPool could not deserialize a worker response"),
|
|
151
|
+
retired: false
|
|
152
|
+
};
|
|
153
|
+
try {
|
|
154
|
+
worker.addEventListener("message", slot.message);
|
|
155
|
+
worker.addEventListener("error", slot.error);
|
|
156
|
+
worker.addEventListener("messageerror", slot.messageError);
|
|
157
|
+
this.workers.add(slot);
|
|
158
|
+
return slot;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
// Partially installed listeners and the newly created worker are ours too.
|
|
162
|
+
this.retire(slot);
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
receive(slot, value) {
|
|
167
|
+
if (slot.retired || !slot.active || typeof value !== "object" || value === null)
|
|
168
|
+
return;
|
|
169
|
+
const message = value;
|
|
170
|
+
// Ignore stale replies and unrelated messages; IDs are never reused.
|
|
171
|
+
if (message.id !== slot.active.id)
|
|
172
|
+
return;
|
|
173
|
+
const task = slot.active;
|
|
174
|
+
slot.active = undefined;
|
|
175
|
+
if (message.type === "result" && "value" in message) {
|
|
176
|
+
this.resolve(task, message.value);
|
|
177
|
+
}
|
|
178
|
+
else if (message.type === "error" && isSerializedError(message.error)) {
|
|
179
|
+
const error = new Error(message.error.message);
|
|
180
|
+
error.name = message.error.name;
|
|
181
|
+
this.reject(task, error);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.reject(task, new WorkerPoolError("invalid-response", "WorkerPool received an invalid task response"));
|
|
185
|
+
this.retire(slot);
|
|
186
|
+
}
|
|
187
|
+
this.drain();
|
|
188
|
+
}
|
|
189
|
+
cancel(task) {
|
|
190
|
+
if (task.settled)
|
|
191
|
+
return;
|
|
192
|
+
const index = this.queue.indexOf(task);
|
|
193
|
+
if (index !== -1)
|
|
194
|
+
this.queue.splice(index, 1);
|
|
195
|
+
const slot = [...this.workers].find((candidate) => candidate.active === task);
|
|
196
|
+
this.reject(task, abortError());
|
|
197
|
+
if (slot) {
|
|
198
|
+
// Retire the slot before sending cancel: a synchronous adapter response
|
|
199
|
+
// must not dispatch a queued task to a worker we are about to terminate.
|
|
200
|
+
this.retire(slot, task.id);
|
|
201
|
+
}
|
|
202
|
+
this.drain();
|
|
203
|
+
}
|
|
204
|
+
failWorker(slot, message) {
|
|
205
|
+
if (slot.retired)
|
|
206
|
+
return;
|
|
207
|
+
if (slot.active)
|
|
208
|
+
this.reject(slot.active, new WorkerPoolError("worker-failed", message));
|
|
209
|
+
this.retire(slot);
|
|
210
|
+
this.drain();
|
|
211
|
+
}
|
|
212
|
+
retire(slot, cancelId) {
|
|
213
|
+
if (slot.retired)
|
|
214
|
+
return;
|
|
215
|
+
slot.retired = true;
|
|
216
|
+
slot.active = undefined;
|
|
217
|
+
this.workers.delete(slot);
|
|
218
|
+
// Attempt every cleanup even when an adapter has a faulty disposer.
|
|
219
|
+
try {
|
|
220
|
+
slot.worker.removeEventListener("message", slot.message);
|
|
221
|
+
}
|
|
222
|
+
catch { /* continue cleanup */ }
|
|
223
|
+
try {
|
|
224
|
+
slot.worker.removeEventListener("error", slot.error);
|
|
225
|
+
}
|
|
226
|
+
catch { /* continue cleanup */ }
|
|
227
|
+
try {
|
|
228
|
+
slot.worker.removeEventListener("messageerror", slot.messageError);
|
|
229
|
+
}
|
|
230
|
+
catch { /* continue cleanup */ }
|
|
231
|
+
if (cancelId !== undefined) {
|
|
232
|
+
// Cancellation is best effort; termination also stops a synchronous
|
|
233
|
+
// handler that cannot receive this message.
|
|
234
|
+
try {
|
|
235
|
+
slot.worker.postMessage({ type: "cancel", id: cancelId }, []);
|
|
236
|
+
}
|
|
237
|
+
catch { /* terminate below */ }
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
slot.worker.terminate();
|
|
241
|
+
}
|
|
242
|
+
catch { /* no further owned resources */ }
|
|
243
|
+
}
|
|
244
|
+
resolve(task, value) {
|
|
245
|
+
if (task.settled)
|
|
246
|
+
return;
|
|
247
|
+
this.finish(task);
|
|
248
|
+
task.resolve(value);
|
|
249
|
+
}
|
|
250
|
+
reject(task, error) {
|
|
251
|
+
if (task.settled)
|
|
252
|
+
return;
|
|
253
|
+
this.finish(task);
|
|
254
|
+
task.reject(error);
|
|
255
|
+
}
|
|
256
|
+
finish(task) {
|
|
257
|
+
task.settled = true;
|
|
258
|
+
if (task.signal && task.abort)
|
|
259
|
+
task.signal.removeEventListener("abort", task.abort);
|
|
260
|
+
task.abort = undefined;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Install a task handler in a worker. The returned disposer removes its listener,
|
|
265
|
+
* aborts outstanding handlers and suppresses late results. Output transferables
|
|
266
|
+
* are supplied explicitly with the result.
|
|
267
|
+
*/
|
|
268
|
+
export function installWorkerPoolHandler(port, handler) {
|
|
269
|
+
const active = new Map();
|
|
270
|
+
let disposed = false;
|
|
271
|
+
const sendError = (id, error) => {
|
|
272
|
+
const serialized = serializeError(error);
|
|
273
|
+
try {
|
|
274
|
+
port.postMessage({ type: "error", id, error: serialized }, []);
|
|
275
|
+
}
|
|
276
|
+
catch { /* transport is gone */ }
|
|
277
|
+
};
|
|
278
|
+
const onMessage = (event) => {
|
|
279
|
+
const data = event.data;
|
|
280
|
+
if (disposed || typeof data !== "object" || data === null)
|
|
281
|
+
return;
|
|
282
|
+
const request = data;
|
|
283
|
+
if (!Number.isSafeInteger(request.id) || request.id < 1)
|
|
284
|
+
return;
|
|
285
|
+
const id = request.id;
|
|
286
|
+
if (request.type === "cancel") {
|
|
287
|
+
active.get(id)?.abort();
|
|
288
|
+
active.delete(id);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (request.type !== "task" || !("payload" in request))
|
|
292
|
+
return;
|
|
293
|
+
if (active.has(id)) {
|
|
294
|
+
active.get(id)?.abort();
|
|
295
|
+
active.delete(id);
|
|
296
|
+
sendError(id, new Error("Duplicate WorkerPool task ID"));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const controller = new AbortController();
|
|
300
|
+
active.set(id, controller);
|
|
301
|
+
void (async () => {
|
|
302
|
+
// Do not start a handler when a cancel or dispose arrived in this turn.
|
|
303
|
+
await Promise.resolve();
|
|
304
|
+
if (disposed || active.get(id) !== controller || controller.signal.aborted)
|
|
305
|
+
return;
|
|
306
|
+
try {
|
|
307
|
+
const result = await handler(request.payload, controller.signal);
|
|
308
|
+
if (disposed || active.get(id) !== controller || controller.signal.aborted)
|
|
309
|
+
return;
|
|
310
|
+
active.delete(id);
|
|
311
|
+
port.postMessage({ type: "result", id, value: result.value }, [...(result.transfer ?? [])]);
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
if (disposed || controller.signal.aborted)
|
|
315
|
+
return;
|
|
316
|
+
// A postMessage clone error occurs after removal from active.
|
|
317
|
+
if (active.get(id) === controller)
|
|
318
|
+
active.delete(id);
|
|
319
|
+
sendError(id, error);
|
|
320
|
+
}
|
|
321
|
+
})();
|
|
322
|
+
};
|
|
323
|
+
port.addEventListener("message", onMessage);
|
|
324
|
+
return () => {
|
|
325
|
+
if (disposed)
|
|
326
|
+
return;
|
|
327
|
+
disposed = true;
|
|
328
|
+
try {
|
|
329
|
+
port.removeEventListener("message", onMessage);
|
|
330
|
+
}
|
|
331
|
+
finally {
|
|
332
|
+
for (const controller of active.values())
|
|
333
|
+
controller.abort();
|
|
334
|
+
active.clear();
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function isSerializedError(value) {
|
|
339
|
+
if (typeof value !== "object" || value === null)
|
|
340
|
+
return false;
|
|
341
|
+
const error = value;
|
|
342
|
+
return typeof error.name === "string" && typeof error.message === "string";
|
|
343
|
+
}
|
|
344
|
+
function serializeError(value) {
|
|
345
|
+
return value instanceof Error
|
|
346
|
+
? { name: value.name, message: value.message }
|
|
347
|
+
: { name: "Error", message: String(value) };
|
|
348
|
+
}
|
|
349
|
+
function abortError() {
|
|
350
|
+
const error = new Error("WorkerPool task cancelled");
|
|
351
|
+
error.name = "AbortError";
|
|
352
|
+
return error;
|
|
353
|
+
}
|
|
354
|
+
function disposedError() {
|
|
355
|
+
return new WorkerPoolError("disposed", "WorkerPool has been disposed");
|
|
356
|
+
}
|
|
357
|
+
function workerError(message, error) {
|
|
358
|
+
return new WorkerPoolError("worker-failed", `${message}: ${error instanceof Error ? error.message : String(error)}`);
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=WorkerPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../../src/utils/WorkerPool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,117 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/addons",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "5.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"browser": "./dist/index.js",
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./renderers/SpatialDOMRenderer": {
|
|
13
|
+
"types": "./dist/renderers/SpatialDOMRenderer.d.ts",
|
|
14
|
+
"browser": "./dist/renderers/SpatialDOMRenderer.js",
|
|
15
|
+
"import": "./dist/renderers/SpatialDOMRenderer.js",
|
|
16
|
+
"default": "./dist/renderers/SpatialDOMRenderer.js"
|
|
17
|
+
},
|
|
18
|
+
"./renderers/VectorRenderer": {
|
|
19
|
+
"types": "./dist/renderers/VectorRenderer.d.ts",
|
|
20
|
+
"browser": "./dist/renderers/VectorRenderer.js",
|
|
21
|
+
"import": "./dist/renderers/VectorRenderer.js",
|
|
22
|
+
"default": "./dist/renderers/VectorRenderer.js"
|
|
23
|
+
},
|
|
24
|
+
"./effects/StereoOutputs": {
|
|
25
|
+
"types": "./dist/effects/StereoOutputs.d.ts",
|
|
26
|
+
"browser": "./dist/effects/StereoOutputs.js",
|
|
27
|
+
"import": "./dist/effects/StereoOutputs.js",
|
|
28
|
+
"default": "./dist/effects/StereoOutputs.js"
|
|
29
|
+
},
|
|
30
|
+
"./effects/AsciiOutput": {
|
|
31
|
+
"types": "./dist/effects/AsciiOutput.d.ts",
|
|
32
|
+
"browser": "./dist/effects/AsciiOutput.js",
|
|
33
|
+
"import": "./dist/effects/AsciiOutput.js",
|
|
34
|
+
"default": "./dist/effects/AsciiOutput.js"
|
|
35
|
+
},
|
|
36
|
+
"./effects/OutlineOutput": {
|
|
37
|
+
"types": "./dist/effects/OutlineOutput.d.ts",
|
|
38
|
+
"browser": "./dist/effects/OutlineOutput.js",
|
|
39
|
+
"import": "./dist/effects/OutlineOutput.js",
|
|
40
|
+
"default": "./dist/effects/OutlineOutput.js"
|
|
41
|
+
},
|
|
42
|
+
"./objects/MarchingCubes": {
|
|
43
|
+
"types": "./dist/objects/MarchingCubes.d.ts",
|
|
44
|
+
"browser": "./dist/objects/MarchingCubes.js",
|
|
45
|
+
"import": "./dist/objects/MarchingCubes.js",
|
|
46
|
+
"default": "./dist/objects/MarchingCubes.js"
|
|
47
|
+
},
|
|
48
|
+
"./objects/SpecializedObjects": {
|
|
49
|
+
"types": "./dist/objects/SpecializedObjects.d.ts",
|
|
50
|
+
"browser": "./dist/objects/SpecializedObjects.js",
|
|
51
|
+
"import": "./dist/objects/SpecializedObjects.js",
|
|
52
|
+
"default": "./dist/objects/SpecializedObjects.js"
|
|
53
|
+
},
|
|
54
|
+
"./generators/EnvironmentGenerators": {
|
|
55
|
+
"types": "./dist/generators/EnvironmentGenerators.d.ts",
|
|
56
|
+
"browser": "./dist/generators/EnvironmentGenerators.js",
|
|
57
|
+
"import": "./dist/generators/EnvironmentGenerators.js",
|
|
58
|
+
"default": "./dist/generators/EnvironmentGenerators.js"
|
|
59
|
+
},
|
|
60
|
+
"./tools/Sculptor": {
|
|
61
|
+
"types": "./dist/tools/Sculptor.d.ts",
|
|
62
|
+
"browser": "./dist/tools/Sculptor.js",
|
|
63
|
+
"import": "./dist/tools/Sculptor.js",
|
|
64
|
+
"default": "./dist/tools/Sculptor.js"
|
|
65
|
+
},
|
|
66
|
+
"./tools/TubePainter": {
|
|
67
|
+
"types": "./dist/tools/TubePainter.d.ts",
|
|
68
|
+
"browser": "./dist/tools/TubePainter.js",
|
|
69
|
+
"import": "./dist/tools/TubePainter.js",
|
|
70
|
+
"default": "./dist/tools/TubePainter.js"
|
|
71
|
+
},
|
|
72
|
+
"./tools/Fracture": {
|
|
73
|
+
"types": "./dist/tools/Fracture.d.ts",
|
|
74
|
+
"browser": "./dist/tools/Fracture.js",
|
|
75
|
+
"import": "./dist/tools/Fracture.js",
|
|
76
|
+
"default": "./dist/tools/Fracture.js"
|
|
77
|
+
},
|
|
78
|
+
"./utils/WorkerPool": {
|
|
79
|
+
"types": "./dist/utils/WorkerPool.d.ts",
|
|
80
|
+
"browser": "./dist/utils/WorkerPool.js",
|
|
81
|
+
"import": "./dist/utils/WorkerPool.js",
|
|
82
|
+
"default": "./dist/utils/WorkerPool.js"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"main": "./dist/index.js",
|
|
86
|
+
"types": "./dist/index.d.ts",
|
|
87
|
+
"dependencies": {
|
|
88
|
+
"@aura3d/engine": "5.0.0",
|
|
89
|
+
"@aura3d/rendering": "5.0.0",
|
|
90
|
+
"@aura3d/scene": "5.0.0"
|
|
91
|
+
},
|
|
92
|
+
"sideEffects": false,
|
|
93
|
+
"description": "Optional independently authored renderers, effects, procedural objects, geometry tools, and utilities for Aura3D.",
|
|
94
|
+
"keywords": [
|
|
95
|
+
"aura3d",
|
|
96
|
+
"3d",
|
|
97
|
+
"typescript",
|
|
98
|
+
"addons"
|
|
99
|
+
],
|
|
100
|
+
"homepage": "https://aura3d.auraone.ai",
|
|
101
|
+
"repository": {
|
|
102
|
+
"type": "git",
|
|
103
|
+
"url": "git+https://github.com/auraoneai/aura3d.git",
|
|
104
|
+
"directory": "packages/addons"
|
|
105
|
+
},
|
|
106
|
+
"bugs": {
|
|
107
|
+
"url": "https://github.com/auraoneai/aura3d/issues"
|
|
108
|
+
},
|
|
109
|
+
"license": "MIT",
|
|
110
|
+
"publishConfig": {
|
|
111
|
+
"access": "public"
|
|
112
|
+
},
|
|
113
|
+
"files": [
|
|
114
|
+
"README.md",
|
|
115
|
+
"dist"
|
|
116
|
+
]
|
|
6
117
|
}
|