@loaders.gl/gltf 3.0.12 → 3.0.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.
Files changed (73) hide show
  1. package/dist/dist.es5.min.js +1 -1
  2. package/dist/dist.es5.min.js.map +1 -1
  3. package/dist/dist.min.js +1 -1
  4. package/dist/dist.min.js.map +1 -1
  5. package/dist/es5/bundle.js +2 -2
  6. package/dist/es5/bundle.js.map +1 -1
  7. package/dist/es5/glb-loader.js +10 -33
  8. package/dist/es5/glb-loader.js.map +1 -1
  9. package/dist/es5/glb-writer.js +9 -8
  10. package/dist/es5/glb-writer.js.map +1 -1
  11. package/dist/es5/gltf-loader.js +14 -52
  12. package/dist/es5/gltf-loader.js.map +1 -1
  13. package/dist/es5/gltf-writer.js +10 -10
  14. package/dist/es5/gltf-writer.js.map +1 -1
  15. package/dist/es5/index.js +7 -7
  16. package/dist/es5/lib/api/gltf-scenegraph.js +447 -541
  17. package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
  18. package/dist/es5/lib/api/normalize-gltf-v1.js +150 -280
  19. package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -1
  20. package/dist/es5/lib/api/post-process-gltf.js +279 -354
  21. package/dist/es5/lib/api/post-process-gltf.js.map +1 -1
  22. package/dist/es5/lib/encoders/encode-glb.js +19 -22
  23. package/dist/es5/lib/encoders/encode-glb.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-gltf.js +3 -5
  25. package/dist/es5/lib/encoders/encode-gltf.js.map +1 -1
  26. package/dist/es5/lib/extensions/EXT_meshopt_compression.js +34 -99
  27. package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -1
  28. package/dist/es5/lib/extensions/KHR_binary_gltf.js +8 -22
  29. package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -1
  30. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +70 -244
  31. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  32. package/dist/es5/lib/extensions/KHR_lights_punctual.js +38 -102
  33. package/dist/es5/lib/extensions/KHR_lights_punctual.js.map +1 -1
  34. package/dist/es5/lib/extensions/KHR_materials_unlit.js +22 -67
  35. package/dist/es5/lib/extensions/KHR_materials_unlit.js.map +1 -1
  36. package/dist/es5/lib/extensions/KHR_techniques_webgl.js +32 -88
  37. package/dist/es5/lib/extensions/KHR_techniques_webgl.js.map +1 -1
  38. package/dist/es5/lib/extensions/gltf-extensions.js +17 -67
  39. package/dist/es5/lib/extensions/gltf-extensions.js.map +1 -1
  40. package/dist/es5/lib/gltf-utils/get-typed-array.js +6 -6
  41. package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -1
  42. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +19 -21
  43. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
  44. package/dist/es5/lib/gltf-utils/gltf-constants.js +13 -13
  45. package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -1
  46. package/dist/es5/lib/gltf-utils/gltf-utils.js +16 -16
  47. package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -1
  48. package/dist/es5/lib/gltf-utils/resolve-url.js +2 -2
  49. package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -1
  50. package/dist/es5/lib/parsers/parse-glb.js +34 -38
  51. package/dist/es5/lib/parsers/parse-glb.js.map +1 -1
  52. package/dist/es5/lib/parsers/parse-gltf.js +80 -215
  53. package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
  54. package/dist/es5/lib/utils/version.js +1 -1
  55. package/dist/es5/lib/utils/version.js.map +1 -1
  56. package/dist/es5/meshopt/meshopt-decoder.js +46 -197
  57. package/dist/es5/meshopt/meshopt-decoder.js.map +1 -1
  58. package/dist/esm/lib/api/gltf-scenegraph.js +1 -1
  59. package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
  60. package/dist/esm/lib/api/normalize-gltf-v1.js +3 -3
  61. package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -1
  62. package/dist/esm/lib/api/post-process-gltf.js +12 -12
  63. package/dist/esm/lib/api/post-process-gltf.js.map +1 -1
  64. package/dist/esm/lib/gltf-utils/resolve-url.js +1 -1
  65. package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -1
  66. package/dist/esm/lib/parsers/parse-glb.js +2 -6
  67. package/dist/esm/lib/parsers/parse-glb.js.map +1 -1
  68. package/dist/esm/lib/parsers/parse-gltf.js +1 -1
  69. package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
  70. package/dist/esm/lib/utils/version.js +1 -1
  71. package/dist/esm/meshopt/meshopt-decoder.js +1 -1
  72. package/dist/esm/meshopt/meshopt-decoder.js.map +1 -1
  73. package/package.json +6 -6
