@loaders.gl/textures 3.3.0-alpha.8 → 3.4.0-alpha.1
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/basis-nodejs-worker.js +79 -64
- package/dist/basis-worker.js +4 -3
- package/dist/compressed-texture-worker.js +4 -3
- package/dist/crunch-worker.js +2 -2
- package/dist/dist.min.js +1 -0
- package/dist/es5/lib/parsers/basis-module-loader.js +1 -1
- package/dist/es5/lib/parsers/parse-basis.js +1 -0
- package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/esm/lib/parsers/basis-module-loader.js +1 -1
- package/dist/esm/lib/parsers/parse-basis.js +1 -0
- package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/ktx2-basis-writer-nodejs-worker.js +78 -64
- package/dist/ktx2-basis-writer-worker.js +3 -3
- package/dist/lib/parsers/parse-basis.js +1 -1
- package/dist/npy-worker.js +1 -1
- package/package.json +7 -7
- package/src/lib/parsers/parse-basis.ts +1 -1
|
@@ -48233,7 +48233,7 @@ var require_form_data = __commonJS({
|
|
|
48233
48233
|
var http2 = require("http");
|
|
48234
48234
|
var https2 = require("https");
|
|
48235
48235
|
var parseUrl = require("url").parse;
|
|
48236
|
-
var
|
|
48236
|
+
var fs2 = require("fs");
|
|
48237
48237
|
var mime = require_mime_types();
|
|
48238
48238
|
var asynckit = require_asynckit();
|
|
48239
48239
|
var populate = require_populate();
|
|
@@ -48297,7 +48297,7 @@ var require_form_data = __commonJS({
|
|
|
48297
48297
|
if (value.end != void 0 && value.end != Infinity && value.start != void 0) {
|
|
48298
48298
|
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
|
48299
48299
|
} else {
|
|
48300
|
-
|
|
48300
|
+
fs2.stat(value.path, function(err, stat) {
|
|
48301
48301
|
var fileSize;
|
|
48302
48302
|
if (err) {
|
|
48303
48303
|
callback(err);
|
|
@@ -56404,7 +56404,7 @@ var require_promise = __commonJS({
|
|
|
56404
56404
|
var require_har2 = __commonJS({
|
|
56405
56405
|
"../../node_modules/request/lib/har.js"(exports2) {
|
|
56406
56406
|
"use strict";
|
|
56407
|
-
var
|
|
56407
|
+
var fs2 = require("fs");
|
|
56408
56408
|
var qs = require("querystring");
|
|
56409
56409
|
var validate = require_promise();
|
|
56410
56410
|
var extend = require_extend();
|
|
@@ -56538,7 +56538,7 @@ var require_har2 = __commonJS({
|
|
|
56538
56538
|
return;
|
|
56539
56539
|
}
|
|
56540
56540
|
if (param.fileName && !param.value) {
|
|
56541
|
-
attachment.value =
|
|
56541
|
+
attachment.value = fs2.createReadStream(param.fileName);
|
|
56542
56542
|
} else if (param.value) {
|
|
56543
56543
|
attachment.value = param.value;
|
|
56544
56544
|
}
|
|
@@ -59086,7 +59086,7 @@ var require_node_pixels = __commonJS({
|
|
|
59086
59086
|
var pack = require_convert();
|
|
59087
59087
|
var GifReader = require_omggif().GifReader;
|
|
59088
59088
|
var Bitmap = require_node_bitmap();
|
|
59089
|
-
var
|
|
59089
|
+
var fs2 = require("fs");
|
|
59090
59090
|
var request = require_request3();
|
|
59091
59091
|
var mime = require_mime_types();
|
|
59092
59092
|
var parseDataURI = require_parse_data_uri();
|
|
@@ -59238,7 +59238,7 @@ var require_node_pixels = __commonJS({
|
|
|
59238
59238
|
doParse(type, body, cb);
|
|
59239
59239
|
});
|
|
59240
59240
|
} else {
|
|
59241
|
-
|
|
59241
|
+
fs2.readFile(url, function(err, data) {
|
|
59242
59242
|
if (err) {
|
|
59243
59243
|
cb(err);
|
|
59244
59244
|
return;
|
|
@@ -63357,7 +63357,7 @@ var require_ktx_parse = __commonJS({
|
|
|
63357
63357
|
});
|
|
63358
63358
|
|
|
63359
63359
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
63360
|
-
var VERSION = true ? "3.
|
|
63360
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
63361
63361
|
if (false) {
|
|
63362
63362
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
63363
63363
|
}
|
|
@@ -65372,9 +65372,6 @@ function assert2(condition, message) {
|
|
|
65372
65372
|
}
|
|
65373
65373
|
|
|
65374
65374
|
// ../polyfills/src/node/fetch/utils/stream-utils.node.ts
|
|
65375
|
-
var import_fs = __toModule(require("fs"));
|
|
65376
|
-
var import_http = __toModule(require("http"));
|
|
65377
|
-
var import_https = __toModule(require("https"));
|
|
65378
65375
|
var import_zlib = __toModule(require("zlib"));
|
|
65379
65376
|
|
|
65380
65377
|
// ../polyfills/src/node/fetch/utils/decode-data-uri.node.ts
|
|
@@ -65421,26 +65418,6 @@ function toArrayBuffer(data) {
|
|
|
65421
65418
|
}
|
|
65422
65419
|
|
|
65423
65420
|
// ../polyfills/src/node/fetch/utils/stream-utils.node.ts
|
|
65424
|
-
function isRequestURL(url) {
|
|
65425
|
-
return url.startsWith("http:") || url.startsWith("https:");
|
|
65426
|
-
}
|
|
65427
|
-
async function createReadStream(url, options) {
|
|
65428
|
-
if (!isRequestURL(url)) {
|
|
65429
|
-
const noqueryUrl = url.split("?")[0];
|
|
65430
|
-
return await new Promise((resolve, reject) => {
|
|
65431
|
-
const stream = import_fs.default.createReadStream(noqueryUrl, { encoding: null });
|
|
65432
|
-
stream.once("readable", () => resolve(stream));
|
|
65433
|
-
stream.on("error", (error) => reject(error));
|
|
65434
|
-
});
|
|
65435
|
-
}
|
|
65436
|
-
return await new Promise((resolve, reject) => {
|
|
65437
|
-
const requestFunction = url.startsWith("https:") ? import_https.default.request : import_http.default.request;
|
|
65438
|
-
const requestOptions = getRequestOptions(url, options);
|
|
65439
|
-
const req = requestFunction(requestOptions, (res) => resolve(res));
|
|
65440
|
-
req.on("error", (error) => reject(error));
|
|
65441
|
-
req.end();
|
|
65442
|
-
});
|
|
65443
|
-
}
|
|
65444
65421
|
function decompressReadStream(readStream, headers) {
|
|
65445
65422
|
switch (headers.get("content-encoding")) {
|
|
65446
65423
|
case "br":
|
|
@@ -65470,23 +65447,6 @@ async function concatenateReadStream(readStream) {
|
|
|
65470
65447
|
});
|
|
65471
65448
|
});
|
|
65472
65449
|
}
|
|
65473
|
-
function getRequestOptions(url, options) {
|
|
65474
|
-
const originalHeaders = (options == null ? void 0 : options.headers) || {};
|
|
65475
|
-
const headers = {};
|
|
65476
|
-
for (const key of Object.keys(originalHeaders)) {
|
|
65477
|
-
headers[key.toLowerCase()] = originalHeaders[key];
|
|
65478
|
-
}
|
|
65479
|
-
headers["accept-encoding"] = headers["accept-encoding"] || "gzip,br,deflate";
|
|
65480
|
-
const urlObject = new URL(url);
|
|
65481
|
-
return __spreadProps(__spreadValues(__spreadValues({
|
|
65482
|
-
hostname: urlObject.hostname,
|
|
65483
|
-
path: urlObject.pathname,
|
|
65484
|
-
method: "GET"
|
|
65485
|
-
}, options), options == null ? void 0 : options.fetch), {
|
|
65486
|
-
headers,
|
|
65487
|
-
port: urlObject.port
|
|
65488
|
-
});
|
|
65489
|
-
}
|
|
65490
65450
|
function concatenateArrayBuffers(sources) {
|
|
65491
65451
|
const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);
|
|
65492
65452
|
const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);
|
|
@@ -65553,11 +65513,51 @@ var Response = class {
|
|
|
65553
65513
|
};
|
|
65554
65514
|
|
|
65555
65515
|
// ../polyfills/src/node/fetch/fetch.node.ts
|
|
65556
|
-
var
|
|
65516
|
+
var import_http = __toModule(require("http"));
|
|
65517
|
+
var import_https = __toModule(require("https"));
|
|
65518
|
+
|
|
65519
|
+
// ../polyfills/src/node/fetch/fetch-file.node.ts
|
|
65520
|
+
var import_fs = __toModule(require("fs"));
|
|
65521
|
+
async function fetchFileNode(url, options) {
|
|
65522
|
+
const noqueryUrl = url.split("?")[0];
|
|
65523
|
+
try {
|
|
65524
|
+
const body = await new Promise((resolve, reject) => {
|
|
65525
|
+
const stream = import_fs.default.createReadStream(noqueryUrl, { encoding: null });
|
|
65526
|
+
stream.once("readable", () => resolve(stream));
|
|
65527
|
+
stream.on("error", (error) => reject(error));
|
|
65528
|
+
});
|
|
65529
|
+
const status = 200;
|
|
65530
|
+
const statusText = "OK";
|
|
65531
|
+
const headers = getHeadersForFile(noqueryUrl);
|
|
65532
|
+
return new Response(body, { headers, status, statusText, url });
|
|
65533
|
+
} catch (error) {
|
|
65534
|
+
const status = 400;
|
|
65535
|
+
const statusText = error.message;
|
|
65536
|
+
const headers = {};
|
|
65537
|
+
return new Response(error.message, { headers, status, statusText, url });
|
|
65538
|
+
}
|
|
65539
|
+
}
|
|
65540
|
+
function getHeadersForFile(noqueryUrl) {
|
|
65541
|
+
const headers = {};
|
|
65542
|
+
if (!headers["content-length"]) {
|
|
65543
|
+
const stats = import_fs.default.statSync(noqueryUrl);
|
|
65544
|
+
headers["content-length"] = stats.size;
|
|
65545
|
+
}
|
|
65546
|
+
if (noqueryUrl.endsWith(".gz")) {
|
|
65547
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
65548
|
+
headers["content-encoding"] = "gzip";
|
|
65549
|
+
}
|
|
65550
|
+
return new Headers(headers);
|
|
65551
|
+
}
|
|
65552
|
+
|
|
65553
|
+
// ../polyfills/src/node/fetch/fetch.node.ts
|
|
65557
65554
|
var isDataURL = (url) => url.startsWith("data:");
|
|
65558
|
-
var
|
|
65555
|
+
var isRequestURL = (url) => url.startsWith("http:") || url.startsWith("https:");
|
|
65559
65556
|
async function fetchNode(url, options) {
|
|
65560
65557
|
try {
|
|
65558
|
+
if (!isRequestURL(url) && !isDataURL(url)) {
|
|
65559
|
+
return await fetchFileNode(url, options);
|
|
65560
|
+
}
|
|
65561
65561
|
if (isDataURL(url)) {
|
|
65562
65562
|
const { arrayBuffer, mimeType } = decodeDataUri(url);
|
|
65563
65563
|
const response = new Response(arrayBuffer, {
|
|
@@ -65572,7 +65572,7 @@ async function fetchNode(url, options) {
|
|
|
65572
65572
|
url = url.slice(0, -3);
|
|
65573
65573
|
syntheticResponseHeaders["content-encoding"] = "gzip";
|
|
65574
65574
|
}
|
|
65575
|
-
const body = await
|
|
65575
|
+
const body = await createHTTPRequestReadStream(originalUrl, options);
|
|
65576
65576
|
const headers = getHeaders(url, body, syntheticResponseHeaders);
|
|
65577
65577
|
const { status, statusText } = getStatus(body);
|
|
65578
65578
|
const followRedirect = !options || options.followRedirect || options.followRedirect === void 0;
|
|
@@ -65585,6 +65585,14 @@ async function fetchNode(url, options) {
|
|
|
65585
65585
|
return new Response(null, { status: 400, statusText: String(error), url });
|
|
65586
65586
|
}
|
|
65587
65587
|
}
|
|
65588
|
+
async function createHTTPRequestReadStream(url, options) {
|
|
65589
|
+
return await new Promise((resolve, reject) => {
|
|
65590
|
+
const requestOptions = getRequestOptions(url, options);
|
|
65591
|
+
const req = url.startsWith("https:") ? import_https.default.request(requestOptions, (res) => resolve(res)) : import_http.default.request(requestOptions, (res) => resolve(res));
|
|
65592
|
+
req.on("error", (error) => reject(error));
|
|
65593
|
+
req.end();
|
|
65594
|
+
});
|
|
65595
|
+
}
|
|
65588
65596
|
function generateRedirectUrl(originalUrl, location) {
|
|
65589
65597
|
if (location.startsWith("http")) {
|
|
65590
65598
|
return location;
|
|
@@ -65593,6 +65601,23 @@ function generateRedirectUrl(originalUrl, location) {
|
|
|
65593
65601
|
url.pathname = location;
|
|
65594
65602
|
return url.href;
|
|
65595
65603
|
}
|
|
65604
|
+
function getRequestOptions(url, options) {
|
|
65605
|
+
const originalHeaders = (options == null ? void 0 : options.headers) || {};
|
|
65606
|
+
const headers = {};
|
|
65607
|
+
for (const key of Object.keys(originalHeaders)) {
|
|
65608
|
+
headers[key.toLowerCase()] = originalHeaders[key];
|
|
65609
|
+
}
|
|
65610
|
+
headers["accept-encoding"] = headers["accept-encoding"] || "gzip,br,deflate";
|
|
65611
|
+
const urlObject = new URL(url);
|
|
65612
|
+
return __spreadProps(__spreadValues(__spreadValues({
|
|
65613
|
+
hostname: urlObject.hostname,
|
|
65614
|
+
path: urlObject.pathname,
|
|
65615
|
+
method: "GET"
|
|
65616
|
+
}, options), options == null ? void 0 : options.fetch), {
|
|
65617
|
+
headers,
|
|
65618
|
+
port: urlObject.port
|
|
65619
|
+
});
|
|
65620
|
+
}
|
|
65596
65621
|
function getStatus(httpResponse) {
|
|
65597
65622
|
if (httpResponse.statusCode) {
|
|
65598
65623
|
return { status: httpResponse.statusCode, statusText: httpResponse.statusMessage || "NA" };
|
|
@@ -65618,18 +65643,7 @@ function getHeaders(url, httpResponse, additionalHeaders = {}) {
|
|
|
65618
65643
|
return new Headers(headers);
|
|
65619
65644
|
}
|
|
65620
65645
|
function getContentLength(url) {
|
|
65621
|
-
|
|
65622
|
-
return null;
|
|
65623
|
-
} else if (isDataURL(url)) {
|
|
65624
|
-
return url.length - "data:".length;
|
|
65625
|
-
}
|
|
65626
|
-
try {
|
|
65627
|
-
const noqueryUrl = url.split("?")[0];
|
|
65628
|
-
const stats = import_fs2.default.statSync(noqueryUrl);
|
|
65629
|
-
return stats.size;
|
|
65630
|
-
} catch (error) {
|
|
65631
|
-
}
|
|
65632
|
-
return null;
|
|
65646
|
+
return isDataURL(url) ? url.length - "data:".length : null;
|
|
65633
65647
|
}
|
|
65634
65648
|
|
|
65635
65649
|
// ../polyfills/src/node/images/encode-image.node.ts
|
|
@@ -65893,10 +65907,10 @@ if (!("allSettled" in Promise)) {
|
|
|
65893
65907
|
}
|
|
65894
65908
|
|
|
65895
65909
|
// src/lib/utils/version.ts
|
|
65896
|
-
var VERSION3 = true ? "3.
|
|
65910
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
65897
65911
|
|
|
65898
65912
|
// src/lib/parsers/basis-module-loader.ts
|
|
65899
|
-
var VERSION4 = true ? "3.
|
|
65913
|
+
var VERSION4 = true ? "3.4.0-alpha.1" : "beta";
|
|
65900
65914
|
var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
|
|
65901
65915
|
var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
|
|
65902
65916
|
var loadBasisTranscoderPromise;
|
|
@@ -66226,6 +66240,7 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
|
|
|
66226
66240
|
height,
|
|
66227
66241
|
data: decodedData,
|
|
66228
66242
|
compressed,
|
|
66243
|
+
levelSize: decodedSize,
|
|
66229
66244
|
hasAlpha: alphaFlag,
|
|
66230
66245
|
format
|
|
66231
66246
|
};
|
package/dist/basis-worker.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
31
|
-
var VERSION = true ? "3.
|
|
31
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
32
32
|
if (false) {
|
|
33
33
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
34
34
|
}
|
|
@@ -312,10 +312,10 @@
|
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
// src/lib/utils/version.ts
|
|
315
|
-
var VERSION3 = true ? "3.
|
|
315
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
316
316
|
|
|
317
317
|
// src/lib/parsers/basis-module-loader.ts
|
|
318
|
-
var VERSION4 = true ? "3.
|
|
318
|
+
var VERSION4 = true ? "3.4.0-alpha.1" : "beta";
|
|
319
319
|
var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
|
|
320
320
|
var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
|
|
321
321
|
var loadBasisTranscoderPromise;
|
|
@@ -672,6 +672,7 @@
|
|
|
672
672
|
height,
|
|
673
673
|
data: decodedData,
|
|
674
674
|
compressed,
|
|
675
|
+
levelSize: decodedSize,
|
|
675
676
|
hasAlpha: alphaFlag,
|
|
676
677
|
format
|
|
677
678
|
};
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
38
|
-
var VERSION = true ? "3.
|
|
38
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
39
39
|
if (false) {
|
|
40
40
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
41
41
|
}
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
// src/lib/utils/version.ts
|
|
322
|
-
var VERSION3 = true ? "3.
|
|
322
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
323
323
|
|
|
324
324
|
// ../../node_modules/ktx-parse/dist/ktx-parse.modern.js
|
|
325
325
|
var t = new Uint8Array([0]);
|
|
@@ -907,7 +907,7 @@
|
|
|
907
907
|
}
|
|
908
908
|
|
|
909
909
|
// src/lib/parsers/basis-module-loader.ts
|
|
910
|
-
var VERSION4 = true ? "3.
|
|
910
|
+
var VERSION4 = true ? "3.4.0-alpha.1" : "beta";
|
|
911
911
|
var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
|
|
912
912
|
var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
|
|
913
913
|
var loadBasisTranscoderPromise;
|
|
@@ -1153,6 +1153,7 @@
|
|
|
1153
1153
|
height,
|
|
1154
1154
|
data: decodedData,
|
|
1155
1155
|
compressed,
|
|
1156
|
+
levelSize: decodedSize,
|
|
1156
1157
|
hasAlpha: alphaFlag,
|
|
1157
1158
|
format
|
|
1158
1159
|
};
|
package/dist/crunch-worker.js
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
38
|
-
var VERSION = true ? "3.
|
|
38
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
39
39
|
if (false) {
|
|
40
40
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
41
41
|
}
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
// src/lib/utils/version.ts
|
|
322
|
-
var VERSION3 = true ? "3.
|
|
322
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
323
323
|
|
|
324
324
|
// src/crunch-loader.ts
|
|
325
325
|
var CrunchLoader = {
|
package/dist/dist.min.js
CHANGED
|
@@ -10,7 +10,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
12
|
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
13
|
-
var VERSION = typeof "3.
|
|
13
|
+
var VERSION = typeof "3.4.0-alpha.1" !== 'undefined' ? "3.4.0-alpha.1" : 'beta';
|
|
14
14
|
|
|
15
15
|
var BASIS_CDN_ENCODER_WASM = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION, "/dist/libs/basis_encoder.wasm");
|
|
16
16
|
var BASIS_CDN_ENCODER_JS = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION, "/dist/libs/basis_encoder.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-basis.js","names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","isKTX","loadBasisEncoderModule","fileConstructors","parseKTX2File","KTX2File","loadBasisTrascoderModule","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","getSupportedGPUTextureFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-basis.js","names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","isKTX","loadBasisEncoderModule","fileConstructors","parseKTX2File","KTX2File","loadBasisTrascoderModule","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","levelSize","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","getSupportedGPUTextureFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
|
|
@@ -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.
|
|
7
|
+
var VERSION = typeof "3.4.0-alpha.1" !== 'undefined' ? "3.4.0-alpha.1" : 'beta';
|
|
8
8
|
exports.VERSION = VERSION;
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
const VERSION = typeof "3.
|
|
2
|
+
const VERSION = typeof "3.4.0-alpha.1" !== 'undefined' ? "3.4.0-alpha.1" : 'beta';
|
|
3
3
|
|
|
4
4
|
import { loadLibrary } from '@loaders.gl/worker-utils';
|
|
5
5
|
const BASIS_CDN_ENCODER_WASM = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION, "/dist/libs/basis_encoder.wasm");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-basis.js","names":["loadBasisEncoderModule","loadBasisTrascoderModule","GL_EXTENSIONS_CONSTANTS","getSupportedGPUTextureFormats","isKTX","OutputFormat","etc1","basisFormat","compressed","format","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","alphaFlag","getImageLevelInfo","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-basis.js","names":["loadBasisEncoderModule","loadBasisTrascoderModule","GL_EXTENSIONS_CONSTANTS","getSupportedGPUTextureFormats","isKTX","OutputFormat","etc1","basisFormat","compressed","format","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","alphaFlag","getImageLevelInfo","levelSize","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
|
|
@@ -48233,7 +48233,7 @@ var require_form_data = __commonJS({
|
|
|
48233
48233
|
var http2 = require("http");
|
|
48234
48234
|
var https2 = require("https");
|
|
48235
48235
|
var parseUrl = require("url").parse;
|
|
48236
|
-
var
|
|
48236
|
+
var fs2 = require("fs");
|
|
48237
48237
|
var mime = require_mime_types();
|
|
48238
48238
|
var asynckit = require_asynckit();
|
|
48239
48239
|
var populate = require_populate();
|
|
@@ -48297,7 +48297,7 @@ var require_form_data = __commonJS({
|
|
|
48297
48297
|
if (value.end != void 0 && value.end != Infinity && value.start != void 0) {
|
|
48298
48298
|
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
|
48299
48299
|
} else {
|
|
48300
|
-
|
|
48300
|
+
fs2.stat(value.path, function(err, stat) {
|
|
48301
48301
|
var fileSize;
|
|
48302
48302
|
if (err) {
|
|
48303
48303
|
callback(err);
|
|
@@ -56404,7 +56404,7 @@ var require_promise = __commonJS({
|
|
|
56404
56404
|
var require_har2 = __commonJS({
|
|
56405
56405
|
"../../node_modules/request/lib/har.js"(exports2) {
|
|
56406
56406
|
"use strict";
|
|
56407
|
-
var
|
|
56407
|
+
var fs2 = require("fs");
|
|
56408
56408
|
var qs = require("querystring");
|
|
56409
56409
|
var validate = require_promise();
|
|
56410
56410
|
var extend = require_extend();
|
|
@@ -56538,7 +56538,7 @@ var require_har2 = __commonJS({
|
|
|
56538
56538
|
return;
|
|
56539
56539
|
}
|
|
56540
56540
|
if (param.fileName && !param.value) {
|
|
56541
|
-
attachment.value =
|
|
56541
|
+
attachment.value = fs2.createReadStream(param.fileName);
|
|
56542
56542
|
} else if (param.value) {
|
|
56543
56543
|
attachment.value = param.value;
|
|
56544
56544
|
}
|
|
@@ -59086,7 +59086,7 @@ var require_node_pixels = __commonJS({
|
|
|
59086
59086
|
var pack = require_convert();
|
|
59087
59087
|
var GifReader = require_omggif().GifReader;
|
|
59088
59088
|
var Bitmap = require_node_bitmap();
|
|
59089
|
-
var
|
|
59089
|
+
var fs2 = require("fs");
|
|
59090
59090
|
var request = require_request3();
|
|
59091
59091
|
var mime = require_mime_types();
|
|
59092
59092
|
var parseDataURI = require_parse_data_uri();
|
|
@@ -59238,7 +59238,7 @@ var require_node_pixels = __commonJS({
|
|
|
59238
59238
|
doParse(type, body, cb);
|
|
59239
59239
|
});
|
|
59240
59240
|
} else {
|
|
59241
|
-
|
|
59241
|
+
fs2.readFile(url, function(err, data) {
|
|
59242
59242
|
if (err) {
|
|
59243
59243
|
cb(err);
|
|
59244
59244
|
return;
|
|
@@ -63182,7 +63182,7 @@ var require_polyfill = __commonJS({
|
|
|
63182
63182
|
});
|
|
63183
63183
|
|
|
63184
63184
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
63185
|
-
var VERSION = true ? "3.
|
|
63185
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
63186
63186
|
if (false) {
|
|
63187
63187
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
63188
63188
|
}
|
|
@@ -65124,9 +65124,6 @@ function assert2(condition, message) {
|
|
|
65124
65124
|
}
|
|
65125
65125
|
|
|
65126
65126
|
// ../polyfills/src/node/fetch/utils/stream-utils.node.ts
|
|
65127
|
-
var import_fs = __toModule(require("fs"));
|
|
65128
|
-
var import_http = __toModule(require("http"));
|
|
65129
|
-
var import_https = __toModule(require("https"));
|
|
65130
65127
|
var import_zlib = __toModule(require("zlib"));
|
|
65131
65128
|
|
|
65132
65129
|
// ../polyfills/src/node/fetch/utils/decode-data-uri.node.ts
|
|
@@ -65173,26 +65170,6 @@ function toArrayBuffer(data) {
|
|
|
65173
65170
|
}
|
|
65174
65171
|
|
|
65175
65172
|
// ../polyfills/src/node/fetch/utils/stream-utils.node.ts
|
|
65176
|
-
function isRequestURL(url) {
|
|
65177
|
-
return url.startsWith("http:") || url.startsWith("https:");
|
|
65178
|
-
}
|
|
65179
|
-
async function createReadStream(url, options) {
|
|
65180
|
-
if (!isRequestURL(url)) {
|
|
65181
|
-
const noqueryUrl = url.split("?")[0];
|
|
65182
|
-
return await new Promise((resolve, reject) => {
|
|
65183
|
-
const stream = import_fs.default.createReadStream(noqueryUrl, { encoding: null });
|
|
65184
|
-
stream.once("readable", () => resolve(stream));
|
|
65185
|
-
stream.on("error", (error) => reject(error));
|
|
65186
|
-
});
|
|
65187
|
-
}
|
|
65188
|
-
return await new Promise((resolve, reject) => {
|
|
65189
|
-
const requestFunction = url.startsWith("https:") ? import_https.default.request : import_http.default.request;
|
|
65190
|
-
const requestOptions = getRequestOptions(url, options);
|
|
65191
|
-
const req = requestFunction(requestOptions, (res) => resolve(res));
|
|
65192
|
-
req.on("error", (error) => reject(error));
|
|
65193
|
-
req.end();
|
|
65194
|
-
});
|
|
65195
|
-
}
|
|
65196
65173
|
function decompressReadStream(readStream, headers) {
|
|
65197
65174
|
switch (headers.get("content-encoding")) {
|
|
65198
65175
|
case "br":
|
|
@@ -65222,23 +65199,6 @@ async function concatenateReadStream(readStream) {
|
|
|
65222
65199
|
});
|
|
65223
65200
|
});
|
|
65224
65201
|
}
|
|
65225
|
-
function getRequestOptions(url, options) {
|
|
65226
|
-
const originalHeaders = (options == null ? void 0 : options.headers) || {};
|
|
65227
|
-
const headers = {};
|
|
65228
|
-
for (const key of Object.keys(originalHeaders)) {
|
|
65229
|
-
headers[key.toLowerCase()] = originalHeaders[key];
|
|
65230
|
-
}
|
|
65231
|
-
headers["accept-encoding"] = headers["accept-encoding"] || "gzip,br,deflate";
|
|
65232
|
-
const urlObject = new URL(url);
|
|
65233
|
-
return __spreadProps(__spreadValues(__spreadValues({
|
|
65234
|
-
hostname: urlObject.hostname,
|
|
65235
|
-
path: urlObject.pathname,
|
|
65236
|
-
method: "GET"
|
|
65237
|
-
}, options), options == null ? void 0 : options.fetch), {
|
|
65238
|
-
headers,
|
|
65239
|
-
port: urlObject.port
|
|
65240
|
-
});
|
|
65241
|
-
}
|
|
65242
65202
|
function concatenateArrayBuffers(sources) {
|
|
65243
65203
|
const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);
|
|
65244
65204
|
const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);
|
|
@@ -65305,11 +65265,51 @@ var Response = class {
|
|
|
65305
65265
|
};
|
|
65306
65266
|
|
|
65307
65267
|
// ../polyfills/src/node/fetch/fetch.node.ts
|
|
65308
|
-
var
|
|
65268
|
+
var import_http = __toModule(require("http"));
|
|
65269
|
+
var import_https = __toModule(require("https"));
|
|
65270
|
+
|
|
65271
|
+
// ../polyfills/src/node/fetch/fetch-file.node.ts
|
|
65272
|
+
var import_fs = __toModule(require("fs"));
|
|
65273
|
+
async function fetchFileNode(url, options) {
|
|
65274
|
+
const noqueryUrl = url.split("?")[0];
|
|
65275
|
+
try {
|
|
65276
|
+
const body = await new Promise((resolve, reject) => {
|
|
65277
|
+
const stream = import_fs.default.createReadStream(noqueryUrl, { encoding: null });
|
|
65278
|
+
stream.once("readable", () => resolve(stream));
|
|
65279
|
+
stream.on("error", (error) => reject(error));
|
|
65280
|
+
});
|
|
65281
|
+
const status = 200;
|
|
65282
|
+
const statusText = "OK";
|
|
65283
|
+
const headers = getHeadersForFile(noqueryUrl);
|
|
65284
|
+
return new Response(body, { headers, status, statusText, url });
|
|
65285
|
+
} catch (error) {
|
|
65286
|
+
const status = 400;
|
|
65287
|
+
const statusText = error.message;
|
|
65288
|
+
const headers = {};
|
|
65289
|
+
return new Response(error.message, { headers, status, statusText, url });
|
|
65290
|
+
}
|
|
65291
|
+
}
|
|
65292
|
+
function getHeadersForFile(noqueryUrl) {
|
|
65293
|
+
const headers = {};
|
|
65294
|
+
if (!headers["content-length"]) {
|
|
65295
|
+
const stats = import_fs.default.statSync(noqueryUrl);
|
|
65296
|
+
headers["content-length"] = stats.size;
|
|
65297
|
+
}
|
|
65298
|
+
if (noqueryUrl.endsWith(".gz")) {
|
|
65299
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
65300
|
+
headers["content-encoding"] = "gzip";
|
|
65301
|
+
}
|
|
65302
|
+
return new Headers(headers);
|
|
65303
|
+
}
|
|
65304
|
+
|
|
65305
|
+
// ../polyfills/src/node/fetch/fetch.node.ts
|
|
65309
65306
|
var isDataURL = (url) => url.startsWith("data:");
|
|
65310
|
-
var
|
|
65307
|
+
var isRequestURL = (url) => url.startsWith("http:") || url.startsWith("https:");
|
|
65311
65308
|
async function fetchNode(url, options) {
|
|
65312
65309
|
try {
|
|
65310
|
+
if (!isRequestURL(url) && !isDataURL(url)) {
|
|
65311
|
+
return await fetchFileNode(url, options);
|
|
65312
|
+
}
|
|
65313
65313
|
if (isDataURL(url)) {
|
|
65314
65314
|
const { arrayBuffer, mimeType } = decodeDataUri(url);
|
|
65315
65315
|
const response = new Response(arrayBuffer, {
|
|
@@ -65324,7 +65324,7 @@ async function fetchNode(url, options) {
|
|
|
65324
65324
|
url = url.slice(0, -3);
|
|
65325
65325
|
syntheticResponseHeaders["content-encoding"] = "gzip";
|
|
65326
65326
|
}
|
|
65327
|
-
const body = await
|
|
65327
|
+
const body = await createHTTPRequestReadStream(originalUrl, options);
|
|
65328
65328
|
const headers = getHeaders(url, body, syntheticResponseHeaders);
|
|
65329
65329
|
const { status, statusText } = getStatus(body);
|
|
65330
65330
|
const followRedirect = !options || options.followRedirect || options.followRedirect === void 0;
|
|
@@ -65337,6 +65337,14 @@ async function fetchNode(url, options) {
|
|
|
65337
65337
|
return new Response(null, { status: 400, statusText: String(error), url });
|
|
65338
65338
|
}
|
|
65339
65339
|
}
|
|
65340
|
+
async function createHTTPRequestReadStream(url, options) {
|
|
65341
|
+
return await new Promise((resolve, reject) => {
|
|
65342
|
+
const requestOptions = getRequestOptions(url, options);
|
|
65343
|
+
const req = url.startsWith("https:") ? import_https.default.request(requestOptions, (res) => resolve(res)) : import_http.default.request(requestOptions, (res) => resolve(res));
|
|
65344
|
+
req.on("error", (error) => reject(error));
|
|
65345
|
+
req.end();
|
|
65346
|
+
});
|
|
65347
|
+
}
|
|
65340
65348
|
function generateRedirectUrl(originalUrl, location) {
|
|
65341
65349
|
if (location.startsWith("http")) {
|
|
65342
65350
|
return location;
|
|
@@ -65345,6 +65353,23 @@ function generateRedirectUrl(originalUrl, location) {
|
|
|
65345
65353
|
url.pathname = location;
|
|
65346
65354
|
return url.href;
|
|
65347
65355
|
}
|
|
65356
|
+
function getRequestOptions(url, options) {
|
|
65357
|
+
const originalHeaders = (options == null ? void 0 : options.headers) || {};
|
|
65358
|
+
const headers = {};
|
|
65359
|
+
for (const key of Object.keys(originalHeaders)) {
|
|
65360
|
+
headers[key.toLowerCase()] = originalHeaders[key];
|
|
65361
|
+
}
|
|
65362
|
+
headers["accept-encoding"] = headers["accept-encoding"] || "gzip,br,deflate";
|
|
65363
|
+
const urlObject = new URL(url);
|
|
65364
|
+
return __spreadProps(__spreadValues(__spreadValues({
|
|
65365
|
+
hostname: urlObject.hostname,
|
|
65366
|
+
path: urlObject.pathname,
|
|
65367
|
+
method: "GET"
|
|
65368
|
+
}, options), options == null ? void 0 : options.fetch), {
|
|
65369
|
+
headers,
|
|
65370
|
+
port: urlObject.port
|
|
65371
|
+
});
|
|
65372
|
+
}
|
|
65348
65373
|
function getStatus(httpResponse) {
|
|
65349
65374
|
if (httpResponse.statusCode) {
|
|
65350
65375
|
return { status: httpResponse.statusCode, statusText: httpResponse.statusMessage || "NA" };
|
|
@@ -65370,18 +65395,7 @@ function getHeaders(url, httpResponse, additionalHeaders = {}) {
|
|
|
65370
65395
|
return new Headers(headers);
|
|
65371
65396
|
}
|
|
65372
65397
|
function getContentLength(url) {
|
|
65373
|
-
|
|
65374
|
-
return null;
|
|
65375
|
-
} else if (isDataURL(url)) {
|
|
65376
|
-
return url.length - "data:".length;
|
|
65377
|
-
}
|
|
65378
|
-
try {
|
|
65379
|
-
const noqueryUrl = url.split("?")[0];
|
|
65380
|
-
const stats = import_fs2.default.statSync(noqueryUrl);
|
|
65381
|
-
return stats.size;
|
|
65382
|
-
} catch (error) {
|
|
65383
|
-
}
|
|
65384
|
-
return null;
|
|
65398
|
+
return isDataURL(url) ? url.length - "data:".length : null;
|
|
65385
65399
|
}
|
|
65386
65400
|
|
|
65387
65401
|
// ../polyfills/src/node/images/encode-image.node.ts
|
|
@@ -65645,10 +65659,10 @@ if (!("allSettled" in Promise)) {
|
|
|
65645
65659
|
}
|
|
65646
65660
|
|
|
65647
65661
|
// src/lib/utils/version.ts
|
|
65648
|
-
var VERSION3 = true ? "3.
|
|
65662
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
65649
65663
|
|
|
65650
65664
|
// src/lib/parsers/basis-module-loader.ts
|
|
65651
|
-
var VERSION4 = true ? "3.
|
|
65665
|
+
var VERSION4 = true ? "3.4.0-alpha.1" : "beta";
|
|
65652
65666
|
var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
|
|
65653
65667
|
var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
|
|
65654
65668
|
var loadBasisEncoderPromise;
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
31
|
-
var VERSION = true ? "3.
|
|
31
|
+
var VERSION = true ? "3.4.0-alpha.1" : DEFAULT_VERSION;
|
|
32
32
|
if (false) {
|
|
33
33
|
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
34
34
|
}
|
|
@@ -237,10 +237,10 @@
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
// src/lib/utils/version.ts
|
|
240
|
-
var VERSION3 = true ? "3.
|
|
240
|
+
var VERSION3 = true ? "3.4.0-alpha.1" : "beta";
|
|
241
241
|
|
|
242
242
|
// src/lib/parsers/basis-module-loader.ts
|
|
243
|
-
var VERSION4 = true ? "3.
|
|
243
|
+
var VERSION4 = true ? "3.4.0-alpha.1" : "beta";
|
|
244
244
|
var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
|
|
245
245
|
var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
|
|
246
246
|
var loadBasisEncoderPromise;
|
package/dist/npy-worker.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/textures",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0-alpha.1",
|
|
4
4
|
"description": "Framework-independent loaders for compressed and super compressed (basis) textures ",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -45,15 +45,15 @@
|
|
|
45
45
|
"build-ktx2-basis-writer-nodejs-worker": "esbuild src/workers/ktx2-basis-writer-nodejs-worker.ts --platform=node --target=esnext,node12 --bundle --outfile=dist/ktx2-basis-writer-nodejs-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@loaders.gl/images": "3.
|
|
49
|
-
"@loaders.gl/loader-utils": "3.
|
|
50
|
-
"@loaders.gl/schema": "3.
|
|
51
|
-
"@loaders.gl/worker-utils": "3.
|
|
48
|
+
"@loaders.gl/images": "3.4.0-alpha.1",
|
|
49
|
+
"@loaders.gl/loader-utils": "3.4.0-alpha.1",
|
|
50
|
+
"@loaders.gl/schema": "3.4.0-alpha.1",
|
|
51
|
+
"@loaders.gl/worker-utils": "3.4.0-alpha.1",
|
|
52
52
|
"ktx-parse": "^0.0.4",
|
|
53
53
|
"texture-compressor": "^1.0.2"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@loaders.gl/polyfills": "3.
|
|
56
|
+
"@loaders.gl/polyfills": "3.4.0-alpha.1"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "4085b0323050e4361614471319a1fb4729547bbf"
|
|
59
59
|
}
|