@loaders.gl/core 4.0.0-alpha.17 → 4.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.min.js +25 -1
- package/dist/es5/lib/fetch/fetch-file.js +29 -7
- package/dist/es5/lib/fetch/fetch-file.js.map +1 -1
- package/dist/es5/lib/fetch/fetch-file.node.js +86 -0
- package/dist/es5/lib/fetch/fetch-file.node.js.map +1 -0
- package/dist/es5/lib/init.js +1 -1
- package/dist/es5/lib/loader-utils/check-errors.js +1 -1
- package/dist/es5/lib/loader-utils/check-errors.js.map +1 -1
- package/dist/es5/null-loader.js +1 -1
- package/dist/esm/lib/fetch/fetch-file.js +13 -0
- package/dist/esm/lib/fetch/fetch-file.js.map +1 -1
- package/dist/esm/lib/fetch/fetch-file.node.js +54 -0
- package/dist/esm/lib/fetch/fetch-file.node.js.map +1 -0
- package/dist/esm/lib/init.js +1 -1
- package/dist/esm/lib/loader-utils/check-errors.js +1 -1
- package/dist/esm/lib/loader-utils/check-errors.js.map +1 -1
- package/dist/esm/null-loader.js +1 -1
- package/dist/lib/fetch/fetch-file.d.ts +3 -0
- package/dist/lib/fetch/fetch-file.d.ts.map +1 -1
- package/dist/lib/fetch/fetch-file.js +41 -1
- package/dist/lib/fetch/fetch-file.node.d.ts +8 -0
- package/dist/lib/fetch/fetch-file.node.d.ts.map +1 -0
- package/dist/lib/fetch/fetch-file.node.js +57 -0
- package/dist/lib/fetch/read-file.d.ts +1 -1
- package/dist/lib/fetch/read-file.d.ts.map +1 -1
- package/dist/lib/loader-utils/check-errors.d.ts +11 -2
- package/dist/lib/loader-utils/check-errors.d.ts.map +1 -1
- package/dist/lib/loader-utils/check-errors.js +17 -1
- package/dist/null-worker-node.js +1 -1
- package/dist/null-worker.js +1 -1
- package/package.json +8 -4
- package/src/lib/fetch/fetch-file.node.ts +61 -0
- package/src/lib/fetch/fetch-file.ts +18 -0
- package/src/lib/loader-utils/check-errors.ts +21 -4
package/dist/dist.min.js
CHANGED
|
@@ -1475,6 +1475,7 @@
|
|
|
1475
1475
|
__export(fs_exports, {
|
|
1476
1476
|
_readToArrayBuffer: () => _readToArrayBuffer,
|
|
1477
1477
|
close: () => close,
|
|
1478
|
+
createReadStream: () => createReadStream,
|
|
1478
1479
|
createWriteStream: () => createWriteStream,
|
|
1479
1480
|
fstat: () => fstat,
|
|
1480
1481
|
isSupported: () => isSupported,
|
|
@@ -1484,6 +1485,7 @@
|
|
|
1484
1485
|
readFileSync: () => readFileSync,
|
|
1485
1486
|
readdir: () => readdir,
|
|
1486
1487
|
stat: () => stat,
|
|
1488
|
+
statSync: () => statSync,
|
|
1487
1489
|
writeFile: () => writeFile,
|
|
1488
1490
|
writeFileSync: () => writeFileSync
|
|
1489
1491
|
});
|
|
@@ -1495,7 +1497,7 @@
|
|
|
1495
1497
|
}
|
|
1496
1498
|
return toArrayBuffer(buffer);
|
|
1497
1499
|
}
|
|
1498
|
-
var import_fs, readdir, stat, readFile, readFileSync, writeFile, writeFileSync, open, close, read, fstat, createWriteStream, isSupported;
|
|
1500
|
+
var import_fs, readdir, stat, statSync, readFile, readFileSync, writeFile, writeFileSync, open, close, read, fstat, createReadStream, createWriteStream, isSupported;
|
|
1499
1501
|
var init_fs = __esm({
|
|
1500
1502
|
"../loader-utils/src/lib/node/fs.ts"() {
|
|
1501
1503
|
import_fs = __toModule(require_fs());
|
|
@@ -1505,6 +1507,7 @@
|
|
|
1505
1507
|
try {
|
|
1506
1508
|
readdir = promisify2(import_fs.default.readdir);
|
|
1507
1509
|
stat = promisify2(import_fs.default.stat);
|
|
1510
|
+
statSync = import_fs.default.statSync;
|
|
1508
1511
|
readFile = import_fs.default.readFile;
|
|
1509
1512
|
readFileSync = import_fs.default.readFileSync;
|
|
1510
1513
|
writeFile = promisify3(import_fs.default.writeFile);
|
|
@@ -1513,6 +1516,7 @@
|
|
|
1513
1516
|
close = (fd) => new Promise((resolve2, reject) => import_fs.default.close(fd, (err) => err ? reject(err) : resolve2()));
|
|
1514
1517
|
read = import_fs.default.read;
|
|
1515
1518
|
fstat = import_fs.default.fstat;
|
|
1519
|
+
createReadStream = import_fs.default.createReadStream;
|
|
1516
1520
|
createWriteStream = import_fs.default.createWriteStream;
|
|
1517
1521
|
isSupported = Boolean(import_fs.default);
|
|
1518
1522
|
} catch {
|
|
@@ -1741,18 +1745,38 @@
|
|
|
1741
1745
|
}
|
|
1742
1746
|
});
|
|
1743
1747
|
|
|
1748
|
+
// (disabled):src/lib/fetch/fetch-file.node
|
|
1749
|
+
var require_fetch_file = __commonJS({
|
|
1750
|
+
"(disabled):src/lib/fetch/fetch-file.node"() {
|
|
1751
|
+
}
|
|
1752
|
+
});
|
|
1753
|
+
|
|
1744
1754
|
// src/lib/fetch/fetch-file.ts
|
|
1755
|
+
function isNodePath(url) {
|
|
1756
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
1757
|
+
}
|
|
1758
|
+
function isRequestURL(url) {
|
|
1759
|
+
return url.startsWith("http:") || url.startsWith("https:");
|
|
1760
|
+
}
|
|
1761
|
+
function isDataURL(url) {
|
|
1762
|
+
return url.startsWith("data:");
|
|
1763
|
+
}
|
|
1745
1764
|
async function fetchFile(urlOrData, fetchOptions) {
|
|
1746
1765
|
if (typeof urlOrData === "string") {
|
|
1747
1766
|
const url = resolvePath(urlOrData);
|
|
1767
|
+
if (isNodePath(url) && node2?.fetchFileNode) {
|
|
1768
|
+
return node2.fetchFileNode(url, fetchOptions);
|
|
1769
|
+
}
|
|
1748
1770
|
return await fetch(url, fetchOptions);
|
|
1749
1771
|
}
|
|
1750
1772
|
return await makeResponse(urlOrData);
|
|
1751
1773
|
}
|
|
1774
|
+
var node2;
|
|
1752
1775
|
var init_fetch_file = __esm({
|
|
1753
1776
|
"src/lib/fetch/fetch-file.ts"() {
|
|
1754
1777
|
init_src2();
|
|
1755
1778
|
init_response_utils();
|
|
1779
|
+
node2 = __toModule(require_fetch_file());
|
|
1756
1780
|
}
|
|
1757
1781
|
});
|
|
1758
1782
|
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.fetchFile = fetchFile;
|
|
9
|
+
exports.isDataURL = isDataURL;
|
|
10
|
+
exports.isNodePath = isNodePath;
|
|
11
|
+
exports.isRequestURL = isRequestURL;
|
|
8
12
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
13
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
14
|
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
11
15
|
var _responseUtils = require("../utils/response-utils");
|
|
16
|
+
var node = _interopRequireWildcard(require("./fetch-file.node"));
|
|
17
|
+
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); }
|
|
18
|
+
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; }
|
|
19
|
+
function isNodePath(url) {
|
|
20
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
21
|
+
}
|
|
22
|
+
function isRequestURL(url) {
|
|
23
|
+
return url.startsWith('http:') || url.startsWith('https:');
|
|
24
|
+
}
|
|
25
|
+
function isDataURL(url) {
|
|
26
|
+
return url.startsWith('data:');
|
|
27
|
+
}
|
|
12
28
|
function fetchFile(_x, _x2) {
|
|
13
29
|
return _fetchFile.apply(this, arguments);
|
|
14
30
|
}
|
|
@@ -19,20 +35,26 @@ function _fetchFile() {
|
|
|
19
35
|
while (1) switch (_context.prev = _context.next) {
|
|
20
36
|
case 0:
|
|
21
37
|
if (!(typeof urlOrData === 'string')) {
|
|
22
|
-
_context.next =
|
|
38
|
+
_context.next = 7;
|
|
23
39
|
break;
|
|
24
40
|
}
|
|
25
41
|
url = (0, _loaderUtils.resolvePath)(urlOrData);
|
|
26
|
-
|
|
27
|
-
|
|
42
|
+
if (!(isNodePath(url) && node !== null && node !== void 0 && node.fetchFileNode)) {
|
|
43
|
+
_context.next = 4;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
return _context.abrupt("return", node.fetchFileNode(url, fetchOptions));
|
|
28
47
|
case 4:
|
|
48
|
+
_context.next = 6;
|
|
49
|
+
return fetch(url, fetchOptions);
|
|
50
|
+
case 6:
|
|
29
51
|
return _context.abrupt("return", _context.sent);
|
|
30
|
-
case 5:
|
|
31
|
-
_context.next = 7;
|
|
32
|
-
return (0, _responseUtils.makeResponse)(urlOrData);
|
|
33
52
|
case 7:
|
|
53
|
+
_context.next = 9;
|
|
54
|
+
return (0, _responseUtils.makeResponse)(urlOrData);
|
|
55
|
+
case 9:
|
|
34
56
|
return _context.abrupt("return", _context.sent);
|
|
35
|
-
case
|
|
57
|
+
case 10:
|
|
36
58
|
case "end":
|
|
37
59
|
return _context.stop();
|
|
38
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-file.js","names":["_loaderUtils","require","_responseUtils","fetchFile","_x","_x2","_fetchFile","apply","arguments","_asyncToGenerator2","
|
|
1
|
+
{"version":3,"file":"fetch-file.js","names":["_loaderUtils","require","_responseUtils","node","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isNodePath","url","isRequestURL","isDataURL","startsWith","fetchFile","_x","_x2","_fetchFile","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","urlOrData","fetchOptions","wrap","_callee$","_context","prev","next","resolvePath","fetchFileNode","abrupt","fetch","sent","makeResponse","stop"],"sources":["../../../../src/lib/fetch/fetch-file.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {resolvePath} from '@loaders.gl/loader-utils';\nimport {makeResponse} from '../utils/response-utils';\nimport * as node from './fetch-file.node';\n\nexport function isNodePath(url: string): boolean {\n return !isRequestURL(url) && !isDataURL(url);\n}\n\nexport function isRequestURL(url: string): boolean {\n return url.startsWith('http:') || url.startsWith('https:');\n}\n\nexport function isDataURL(url: string): boolean {\n return url.startsWith('data:');\n}\n\n/**\n * fetch API compatible function\n * - Supports fetching from Node.js local file system paths\n * - Respects pathPrefix and file aliases\n */\nexport async function fetchFile(\n urlOrData: string | Blob,\n fetchOptions?: RequestInit\n): Promise<Response> {\n if (typeof urlOrData === 'string') {\n const url = resolvePath(urlOrData);\n\n // Support fetching from local file system\n if (isNodePath(url) && node?.fetchFileNode) {\n return node.fetchFileNode(url, fetchOptions);\n }\n\n // Call global fetch\n return await fetch(url, fetchOptions);\n }\n\n // TODO - should we still call fetch on non-URL inputs?\n return await makeResponse(urlOrData);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.fetchFileNode = fetchFileNode;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
11
|
+
function fetchFileNode(_x, _x2) {
|
|
12
|
+
return _fetchFileNode.apply(this, arguments);
|
|
13
|
+
}
|
|
14
|
+
function _fetchFileNode() {
|
|
15
|
+
_fetchFileNode = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(url, options) {
|
|
16
|
+
var FILE_PROTOCOL_REGEX, noqueryUrl, body, status, statusText, headers, response, errorMessage, _status, _statusText, _headers, _response;
|
|
17
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
18
|
+
while (1) switch (_context.prev = _context.next) {
|
|
19
|
+
case 0:
|
|
20
|
+
FILE_PROTOCOL_REGEX = /^file:\/\//;
|
|
21
|
+
url.replace(FILE_PROTOCOL_REGEX, '/');
|
|
22
|
+
noqueryUrl = url.split('?')[0];
|
|
23
|
+
_context.prev = 3;
|
|
24
|
+
_context.next = 6;
|
|
25
|
+
return new Promise(function (resolve, reject) {
|
|
26
|
+
var stream = _loaderUtils.fs.createReadStream(noqueryUrl, {
|
|
27
|
+
encoding: null
|
|
28
|
+
});
|
|
29
|
+
stream.once('readable', function () {
|
|
30
|
+
return resolve(stream);
|
|
31
|
+
});
|
|
32
|
+
stream.on('error', function (error) {
|
|
33
|
+
return reject(error);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
case 6:
|
|
37
|
+
body = _context.sent;
|
|
38
|
+
status = 200;
|
|
39
|
+
statusText = 'OK';
|
|
40
|
+
headers = getHeadersForFile(noqueryUrl);
|
|
41
|
+
response = new Response(body, {
|
|
42
|
+
headers: headers,
|
|
43
|
+
status: status,
|
|
44
|
+
statusText: statusText
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(response, 'url', {
|
|
47
|
+
value: url
|
|
48
|
+
});
|
|
49
|
+
return _context.abrupt("return", response);
|
|
50
|
+
case 15:
|
|
51
|
+
_context.prev = 15;
|
|
52
|
+
_context.t0 = _context["catch"](3);
|
|
53
|
+
errorMessage = _context.t0.message;
|
|
54
|
+
_status = 400;
|
|
55
|
+
_statusText = errorMessage;
|
|
56
|
+
_headers = {};
|
|
57
|
+
_response = new Response(errorMessage, {
|
|
58
|
+
headers: _headers,
|
|
59
|
+
status: _status,
|
|
60
|
+
statusText: _statusText
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(_response, 'url', {
|
|
63
|
+
value: url
|
|
64
|
+
});
|
|
65
|
+
return _context.abrupt("return", _response);
|
|
66
|
+
case 24:
|
|
67
|
+
case "end":
|
|
68
|
+
return _context.stop();
|
|
69
|
+
}
|
|
70
|
+
}, _callee, null, [[3, 15]]);
|
|
71
|
+
}));
|
|
72
|
+
return _fetchFileNode.apply(this, arguments);
|
|
73
|
+
}
|
|
74
|
+
function getHeadersForFile(noqueryUrl) {
|
|
75
|
+
var headers = {};
|
|
76
|
+
if (!headers['content-length']) {
|
|
77
|
+
var stats = _loaderUtils.fs.statSync(noqueryUrl);
|
|
78
|
+
headers['content-length'] = stats.size;
|
|
79
|
+
}
|
|
80
|
+
if (noqueryUrl.endsWith('.gz')) {
|
|
81
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
82
|
+
headers['content-encoding'] = 'gzip';
|
|
83
|
+
}
|
|
84
|
+
return new Headers(headers);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=fetch-file.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-file.node.js","names":["_loaderUtils","require","fetchFileNode","_x","_x2","_fetchFileNode","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","url","options","FILE_PROTOCOL_REGEX","noqueryUrl","body","status","statusText","headers","response","errorMessage","_status","_statusText","_headers","_response","wrap","_callee$","_context","prev","next","replace","split","Promise","resolve","reject","stream","fs","createReadStream","encoding","once","on","error","sent","getHeadersForFile","Response","Object","defineProperty","value","abrupt","t0","message","stop","stats","statSync","size","endsWith","slice","Headers"],"sources":["../../../../src/lib/fetch/fetch-file.node.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {fs} from '@loaders.gl/loader-utils';\n\n/**\n * Enables\n * @param url\n * @param options\n * @returns\n */\nexport async function fetchFileNode(url: string, options): Promise<Response> {\n // Support `file://` protocol\n const FILE_PROTOCOL_REGEX = /^file:\\/\\//;\n url.replace(FILE_PROTOCOL_REGEX, '/');\n\n const noqueryUrl = url.split('?')[0];\n\n try {\n // Now open the stream\n const body = await new Promise<fs.ReadStream>((resolve, reject) => {\n // @ts-ignore\n const stream = fs.createReadStream(noqueryUrl, {encoding: null});\n stream.once('readable', () => resolve(stream));\n stream.on('error', (error) => reject(error));\n });\n\n const status = 200;\n const statusText = 'OK';\n const headers = getHeadersForFile(noqueryUrl);\n // @ts-expect-error\n const response = new Response(body, {headers, status, statusText});\n Object.defineProperty(response, 'url', {value: url});\n return response;\n } catch (error) {\n const errorMessage = (error as Error).message;\n const status = 400;\n const statusText = errorMessage;\n const headers = {};\n const response = new Response(errorMessage, {headers, status, statusText});\n Object.defineProperty(response, 'url', {value: url});\n return response;\n }\n}\n\nfunction getHeadersForFile(noqueryUrl: string): Headers {\n const headers = {};\n\n // Fix up content length if we can for best progress experience\n if (!headers['content-length']) {\n const stats = fs.statSync(noqueryUrl);\n headers['content-length'] = stats.size;\n }\n\n // Automatically decompress gzipped files with .gz extension\n if (noqueryUrl.endsWith('.gz')) {\n noqueryUrl = noqueryUrl.slice(0, -3);\n headers['content-encoding'] = 'gzip';\n }\n\n return new Headers(headers);\n}\n"],"mappings":"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"}
|
package/dist/es5/lib/init.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _log = require("./utils/log");
|
|
8
|
-
var version = typeof "4.0.0-alpha.
|
|
8
|
+
var version = typeof "4.0.0-alpha.18" !== 'undefined' ? "4.0.0-alpha.18" : '';
|
|
9
9
|
if (!globalThis.loaders) {
|
|
10
10
|
_log.log.log(1, "loaders.gl ".concat(version))();
|
|
11
11
|
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
@@ -51,7 +51,7 @@ function checkFetchResponseStatusSync(response) {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
function getErrorText(text) {
|
|
54
|
-
var matches =
|
|
54
|
+
var matches = /<pre>(.*)<\/pre>/.exec(text);
|
|
55
55
|
return matches ? matches[1] : " ".concat(text.slice(0, 10), "...");
|
|
56
56
|
}
|
|
57
57
|
//# sourceMappingURL=check-errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-errors.js","names":["checkFetchResponseStatus","_x","_checkFetchResponseStatus","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","response","errorMessage","text","wrap","_callee$","_context","prev","next","ok","concat","status","statusText","sent","getErrorText","t0","Error","stop","checkFetchResponseStatusSync","matches","
|
|
1
|
+
{"version":3,"file":"check-errors.js","names":["checkFetchResponseStatus","_x","_checkFetchResponseStatus","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","response","errorMessage","text","wrap","_callee$","_context","prev","next","ok","concat","status","statusText","sent","getErrorText","t0","Error","stop","checkFetchResponseStatusSync","matches","exec","slice"],"sources":["../../../../src/lib/loader-utils/check-errors.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/**\n * Check reponse status, if not OK extract error message and throw error\n * @param response\n */\nexport async function checkFetchResponseStatus(response: Response): Promise<void> {\n if (!response.ok) {\n let errorMessage = `fetch failed ${response.status} ${response.statusText}`;\n try {\n const text = await response.text();\n if (text) {\n errorMessage += `: ${getErrorText(text)}`;\n }\n } catch (error) {\n // ignore error\n }\n throw new Error(errorMessage);\n }\n}\n\n/**\n * Check response status synchronously, if not OK extract error message and throw error\n * Not able to extract as good an error message as the async version\n * @param response\n */\nexport function checkFetchResponseStatusSync(response: Response): void {\n if (!response.ok) {\n throw new Error(`fetch failed ${response.status}`);\n }\n}\n\n/**\n * Ad-hoc error message extractor\n * @todo Handle XML, JSON, etc\n * @param text\n * @returns\n */\nfunction getErrorText(text: string): string {\n // Look for HTML error texts\n const matches = /<pre>(.*)<\\/pre>/.exec(text);\n return matches ? matches[1] : ` ${text.slice(0, 10)}...`;\n}\n"],"mappings":";;;;;;;;;;SAMsBA,wBAAwBA,CAAAC,EAAA;EAAA,OAAAC,yBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAAAF,0BAAA;EAAAA,yBAAA,OAAAG,kBAAA,CAAAC,OAAA,EAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAvC,SAAAC,QAAwCC,QAAkB;IAAA,IAAAC,YAAA,EAAAC,IAAA;IAAA,OAAAL,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAA,IAC1DP,QAAQ,CAACQ,EAAE;YAAAH,QAAA,CAAAE,IAAA;YAAA;UAAA;UACVN,YAAY,mBAAAQ,MAAA,CAAmBT,QAAQ,CAACU,MAAM,OAAAD,MAAA,CAAIT,QAAQ,CAACW,UAAU;UAAAN,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAE,IAAA;UAAA,OAEpDP,QAAQ,CAACE,IAAI,CAAC,CAAC;QAAA;UAA5BA,IAAI,GAAAG,QAAA,CAAAO,IAAA;UACV,IAAIV,IAAI,EAAE;YACRD,YAAY,SAAAQ,MAAA,CAASI,YAAY,CAACX,IAAI,CAAC,CAAE;UAC3C;UAACG,QAAA,CAAAE,IAAA;UAAA;QAAA;UAAAF,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAS,EAAA,GAAAT,QAAA;QAAA;UAAA,MAIG,IAAIU,KAAK,CAACd,YAAY,CAAC;QAAA;QAAA;UAAA,OAAAI,QAAA,CAAAW,IAAA;MAAA;IAAA,GAAAjB,OAAA;EAAA,CAEhC;EAAA,OAAAP,yBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAOM,SAASuB,4BAA4BA,CAACjB,QAAkB,EAAQ;EACrE,IAAI,CAACA,QAAQ,CAACQ,EAAE,EAAE;IAChB,MAAM,IAAIO,KAAK,iBAAAN,MAAA,CAAiBT,QAAQ,CAACU,MAAM,CAAE,CAAC;EACpD;AACF;AAQA,SAASG,YAAYA,CAACX,IAAY,EAAU;EAE1C,IAAMgB,OAAO,GAAG,kBAAkB,CAACC,IAAI,CAACjB,IAAI,CAAC;EAC7C,OAAOgB,OAAO,GAAGA,OAAO,CAAC,CAAC,CAAC,OAAAT,MAAA,CAAOP,IAAI,CAACkB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAK;AAC1D"}
|
package/dist/es5/null-loader.js
CHANGED
|
@@ -11,7 +11,7 @@ var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpe
|
|
|
11
11
|
var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
|
|
12
12
|
function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
13
13
|
function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function _throw(value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
|
|
14
|
-
var VERSION = typeof "4.0.0-alpha.
|
|
14
|
+
var VERSION = typeof "4.0.0-alpha.18" !== 'undefined' ? "4.0.0-alpha.18" : 'latest';
|
|
15
15
|
var NullWorkerLoader = {
|
|
16
16
|
name: 'Null loader',
|
|
17
17
|
id: 'null',
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { resolvePath } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { makeResponse } from '../utils/response-utils';
|
|
3
|
+
import * as node from './fetch-file.node';
|
|
4
|
+
export function isNodePath(url) {
|
|
5
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
6
|
+
}
|
|
7
|
+
export function isRequestURL(url) {
|
|
8
|
+
return url.startsWith('http:') || url.startsWith('https:');
|
|
9
|
+
}
|
|
10
|
+
export function isDataURL(url) {
|
|
11
|
+
return url.startsWith('data:');
|
|
12
|
+
}
|
|
3
13
|
export async function fetchFile(urlOrData, fetchOptions) {
|
|
4
14
|
if (typeof urlOrData === 'string') {
|
|
5
15
|
const url = resolvePath(urlOrData);
|
|
16
|
+
if (isNodePath(url) && node !== null && node !== void 0 && node.fetchFileNode) {
|
|
17
|
+
return node.fetchFileNode(url, fetchOptions);
|
|
18
|
+
}
|
|
6
19
|
return await fetch(url, fetchOptions);
|
|
7
20
|
}
|
|
8
21
|
return await makeResponse(urlOrData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-file.js","names":["resolvePath","makeResponse","fetchFile","urlOrData","fetchOptions","
|
|
1
|
+
{"version":3,"file":"fetch-file.js","names":["resolvePath","makeResponse","node","isNodePath","url","isRequestURL","isDataURL","startsWith","fetchFile","urlOrData","fetchOptions","fetchFileNode","fetch"],"sources":["../../../../src/lib/fetch/fetch-file.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {resolvePath} from '@loaders.gl/loader-utils';\nimport {makeResponse} from '../utils/response-utils';\nimport * as node from './fetch-file.node';\n\nexport function isNodePath(url: string): boolean {\n return !isRequestURL(url) && !isDataURL(url);\n}\n\nexport function isRequestURL(url: string): boolean {\n return url.startsWith('http:') || url.startsWith('https:');\n}\n\nexport function isDataURL(url: string): boolean {\n return url.startsWith('data:');\n}\n\n/**\n * fetch API compatible function\n * - Supports fetching from Node.js local file system paths\n * - Respects pathPrefix and file aliases\n */\nexport async function fetchFile(\n urlOrData: string | Blob,\n fetchOptions?: RequestInit\n): Promise<Response> {\n if (typeof urlOrData === 'string') {\n const url = resolvePath(urlOrData);\n\n // Support fetching from local file system\n if (isNodePath(url) && node?.fetchFileNode) {\n return node.fetchFileNode(url, fetchOptions);\n }\n\n // Call global fetch\n return await fetch(url, fetchOptions);\n }\n\n // TODO - should we still call fetch on non-URL inputs?\n return await makeResponse(urlOrData);\n}\n"],"mappings":"AAEA,SAAQA,WAAW,QAAO,0BAA0B;AACpD,SAAQC,YAAY,QAAO,yBAAyB;AACpD,OAAO,KAAKC,IAAI,MAAM,mBAAmB;AAEzC,OAAO,SAASC,UAAUA,CAACC,GAAW,EAAW;EAC/C,OAAO,CAACC,YAAY,CAACD,GAAG,CAAC,IAAI,CAACE,SAAS,CAACF,GAAG,CAAC;AAC9C;AAEA,OAAO,SAASC,YAAYA,CAACD,GAAW,EAAW;EACjD,OAAOA,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC,IAAIH,GAAG,CAACG,UAAU,CAAC,QAAQ,CAAC;AAC5D;AAEA,OAAO,SAASD,SAASA,CAACF,GAAW,EAAW;EAC9C,OAAOA,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC;AAChC;AAOA,OAAO,eAAeC,SAASA,CAC7BC,SAAwB,EACxBC,YAA0B,EACP;EACnB,IAAI,OAAOD,SAAS,KAAK,QAAQ,EAAE;IACjC,MAAML,GAAG,GAAGJ,WAAW,CAACS,SAAS,CAAC;IAGlC,IAAIN,UAAU,CAACC,GAAG,CAAC,IAAIF,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAES,aAAa,EAAE;MAC1C,OAAOT,IAAI,CAACS,aAAa,CAACP,GAAG,EAAEM,YAAY,CAAC;IAC9C;IAGA,OAAO,MAAME,KAAK,CAACR,GAAG,EAAEM,YAAY,CAAC;EACvC;EAGA,OAAO,MAAMT,YAAY,CAACQ,SAAS,CAAC;AACtC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { fs } from '@loaders.gl/loader-utils';
|
|
2
|
+
export async function fetchFileNode(url, options) {
|
|
3
|
+
const FILE_PROTOCOL_REGEX = /^file:\/\//;
|
|
4
|
+
url.replace(FILE_PROTOCOL_REGEX, '/');
|
|
5
|
+
const noqueryUrl = url.split('?')[0];
|
|
6
|
+
try {
|
|
7
|
+
const body = await new Promise((resolve, reject) => {
|
|
8
|
+
const stream = fs.createReadStream(noqueryUrl, {
|
|
9
|
+
encoding: null
|
|
10
|
+
});
|
|
11
|
+
stream.once('readable', () => resolve(stream));
|
|
12
|
+
stream.on('error', error => reject(error));
|
|
13
|
+
});
|
|
14
|
+
const status = 200;
|
|
15
|
+
const statusText = 'OK';
|
|
16
|
+
const headers = getHeadersForFile(noqueryUrl);
|
|
17
|
+
const response = new Response(body, {
|
|
18
|
+
headers,
|
|
19
|
+
status,
|
|
20
|
+
statusText
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(response, 'url', {
|
|
23
|
+
value: url
|
|
24
|
+
});
|
|
25
|
+
return response;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
const errorMessage = error.message;
|
|
28
|
+
const status = 400;
|
|
29
|
+
const statusText = errorMessage;
|
|
30
|
+
const headers = {};
|
|
31
|
+
const response = new Response(errorMessage, {
|
|
32
|
+
headers,
|
|
33
|
+
status,
|
|
34
|
+
statusText
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(response, 'url', {
|
|
37
|
+
value: url
|
|
38
|
+
});
|
|
39
|
+
return response;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function getHeadersForFile(noqueryUrl) {
|
|
43
|
+
const headers = {};
|
|
44
|
+
if (!headers['content-length']) {
|
|
45
|
+
const stats = fs.statSync(noqueryUrl);
|
|
46
|
+
headers['content-length'] = stats.size;
|
|
47
|
+
}
|
|
48
|
+
if (noqueryUrl.endsWith('.gz')) {
|
|
49
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
50
|
+
headers['content-encoding'] = 'gzip';
|
|
51
|
+
}
|
|
52
|
+
return new Headers(headers);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=fetch-file.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-file.node.js","names":["fs","fetchFileNode","url","options","FILE_PROTOCOL_REGEX","replace","noqueryUrl","split","body","Promise","resolve","reject","stream","createReadStream","encoding","once","on","error","status","statusText","headers","getHeadersForFile","response","Response","Object","defineProperty","value","errorMessage","message","stats","statSync","size","endsWith","slice","Headers"],"sources":["../../../../src/lib/fetch/fetch-file.node.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {fs} from '@loaders.gl/loader-utils';\n\n/**\n * Enables\n * @param url\n * @param options\n * @returns\n */\nexport async function fetchFileNode(url: string, options): Promise<Response> {\n // Support `file://` protocol\n const FILE_PROTOCOL_REGEX = /^file:\\/\\//;\n url.replace(FILE_PROTOCOL_REGEX, '/');\n\n const noqueryUrl = url.split('?')[0];\n\n try {\n // Now open the stream\n const body = await new Promise<fs.ReadStream>((resolve, reject) => {\n // @ts-ignore\n const stream = fs.createReadStream(noqueryUrl, {encoding: null});\n stream.once('readable', () => resolve(stream));\n stream.on('error', (error) => reject(error));\n });\n\n const status = 200;\n const statusText = 'OK';\n const headers = getHeadersForFile(noqueryUrl);\n // @ts-expect-error\n const response = new Response(body, {headers, status, statusText});\n Object.defineProperty(response, 'url', {value: url});\n return response;\n } catch (error) {\n const errorMessage = (error as Error).message;\n const status = 400;\n const statusText = errorMessage;\n const headers = {};\n const response = new Response(errorMessage, {headers, status, statusText});\n Object.defineProperty(response, 'url', {value: url});\n return response;\n }\n}\n\nfunction getHeadersForFile(noqueryUrl: string): Headers {\n const headers = {};\n\n // Fix up content length if we can for best progress experience\n if (!headers['content-length']) {\n const stats = fs.statSync(noqueryUrl);\n headers['content-length'] = stats.size;\n }\n\n // Automatically decompress gzipped files with .gz extension\n if (noqueryUrl.endsWith('.gz')) {\n noqueryUrl = noqueryUrl.slice(0, -3);\n headers['content-encoding'] = 'gzip';\n }\n\n return new Headers(headers);\n}\n"],"mappings":"AAEA,SAAQA,EAAE,QAAO,0BAA0B;AAQ3C,OAAO,eAAeC,aAAaA,CAACC,GAAW,EAAEC,OAAO,EAAqB;EAE3E,MAAMC,mBAAmB,GAAG,YAAY;EACxCF,GAAG,CAACG,OAAO,CAACD,mBAAmB,EAAE,GAAG,CAAC;EAErC,MAAME,UAAU,GAAGJ,GAAG,CAACK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAEpC,IAAI;IAEF,MAAMC,IAAI,GAAG,MAAM,IAAIC,OAAO,CAAgB,CAACC,OAAO,EAAEC,MAAM,KAAK;MAEjE,MAAMC,MAAM,GAAGZ,EAAE,CAACa,gBAAgB,CAACP,UAAU,EAAE;QAACQ,QAAQ,EAAE;MAAI,CAAC,CAAC;MAChEF,MAAM,CAACG,IAAI,CAAC,UAAU,EAAE,MAAML,OAAO,CAACE,MAAM,CAAC,CAAC;MAC9CA,MAAM,CAACI,EAAE,CAAC,OAAO,EAAGC,KAAK,IAAKN,MAAM,CAACM,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAMC,MAAM,GAAG,GAAG;IAClB,MAAMC,UAAU,GAAG,IAAI;IACvB,MAAMC,OAAO,GAAGC,iBAAiB,CAACf,UAAU,CAAC;IAE7C,MAAMgB,QAAQ,GAAG,IAAIC,QAAQ,CAACf,IAAI,EAAE;MAACY,OAAO;MAAEF,MAAM;MAAEC;IAAU,CAAC,CAAC;IAClEK,MAAM,CAACC,cAAc,CAACH,QAAQ,EAAE,KAAK,EAAE;MAACI,KAAK,EAAExB;IAAG,CAAC,CAAC;IACpD,OAAOoB,QAAQ;EACjB,CAAC,CAAC,OAAOL,KAAK,EAAE;IACd,MAAMU,YAAY,GAAIV,KAAK,CAAWW,OAAO;IAC7C,MAAMV,MAAM,GAAG,GAAG;IAClB,MAAMC,UAAU,GAAGQ,YAAY;IAC/B,MAAMP,OAAO,GAAG,CAAC,CAAC;IAClB,MAAME,QAAQ,GAAG,IAAIC,QAAQ,CAACI,YAAY,EAAE;MAACP,OAAO;MAAEF,MAAM;MAAEC;IAAU,CAAC,CAAC;IAC1EK,MAAM,CAACC,cAAc,CAACH,QAAQ,EAAE,KAAK,EAAE;MAACI,KAAK,EAAExB;IAAG,CAAC,CAAC;IACpD,OAAOoB,QAAQ;EACjB;AACF;AAEA,SAASD,iBAAiBA,CAACf,UAAkB,EAAW;EACtD,MAAMc,OAAO,GAAG,CAAC,CAAC;EAGlB,IAAI,CAACA,OAAO,CAAC,gBAAgB,CAAC,EAAE;IAC9B,MAAMS,KAAK,GAAG7B,EAAE,CAAC8B,QAAQ,CAACxB,UAAU,CAAC;IACrCc,OAAO,CAAC,gBAAgB,CAAC,GAAGS,KAAK,CAACE,IAAI;EACxC;EAGA,IAAIzB,UAAU,CAAC0B,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC9B1B,UAAU,GAAGA,UAAU,CAAC2B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpCb,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM;EACtC;EAEA,OAAO,IAAIc,OAAO,CAACd,OAAO,CAAC;AAC7B"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { log } from './utils/log';
|
|
2
|
-
const version = typeof "4.0.0-alpha.
|
|
2
|
+
const version = typeof "4.0.0-alpha.18" !== 'undefined' ? "4.0.0-alpha.18" : '';
|
|
3
3
|
if (!globalThis.loaders) {
|
|
4
4
|
log.log(1, "loaders.gl ".concat(version))();
|
|
5
5
|
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
@@ -16,7 +16,7 @@ export function checkFetchResponseStatusSync(response) {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
function getErrorText(text) {
|
|
19
|
-
const matches =
|
|
19
|
+
const matches = /<pre>(.*)<\/pre>/.exec(text);
|
|
20
20
|
return matches ? matches[1] : " ".concat(text.slice(0, 10), "...");
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=check-errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-errors.js","names":["checkFetchResponseStatus","response","ok","errorMessage","concat","status","statusText","text","getErrorText","error","Error","checkFetchResponseStatusSync","matches","
|
|
1
|
+
{"version":3,"file":"check-errors.js","names":["checkFetchResponseStatus","response","ok","errorMessage","concat","status","statusText","text","getErrorText","error","Error","checkFetchResponseStatusSync","matches","exec","slice"],"sources":["../../../../src/lib/loader-utils/check-errors.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/**\n * Check reponse status, if not OK extract error message and throw error\n * @param response\n */\nexport async function checkFetchResponseStatus(response: Response): Promise<void> {\n if (!response.ok) {\n let errorMessage = `fetch failed ${response.status} ${response.statusText}`;\n try {\n const text = await response.text();\n if (text) {\n errorMessage += `: ${getErrorText(text)}`;\n }\n } catch (error) {\n // ignore error\n }\n throw new Error(errorMessage);\n }\n}\n\n/**\n * Check response status synchronously, if not OK extract error message and throw error\n * Not able to extract as good an error message as the async version\n * @param response\n */\nexport function checkFetchResponseStatusSync(response: Response): void {\n if (!response.ok) {\n throw new Error(`fetch failed ${response.status}`);\n }\n}\n\n/**\n * Ad-hoc error message extractor\n * @todo Handle XML, JSON, etc\n * @param text\n * @returns\n */\nfunction getErrorText(text: string): string {\n // Look for HTML error texts\n const matches = /<pre>(.*)<\\/pre>/.exec(text);\n return matches ? matches[1] : ` ${text.slice(0, 10)}...`;\n}\n"],"mappings":"AAMA,OAAO,eAAeA,wBAAwBA,CAACC,QAAkB,EAAiB;EAChF,IAAI,CAACA,QAAQ,CAACC,EAAE,EAAE;IAChB,IAAIC,YAAY,mBAAAC,MAAA,CAAmBH,QAAQ,CAACI,MAAM,OAAAD,MAAA,CAAIH,QAAQ,CAACK,UAAU,CAAE;IAC3E,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMN,QAAQ,CAACM,IAAI,CAAC,CAAC;MAClC,IAAIA,IAAI,EAAE;QACRJ,YAAY,SAAAC,MAAA,CAASI,YAAY,CAACD,IAAI,CAAC,CAAE;MAC3C;IACF,CAAC,CAAC,OAAOE,KAAK,EAAE,CAEhB;IACA,MAAM,IAAIC,KAAK,CAACP,YAAY,CAAC;EAC/B;AACF;AAOA,OAAO,SAASQ,4BAA4BA,CAACV,QAAkB,EAAQ;EACrE,IAAI,CAACA,QAAQ,CAACC,EAAE,EAAE;IAChB,MAAM,IAAIQ,KAAK,iBAAAN,MAAA,CAAiBH,QAAQ,CAACI,MAAM,CAAE,CAAC;EACpD;AACF;AAQA,SAASG,YAAYA,CAACD,IAAY,EAAU;EAE1C,MAAMK,OAAO,GAAG,kBAAkB,CAACC,IAAI,CAACN,IAAI,CAAC;EAC7C,OAAOK,OAAO,GAAGA,OAAO,CAAC,CAAC,CAAC,OAAAR,MAAA,CAAOG,IAAI,CAACO,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAK;AAC1D"}
|
package/dist/esm/null-loader.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export declare function isNodePath(url: string): boolean;
|
|
2
|
+
export declare function isRequestURL(url: string): boolean;
|
|
3
|
+
export declare function isDataURL(url: string): boolean;
|
|
1
4
|
/**
|
|
2
5
|
* fetch API compatible function
|
|
3
6
|
* - Supports fetching from Node.js local file system paths
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-file.d.ts","sourceRoot":"","sources":["../../../src/lib/fetch/fetch-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-file.d.ts","sourceRoot":"","sources":["../../../src/lib/fetch/fetch-file.ts"],"names":[],"mappings":"AAMA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,QAAQ,CAAC,CAenB"}
|
|
@@ -1,9 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// loaders.gl, MIT license
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
3
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.fetchFile = void 0;
|
|
27
|
+
exports.fetchFile = exports.isDataURL = exports.isRequestURL = exports.isNodePath = void 0;
|
|
5
28
|
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
6
29
|
const response_utils_1 = require("../utils/response-utils");
|
|
30
|
+
const node = __importStar(require("./fetch-file.node"));
|
|
31
|
+
function isNodePath(url) {
|
|
32
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
33
|
+
}
|
|
34
|
+
exports.isNodePath = isNodePath;
|
|
35
|
+
function isRequestURL(url) {
|
|
36
|
+
return url.startsWith('http:') || url.startsWith('https:');
|
|
37
|
+
}
|
|
38
|
+
exports.isRequestURL = isRequestURL;
|
|
39
|
+
function isDataURL(url) {
|
|
40
|
+
return url.startsWith('data:');
|
|
41
|
+
}
|
|
42
|
+
exports.isDataURL = isDataURL;
|
|
7
43
|
/**
|
|
8
44
|
* fetch API compatible function
|
|
9
45
|
* - Supports fetching from Node.js local file system paths
|
|
@@ -12,6 +48,10 @@ const response_utils_1 = require("../utils/response-utils");
|
|
|
12
48
|
async function fetchFile(urlOrData, fetchOptions) {
|
|
13
49
|
if (typeof urlOrData === 'string') {
|
|
14
50
|
const url = (0, loader_utils_1.resolvePath)(urlOrData);
|
|
51
|
+
// Support fetching from local file system
|
|
52
|
+
if (isNodePath(url) && node?.fetchFileNode) {
|
|
53
|
+
return node.fetchFileNode(url, fetchOptions);
|
|
54
|
+
}
|
|
15
55
|
// Call global fetch
|
|
16
56
|
return await fetch(url, fetchOptions);
|
|
17
57
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-file.node.d.ts","sourceRoot":"","sources":["../../../src/lib/fetch/fetch-file.node.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,KAAA,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgC3E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// loaders.gl, MIT license
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.fetchFileNode = void 0;
|
|
5
|
+
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
6
|
+
/**
|
|
7
|
+
* Enables
|
|
8
|
+
* @param url
|
|
9
|
+
* @param options
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
async function fetchFileNode(url, options) {
|
|
13
|
+
// Support `file://` protocol
|
|
14
|
+
const FILE_PROTOCOL_REGEX = /^file:\/\//;
|
|
15
|
+
url.replace(FILE_PROTOCOL_REGEX, '/');
|
|
16
|
+
const noqueryUrl = url.split('?')[0];
|
|
17
|
+
try {
|
|
18
|
+
// Now open the stream
|
|
19
|
+
const body = await new Promise((resolve, reject) => {
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
const stream = loader_utils_1.fs.createReadStream(noqueryUrl, { encoding: null });
|
|
22
|
+
stream.once('readable', () => resolve(stream));
|
|
23
|
+
stream.on('error', (error) => reject(error));
|
|
24
|
+
});
|
|
25
|
+
const status = 200;
|
|
26
|
+
const statusText = 'OK';
|
|
27
|
+
const headers = getHeadersForFile(noqueryUrl);
|
|
28
|
+
// @ts-expect-error
|
|
29
|
+
const response = new Response(body, { headers, status, statusText });
|
|
30
|
+
Object.defineProperty(response, 'url', { value: url });
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const errorMessage = error.message;
|
|
35
|
+
const status = 400;
|
|
36
|
+
const statusText = errorMessage;
|
|
37
|
+
const headers = {};
|
|
38
|
+
const response = new Response(errorMessage, { headers, status, statusText });
|
|
39
|
+
Object.defineProperty(response, 'url', { value: url });
|
|
40
|
+
return response;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.fetchFileNode = fetchFileNode;
|
|
44
|
+
function getHeadersForFile(noqueryUrl) {
|
|
45
|
+
const headers = {};
|
|
46
|
+
// Fix up content length if we can for best progress experience
|
|
47
|
+
if (!headers['content-length']) {
|
|
48
|
+
const stats = loader_utils_1.fs.statSync(noqueryUrl);
|
|
49
|
+
headers['content-length'] = stats.size;
|
|
50
|
+
}
|
|
51
|
+
// Automatically decompress gzipped files with .gz extension
|
|
52
|
+
if (noqueryUrl.endsWith('.gz')) {
|
|
53
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
54
|
+
headers['content-encoding'] = 'gzip';
|
|
55
|
+
}
|
|
56
|
+
return new Headers(headers);
|
|
57
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* In a few cases (data URIs, node.js) "files" can be read synchronously
|
|
3
3
|
*/
|
|
4
|
-
export declare function readFileSync(url: string, options?: object):
|
|
4
|
+
export declare function readFileSync(url: string, options?: object): ArrayBuffer | null;
|
|
5
5
|
//# sourceMappingURL=read-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../src/lib/fetch/read-file.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW
|
|
1
|
+
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../src/lib/fetch/read-file.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,sBAoB7D"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Check reponse status, if not OK extract error message and throw error
|
|
3
|
+
* @param response
|
|
4
|
+
*/
|
|
5
|
+
export declare function checkFetchResponseStatus(response: Response): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Check response status synchronously, if not OK extract error message and throw error
|
|
8
|
+
* Not able to extract as good an error message as the async version
|
|
9
|
+
* @param response
|
|
10
|
+
*/
|
|
11
|
+
export declare function checkFetchResponseStatusSync(response: Response): void;
|
|
3
12
|
//# sourceMappingURL=check-errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-errors.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/check-errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check-errors.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/check-errors.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAahF;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIrE"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// loaders.gl, MIT license
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.checkFetchResponseStatusSync = exports.checkFetchResponseStatus = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Check reponse status, if not OK extract error message and throw error
|
|
7
|
+
* @param response
|
|
8
|
+
*/
|
|
4
9
|
async function checkFetchResponseStatus(response) {
|
|
5
10
|
if (!response.ok) {
|
|
6
11
|
let errorMessage = `fetch failed ${response.status} ${response.statusText}`;
|
|
@@ -17,14 +22,25 @@ async function checkFetchResponseStatus(response) {
|
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
exports.checkFetchResponseStatus = checkFetchResponseStatus;
|
|
25
|
+
/**
|
|
26
|
+
* Check response status synchronously, if not OK extract error message and throw error
|
|
27
|
+
* Not able to extract as good an error message as the async version
|
|
28
|
+
* @param response
|
|
29
|
+
*/
|
|
20
30
|
function checkFetchResponseStatusSync(response) {
|
|
21
31
|
if (!response.ok) {
|
|
22
32
|
throw new Error(`fetch failed ${response.status}`);
|
|
23
33
|
}
|
|
24
34
|
}
|
|
25
35
|
exports.checkFetchResponseStatusSync = checkFetchResponseStatusSync;
|
|
36
|
+
/**
|
|
37
|
+
* Ad-hoc error message extractor
|
|
38
|
+
* @todo Handle XML, JSON, etc
|
|
39
|
+
* @param text
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
26
42
|
function getErrorText(text) {
|
|
27
43
|
// Look for HTML error texts
|
|
28
|
-
const matches =
|
|
44
|
+
const matches = /<pre>(.*)<\/pre>/.exec(text);
|
|
29
45
|
return matches ? matches[1] : ` ${text.slice(0, 10)}...`;
|
|
30
46
|
}
|
package/dist/null-worker-node.js
CHANGED
|
@@ -201,7 +201,7 @@ async function parseData({ loader, arrayBuffer, options, context }) {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
// src/null-loader.ts
|
|
204
|
-
var VERSION = true ? "4.0.0-alpha.
|
|
204
|
+
var VERSION = true ? "4.0.0-alpha.18" : "latest";
|
|
205
205
|
function parseSync(arrayBuffer, options, context) {
|
|
206
206
|
if (!options.null.echoParameters)
|
|
207
207
|
return null;
|
package/dist/null-worker.js
CHANGED
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
// src/null-loader.ts
|
|
187
|
-
var VERSION = true ? "4.0.0-alpha.
|
|
187
|
+
var VERSION = true ? "4.0.0-alpha.18" : "latest";
|
|
188
188
|
function parseSync(arrayBuffer, options, context) {
|
|
189
189
|
if (!options.null.echoParameters)
|
|
190
190
|
return null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/core",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.18",
|
|
4
4
|
"description": "The core API for working with loaders.gl loaders and writers",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"browser": {
|
|
25
25
|
"fs": false,
|
|
26
26
|
"stream": false,
|
|
27
|
+
"./src/lib/fetch/fetch-file.node.ts": false,
|
|
28
|
+
"./dist/lib/fetch/fetch-file.node.js": false,
|
|
29
|
+
"./dist/es5/lib/fetch/fetch-file.node.js": false,
|
|
30
|
+
"./dist/esm/lib/fetch/fetch-file.node.js": false,
|
|
27
31
|
"./src/iterators/make-stream/make-node-stream.ts": "./src/iterators/make-stream/make-dom-stream.ts",
|
|
28
32
|
"./src/iterators/make-stream/make-node-stream.js": "./src/iterators/make-stream/make-dom-stream.js",
|
|
29
33
|
"./dist/iterators/make-stream/make-node-stream.js": "./dist/iterators/make-stream/make-dom-stream.js",
|
|
@@ -43,9 +47,9 @@
|
|
|
43
47
|
},
|
|
44
48
|
"dependencies": {
|
|
45
49
|
"@babel/runtime": "^7.3.1",
|
|
46
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
47
|
-
"@loaders.gl/worker-utils": "4.0.0-alpha.
|
|
50
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.18",
|
|
51
|
+
"@loaders.gl/worker-utils": "4.0.0-alpha.18",
|
|
48
52
|
"@probe.gl/log": "^4.0.2"
|
|
49
53
|
},
|
|
50
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "7bc633f46560f661bdd46cf1015ea27b3694ebce"
|
|
51
55
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import {fs} from '@loaders.gl/loader-utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Enables
|
|
7
|
+
* @param url
|
|
8
|
+
* @param options
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export async function fetchFileNode(url: string, options): Promise<Response> {
|
|
12
|
+
// Support `file://` protocol
|
|
13
|
+
const FILE_PROTOCOL_REGEX = /^file:\/\//;
|
|
14
|
+
url.replace(FILE_PROTOCOL_REGEX, '/');
|
|
15
|
+
|
|
16
|
+
const noqueryUrl = url.split('?')[0];
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
// Now open the stream
|
|
20
|
+
const body = await new Promise<fs.ReadStream>((resolve, reject) => {
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
const stream = fs.createReadStream(noqueryUrl, {encoding: null});
|
|
23
|
+
stream.once('readable', () => resolve(stream));
|
|
24
|
+
stream.on('error', (error) => reject(error));
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const status = 200;
|
|
28
|
+
const statusText = 'OK';
|
|
29
|
+
const headers = getHeadersForFile(noqueryUrl);
|
|
30
|
+
// @ts-expect-error
|
|
31
|
+
const response = new Response(body, {headers, status, statusText});
|
|
32
|
+
Object.defineProperty(response, 'url', {value: url});
|
|
33
|
+
return response;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
const errorMessage = (error as Error).message;
|
|
36
|
+
const status = 400;
|
|
37
|
+
const statusText = errorMessage;
|
|
38
|
+
const headers = {};
|
|
39
|
+
const response = new Response(errorMessage, {headers, status, statusText});
|
|
40
|
+
Object.defineProperty(response, 'url', {value: url});
|
|
41
|
+
return response;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getHeadersForFile(noqueryUrl: string): Headers {
|
|
46
|
+
const headers = {};
|
|
47
|
+
|
|
48
|
+
// Fix up content length if we can for best progress experience
|
|
49
|
+
if (!headers['content-length']) {
|
|
50
|
+
const stats = fs.statSync(noqueryUrl);
|
|
51
|
+
headers['content-length'] = stats.size;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Automatically decompress gzipped files with .gz extension
|
|
55
|
+
if (noqueryUrl.endsWith('.gz')) {
|
|
56
|
+
noqueryUrl = noqueryUrl.slice(0, -3);
|
|
57
|
+
headers['content-encoding'] = 'gzip';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return new Headers(headers);
|
|
61
|
+
}
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
import {resolvePath} from '@loaders.gl/loader-utils';
|
|
4
4
|
import {makeResponse} from '../utils/response-utils';
|
|
5
|
+
import * as node from './fetch-file.node';
|
|
6
|
+
|
|
7
|
+
export function isNodePath(url: string): boolean {
|
|
8
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function isRequestURL(url: string): boolean {
|
|
12
|
+
return url.startsWith('http:') || url.startsWith('https:');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function isDataURL(url: string): boolean {
|
|
16
|
+
return url.startsWith('data:');
|
|
17
|
+
}
|
|
5
18
|
|
|
6
19
|
/**
|
|
7
20
|
* fetch API compatible function
|
|
@@ -15,6 +28,11 @@ export async function fetchFile(
|
|
|
15
28
|
if (typeof urlOrData === 'string') {
|
|
16
29
|
const url = resolvePath(urlOrData);
|
|
17
30
|
|
|
31
|
+
// Support fetching from local file system
|
|
32
|
+
if (isNodePath(url) && node?.fetchFileNode) {
|
|
33
|
+
return node.fetchFileNode(url, fetchOptions);
|
|
34
|
+
}
|
|
35
|
+
|
|
18
36
|
// Call global fetch
|
|
19
37
|
return await fetch(url, fetchOptions);
|
|
20
38
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check reponse status, if not OK extract error message and throw error
|
|
5
|
+
* @param response
|
|
6
|
+
*/
|
|
7
|
+
export async function checkFetchResponseStatus(response: Response): Promise<void> {
|
|
2
8
|
if (!response.ok) {
|
|
3
9
|
let errorMessage = `fetch failed ${response.status} ${response.statusText}`;
|
|
4
10
|
try {
|
|
@@ -13,14 +19,25 @@ export async function checkFetchResponseStatus(response) {
|
|
|
13
19
|
}
|
|
14
20
|
}
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Check response status synchronously, if not OK extract error message and throw error
|
|
24
|
+
* Not able to extract as good an error message as the async version
|
|
25
|
+
* @param response
|
|
26
|
+
*/
|
|
27
|
+
export function checkFetchResponseStatusSync(response: Response): void {
|
|
17
28
|
if (!response.ok) {
|
|
18
29
|
throw new Error(`fetch failed ${response.status}`);
|
|
19
30
|
}
|
|
20
31
|
}
|
|
21
32
|
|
|
22
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Ad-hoc error message extractor
|
|
35
|
+
* @todo Handle XML, JSON, etc
|
|
36
|
+
* @param text
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
function getErrorText(text: string): string {
|
|
23
40
|
// Look for HTML error texts
|
|
24
|
-
const matches =
|
|
41
|
+
const matches = /<pre>(.*)<\/pre>/.exec(text);
|
|
25
42
|
return matches ? matches[1] : ` ${text.slice(0, 10)}...`;
|
|
26
43
|
}
|