@@ -1,19 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
3
  Object.defineProperty(exports, "__esModule", {
8
4
  value: true
9
5
  });
10
6
  exports.isGLTF = isGLTF;
11
7
  exports.parseGLTF = parseGLTF;
12
8
 
13
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
14
-
15
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
-
17
9
  var _images = require("@loaders.gl/images");
18
10
 
19
11
  var _loaderUtils = require("@loaders.gl/loader-utils");
@@ -32,74 +24,37 @@ var _postProcessGltf = require("../api/post-process-gltf");
32
24
 
33
25
  var _parseGlb = _interopRequireWildcard(require("./parse-glb"));
34
26
 
35
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
36
28
 
37
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
30
 
39
31
  function isGLTF(arrayBuffer, options) {
40
- var byteOffset = 0;
32
+ const byteOffset = 0;
41
33
  return (0, _parseGlb.isGLB)(arrayBuffer, byteOffset, options);
42
34
  }
43
35
 
44
- function parseGLTF(_x, _x2) {
45
- return _parseGLTF.apply(this, arguments);
46
- }
36
+ async function parseGLTF(gltf, arrayBufferOrString, byteOffset = 0, options, context) {
37
+ var _options$gltf, _options$gltf2, _options$gltf3, _options$gltf4;
38
+
39
+ parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
40
+ (0, _normalizeGltfV.normalizeGLTFV1)(gltf, {
41
+ normalize: options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.normalize
42
+ });
43
+ const promises = [];
44
+
45
+ if (options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers) {
46
+ await loadBuffers(gltf, options, context);
47
+ }
48
+
49
+ if (options !== null && options !== void 0 && (_options$gltf3 = options.gltf) !== null && _options$gltf3 !== void 0 && _options$gltf3.loadImages) {
50
+ const promise = loadImages(gltf, options, context);
51
+ promises.push(promise);
52
+ }
47
53
 
48
- function _parseGLTF() {
49
- _parseGLTF = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(gltf, arrayBufferOrString) {
50
- var _options$gltf, _options$gltf2, _options$gltf3, _options$gltf4;
51
-
52
- var byteOffset,
53
- options,
54
- context,
55
- promises,
56
- _promise,
57
- promise,
58
- _args = arguments;
59
-
60
- return _regenerator.default.wrap(function _callee$(_context) {
61
- while (1) {
62
- switch (_context.prev = _context.next) {
63
- case 0:
64
- byteOffset = _args.length > 2 && _args[2] !== undefined ? _args[2] : 0;
65
- options = _args.length > 3 ? _args[3] : undefined;
66
- context = _args.length > 4 ? _args[4] : undefined;
67
- parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
68
- (0, _normalizeGltfV.normalizeGLTFV1)(gltf, {
69
- normalize: options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.normalize
70
- });
71
- promises = [];
72
-
73
- if (!(options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers)) {
74
- _context.next = 9;
75
- break;
76
- }
77
-
78
- _context.next = 9;
79
- return loadBuffers(gltf, options, context);
80
-
81
- case 9:
82
- if (options !== null && options !== void 0 && (_options$gltf3 = options.gltf) !== null && _options$gltf3 !== void 0 && _options$gltf3.loadImages) {
83
- _promise = loadImages(gltf, options, context);
84
- promises.push(_promise);
85
- }
86
-
87
- promise = (0, _gltfExtensions.decodeExtensions)(gltf, options, context);
88
- promises.push(promise);
89
- _context.next = 14;
90
- return Promise.all(promises);
91
-
92
- case 14:
93
- return _context.abrupt("return", options !== null && options !== void 0 && (_options$gltf4 = options.gltf) !== null && _options$gltf4 !== void 0 && _options$gltf4.postProcess ? (0, _postProcessGltf.postProcessGLTF)(gltf, options) : gltf);
94
-
95
- case 15:
96
- case "end":
97
- return _context.stop();
98
- }
99
- }
100
- }, _callee);
101
- }));
102
- return _parseGLTF.apply(this, arguments);
54
+ const promise = (0, _gltfExtensions.decodeExtensions)(gltf, options, context);
55
+ promises.push(promise);
56
+ await Promise.all(promises);
57
+ return options !== null && options !== void 0 && (_options$gltf4 = options.gltf) !== null && _options$gltf4 !== void 0 && _options$gltf4.postProcess ? (0, _postProcessGltf.postProcessGLTF)(gltf, options) : gltf;
103
58
  }
