@loaders.gl/draco 4.3.4 → 4.4.0-alpha.10
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/dist.dev.js +13059 -1021
- package/dist/dist.min.js +12 -3
- package/dist/draco-arrow-loader.d.ts +30 -0
- package/dist/draco-arrow-loader.d.ts.map +1 -0
- package/dist/draco-arrow-loader.js +20 -0
- package/dist/draco-arrow-loader.js.map +1 -0
- package/dist/draco-format.d.ts +13 -0
- package/dist/draco-format.d.ts.map +1 -0
- package/dist/draco-format.js +16 -0
- package/dist/draco-format.js.map +1 -0
- package/dist/draco-loader.d.ts +29 -2
- package/dist/draco-loader.d.ts.map +1 -1
- package/dist/draco-loader.js +21 -1
- package/dist/draco-loader.js.map +1 -0
- package/dist/draco-worker-node.js +429 -185
- package/dist/draco-worker-node.js.map +4 -4
- package/dist/draco-worker.js +188 -116
- package/dist/draco-worker.js.map +4 -4
- package/dist/draco-writer-worker-node.js +301 -76
- package/dist/draco-writer-worker-node.js.map +4 -4
- package/dist/draco-writer-worker.js +61 -7
- package/dist/draco-writer-worker.js.map +2 -2
- package/dist/draco-writer.d.ts +16 -0
- package/dist/draco-writer.d.ts.map +1 -1
- package/dist/draco-writer.js +21 -1
- package/dist/draco-writer.js.map +1 -0
- package/dist/draco3d/draco3d-types.js +1 -0
- package/dist/draco3d/draco3d-types.js.map +1 -0
- package/dist/index.cjs +865 -811
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +5 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -38
- package/dist/index.js.map +1 -0
- package/dist/lib/draco-builder.d.ts.map +1 -1
- package/dist/lib/draco-builder.js +1 -0
- package/dist/lib/draco-builder.js.map +1 -0
- package/dist/lib/draco-module-loader.d.ts +3 -2
- package/dist/lib/draco-module-loader.d.ts.map +1 -1
- package/dist/lib/draco-module-loader.js +53 -10
- package/dist/lib/draco-module-loader.js.map +1 -0
- package/dist/lib/draco-parser.d.ts.map +1 -1
- package/dist/lib/draco-parser.js +4 -1
- package/dist/lib/draco-parser.js.map +1 -0
- package/dist/lib/draco-types.js +1 -0
- package/dist/lib/draco-types.js.map +1 -0
- package/dist/lib/utils/get-draco-schema.d.ts.map +1 -1
- package/dist/lib/utils/get-draco-schema.js +2 -1
- package/dist/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/lib/utils/version.js +2 -1
- package/dist/lib/utils/version.js.map +1 -0
- package/dist/libs/libs/draco_decoder.wasm +0 -0
- package/dist/libs/libs/draco_encoder.js +52 -0
- package/dist/libs/libs/draco_wasm_wrapper.js +117 -0
- package/dist/workers/draco-worker-node.js +1 -0
- package/dist/workers/draco-worker-node.js.map +1 -0
- package/dist/workers/draco-worker.js +1 -0
- package/dist/workers/draco-worker.js.map +1 -0
- package/dist/workers/draco-writer-worker-node.cjs +18 -0
- package/dist/workers/draco-writer-worker-node.cjs.map +1 -0
- package/dist/workers/draco-writer-worker-node.d.cts +2 -0
- package/dist/workers/draco-writer-worker-node.d.cts.map +1 -0
- package/dist/workers/draco-writer-worker-node.js +1 -0
- package/dist/workers/draco-writer-worker-node.js.map +1 -0
- package/dist/workers/draco-writer-worker.js +1 -0
- package/dist/workers/draco-writer-worker.js.map +1 -0
- package/package.json +19 -6
- package/src/draco-arrow-loader.ts +25 -0
- package/src/draco-format.ts +18 -0
- package/src/draco-loader.ts +26 -3
- package/src/draco-writer.ts +22 -1
- package/src/index.ts +5 -45
- package/src/lib/draco-module-loader.ts +87 -23
- package/src/lib/draco-parser.ts +3 -1
- package/src/lib/utils/get-draco-schema.ts +2 -1
- package/src/workers/draco-writer-worker-node.cjs +18 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// https://github.com/mrdoob/three.js/blob/398c4f39ebdb8b23eefd4a7a5ec49ec0c96c7462/examples/jsm/loaders/DRACOLoader.js
|
|
3
3
|
// by Don McCurdy / https://www.donmccurdy.com / MIT license
|
|
4
4
|
|
|
5
|
-
import {loadLibrary} from '@loaders.gl/worker-utils';
|
|
5
|
+
import {isBrowser, loadLibrary, type LoadLibraryOptions} from '@loaders.gl/worker-utils';
|
|
6
6
|
|
|
7
7
|
const DRACO_DECODER_VERSION = '1.5.6';
|
|
8
8
|
const DRACO_ENCODER_VERSION = '1.4.1';
|
|
@@ -30,7 +30,10 @@ export const DRACO_EXTERNAL_LIBRARY_URLS = {
|
|
|
30
30
|
let loadDecoderPromise;
|
|
31
31
|
let loadEncoderPromise;
|
|
32
32
|
|
|
33
|
-
export async function loadDracoDecoderModule(
|
|
33
|
+
export async function loadDracoDecoderModule(
|
|
34
|
+
options: LoadLibraryOptions = {},
|
|
35
|
+
type: 'wasm' | 'js'
|
|
36
|
+
) {
|
|
34
37
|
const modules = options.modules || {};
|
|
35
38
|
|
|
36
39
|
// Check if a bundled draco3d library has been supplied by application
|
|
@@ -40,12 +43,12 @@ export async function loadDracoDecoderModule(options) {
|
|
|
40
43
|
});
|
|
41
44
|
} else {
|
|
42
45
|
// If not, dynamically load the WASM script from our CDN
|
|
43
|
-
loadDecoderPromise ||= loadDracoDecoder(options);
|
|
46
|
+
loadDecoderPromise ||= loadDracoDecoder(options, type);
|
|
44
47
|
}
|
|
45
48
|
return await loadDecoderPromise;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
export async function loadDracoEncoderModule(options) {
|
|
51
|
+
export async function loadDracoEncoderModule(options: LoadLibraryOptions) {
|
|
49
52
|
const modules = options.modules || {};
|
|
50
53
|
|
|
51
54
|
// Check if a bundled draco3d library has been supplied by application
|
|
@@ -60,12 +63,24 @@ export async function loadDracoEncoderModule(options) {
|
|
|
60
63
|
return await loadEncoderPromise;
|
|
61
64
|
}
|
|
62
65
|
|
|
63
|
-
|
|
66
|
+
function getLibraryExport(library: any, exportName: string): any {
|
|
67
|
+
if (library && typeof library === 'object') {
|
|
68
|
+
if (library.default) {
|
|
69
|
+
return library.default;
|
|
70
|
+
}
|
|
71
|
+
if (library[exportName]) {
|
|
72
|
+
return library[exportName];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return library;
|
|
76
|
+
}
|
|
64
77
|
|
|
65
|
-
|
|
78
|
+
// DRACO DECODER LOADING
|
|
79
|
+
/** @todo - type the options, they are inconsistent */
|
|
80
|
+
async function loadDracoDecoder(options: LoadLibraryOptions, type: 'wasm' | 'js') {
|
|
66
81
|
let DracoDecoderModule;
|
|
67
82
|
let wasmBinary;
|
|
68
|
-
switch (
|
|
83
|
+
switch (type) {
|
|
69
84
|
case 'js':
|
|
70
85
|
DracoDecoderModule = await loadLibrary(
|
|
71
86
|
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
@@ -77,28 +92,59 @@ async function loadDracoDecoder(options) {
|
|
|
77
92
|
|
|
78
93
|
case 'wasm':
|
|
79
94
|
default:
|
|
80
|
-
|
|
81
|
-
await
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
try {
|
|
96
|
+
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
97
|
+
await loadLibrary(
|
|
98
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
99
|
+
'draco',
|
|
100
|
+
options,
|
|
101
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
102
|
+
),
|
|
103
|
+
await loadLibrary(
|
|
104
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
105
|
+
'draco',
|
|
106
|
+
options,
|
|
107
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
108
|
+
)
|
|
109
|
+
]);
|
|
110
|
+
} catch {
|
|
111
|
+
DracoDecoderModule = null;
|
|
112
|
+
wasmBinary = null;
|
|
113
|
+
}
|
|
94
114
|
}
|
|
95
|
-
|
|
115
|
+
DracoDecoderModule = getLibraryExport(DracoDecoderModule, 'DracoDecoderModule');
|
|
96
116
|
// @ts-ignore
|
|
97
117
|
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
118
|
+
|
|
119
|
+
// In Node environments without network access, fall back to local copies in the repo.
|
|
120
|
+
if (!DracoDecoderModule && !isBrowser) {
|
|
121
|
+
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
122
|
+
await loadLibrary(
|
|
123
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
124
|
+
'draco',
|
|
125
|
+
{...options, useLocalLibraries: true},
|
|
126
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
127
|
+
),
|
|
128
|
+
await loadLibrary(
|
|
129
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
130
|
+
'draco',
|
|
131
|
+
{...options, useLocalLibraries: true},
|
|
132
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
133
|
+
)
|
|
134
|
+
]);
|
|
135
|
+
DracoDecoderModule = getLibraryExport(DracoDecoderModule, 'DracoDecoderModule');
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
138
|
+
}
|
|
139
|
+
|
|
98
140
|
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
99
141
|
}
|
|
100
142
|
|
|
101
143
|
function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
144
|
+
if (typeof DracoDecoderModule !== 'function') {
|
|
145
|
+
throw new Error('DracoDecoderModule could not be loaded');
|
|
146
|
+
}
|
|
147
|
+
|
|
102
148
|
const options: {wasmBinary?: any} = {};
|
|
103
149
|
if (wasmBinary) {
|
|
104
150
|
options.wasmBinary = wasmBinary;
|
|
@@ -114,16 +160,34 @@ function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
|
114
160
|
|
|
115
161
|
// ENCODER
|
|
116
162
|
|
|
117
|
-
async function loadDracoEncoder(options) {
|
|
163
|
+
async function loadDracoEncoder(options: LoadLibraryOptions) {
|
|
118
164
|
let DracoEncoderModule = await loadLibrary(
|
|
119
165
|
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],
|
|
120
166
|
'draco',
|
|
121
167
|
options,
|
|
122
168
|
DRACO_EXTERNAL_LIBRARIES.ENCODER
|
|
123
169
|
);
|
|
170
|
+
DracoEncoderModule = getLibraryExport(DracoEncoderModule, 'DracoEncoderModule');
|
|
124
171
|
// @ts-ignore
|
|
125
172
|
DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;
|
|
126
173
|
|
|
174
|
+
// In Node environments without network access, fall back to local copies in the repo.
|
|
175
|
+
if (!DracoEncoderModule && !isBrowser) {
|
|
176
|
+
DracoEncoderModule = await loadLibrary(
|
|
177
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],
|
|
178
|
+
'draco',
|
|
179
|
+
{...options, useLocalLibraries: true},
|
|
180
|
+
DRACO_EXTERNAL_LIBRARIES.ENCODER
|
|
181
|
+
);
|
|
182
|
+
DracoEncoderModule = getLibraryExport(DracoEncoderModule, 'DracoEncoderModule');
|
|
183
|
+
// @ts-ignore
|
|
184
|
+
DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (typeof DracoEncoderModule !== 'function') {
|
|
188
|
+
throw new Error('DracoEncoderModule could not be loaded');
|
|
189
|
+
}
|
|
190
|
+
|
|
127
191
|
return new Promise((resolve) => {
|
|
128
192
|
DracoEncoderModule({
|
|
129
193
|
onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.
|
package/src/lib/draco-parser.ts
CHANGED
|
@@ -25,7 +25,7 @@ import type {
|
|
|
25
25
|
DracoOctahedronTransform
|
|
26
26
|
} from './draco-types';
|
|
27
27
|
|
|
28
|
-
import {getMeshBoundingBox} from '@loaders.gl/schema';
|
|
28
|
+
import {getMeshBoundingBox} from '@loaders.gl/schema-utils';
|
|
29
29
|
import {getDracoSchema} from './utils/get-draco-schema';
|
|
30
30
|
|
|
31
31
|
/** Options to control draco parsing */
|
|
@@ -257,6 +257,7 @@ export default class DracoParser {
|
|
|
257
257
|
case 'triangle-strip':
|
|
258
258
|
return {
|
|
259
259
|
topology: 'triangle-strip',
|
|
260
|
+
// TODO - mode is wrong?
|
|
260
261
|
mode: 4, // GL.TRIANGLES
|
|
261
262
|
attributes,
|
|
262
263
|
indices: {
|
|
@@ -268,6 +269,7 @@ export default class DracoParser {
|
|
|
268
269
|
default:
|
|
269
270
|
return {
|
|
270
271
|
topology: 'triangle-list',
|
|
272
|
+
// TODO - mode is wrong?
|
|
271
273
|
mode: 5, // GL.TRIANGLE_STRIP
|
|
272
274
|
attributes,
|
|
273
275
|
indices: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {MeshAttribute, Schema, Field} from '@loaders.gl/schema';
|
|
2
|
+
import {deduceMeshField} from '@loaders.gl/schema-utils';
|
|
2
3
|
import type {DracoAttribute, DracoLoaderData, DracoMetadataEntry} from '../draco-types';
|
|
3
4
|
|
|
4
5
|
/** Extract an arrow-like schema from a Draco mesh */
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// `@loaders.gl/draco` is an ESM package, so Node.js treats `.js` files as ES modules when executed directly.
|
|
2
|
+
// The prebuilt Node worker bundle is emitted as CommonJS, so we load it by compiling it as CommonJS.
|
|
3
|
+
/* @ts-expect-error TS doesn't like require in an ESM context */
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
/* @ts-expect-error TS doesn't like require in an ESM context */
|
|
6
|
+
const path = require('node:path');
|
|
7
|
+
/* @ts-expect-error TS doesn't like require in an ESM context */
|
|
8
|
+
const Module = require('node:module');
|
|
9
|
+
|
|
10
|
+
const filename = path.join(__dirname, '../../dist/draco-writer-worker-node.js');
|
|
11
|
+
const code = fs.readFileSync(filename, 'utf8');
|
|
12
|
+
|
|
13
|
+
const workerModule = new Module(filename);
|
|
14
|
+
workerModule.filename = filename;
|
|
15
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
16
|
+
workerModule.paths = Module._nodeModulePaths(path.dirname(filename));
|
|
17
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
18
|
+
workerModule._compile(code, filename);
|