@loaders.gl/loader-utils 4.2.0-alpha.3 → 4.2.0-alpha.5
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/index.cjs +66 -84
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +46 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/json-loader.d.ts +1 -1
- package/dist/json-loader.d.ts.map +1 -1
- package/dist/json-loader.js +20 -14
- package/dist/lib/binary-utils/array-buffer-utils.js +75 -46
- package/dist/lib/binary-utils/dataview-copy-utils.d.ts +1 -1
- package/dist/lib/binary-utils/dataview-copy-utils.d.ts.map +1 -1
- package/dist/lib/binary-utils/dataview-copy-utils.js +75 -34
- package/dist/lib/binary-utils/get-first-characters.js +39 -21
- package/dist/lib/binary-utils/memory-conversion-utils.js +38 -23
- package/dist/lib/binary-utils/memory-copy-utils.js +49 -20
- package/dist/lib/env-utils/assert.js +7 -4
- package/dist/lib/env-utils/globals.js +15 -7
- package/dist/lib/file-provider/data-view-file.d.ts +1 -1
- package/dist/lib/file-provider/data-view-file.d.ts.map +1 -1
- package/dist/lib/file-provider/data-view-file.js +58 -29
- package/dist/lib/file-provider/file-handle-file.d.ts +1 -1
- package/dist/lib/file-provider/file-handle-file.d.ts.map +1 -1
- package/dist/lib/file-provider/file-handle-file.js +96 -58
- package/dist/lib/file-provider/file-provider.js +8 -3
- package/dist/lib/files/blob-file.d.ts +1 -1
- package/dist/lib/files/blob-file.d.ts.map +1 -1
- package/dist/lib/files/blob-file.js +24 -23
- package/dist/lib/files/file.js +3 -1
- package/dist/lib/files/http-file.d.ts +1 -1
- package/dist/lib/files/http-file.d.ts.map +1 -1
- package/dist/lib/files/http-file.js +91 -71
- package/dist/lib/files/node-file-facade.d.ts +1 -1
- package/dist/lib/files/node-file-facade.d.ts.map +1 -1
- package/dist/lib/files/node-file-facade.js +37 -29
- package/dist/lib/files/sources.js +150 -1
- package/dist/lib/filesystems/filesystem.d.ts +1 -1
- package/dist/lib/filesystems/filesystem.d.ts.map +1 -1
- package/dist/lib/filesystems/filesystem.js +3 -1
- package/dist/lib/filesystems/node-filesystem-facade.d.ts +3 -3
- package/dist/lib/filesystems/node-filesystem-facade.d.ts.map +1 -1
- package/dist/lib/filesystems/node-filesystem-facade.js +41 -31
- package/dist/lib/iterators/async-iteration.js +39 -24
- package/dist/lib/iterators/text-iterators.js +46 -39
- package/dist/lib/node/buffer.browser.js +15 -3
- package/dist/lib/node/buffer.js +30 -16
- package/dist/lib/node/fs.browser.js +0 -1
- package/dist/lib/node/promisify.js +10 -4
- package/dist/lib/node/stream.browser.js +0 -1
- package/dist/lib/node/stream.js +4 -1
- package/dist/lib/option-utils/merge-loader-options.d.ts +1 -1
- package/dist/lib/option-utils/merge-loader-options.d.ts.map +1 -1
- package/dist/lib/option-utils/merge-loader-options.js +25 -17
- package/dist/lib/parser-utils/parse-json.js +9 -6
- package/dist/lib/path-utils/file-aliases.js +29 -13
- package/dist/lib/path-utils/get-cwd.js +6 -7
- package/dist/lib/path-utils/path.js +149 -105
- package/dist/lib/request-utils/request-scheduler.d.ts +2 -1
- package/dist/lib/request-utils/request-scheduler.d.ts.map +1 -1
- package/dist/lib/request-utils/request-scheduler.js +130 -102
- package/dist/lib/sources/data-source.js +48 -38
- package/dist/lib/sources/image-source.d.ts +3 -3
- package/dist/lib/sources/image-source.d.ts.map +1 -1
- package/dist/lib/sources/image-source.js +11 -3
- package/dist/lib/sources/image-tile-source.d.ts +3 -3
- package/dist/lib/sources/image-tile-source.d.ts.map +1 -1
- package/dist/lib/sources/image-tile-source.js +3 -1
- package/dist/lib/sources/tile-source-adapter.d.ts +2 -2
- package/dist/lib/sources/tile-source-adapter.d.ts.map +1 -1
- package/dist/lib/sources/tile-source-adapter.js +43 -36
- package/dist/lib/sources/tile-source.js +3 -1
- package/dist/lib/sources/utils/image-type.js +0 -1
- package/dist/lib/sources/utils/utils.js +31 -17
- package/dist/lib/sources/vector-tile-source.d.ts +2 -2
- package/dist/lib/sources/vector-tile-source.d.ts.map +1 -1
- package/dist/lib/sources/vector-tile-source.js +3 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.d.ts +1 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.d.ts.map +1 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.js +87 -87
- package/dist/lib/worker-loader-utils/encode-with-worker.d.ts +1 -1
- package/dist/lib/worker-loader-utils/encode-with-worker.d.ts.map +1 -1
- package/dist/lib/worker-loader-utils/encode-with-worker.js +13 -8
- package/dist/lib/worker-loader-utils/parse-with-worker.d.ts +1 -1
- package/dist/lib/worker-loader-utils/parse-with-worker.d.ts.map +1 -1
- package/dist/lib/worker-loader-utils/parse-with-worker.js +68 -55
- package/dist/loader-types.d.ts +2 -2
- package/dist/loader-types.d.ts.map +1 -1
- package/dist/loader-types.js +26 -10
- package/dist/service-types.d.ts +1 -1
- package/dist/service-types.d.ts.map +1 -1
- package/dist/service-types.js +3 -1
- package/dist/types.js +1 -1
- package/dist/workers/json-worker.js +0 -1
- package/dist/writer-types.js +3 -1
- package/package.json +6 -4
- package/src/lib/request-utils/request-scheduler.ts +17 -8
- package/dist/index.js.map +0 -1
- package/dist/json-loader.js.map +0 -1
- package/dist/lib/binary-utils/array-buffer-utils.js.map +0 -1
- package/dist/lib/binary-utils/dataview-copy-utils.js.map +0 -1
- package/dist/lib/binary-utils/get-first-characters.js.map +0 -1
- package/dist/lib/binary-utils/memory-conversion-utils.js.map +0 -1
- package/dist/lib/binary-utils/memory-copy-utils.js.map +0 -1
- package/dist/lib/env-utils/assert.js.map +0 -1
- package/dist/lib/env-utils/globals.js.map +0 -1
- package/dist/lib/file-provider/data-view-file.js.map +0 -1
- package/dist/lib/file-provider/file-handle-file.js.map +0 -1
- package/dist/lib/file-provider/file-provider.js.map +0 -1
- package/dist/lib/files/blob-file.js.map +0 -1
- package/dist/lib/files/file.js.map +0 -1
- package/dist/lib/files/http-file.js.map +0 -1
- package/dist/lib/files/node-file-facade.js.map +0 -1
- package/dist/lib/files/sources.js.map +0 -1
- package/dist/lib/filesystems/filesystem.js.map +0 -1
- package/dist/lib/filesystems/node-filesystem-facade.js.map +0 -1
- package/dist/lib/iterators/async-iteration.js.map +0 -1
- package/dist/lib/iterators/text-iterators.js.map +0 -1
- package/dist/lib/node/buffer.browser.js.map +0 -1
- package/dist/lib/node/buffer.js.map +0 -1
- package/dist/lib/node/fs.browser.js.map +0 -1
- package/dist/lib/node/promisify.js.map +0 -1
- package/dist/lib/node/stream.browser.js.map +0 -1
- package/dist/lib/node/stream.js.map +0 -1
- package/dist/lib/option-utils/merge-loader-options.js.map +0 -1
- package/dist/lib/parser-utils/parse-json.js.map +0 -1
- package/dist/lib/path-utils/file-aliases.js.map +0 -1
- package/dist/lib/path-utils/get-cwd.js.map +0 -1
- package/dist/lib/path-utils/path.js.map +0 -1
- package/dist/lib/request-utils/request-scheduler.js.map +0 -1
- package/dist/lib/sources/data-source.js.map +0 -1
- package/dist/lib/sources/image-source.js.map +0 -1
- package/dist/lib/sources/image-tile-source.js.map +0 -1
- package/dist/lib/sources/tile-source-adapter.js.map +0 -1
- package/dist/lib/sources/tile-source.js.map +0 -1
- package/dist/lib/sources/utils/image-type.js.map +0 -1
- package/dist/lib/sources/utils/utils.js.map +0 -1
- package/dist/lib/sources/vector-tile-source.js.map +0 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.js.map +0 -1
- package/dist/lib/worker-loader-utils/encode-with-worker.js.map +0 -1
- package/dist/lib/worker-loader-utils/parse-with-worker.js.map +0 -1
- package/dist/loader-types.js.map +0 -1
- package/dist/service-types.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/workers/json-worker.js.map +0 -1
- package/dist/writer-types.js.map +0 -1
|
@@ -1,61 +1,99 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
import { NodeFileFacade as NodeFile } from "../files/node-file-facade.js";
|
|
5
|
+
/**
|
|
6
|
+
* Provides file data using node fs library
|
|
7
|
+
* @deprecated - will be replaced with ReadableFile
|
|
8
|
+
*/
|
|
2
9
|
export class FileHandleFile {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
10
|
+
/** Create a new FileHandleFile */
|
|
11
|
+
constructor(path, append = false) {
|
|
12
|
+
this.file = new NodeFile(path, append ? 'a+' : 'r');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Truncates the file descriptor.
|
|
16
|
+
* @param length desired file lenght
|
|
17
|
+
*/
|
|
18
|
+
async truncate(length) {
|
|
19
|
+
await this.file.truncate(length);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Append data to a file.
|
|
23
|
+
* @param buffer data to append
|
|
24
|
+
*/
|
|
25
|
+
async append(buffer) {
|
|
26
|
+
await this.file.append(buffer);
|
|
27
|
+
}
|
|
28
|
+
/** Close file */
|
|
29
|
+
async destroy() {
|
|
30
|
+
await this.file.close();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Gets an unsigned 8-bit integer at the specified byte offset from the start of the file.
|
|
34
|
+
* @param offset The offset, in bytes, from the start of the file where to read the data.
|
|
35
|
+
*/
|
|
36
|
+
async getUint8(offset) {
|
|
37
|
+
const arrayBuffer = await this.file.read(offset, 1);
|
|
38
|
+
const val = new Uint8Array(arrayBuffer).at(0);
|
|
39
|
+
if (val === undefined) {
|
|
40
|
+
throw new Error('something went wrong');
|
|
41
|
+
}
|
|
42
|
+
return val;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets an unsigned 16-bit integer at the specified byte offset from the start of the file.
|
|
46
|
+
* @param offset The offset, in bytes, from the start of the file where to read the data.
|
|
47
|
+
*/
|
|
48
|
+
async getUint16(offset) {
|
|
49
|
+
const arrayBuffer = await this.file.read(offset, 2);
|
|
50
|
+
const val = new Uint16Array(arrayBuffer).at(0);
|
|
51
|
+
if (val === undefined) {
|
|
52
|
+
throw new Error('something went wrong');
|
|
53
|
+
}
|
|
54
|
+
return val;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets an unsigned 32-bit integer at the specified byte offset from the start of the file.
|
|
58
|
+
* @param offset The offset, in bytes, from the start of the file where to read the data.
|
|
59
|
+
*/
|
|
60
|
+
async getUint32(offset) {
|
|
61
|
+
const arrayBuffer = await this.file.read(offset, 4);
|
|
62
|
+
const val = new Uint32Array(arrayBuffer).at(0);
|
|
63
|
+
if (val === undefined) {
|
|
64
|
+
throw new Error('something went wrong');
|
|
65
|
+
}
|
|
66
|
+
return val;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets an unsigned 32-bit integer at the specified byte offset from the start of the file.
|
|
70
|
+
* @param offset The offset, in bytes, from the start of the file where to read the data.
|
|
71
|
+
*/
|
|
72
|
+
async getBigUint64(offset) {
|
|
73
|
+
const arrayBuffer = await this.file.read(offset, 8);
|
|
74
|
+
const val = new BigInt64Array(arrayBuffer).at(0);
|
|
75
|
+
if (val === undefined) {
|
|
76
|
+
throw new Error('something went wrong');
|
|
77
|
+
}
|
|
78
|
+
return val;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* returns an ArrayBuffer whose contents are a copy of this file bytes from startOffset, inclusive, up to endOffset, exclusive.
|
|
82
|
+
* @param startOffset The offset, in byte, from the start of the file where to start reading the data.
|
|
83
|
+
* @param endOffset The offset, in bytes, from the start of the file where to end reading the data.
|
|
84
|
+
*/
|
|
85
|
+
async slice(startOffset, endOffset) {
|
|
86
|
+
const bigLength = endOffset - startOffset;
|
|
87
|
+
if (bigLength > Number.MAX_SAFE_INTEGER) {
|
|
88
|
+
throw new Error('too big slice');
|
|
89
|
+
}
|
|
90
|
+
const length = Number(bigLength);
|
|
91
|
+
return await this.file.read(startOffset, length);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* the length (in bytes) of the data.
|
|
95
|
+
*/
|
|
96
|
+
get length() {
|
|
97
|
+
return this.file.bigsize;
|
|
98
|
+
}
|
|
60
99
|
}
|
|
61
|
-
//# sourceMappingURL=file-handle-file.js.map
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Check is the object has FileProvider members
|
|
3
|
+
* @param fileProvider - tested object
|
|
4
|
+
*/
|
|
5
|
+
export const isFileProvider = (fileProvider) => {
|
|
6
|
+
return (fileProvider?.getUint8 &&
|
|
7
|
+
fileProvider?.slice &&
|
|
8
|
+
fileProvider?.length);
|
|
3
9
|
};
|
|
4
|
-
//# sourceMappingURL=file-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-file.d.ts","sourceRoot":"","sources":["../../../src/lib/files/blob-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,
|
|
1
|
+
{"version":3,"file":"blob-file.d.ts","sourceRoot":"","sources":["../../../src/lib/files/blob-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,kBAAe;AAEpC;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW;IAOrC,KAAK;IAEL,IAAI;;;;;IAQJ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAIhE"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
/**
|
|
5
|
+
* BlobFile provides a "file like interface" to the data in a Blob or File object
|
|
6
|
+
*/
|
|
1
7
|
export class BlobFile {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
async read(start, length) {
|
|
21
|
-
const arrayBuffer = await this.handle.slice(start, start + length).arrayBuffer();
|
|
22
|
-
return arrayBuffer;
|
|
23
|
-
}
|
|
8
|
+
constructor(blob) {
|
|
9
|
+
this.handle = blob instanceof ArrayBuffer ? new Blob([blob]) : blob;
|
|
10
|
+
this.size = blob instanceof ArrayBuffer ? blob.byteLength : blob.size;
|
|
11
|
+
this.bigsize = BigInt(this.size);
|
|
12
|
+
this.url = blob instanceof File ? blob.name : '';
|
|
13
|
+
}
|
|
14
|
+
async close() { }
|
|
15
|
+
async stat() {
|
|
16
|
+
return {
|
|
17
|
+
size: this.handle.size,
|
|
18
|
+
bigsize: BigInt(this.handle.size),
|
|
19
|
+
isDirectory: false
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async read(start, length) {
|
|
23
|
+
const arrayBuffer = await this.handle.slice(start, start + length).arrayBuffer();
|
|
24
|
+
return arrayBuffer;
|
|
25
|
+
}
|
|
24
26
|
}
|
|
25
|
-
//# sourceMappingURL=blob-file.js.map
|
package/dist/lib/files/file.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-file.d.ts","sourceRoot":"","sources":["../../../src/lib/files/http-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAE,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"http-file.d.ts","sourceRoot":"","sources":["../../../src/lib/files/http-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAE,IAAI,EAAC,kBAAe;AAE1C,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAK;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAM;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,GAAG,EAAE,MAAM;IAKjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMzE;;;;;;;OAOG;IAEG,UAAU,CACd,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC;CAsErB"}
|
|
@@ -1,79 +1,99 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
export class HttpFile {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.handle = url;
|
|
8
|
-
this.url = url;
|
|
9
|
-
}
|
|
10
|
-
async close() {}
|
|
11
|
-
async stat() {
|
|
12
|
-
const response = await fetch(this.handle, {
|
|
13
|
-
method: 'HEAD'
|
|
14
|
-
});
|
|
15
|
-
if (!response.ok) {
|
|
16
|
-
throw new Error(`Failed to fetch HEAD ${this.handle}`);
|
|
5
|
+
constructor(url) {
|
|
6
|
+
this.size = 0;
|
|
7
|
+
this.bigsize = 0n;
|
|
8
|
+
this.handle = url;
|
|
9
|
+
this.url = url;
|
|
17
10
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
controller = new AbortController();
|
|
36
|
-
signal = controller.signal;
|
|
11
|
+
async close() { }
|
|
12
|
+
async stat() {
|
|
13
|
+
const response = await fetch(this.handle, { method: 'HEAD' });
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`Failed to fetch HEAD ${this.handle}`);
|
|
16
|
+
}
|
|
17
|
+
const size = parseInt(response.headers.get('Content-Length') || '0');
|
|
18
|
+
return {
|
|
19
|
+
size,
|
|
20
|
+
bigsize: BigInt(size),
|
|
21
|
+
isDirectory: false
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async read(offset, length) {
|
|
25
|
+
const response = await this.fetchRange(offset, length);
|
|
26
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
27
|
+
return arrayBuffer;
|
|
37
28
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @param offset
|
|
32
|
+
* @param length
|
|
33
|
+
* @param signal
|
|
34
|
+
* @returns
|
|
35
|
+
* @see https://github.com/protomaps/PMTiles
|
|
36
|
+
*/
|
|
37
|
+
// eslint-disable-next-line complexity
|
|
38
|
+
async fetchRange(offset, length, signal) {
|
|
39
|
+
const nOffset = Number(offset);
|
|
40
|
+
const nLength = Number(length);
|
|
41
|
+
let controller;
|
|
42
|
+
if (!signal) {
|
|
43
|
+
// ToDO why is it so important to abort in case 200?
|
|
44
|
+
// TODO check this works or assert 206
|
|
45
|
+
controller = new AbortController();
|
|
46
|
+
signal = controller.signal;
|
|
55
47
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const contentRange = response.headers.get('Content-Range');
|
|
59
|
-
if (!contentRange || !contentRange.startsWith('bytes *')) {
|
|
60
|
-
throw Error('Missing content-length on 416 response');
|
|
61
|
-
}
|
|
62
|
-
const actualLength = Number(contentRange.substr(8));
|
|
63
|
-
response = await fetch(this.url, {
|
|
48
|
+
const url = this.handle;
|
|
49
|
+
let response = await fetch(url, {
|
|
64
50
|
signal,
|
|
65
|
-
headers: {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
51
|
+
headers: { Range: `bytes=${nOffset}-${nOffset + nLength - 1}` }
|
|
52
|
+
});
|
|
53
|
+
switch (response.status) {
|
|
54
|
+
case 206: // Partial Content success
|
|
55
|
+
// This is the expected success code for a range request
|
|
56
|
+
break;
|
|
57
|
+
case 200:
|
|
58
|
+
// some well-behaved backends, e.g. DigitalOcean CDN, respond with 200 instead of 206
|
|
59
|
+
// but we also need to detect no support for Byte Serving which is returning the whole file
|
|
60
|
+
const contentLength = response.headers.get('Content-Length');
|
|
61
|
+
if (!contentLength || Number(contentLength) > length) {
|
|
62
|
+
if (controller) {
|
|
63
|
+
controller.abort();
|
|
64
|
+
}
|
|
65
|
+
throw Error('content-length header missing or exceeding request. Server must support HTTP Byte Serving.');
|
|
66
|
+
}
|
|
67
|
+
// @eslint-disable-next-line no-fallthrough
|
|
68
|
+
case 416: // "Range Not Satisfiable"
|
|
69
|
+
// some HTTP servers don't accept ranges beyond the end of the resource.
|
|
70
|
+
// Retry with the exact length
|
|
71
|
+
// TODO: can return 416 with offset > 0 if content changed, which will have a blank etag.
|
|
72
|
+
// See https://github.com/protomaps/PMTiles/issues/90
|
|
73
|
+
if (offset === 0) {
|
|
74
|
+
const contentRange = response.headers.get('Content-Range');
|
|
75
|
+
if (!contentRange || !contentRange.startsWith('bytes *')) {
|
|
76
|
+
throw Error('Missing content-length on 416 response');
|
|
77
|
+
}
|
|
78
|
+
const actualLength = Number(contentRange.substr(8));
|
|
79
|
+
response = await fetch(this.url, {
|
|
80
|
+
signal,
|
|
81
|
+
headers: { Range: `bytes=0-${actualLength - 1}` }
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
if (response.status >= 300) {
|
|
87
|
+
throw Error(`Bad response code: ${response.status}`);
|
|
88
|
+
}
|
|
74
89
|
}
|
|
90
|
+
return response;
|
|
91
|
+
// const data = await response.arrayBuffer();
|
|
92
|
+
// return {
|
|
93
|
+
// data,
|
|
94
|
+
// etag: response.headers.get('ETag') || undefined,
|
|
95
|
+
// cacheControl: response.headers.get('Cache-Control') || undefined,
|
|
96
|
+
// expires: response.headers.get('Expires') || undefined
|
|
97
|
+
// };
|
|
75
98
|
}
|
|
76
|
-
return response;
|
|
77
|
-
}
|
|
78
99
|
}
|
|
79
|
-
//# sourceMappingURL=http-file.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReadableFile, WritableFile, Stat } from
|
|
1
|
+
import { ReadableFile, WritableFile, Stat } from "./file.js";
|
|
2
2
|
/** This class is a facade that gets replaced with an actual NodeFile instance */
|
|
3
3
|
export declare class NodeFileFacade implements ReadableFile, WritableFile {
|
|
4
4
|
handle: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-file-facade.d.ts","sourceRoot":"","sources":["../../../src/lib/files/node-file-facade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"node-file-facade.d.ts","sourceRoot":"","sources":["../../../src/lib/files/node-file-facade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAC,kBAAe;AAIxD,kFAAkF;AAClF,qBAAa,cAAe,YAAW,YAAY,EAAE,YAAY;IAC/D,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAK;IACjB,OAAO,EAAE,MAAM,CAAM;IACrB,GAAG,EAAE,MAAM,CAAM;gBAEL,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM;IAUvE,gBAAgB;IACV,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAGhF,kEAAkE;IAC5D,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAG1G,iCAAiC;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,iEAAiE;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,yDAAyD;IACnD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAG7C,qBAAqB;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
|
|
@@ -1,35 +1,43 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
import { isBrowser } from "../env-utils/globals.js";
|
|
2
5
|
const NOT_IMPLEMENTED = new Error('Not implemented');
|
|
6
|
+
/** This class is a facade that gets replaced with an actual NodeFile instance */
|
|
3
7
|
export class NodeFileFacade {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
constructor(url, flags, mode) {
|
|
9
|
+
this.size = 0;
|
|
10
|
+
this.bigsize = 0n;
|
|
11
|
+
this.url = '';
|
|
12
|
+
// Return the actual implementation instance
|
|
13
|
+
if (globalThis.loaders?.NodeFile) {
|
|
14
|
+
return new globalThis.loaders.NodeFile(url, flags, mode);
|
|
15
|
+
}
|
|
16
|
+
if (isBrowser) {
|
|
17
|
+
throw new Error('Can\'t instantiate NodeFile in browser.');
|
|
18
|
+
}
|
|
19
|
+
throw new Error('Can\'t instantiate NodeFile. Make sure to import @loaders.gl/polyfills first.');
|
|
12
20
|
}
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
/** Read data */
|
|
22
|
+
async read(start, end) {
|
|
23
|
+
throw NOT_IMPLEMENTED;
|
|
15
24
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
/** Write to file. The number of bytes written will be returned */
|
|
26
|
+
async write(arrayBuffer, offset, length) {
|
|
27
|
+
throw NOT_IMPLEMENTED;
|
|
28
|
+
}
|
|
29
|
+
/** Get information about file */
|
|
30
|
+
async stat() {
|
|
31
|
+
throw NOT_IMPLEMENTED;
|
|
32
|
+
}
|
|
33
|
+
/** Truncates the file descriptor. Only available on NodeFile. */
|
|
34
|
+
async truncate(length) {
|
|
35
|
+
throw NOT_IMPLEMENTED;
|
|
36
|
+
}
|
|
37
|
+
/** Append data to a file. Only available on NodeFile. */
|
|
38
|
+
async append(data) {
|
|
39
|
+
throw NOT_IMPLEMENTED;
|
|
40
|
+
}
|
|
41
|
+
/** Close the file */
|
|
42
|
+
async close() { }
|
|
34
43
|
}
|
|
35
|
-
//# sourceMappingURL=node-file-facade.js.map
|