104
59
 
105
60
  function parseGLTFContainerSync(gltf, data, byteOffset, options) {
@@ -108,14 +63,14 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
108
63
  }
109
64
 
110
65
  if (data instanceof ArrayBuffer && !(0, _parseGlb.isGLB)(data, byteOffset, options)) {
111
- var textDecoder = new TextDecoder();
66
+ const textDecoder = new TextDecoder();
112
67
  data = textDecoder.decode(data);
113
68
  }
114
69
 
115
70
  if (typeof data === 'string') {
116
71
  gltf.json = (0, _loaderUtils.parseJSON)(data);
117
72
  } else if (data instanceof ArrayBuffer) {
118
- var glb = {};
73
+ const glb = {};
119
74
  byteOffset = (0, _parseGlb.default)(glb, data, byteOffset, options.glb);
120
75
  (0, _assert.assert)(glb.type === 'glTF', "Invalid GLB magic string ".concat(glb.type));
121
76
  gltf._glb = glb;
@@ -124,11 +79,13 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
124
79
  (0, _assert.assert)(false, 'GLTF: must be ArrayBuffer or string');
125
80
  }
126
81
 
127
- var buffers = gltf.json.buffers || [];
82
+ const buffers = gltf.json.buffers || [];
128
83
  gltf.buffers = new Array(buffers.length).fill(null);
129
84
 
130
85
  if (gltf._glb && gltf._glb.header.hasBinChunk) {
131
- var binChunks = gltf._glb.binChunks;
86
+ const {
87
+ binChunks
88
+ } = gltf._glb;
132
89
  gltf.buffers[0] = {
133
90
  arrayBuffer: binChunks[0].arrayBuffer,
134
91
  byteOffset: binChunks[0].byteOffset,
@@ -136,157 +93,65 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
136
93
  };
137
94
  }
138
95
 
139
- var images = gltf.json.images || [];
96
+ const images = gltf.json.images || [];
140
97
  gltf.images = new Array(images.length).fill({});
141
98
  }
142
99
 
143
- function loadBuffers(_x3, _x4, _x5) {
144
- return _loadBuffers.apply(this, arguments);
100
+ async function loadBuffers(gltf, options, context) {
101
+ for (let i = 0; i < gltf.json.buffers.length; ++i) {
102
+ const buffer = gltf.json.buffers[i];
103
+
104
+ if (buffer.uri) {
105
+ var _context$fetch, _response$arrayBuffer;
106
+
107
+ const {
108
+ fetch
109
+ } = context;
110
+ (0, _assert.assert)(fetch);
111
+ const uri = (0, _resolveUrl.resolveUrl)(buffer.uri, options);
112
+ const response = await (context === null || context === void 0 ? void 0 : (_context$fetch = context.fetch) === null || _context$fetch === void 0 ? void 0 : _context$fetch.call(context, uri));
113
+ const arrayBuffer = await (response === null || response === void 0 ? void 0 : (_response$arrayBuffer = response.arrayBuffer) === null || _response$arrayBuffer === void 0 ? void 0 : _response$arrayBuffer.call(response));
114
+ gltf.buffers[i] = {
115
+ arrayBuffer,
116
+ byteOffset: 0,
117
+ byteLength: arrayBuffer.byteLength
118
+ };
119
+ delete buffer.uri;
120
+ }
121
+ }
145
122
  }
146
123
 
147
- function _loadBuffers() {
148
- _loadBuffers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(gltf, options, context) {
149
- var i, buffer, _context$fetch, _response$arrayBuffer, fetch, uri, response, arrayBuffer;
150
-
151
- return _regenerator.default.wrap(function _callee2$(_context2) {
152
- while (1) {
153
- switch (_context2.prev = _context2.next) {
154
- case 0:
155
- i = 0;
156
-
157
- case 1:
158
- if (!(i < gltf.json.buffers.length)) {
159
- _context2.next = 18;
160
- break;
161
- }
162
-
163
- buffer = gltf.json.buffers[i];
164
-
165
- if (!buffer.uri) {
166
- _context2.next = 15;
167
- break;
168
- }
169
-
170
- fetch = context.fetch;
171
- (0, _assert.assert)(fetch);
172
- uri = (0, _resolveUrl.resolveUrl)(buffer.uri, options);
173
- _context2.next = 9;
174
- return context === null || context === void 0 ? void 0 : (_context$fetch = context.fetch) === null || _context$fetch === void 0 ? void 0 : _context$fetch.call(context, uri);
175
-
176
- case 9:
177
- response = _context2.sent;
178
- _context2.next = 12;
179
- return response === null || response === void 0 ? void 0 : (_response$arrayBuffer = response.arrayBuffer) === null || _response$arrayBuffer === void 0 ? void 0 : _response$arrayBuffer.call(response);
180
-
181
- case 12:
182
- arrayBuffer = _context2.sent;
183
- gltf.buffers[i] = {
184
- arrayBuffer: arrayBuffer,
185
- byteOffset: 0,
186
- byteLength: arrayBuffer.byteLength
187
- };
188
- delete buffer.uri;
189
-
190
- case 15:
191
- ++i;
192
- _context2.next = 1;
193
- break;
194
-
195
- case 18:
196
- case "end":
197
- return _context2.stop();
198
- }
199
- }
200
- }, _callee2);
201
- }));
202
- return _loadBuffers.apply(this, arguments);
203
- }
124
+ async function loadImages(gltf, options, context) {
125
+ const images = gltf.json.images || [];
126
+ const promises = [];
204
127
 
205
- function loadImages(_x6, _x7, _x8) {
206
- return _loadImages.apply(this, arguments);
207
- }
128
+ for (let i = 0; i < images.length; ++i) {
129
+ promises.push(loadImage(gltf, images[i], i, options, context));
130
+ }
208
131
 
209
- function _loadImages() {
210
- _loadImages = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(gltf, options, context) {
211
- var images, promises, i;
212
- return _regenerator.default.wrap(function _callee3$(_context3) {
213
- while (1) {
214
- switch (_context3.prev = _context3.next) {
215
- case 0:
216
- images = gltf.json.images || [];
217
- promises = [];
218
-
219
- for (i = 0; i < images.length; ++i) {
220
- promises.push(loadImage(gltf, images[i], i, options, context));
221
- }
222
-
223
- _context3.next = 5;
224
- return Promise.all(promises);
225
-
226
- case 5:
227
- return _context3.abrupt("return", _context3.sent);
228
-
229
- case 6:
230
- case "end":
231
- return _context3.stop();
232
- }
233
- }
234
- }, _callee3);
235
- }));
236
- return _loadImages.apply(this, arguments);
132
+ return await Promise.all(promises);
237
133
  }
238
134
 
239
- function loadImage(_x9, _x10, _x11, _x12, _x13) {
240
- return _loadImage.apply(this, arguments);
241
- }
135
+ async function loadImage(gltf, image, index, options, context) {
136
+ const {
137
+ fetch,
138
+ parse
139
+ } = context;
140
+ let arrayBuffer;
141
+
142
+ if (image.uri) {
143
+ const uri = (0, _resolveUrl.resolveUrl)(image.uri, options);
144
+ const response = await fetch(uri);
145
+ arrayBuffer = await response.arrayBuffer();
146
+ }
147
+
148
+ if (Number.isFinite(image.bufferView)) {
149
+ const array = (0, _getTypedArray.getTypedArrayForBufferView)(gltf.json, gltf.buffers, image.bufferView);
150
+ arrayBuffer = (0, _loaderUtils.sliceArrayBuffer)(array.buffer, array.byteOffset, array.byteLength);
151
+ }
242
152
 
243
- function _loadImage() {
244
- _loadImage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(gltf, image, index, options, context) {
245
- var fetch, parse, arrayBuffer, uri, response, array, parsedImage;
246
- return _regenerator.default.wrap(function _callee4$(_context4) {
247
- while (1) {
248
- switch (_context4.prev = _context4.next) {
249
- case 0:
250
- fetch = context.fetch, parse = context.parse;
251
-
252
- if (!image.uri) {
253
- _context4.next = 9;
254
- break;
255
- }
256
-
257
- uri = (0, _resolveUrl.resolveUrl)(image.uri, options);
258
- _context4.next = 5;
259
- return fetch(uri);
260
-
261
- case 5:
262
- response = _context4.sent;
263
- _context4.next = 8;
264
- return response.arrayBuffer();
265
-
266
- case 8:
267
- arrayBuffer = _context4.sent;
268
-
269
- case 9:
270
- if (Number.isFinite(image.bufferView)) {
271
- array = (0, _getTypedArray.getTypedArrayForBufferView)(gltf.json, gltf.buffers, image.bufferView);
272
- arrayBuffer = (0, _loaderUtils.sliceArrayBuffer)(array.buffer, array.byteOffset, array.byteLength);
273
- }
274
-
275
- (0, _assert.assert)(arrayBuffer, 'glTF image has no data');
276
- _context4.next = 13;
277
- return parse(arrayBuffer, _images.ImageLoader, {}, context);
278
-
279
- case 13:
280
- parsedImage = _context4.sent;
281
- gltf.images[index] = parsedImage;
282
-
283
- case 15:
284
- case "end":
285
- return _context4.stop();
286
- }
287
- }
288
- }, _callee4);
289
- }));
290
- return _loadImage.apply(this, arguments);
153
+ (0, _assert.assert)(arrayBuffer, 'glTF image has no data');
154
+ const parsedImage = await parse(arrayBuffer, _images.ImageLoader, {}, context);
155
+ gltf.images[index] = parsedImage;
291
156
  }
292
157
  //# sourceMappingURL=parse-gltf.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"names":["isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","context","parseGLTFContainerSync","normalize","promises","loadBuffers","json","buffers","loadImages","promise","push","Promise","all","postProcess","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","_glb","Array","length","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","fetch","response","loadImage","image","index","parse","Number","isFinite","bufferView","array","ImageLoader","parsedImage"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport type {GLB} from '../types/glb-types';\nimport type {GLBParseOptions} from './parse-glb';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {decodeExtensions} from '../extensions/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n excludeExtensions?: string[];\n decompressMeshes?: boolean;\n normalize?: boolean;\n loadBuffers?: boolean;\n loadImages?: boolean;\n postProcess?: boolean;\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf,\n arrayBufferOrString,\n byteOffset = 0,\n options: {\n gltf?: GLTFParseOptions;\n glb?: GLBParseOptions;\n },\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n// Asynchronously fetch and parse buffers, store in buffers array outside of json\nasync function loadBuffers(gltf, options, context: LoaderContext) {\n for (let i = 0; i < gltf.json.buffers.length; ++i) {\n const buffer = gltf.json.buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n }\n }\n}\n\nasync function loadImages(gltf, options, context: LoaderContext) {\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (let i = 0; i < images.length; ++i) {\n promises.push(loadImage(gltf, images[i], i, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n// Asynchronously fetches and parses one image, store in images array outside of json\nasync function loadImage(gltf, image, index: number, options, context: LoaderContext) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n const parsedImage = await parse(arrayBuffer, ImageLoader, {}, context);\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n gltf.images[index] = parsedImage;\n}\n"],"file":"parse-gltf.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"names":["isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","context","parseGLTFContainerSync","normalize","promises","loadBuffers","json","buffers","loadImages","promise","push","Promise","all","postProcess","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","_glb","Array","length","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","fetch","response","loadImage","image","index","parse","Number","isFinite","bufferView","array","parsedImage","ImageLoader"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport type {GLB} from '../types/glb-types';\nimport type {GLBParseOptions} from './parse-glb';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {decodeExtensions} from '../extensions/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n excludeExtensions?: string[];\n decompressMeshes?: boolean;\n normalize?: boolean;\n loadBuffers?: boolean;\n loadImages?: boolean;\n postProcess?: boolean;\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf,\n arrayBufferOrString,\n byteOffset = 0,\n options: {\n gltf?: GLTFParseOptions;\n glb?: GLBParseOptions;\n },\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n// Asynchronously fetch and parse buffers, store in buffers array outside of json\nasync function loadBuffers(gltf, options, context: LoaderContext) {\n for (let i = 0; i < gltf.json.buffers.length; ++i) {\n const buffer = gltf.json.buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n }\n }\n}\n\nasync function loadImages(gltf, options, context: LoaderContext) {\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (let i = 0; i < images.length; ++i) {\n promises.push(loadImage(gltf, images[i], i, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n// Asynchronously fetches and parses one image, store in images array outside of json\nasync function loadImage(gltf, image, index: number, options, context: LoaderContext) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n const parsedImage = await parse(arrayBuffer, ImageLoader, {}, context);\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n gltf.images[index] = parsedImage;\n}\n"],"file":"parse-gltf.js"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- var VERSION = typeof "3.0.12" !== 'undefined' ? "3.0.12" : 'latest';
7
+ const VERSION = typeof "3.0.13" !== 'undefined' ? "3.0.13" : 'latest';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.js"],"names":["VERSION"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.js"],"names":["VERSION"],"mappings":";;;;;;AAGO,MAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}