@loaders.gl/loader-utils 4.0.0-beta.2 → 4.0.0-beta.3
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 +1252 -0
- package/dist/index.d.ts +7 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/{esm/json-loader.js → json-loader.js} +1 -1
- package/dist/json-loader.js.map +1 -0
- package/dist/lib/binary-utils/array-buffer-utils.js.map +1 -0
- package/dist/{esm/lib → lib}/binary-utils/dataview-copy-utils.js +1 -1
- package/dist/lib/binary-utils/dataview-copy-utils.js.map +1 -0
- package/dist/lib/binary-utils/get-first-characters.js.map +1 -0
- package/dist/{esm/lib → lib}/binary-utils/memory-conversion-utils.js +1 -1
- package/dist/lib/binary-utils/memory-conversion-utils.js.map +1 -0
- package/dist/{esm/lib → lib}/binary-utils/memory-copy-utils.js +1 -1
- package/dist/lib/binary-utils/memory-copy-utils.js.map +1 -0
- package/dist/lib/env-utils/assert.js.map +1 -0
- package/dist/lib/env-utils/globals.js.map +1 -0
- package/dist/lib/file-provider/data-view-file.d.ts +4 -1
- package/dist/lib/file-provider/data-view-file.d.ts.map +1 -1
- package/dist/{esm/lib → lib}/file-provider/data-view-file.js +1 -2
- package/dist/lib/file-provider/data-view-file.js.map +1 -0
- package/dist/lib/file-provider/file-handle-file.d.ts +12 -19
- package/dist/lib/file-provider/file-handle-file.d.ts.map +1 -1
- package/dist/lib/file-provider/file-handle-file.js +56 -0
- package/dist/lib/file-provider/file-handle-file.js.map +1 -0
- package/dist/lib/file-provider/file-provider.d.ts +1 -0
- package/dist/lib/file-provider/file-provider.d.ts.map +1 -1
- package/dist/lib/file-provider/file-provider.js.map +1 -0
- package/dist/lib/files/blob-file.d.ts +16 -0
- package/dist/lib/files/blob-file.d.ts.map +1 -0
- package/dist/lib/files/blob-file.js +25 -0
- package/dist/lib/files/blob-file.js.map +1 -0
- package/dist/lib/files/file.d.ts +33 -0
- package/dist/lib/files/file.d.ts.map +1 -0
- package/dist/lib/files/file.js +2 -0
- package/dist/lib/files/file.js.map +1 -0
- package/dist/lib/files/http-file.d.ts +21 -0
- package/dist/lib/files/http-file.d.ts.map +1 -0
- package/dist/lib/files/http-file.js +79 -0
- package/dist/lib/files/http-file.js.map +1 -0
- package/dist/lib/files/node-file-facade.d.ts +18 -0
- package/dist/lib/files/node-file-facade.d.ts.map +1 -0
- package/dist/lib/files/node-file-facade.js +29 -0
- package/dist/lib/files/node-file-facade.js.map +1 -0
- package/dist/lib/files/sources.d.ts +1 -0
- package/dist/lib/files/sources.d.ts.map +1 -0
- package/dist/lib/files/sources.js +2 -0
- package/dist/lib/files/sources.js.map +1 -0
- package/dist/lib/filesystems/filesystem.d.ts +18 -65
- package/dist/lib/filesystems/filesystem.d.ts.map +1 -1
- package/dist/lib/filesystems/filesystem.js.map +1 -0
- package/dist/lib/filesystems/node-filesystem-facade.d.ts +23 -0
- package/dist/lib/filesystems/node-filesystem-facade.d.ts.map +1 -0
- package/dist/lib/filesystems/node-filesystem-facade.js +37 -0
- package/dist/lib/filesystems/node-filesystem-facade.js.map +1 -0
- package/dist/{esm/lib → lib}/iterators/async-iteration.js +1 -1
- package/dist/lib/iterators/async-iteration.js.map +1 -0
- package/dist/lib/iterators/text-iterators.js.map +1 -0
- package/dist/lib/node/buffer.browser.d.ts +1 -1
- package/dist/lib/node/buffer.browser.d.ts.map +1 -1
- package/dist/lib/node/buffer.browser.js.map +1 -0
- package/dist/lib/node/buffer.d.ts +1 -1
- package/dist/lib/node/buffer.d.ts.map +1 -1
- package/dist/lib/node/buffer.js.map +1 -0
- package/dist/lib/node/fs.browser.js.map +1 -0
- package/dist/lib/node/promisify.js.map +1 -0
- package/dist/lib/node/stream.browser.js.map +1 -0
- package/dist/lib/node/stream.js.map +1 -0
- package/dist/lib/option-utils/merge-loader-options.js.map +1 -0
- package/dist/lib/parser-utils/parse-json.js +9 -0
- package/dist/lib/parser-utils/parse-json.js.map +1 -0
- package/dist/{esm/lib → lib}/path-utils/file-aliases.js +1 -1
- package/dist/lib/path-utils/file-aliases.js.map +1 -0
- package/dist/lib/path-utils/get-cwd.js.map +1 -0
- package/dist/{esm/lib → lib}/path-utils/path.js +6 -6
- package/dist/lib/path-utils/path.js.map +1 -0
- package/dist/{esm/lib → lib}/request-utils/request-scheduler.js +6 -7
- package/dist/lib/request-utils/request-scheduler.js.map +1 -0
- package/dist/{esm/lib → lib}/sources/data-source.js +4 -5
- package/dist/lib/sources/data-source.js.map +1 -0
- package/dist/lib/sources/image-source.js +5 -0
- package/dist/lib/sources/image-source.js.map +1 -0
- package/dist/lib/sources/image-tile-source.js.map +1 -0
- package/dist/lib/sources/tile-source.js.map +1 -0
- package/dist/lib/sources/utils/image-type.js.map +1 -0
- package/dist/lib/sources/utils/utils.js.map +1 -0
- package/dist/lib/sources/vector-tile-source.js.map +1 -0
- package/dist/{esm/lib → lib}/worker-loader-utils/create-loader-worker.js +1 -1
- package/dist/lib/worker-loader-utils/create-loader-worker.js.map +1 -0
- package/dist/{esm/lib → lib}/worker-loader-utils/encode-with-worker.js +1 -1
- package/dist/lib/worker-loader-utils/encode-with-worker.js.map +1 -0
- package/dist/{esm/lib → lib}/worker-loader-utils/parse-with-worker.js +1 -1
- package/dist/lib/worker-loader-utils/parse-with-worker.js.map +1 -0
- package/dist/loader-types.js.map +1 -0
- package/dist/service-types.js.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -0
- package/dist/workers/json-worker.js +4 -0
- package/dist/workers/json-worker.js.map +1 -0
- package/dist/writer-types.js.map +1 -0
- package/package.json +13 -5
- package/src/index.ts +10 -15
- package/src/lib/file-provider/data-view-file.ts +4 -2
- package/src/lib/file-provider/file-handle-file.ts +28 -44
- package/src/lib/file-provider/file-provider.ts +1 -0
- package/src/lib/files/blob-file.ts +32 -0
- package/src/lib/files/file.ts +37 -0
- package/src/lib/files/http-file.ts +120 -0
- package/src/lib/files/node-file-facade.ts +39 -0
- package/src/lib/files/sources.ts +150 -0
- package/src/lib/filesystems/filesystem.ts +19 -68
- package/src/lib/filesystems/node-filesystem-facade.ts +63 -0
- package/src/lib/node/buffer.browser.ts +1 -1
- package/src/lib/node/buffer.ts +1 -1
- package/src/types.ts +0 -4
- package/dist/es5/index.js +0 -389
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/json-loader.js +0 -44
- package/dist/es5/json-loader.js.map +0 -1
- package/dist/es5/lib/binary-utils/array-buffer-utils.js +0 -80
- package/dist/es5/lib/binary-utils/array-buffer-utils.js.map +0 -1
- package/dist/es5/lib/binary-utils/dataview-copy-utils.js +0 -58
- package/dist/es5/lib/binary-utils/dataview-copy-utils.js.map +0 -1
- package/dist/es5/lib/binary-utils/get-first-characters.js +0 -31
- package/dist/es5/lib/binary-utils/get-first-characters.js.map +0 -1
- package/dist/es5/lib/binary-utils/memory-conversion-utils.js +0 -44
- package/dist/es5/lib/binary-utils/memory-conversion-utils.js.map +0 -1
- package/dist/es5/lib/binary-utils/memory-copy-utils.js +0 -34
- package/dist/es5/lib/binary-utils/memory-copy-utils.js.map +0 -1
- package/dist/es5/lib/env-utils/assert.js +0 -12
- package/dist/es5/lib/env-utils/assert.js.map +0 -1
- package/dist/es5/lib/env-utils/globals.js +0 -30
- package/dist/es5/lib/env-utils/globals.js.map +0 -1
- package/dist/es5/lib/file-provider/data-view-file.js +0 -146
- package/dist/es5/lib/file-provider/data-view-file.js.map +0 -1
- package/dist/es5/lib/file-provider/file-handle-file.js +0 -236
- package/dist/es5/lib/file-provider/file-handle-file.js.map +0 -1
- package/dist/es5/lib/file-provider/file-handle.js +0 -98
- package/dist/es5/lib/file-provider/file-handle.js.map +0 -1
- package/dist/es5/lib/file-provider/file-provider.js +0 -11
- package/dist/es5/lib/file-provider/file-provider.js.map +0 -1
- package/dist/es5/lib/filesystems/filesystem.js +0 -2
- package/dist/es5/lib/filesystems/filesystem.js.map +0 -1
- package/dist/es5/lib/filesystems/node-filesystem.js +0 -176
- package/dist/es5/lib/filesystems/node-filesystem.js.map +0 -1
- package/dist/es5/lib/filesystems/readable-file.js +0 -91
- package/dist/es5/lib/filesystems/readable-file.js.map +0 -1
- package/dist/es5/lib/filesystems/writable-file.js +0 -82
- package/dist/es5/lib/filesystems/writable-file.js.map +0 -1
- package/dist/es5/lib/iterators/async-iteration.js +0 -190
- package/dist/es5/lib/iterators/async-iteration.js.map +0 -1
- package/dist/es5/lib/iterators/text-iterators.js +0 -305
- package/dist/es5/lib/iterators/text-iterators.js.map +0 -1
- package/dist/es5/lib/node/buffer.browser.js +0 -14
- package/dist/es5/lib/node/buffer.browser.js.map +0 -1
- package/dist/es5/lib/node/buffer.js +0 -27
- package/dist/es5/lib/node/buffer.js.map +0 -1
- package/dist/es5/lib/node/fs.browser.js +0 -9
- package/dist/es5/lib/node/fs.browser.js.map +0 -1
- package/dist/es5/lib/node/fs.js +0 -82
- package/dist/es5/lib/node/fs.js.map +0 -1
- package/dist/es5/lib/node/promisify.js +0 -36
- package/dist/es5/lib/node/promisify.js.map +0 -1
- package/dist/es5/lib/node/stream.browser.js +0 -9
- package/dist/es5/lib/node/stream.browser.js.map +0 -1
- package/dist/es5/lib/node/stream.js +0 -15
- package/dist/es5/lib/node/stream.js.map +0 -1
- package/dist/es5/lib/option-utils/merge-loader-options.js +0 -30
- package/dist/es5/lib/option-utils/merge-loader-options.js.map +0 -1
- package/dist/es5/lib/parser-utils/parse-json.js +0 -15
- package/dist/es5/lib/parser-utils/parse-json.js.map +0 -1
- package/dist/es5/lib/path-utils/file-aliases.js +0 -33
- package/dist/es5/lib/path-utils/file-aliases.js.map +0 -1
- package/dist/es5/lib/path-utils/get-cwd.js +0 -15
- package/dist/es5/lib/path-utils/get-cwd.js.map +0 -1
- package/dist/es5/lib/path-utils/path.js +0 -136
- package/dist/es5/lib/path-utils/path.js.map +0 -1
- package/dist/es5/lib/request-utils/request-scheduler.js +0 -150
- package/dist/es5/lib/request-utils/request-scheduler.js.map +0 -1
- package/dist/es5/lib/sources/data-source.js +0 -67
- package/dist/es5/lib/sources/data-source.js.map +0 -1
- package/dist/es5/lib/sources/image-source.js +0 -31
- package/dist/es5/lib/sources/image-source.js.map +0 -1
- package/dist/es5/lib/sources/image-tile-source.js +0 -2
- package/dist/es5/lib/sources/image-tile-source.js.map +0 -1
- package/dist/es5/lib/sources/tile-source.js +0 -2
- package/dist/es5/lib/sources/tile-source.js.map +0 -1
- package/dist/es5/lib/sources/utils/image-type.js +0 -2
- package/dist/es5/lib/sources/utils/image-type.js.map +0 -1
- package/dist/es5/lib/sources/utils/utils.js +0 -36
- package/dist/es5/lib/sources/utils/utils.js.map +0 -1
- package/dist/es5/lib/sources/vector-tile-source.js +0 -2
- package/dist/es5/lib/sources/vector-tile-source.js.map +0 -1
- package/dist/es5/lib/worker-loader-utils/create-loader-worker.js +0 -142
- package/dist/es5/lib/worker-loader-utils/create-loader-worker.js.map +0 -1
- package/dist/es5/lib/worker-loader-utils/encode-with-worker.js +0 -18
- package/dist/es5/lib/worker-loader-utils/encode-with-worker.js.map +0 -1
- package/dist/es5/lib/worker-loader-utils/parse-with-worker.js +0 -115
- package/dist/es5/lib/worker-loader-utils/parse-with-worker.js.map +0 -1
- package/dist/es5/loader-types.js +0 -58
- package/dist/es5/loader-types.js.map +0 -1
- package/dist/es5/service-types.js +0 -2
- package/dist/es5/service-types.js.map +0 -1
- package/dist/es5/types.js +0 -2
- package/dist/es5/types.js.map +0 -1
- package/dist/es5/workers/json-worker.js +0 -6
- package/dist/es5/workers/json-worker.js.map +0 -1
- package/dist/es5/writer-types.js +0 -2
- package/dist/es5/writer-types.js.map +0 -1
- package/dist/esm/index.js +0 -36
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/json-loader.js.map +0 -1
- package/dist/esm/lib/binary-utils/array-buffer-utils.js.map +0 -1
- package/dist/esm/lib/binary-utils/dataview-copy-utils.js.map +0 -1
- package/dist/esm/lib/binary-utils/get-first-characters.js.map +0 -1
- package/dist/esm/lib/binary-utils/memory-conversion-utils.js.map +0 -1
- package/dist/esm/lib/binary-utils/memory-copy-utils.js.map +0 -1
- package/dist/esm/lib/env-utils/assert.js.map +0 -1
- package/dist/esm/lib/env-utils/globals.js.map +0 -1
- package/dist/esm/lib/file-provider/data-view-file.js.map +0 -1
- package/dist/esm/lib/file-provider/file-handle-file.js +0 -59
- package/dist/esm/lib/file-provider/file-handle-file.js.map +0 -1
- package/dist/esm/lib/file-provider/file-handle.js +0 -33
- package/dist/esm/lib/file-provider/file-handle.js.map +0 -1
- package/dist/esm/lib/file-provider/file-provider.js.map +0 -1
- package/dist/esm/lib/filesystems/filesystem.js.map +0 -1
- package/dist/esm/lib/filesystems/node-filesystem.js +0 -46
- package/dist/esm/lib/filesystems/node-filesystem.js.map +0 -1
- package/dist/esm/lib/filesystems/readable-file.js +0 -20
- package/dist/esm/lib/filesystems/readable-file.js.map +0 -1
- package/dist/esm/lib/filesystems/writable-file.js +0 -20
- package/dist/esm/lib/filesystems/writable-file.js.map +0 -1
- package/dist/esm/lib/iterators/async-iteration.js.map +0 -1
- package/dist/esm/lib/iterators/text-iterators.js.map +0 -1
- package/dist/esm/lib/node/buffer.browser.js.map +0 -1
- package/dist/esm/lib/node/buffer.js.map +0 -1
- package/dist/esm/lib/node/fs.browser.js.map +0 -1
- package/dist/esm/lib/node/fs.js +0 -29
- package/dist/esm/lib/node/fs.js.map +0 -1
- package/dist/esm/lib/node/promisify.js.map +0 -1
- package/dist/esm/lib/node/stream.browser.js.map +0 -1
- package/dist/esm/lib/node/stream.js.map +0 -1
- package/dist/esm/lib/option-utils/merge-loader-options.js.map +0 -1
- package/dist/esm/lib/parser-utils/parse-json.js +0 -9
- package/dist/esm/lib/parser-utils/parse-json.js.map +0 -1
- package/dist/esm/lib/path-utils/file-aliases.js.map +0 -1
- package/dist/esm/lib/path-utils/get-cwd.js.map +0 -1
- package/dist/esm/lib/path-utils/path.js.map +0 -1
- package/dist/esm/lib/request-utils/request-scheduler.js.map +0 -1
- package/dist/esm/lib/sources/data-source.js.map +0 -1
- package/dist/esm/lib/sources/image-source.js +0 -6
- package/dist/esm/lib/sources/image-source.js.map +0 -1
- package/dist/esm/lib/sources/image-tile-source.js.map +0 -1
- package/dist/esm/lib/sources/tile-source.js.map +0 -1
- package/dist/esm/lib/sources/utils/image-type.js.map +0 -1
- package/dist/esm/lib/sources/utils/utils.js.map +0 -1
- package/dist/esm/lib/sources/vector-tile-source.js.map +0 -1
- package/dist/esm/lib/worker-loader-utils/create-loader-worker.js.map +0 -1
- package/dist/esm/lib/worker-loader-utils/encode-with-worker.js.map +0 -1
- package/dist/esm/lib/worker-loader-utils/parse-with-worker.js.map +0 -1
- package/dist/esm/loader-types.js.map +0 -1
- package/dist/esm/service-types.js.map +0 -1
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/workers/json-worker.js +0 -4
- package/dist/esm/workers/json-worker.js.map +0 -1
- package/dist/esm/writer-types.js.map +0 -1
- package/dist/lib/file-provider/file-handle.d.ts +0 -40
- package/dist/lib/file-provider/file-handle.d.ts.map +0 -1
- package/dist/lib/filesystems/node-filesystem.d.ts +0 -39
- package/dist/lib/filesystems/node-filesystem.d.ts.map +0 -1
- package/dist/lib/filesystems/readable-file.d.ts +0 -10
- package/dist/lib/filesystems/readable-file.d.ts.map +0 -1
- package/dist/lib/filesystems/writable-file.d.ts +0 -18
- package/dist/lib/filesystems/writable-file.d.ts.map +0 -1
- package/dist/lib/node/fs.d.ts +0 -30
- package/dist/lib/node/fs.d.ts.map +0 -1
- package/src/lib/file-provider/file-handle.ts +0 -79
- package/src/lib/filesystems/node-filesystem.ts +0 -67
- package/src/lib/filesystems/readable-file.ts +0 -30
- package/src/lib/filesystems/writable-file.ts +0 -44
- package/src/lib/node/fs.ts +0 -49
- /package/dist/{esm/lib → lib}/binary-utils/array-buffer-utils.js +0 -0
- /package/dist/{esm/lib → lib}/binary-utils/get-first-characters.js +0 -0
- /package/dist/{esm/lib → lib}/env-utils/assert.js +0 -0
- /package/dist/{esm/lib → lib}/env-utils/globals.js +0 -0
- /package/dist/{esm/lib → lib}/file-provider/file-provider.js +0 -0
- /package/dist/{esm/lib → lib}/filesystems/filesystem.js +0 -0
- /package/dist/{esm/lib → lib}/iterators/text-iterators.js +0 -0
- /package/dist/{esm/lib → lib}/node/buffer.browser.js +0 -0
- /package/dist/{esm/lib → lib}/node/buffer.js +0 -0
- /package/dist/{esm/lib → lib}/node/fs.browser.js +0 -0
- /package/dist/{esm/lib → lib}/node/promisify.js +0 -0
- /package/dist/{esm/lib → lib}/node/stream.browser.js +0 -0
- /package/dist/{esm/lib → lib}/node/stream.js +0 -0
- /package/dist/{esm/lib → lib}/option-utils/merge-loader-options.js +0 -0
- /package/dist/{esm/lib → lib}/path-utils/get-cwd.js +0 -0
- /package/dist/{esm/lib → lib}/sources/image-tile-source.js +0 -0
- /package/dist/{esm/lib → lib}/sources/tile-source.js +0 -0
- /package/dist/{esm/lib → lib}/sources/utils/image-type.js +0 -0
- /package/dist/{esm/lib → lib}/sources/utils/utils.js +0 -0
- /package/dist/{esm/lib → lib}/sources/vector-tile-source.js +0 -0
- /package/dist/{esm/loader-types.js → loader-types.js} +0 -0
- /package/dist/{esm/service-types.js → service-types.js} +0 -0
- /package/dist/{esm/types.js → types.js} +0 -0
- /package/dist/{esm/writer-types.js → writer-types.js} +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export class HttpFile {
|
|
2
|
+
constructor(url) {
|
|
3
|
+
this.handle = void 0;
|
|
4
|
+
this.size = 0;
|
|
5
|
+
this.bigsize = 0n;
|
|
6
|
+
this.url = void 0;
|
|
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}`);
|
|
17
|
+
}
|
|
18
|
+
const size = parseInt(response.headers.get('Content-Length') || '0');
|
|
19
|
+
return {
|
|
20
|
+
size,
|
|
21
|
+
bigsize: BigInt(size),
|
|
22
|
+
isDirectory: false
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async read(offset, length) {
|
|
26
|
+
const response = await this.fetchRange(offset, length);
|
|
27
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
28
|
+
return arrayBuffer;
|
|
29
|
+
}
|
|
30
|
+
async fetchRange(offset, length, signal) {
|
|
31
|
+
const nOffset = Number(offset);
|
|
32
|
+
const nLength = Number(length);
|
|
33
|
+
let controller;
|
|
34
|
+
if (!signal) {
|
|
35
|
+
controller = new AbortController();
|
|
36
|
+
signal = controller.signal;
|
|
37
|
+
}
|
|
38
|
+
const url = this.handle;
|
|
39
|
+
let response = await fetch(url, {
|
|
40
|
+
signal,
|
|
41
|
+
headers: {
|
|
42
|
+
Range: `bytes=${nOffset}-${nOffset + nLength - 1}`
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
switch (response.status) {
|
|
46
|
+
case 206:
|
|
47
|
+
break;
|
|
48
|
+
case 200:
|
|
49
|
+
const contentLength = response.headers.get('Content-Length');
|
|
50
|
+
if (!contentLength || Number(contentLength) > length) {
|
|
51
|
+
if (controller) {
|
|
52
|
+
controller.abort();
|
|
53
|
+
}
|
|
54
|
+
throw Error('content-length header missing or exceeding request. Server must support HTTP Byte Serving.');
|
|
55
|
+
}
|
|
56
|
+
case 416:
|
|
57
|
+
if (offset === 0) {
|
|
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, {
|
|
64
|
+
signal,
|
|
65
|
+
headers: {
|
|
66
|
+
Range: `bytes=0-${actualLength - 1}`
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
if (response.status >= 300) {
|
|
73
|
+
throw Error(`Bad response code: ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=http-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-file.js","names":["HttpFile","constructor","url","handle","size","bigsize","close","stat","response","fetch","method","ok","Error","parseInt","headers","get","BigInt","isDirectory","read","offset","length","fetchRange","arrayBuffer","signal","nOffset","Number","nLength","controller","AbortController","Range","status","contentLength","abort","contentRange","startsWith","actualLength","substr"],"sources":["../../../src/lib/files/http-file.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {ReadableFile, Stat} from './file';\n\nexport class HttpFile implements ReadableFile {\n readonly handle: string;\n readonly size: number = 0;\n readonly bigsize: bigint = 0n;\n readonly url: string;\n\n constructor(url: string) {\n this.handle = url;\n this.url = url;\n }\n\n async close(): Promise<void> {}\n\n async stat(): Promise<Stat> {\n const response = await fetch(this.handle, {method: 'HEAD'});\n if (!response.ok) {\n throw new Error(`Failed to fetch HEAD ${this.handle}`);\n }\n const size = parseInt(response.headers.get('Content-Length') || '0');\n return {\n size,\n bigsize: BigInt(size),\n isDirectory: false\n };\n }\n\n async read(offset: number | bigint, length: number): Promise<ArrayBuffer> {\n const response = await this.fetchRange(offset, length);\n const arrayBuffer = await response.arrayBuffer();\n return arrayBuffer;\n }\n\n /**\n *\n * @param offset\n * @param length\n * @param signal\n * @returns\n * @see https://github.com/protomaps/PMTiles\n */\n // eslint-disable-next-line complexity\n async fetchRange(\n offset: number | bigint,\n length: number,\n signal?: AbortSignal\n ): Promise<Response> {\n const nOffset = Number(offset);\n const nLength = Number(length);\n\n let controller: AbortController | undefined;\n if (!signal) {\n // ToDO why is it so important to abort in case 200?\n // TODO check this works or assert 206\n controller = new AbortController();\n signal = controller.signal;\n }\n\n const url = this.handle;\n let response = await fetch(url, {\n signal,\n headers: {Range: `bytes=${nOffset}-${nOffset + nLength - 1}`}\n });\n\n switch (response.status) {\n case 206: // Partial Content success\n // This is the expected success code for a range request\n break;\n\n case 200:\n // some well-behaved backends, e.g. DigitalOcean CDN, respond with 200 instead of 206\n // but we also need to detect no support for Byte Serving which is returning the whole file\n const contentLength = response.headers.get('Content-Length');\n if (!contentLength || Number(contentLength) > length) {\n if (controller) {\n controller.abort();\n }\n throw Error(\n 'content-length header missing or exceeding request. Server must support HTTP Byte Serving.'\n );\n }\n\n // @eslint-disable-next-line no-fallthrough\n case 416: // \"Range Not Satisfiable\"\n // some HTTP servers don't accept ranges beyond the end of the resource.\n // Retry with the exact length\n // TODO: can return 416 with offset > 0 if content changed, which will have a blank etag.\n // See https://github.com/protomaps/PMTiles/issues/90\n if (offset === 0) {\n const contentRange = response.headers.get('Content-Range');\n if (!contentRange || !contentRange.startsWith('bytes *')) {\n throw Error('Missing content-length on 416 response');\n }\n const actualLength = Number(contentRange.substr(8));\n response = await fetch(this.url, {\n signal,\n headers: {Range: `bytes=0-${actualLength - 1}`}\n });\n }\n break;\n\n default:\n if (response.status >= 300) {\n throw Error(`Bad response code: ${response.status}`);\n }\n }\n\n return response;\n // const data = await response.arrayBuffer();\n // return {\n // data,\n // etag: response.headers.get('ETag') || undefined,\n // cacheControl: response.headers.get('Cache-Control') || undefined,\n // expires: response.headers.get('Expires') || undefined\n // };\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReadableFile, WritableFile, Stat } from './file';
|
|
2
|
+
/** This class is a facade that gets replaced with an actual NodeFile instance */
|
|
3
|
+
export declare class NodeFileFacade implements ReadableFile, WritableFile {
|
|
4
|
+
handle: unknown;
|
|
5
|
+
size: number;
|
|
6
|
+
bigsize: bigint;
|
|
7
|
+
url: string;
|
|
8
|
+
constructor(url: string, flags?: 'r' | 'w' | 'wx', mode?: number);
|
|
9
|
+
/** Read data */
|
|
10
|
+
read(start?: number | bigint, end?: number | bigint): Promise<ArrayBuffer>;
|
|
11
|
+
/** Write to file. The number of bytes written will be returned */
|
|
12
|
+
write(arrayBuffer: ArrayBuffer, offset?: number | bigint, length?: number | bigint): Promise<number>;
|
|
13
|
+
/** Get information about file */
|
|
14
|
+
stat(): Promise<Stat>;
|
|
15
|
+
/** Close the file */
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=node-file-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-file-facade.d.ts","sourceRoot":"","sources":["../../../src/lib/files/node-file-facade.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,QAAQ,CAAC;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,EAAE,IAAI,CAAC,EAAE,MAAM;IAUhE,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;IAG3B,qBAAqB;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isBrowser } from "../env-utils/globals.js";
|
|
2
|
+
const NOT_IMPLEMENTED = new Error('Not implemented');
|
|
3
|
+
export class NodeFileFacade {
|
|
4
|
+
constructor(url, flags, mode) {
|
|
5
|
+
var _globalThis$loaders;
|
|
6
|
+
this.handle = void 0;
|
|
7
|
+
this.size = 0;
|
|
8
|
+
this.bigsize = 0n;
|
|
9
|
+
this.url = '';
|
|
10
|
+
if ((_globalThis$loaders = globalThis.loaders) !== null && _globalThis$loaders !== void 0 && _globalThis$loaders.NodeFile) {
|
|
11
|
+
return new globalThis.loaders.NodeFile(url, flags, mode);
|
|
12
|
+
}
|
|
13
|
+
if (isBrowser) {
|
|
14
|
+
throw new Error('Can\'t instantiate NodeFile in browser.');
|
|
15
|
+
}
|
|
16
|
+
throw new Error('Can\'t instantiate NodeFile. Make sure to import @loaders.gl/polyfills first.');
|
|
17
|
+
}
|
|
18
|
+
async read(start, end) {
|
|
19
|
+
throw NOT_IMPLEMENTED;
|
|
20
|
+
}
|
|
21
|
+
async write(arrayBuffer, offset, length) {
|
|
22
|
+
throw NOT_IMPLEMENTED;
|
|
23
|
+
}
|
|
24
|
+
async stat() {
|
|
25
|
+
throw NOT_IMPLEMENTED;
|
|
26
|
+
}
|
|
27
|
+
async close() {}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=node-file-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-file-facade.js","names":["isBrowser","NOT_IMPLEMENTED","Error","NodeFileFacade","constructor","url","flags","mode","_globalThis$loaders","handle","size","bigsize","globalThis","loaders","NodeFile","read","start","end","write","arrayBuffer","offset","length","stat","close"],"sources":["../../../src/lib/files/node-file-facade.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {isBrowser} from '../env-utils/globals';\nimport {ReadableFile, WritableFile, Stat} from './file';\n\nconst NOT_IMPLEMENTED = new Error('Not implemented');\n\n/** This class is a facade that gets replaced with an actual NodeFile instance */\nexport class NodeFileFacade implements ReadableFile, WritableFile {\n handle: unknown;\n size: number = 0;\n bigsize: bigint = 0n;\n url: string = '';\n\n constructor(url: string, flags?: 'r' | 'w' | 'wx', mode?: number) {\n // Return the actual implementation instance\n if (globalThis.loaders?.NodeFile) {\n return new globalThis.loaders.NodeFile(url, flags, mode);\n }\n if (isBrowser) {\n throw new Error('Can\\'t instantiate NodeFile in browser.');\n }\n throw new Error('Can\\'t instantiate NodeFile. Make sure to import @loaders.gl/polyfills first.');\n }\n /** Read data */\n async read(start?: number | bigint, end?: number | bigint): Promise<ArrayBuffer> {\n throw NOT_IMPLEMENTED;\n }\n /** Write to file. The number of bytes written will be returned */\n async write(arrayBuffer: ArrayBuffer, offset?: number | bigint, length?: number | bigint): Promise<number> {\n throw NOT_IMPLEMENTED;\n }\n /** Get information about file */\n async stat(): Promise<Stat> {\n throw NOT_IMPLEMENTED;\n }\n /** Close the file */\n async close(): Promise<void> {}\n}\n"],"mappings":"SAEQA,SAAS;AAGjB,MAAMC,eAAe,GAAG,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAGpD,OAAO,MAAMC,cAAc,CAAuC;EAMhEC,WAAWA,CAACC,GAAW,EAAEC,KAAwB,EAAEC,IAAa,EAAE;IAAA,IAAAC,mBAAA;IAAA,KALlEC,MAAM;IAAA,KACNC,IAAI,GAAW,CAAC;IAAA,KAChBC,OAAO,GAAW,EAAE;IAAA,KACpBN,GAAG,GAAW,EAAE;IAId,KAAAG,mBAAA,GAAII,UAAU,CAACC,OAAO,cAAAL,mBAAA,eAAlBA,mBAAA,CAAoBM,QAAQ,EAAE;MAChC,OAAO,IAAIF,UAAU,CAACC,OAAO,CAACC,QAAQ,CAACT,GAAG,EAAEC,KAAK,EAAEC,IAAI,CAAC;IAC1D;IACA,IAAIP,SAAS,EAAE;MACb,MAAM,IAAIE,KAAK,CAAC,yCAAyC,CAAC;IAC5D;IACA,MAAM,IAAIA,KAAK,CAAC,+EAA+E,CAAC;EAClG;EAEA,MAAMa,IAAIA,CAACC,KAAuB,EAAEC,GAAqB,EAAwB;IAC/E,MAAMhB,eAAe;EACvB;EAEA,MAAMiB,KAAKA,CAACC,WAAwB,EAAEC,MAAwB,EAAEC,MAAwB,EAAmB;IACzG,MAAMpB,eAAe;EACvB;EAEA,MAAMqB,IAAIA,CAAA,EAAkB;IAC1B,MAAMrB,eAAe;EACvB;EAEA,MAAMsB,KAAKA,CAAA,EAAkB,CAAC;AAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../src/lib/files/sources.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","names":[],"sources":["../../../src/lib/files/sources.ts"],"sourcesContent":["/*\nimport {fetchFile} from '@loaders.gl/core';\n\nimport {Source as PMTilesSource, RangeResponse} from 'pmtiles';\n\n/** @note \"source\" here is a PMTiles library type, referring to *\nexport function makeSource(data: string | Blob, fetch?) {\n if (typeof data === 'string') {\n return new FetchSource(data, fetch);\n }\n if (data instanceof Blob) {\n const url = '';\n return new BlobSource(data, url);\n }\n}\n\nexport class BlobSource implements PMTilesSource {\n blob: Blob;\n key: string;\n\n constructor(blob: Blob, key: string) {\n this.blob = blob;\n this.key = key;\n }\n\n // TODO - how is this used?\n getKey() {\n return this.blob.url || '';\n }\n\n async getBytes(offset: number, length: number, signal?: AbortSignal): Promise<RangeResponse> {\n const data = await this.blob.arrayBuffer();\n return {\n data\n // etag: response.headers.get('ETag') || undefined,\n // cacheControl: response.headers.get('Cache-Control') || undefined,\n // expires: response.headers.get('Expires') || undefined\n };\n }\n}\n\nexport class FetchSource implements PMTilesSource {\n url: string;\n fetch;\n\n constructor(url: string, fetch = fetchFile) {\n this.url = url;\n this.fetch = fetch;\n }\n\n // TODO - how is this used?\n getKey() {\n return this.url;\n }\n\n async getBytes(offset: number, length: number, signal?: AbortSignal): Promise<RangeResponse> {\n let controller;\n if (!signal) {\n // ToDO why is it so important to abort in case 200?\n // TODO check this works or assert 206\n controller = new AbortController();\n signal = controller.signal;\n }\n\n let response = await fetch(this.url, {\n signal,\n headers: {Range: `bytes=${offset}-${offset + length - 1}`}\n });\n\n switch (response.status) {\n case 206: // Partial Content success\n // This is the expected success code for a range request\n break;\n\n case 200:\n // some well-behaved backends, e.g. DigitalOcean CDN, respond with 200 instead of 206\n // but we also need to detect no support for Byte Serving which is returning the whole file\n const content_length = response.headers.get('Content-Length');\n if (!content_length || Number(content_length) > length) {\n if (controller) {\n controller.abort();\n }\n throw Error(\n 'content-length header missing or exceeding request. Server must support HTTP Byte Serving.'\n );\n }\n\n case 416: // \"Range Not Satisfiable\"\n // some HTTP servers don't accept ranges beyond the end of the resource.\n // Retry with the exact length\n // TODO: can return 416 with offset > 0 if content changed, which will have a blank etag.\n // See https://github.com/protomaps/PMTiles/issues/90\n if (offset === 0) {\n const content_range = response.headers.get('Content-Range');\n if (!content_range || !content_range.startsWith('bytes *')) {\n throw Error('Missing content-length on 416 response');\n }\n const actual_length = Number(content_range.substr(8));\n response = await fetch(this.url, {\n signal,\n headers: {Range: `bytes=0-${actual_length - 1}`}\n });\n }\n break;\n\n default:\n if (response.status >= 300) {\n throw Error(`Bad response code: ${response.status}`);\n }\n }\n\n const data = await response.arrayBuffer();\n return {\n data,\n etag: response.headers.get('ETag') || undefined,\n cacheControl: response.headers.get('Cache-Control') || undefined,\n expires: response.headers.get('Expires') || undefined\n };\n }\n}\n\n/*\nclass TestNodeFileSource implements Source {\n buffer: ArrayBuffer;\n path: string;\n key: string;\n etag?: string;\n\n constructor(path: string, key: string) {\n this.path = path;\n this.buffer = fs.readFileSync(path);\n this.key = key;\n }\n\n getKey() {\n return this.key;\n }\n\n replaceData(path: string) {\n this.path = path;\n this.buffer = fs.readFileSync(path);\n }\n\n async getBytes(offset: number, length: number): Promise<RangeResponse> {\n const slice = new Uint8Array(this.buffer.slice(offset, offset + length))\n .buffer;\n return { data: slice, etag: this.etag };\n }\n}\n*/\n"],"mappings":""}
|
|
@@ -1,80 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
export type Stat = {
|
|
3
|
-
size: number;
|
|
4
|
-
isDirectory: () => boolean;
|
|
5
|
-
};
|
|
1
|
+
import { ReadableFile, WritableFile } from '../files/file';
|
|
6
2
|
/**
|
|
7
3
|
* A FileSystem interface can encapsulate various file sources,
|
|
8
|
-
* a FileList, a ZipFile, a GoogleDrive etc.
|
|
4
|
+
* a FileList, a Node.js filesystem, a ZipFile, a GoogleDrive etc.
|
|
9
5
|
*/
|
|
10
6
|
export interface FileSystem {
|
|
11
|
-
/**
|
|
12
|
-
* Return a list of file names
|
|
13
|
-
* @param dirname directory name. file system root directory if omitted
|
|
14
|
-
*/
|
|
7
|
+
/** Return a list of file names in a "directory" */
|
|
15
8
|
readdir(dirname?: string, options?: {
|
|
16
9
|
recursive?: boolean;
|
|
17
10
|
}): Promise<string[]>;
|
|
18
|
-
/**
|
|
19
|
-
* Gets information from a local file from the filesystem
|
|
20
|
-
* @param filename file name to stat
|
|
21
|
-
* @param options currently unused
|
|
22
|
-
* @throws if filename is not in local filesystem
|
|
23
|
-
*/
|
|
11
|
+
/** Gets information from a local file from the filesystem */
|
|
24
12
|
stat(filename: string, options?: object): Promise<{
|
|
25
13
|
size: number;
|
|
26
14
|
}>;
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
fetch(filename: RequestInfo, options?: RequestInit): Promise<Response>;
|
|
15
|
+
/** Removes a file from the file system */
|
|
16
|
+
unlink?(path: string): Promise<void>;
|
|
17
|
+
/** Fetches the full contents of a file from the filesystem (or a URL) */
|
|
18
|
+
fetch(path: string, options?: RequestInit): Promise<Response>;
|
|
33
19
|
}
|
|
34
20
|
/**
|
|
35
|
-
* A random access file system
|
|
21
|
+
* A random access file system, open readable and/or writable files
|
|
36
22
|
*/
|
|
37
|
-
export interface
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* A FileSystem interface can encapsulate a FileList, a ZipFile, a GoogleDrive etc.
|
|
48
|
-
*
|
|
49
|
-
export interface IFileSystem {
|
|
50
|
-
/**
|
|
51
|
-
* Return a list of file names
|
|
52
|
-
* @param dirname directory name. file system root directory if omitted
|
|
53
|
-
*
|
|
54
|
-
readdir(dirname?: string, options?: {recursive?: boolean}): Promise<string[]>;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Gets information from a local file from the filesystem
|
|
58
|
-
* @param filename file name to stat
|
|
59
|
-
* @param options currently unused
|
|
60
|
-
* @throws if filename is not in local filesystem
|
|
61
|
-
*
|
|
62
|
-
stat(filename: string, options?: object): Promise<{size: number}>;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Fetches a local file from the filesystem (or a URL)
|
|
66
|
-
* @param filename
|
|
67
|
-
* @param options
|
|
68
|
-
*
|
|
69
|
-
fetch(filename: string, options?: object): Promise<Response>;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
type ReadOptions = {buffer?: ArrayBuffer; offset?: number; length?: number; position?: number};
|
|
73
|
-
export interface IRandomAccessReadFileSystem extends IFileSystem {
|
|
74
|
-
open(path: string, flags: string | number, mode?: any): Promise<any>;
|
|
75
|
-
close(fd: any): Promise<void>;
|
|
76
|
-
fstat(fd: any): Promise<object>;
|
|
77
|
-
read(fd: any, options?: ReadOptions): Promise<{bytesRead: number; buffer: Buffer}>;
|
|
23
|
+
export interface RandomAccessFileSystem extends FileSystem {
|
|
24
|
+
/** Can open readable files */
|
|
25
|
+
readonly readable: boolean;
|
|
26
|
+
/** Can open writable files */
|
|
27
|
+
readonly writable: boolean;
|
|
28
|
+
/** Open a readable file */
|
|
29
|
+
openReadableFile(path: string, flags?: 'r'): Promise<ReadableFile>;
|
|
30
|
+
/** Open a writable file */
|
|
31
|
+
openWritableFile(path: string, flags?: 'w' | 'wx', mode?: number): Promise<WritableFile>;
|
|
78
32
|
}
|
|
79
|
-
*/
|
|
80
33
|
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/lib/filesystems/filesystem.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/lib/filesystems/filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9E,6DAA6D;IAC7D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAElE,0CAA0C;IAC1C,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,yEAAyE;IACzE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,UAAU;IACxD,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,2BAA2B;IAC3B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnE,2BAA2B;IAC3B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","names":[],"sources":["../../../src/lib/filesystems/filesystem.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {ReadableFile, WritableFile} from '../files/file';\n\n/**\n * A FileSystem interface can encapsulate various file sources,\n * a FileList, a Node.js filesystem, a ZipFile, a GoogleDrive etc.\n */\nexport interface FileSystem {\n /** Return a list of file names in a \"directory\" */\n readdir(dirname?: string, options?: {recursive?: boolean}): Promise<string[]>;\n\n /** Gets information from a local file from the filesystem */\n stat(filename: string, options?: object): Promise<{size: number}>;\n\n /** Removes a file from the file system */\n unlink?(path: string): Promise<void>;\n\n /** Fetches the full contents of a file from the filesystem (or a URL) */\n fetch(path: string, options?: RequestInit): Promise<Response>;\n}\n\n/**\n * A random access file system, open readable and/or writable files\n */\nexport interface RandomAccessFileSystem extends FileSystem {\n /** Can open readable files */\n readonly readable: boolean;\n\n /** Can open writable files */\n readonly writable: boolean;\n\n /** Open a readable file */\n openReadableFile(path: string, flags?: 'r'): Promise<ReadableFile>;\n\n /** Open a writable file */\n openWritableFile(path: string, flags?: 'w' | 'wx', mode?: number): Promise<WritableFile>;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Stat } from '../files/file';
|
|
2
|
+
import { NodeFileFacade as NodeFile } from '../files/node-file-facade';
|
|
3
|
+
import { RandomAccessFileSystem } from './filesystem';
|
|
4
|
+
/**
|
|
5
|
+
* FileSystem pass-through for Node.js
|
|
6
|
+
* Compatible with BrowserFileSystem.
|
|
7
|
+
* @note Dummy implementation, not used (constructor returns a real NodeFileSystem instance)
|
|
8
|
+
* @param options
|
|
9
|
+
*/
|
|
10
|
+
export declare class NodeFileSystemFacade implements RandomAccessFileSystem {
|
|
11
|
+
constructor(options: {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
});
|
|
14
|
+
readonly readable = true;
|
|
15
|
+
readonly writable = true;
|
|
16
|
+
openReadableFile(path: string, flags: any): Promise<NodeFile>;
|
|
17
|
+
openWritableFile(path: string, flags: any, mode: any): Promise<NodeFile>;
|
|
18
|
+
readdir(dirname?: string, options?: {}): Promise<string[]>;
|
|
19
|
+
stat(path: string, options?: {}): Promise<Stat>;
|
|
20
|
+
unlink(path: string): Promise<void>;
|
|
21
|
+
fetch(path: RequestInfo, options?: RequestInit): Promise<Response>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=node-filesystem-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filesystem-facade.d.ts","sourceRoot":"","sources":["../../../src/lib/filesystems/node-filesystem-facade.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EAAC,cAAc,IAAI,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAC,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAIpD;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,sBAAsB;gBAErD,OAAO,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAgBzC,QAAQ,CAAC,QAAQ,QAAQ;IACzB,QAAQ,CAAC,QAAQ,QAAQ;IAEnB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,KAAA,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,KAAA,EAAE,IAAI,KAAA,GAAG,OAAO,CAAC,QAAQ,CAAC;IAM9D,OAAO,CAAC,OAAO,SAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIvD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isBrowser } from "../env-utils/globals.js";
|
|
2
|
+
const NOT_IMPLEMENTED = new Error('Not implemented');
|
|
3
|
+
export class NodeFileSystemFacade {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
var _globalThis$loaders;
|
|
6
|
+
this.readable = true;
|
|
7
|
+
this.writable = true;
|
|
8
|
+
if ((_globalThis$loaders = globalThis.loaders) !== null && _globalThis$loaders !== void 0 && _globalThis$loaders.NodeFileSystem) {
|
|
9
|
+
return new globalThis.loaders.NodeFileSystem(options);
|
|
10
|
+
}
|
|
11
|
+
if (isBrowser) {
|
|
12
|
+
throw new Error('Can\'t instantiate NodeFileSystem in browser.');
|
|
13
|
+
}
|
|
14
|
+
throw new Error('Can\'t instantiate NodeFileSystem. Make sure to import @loaders.gl/polyfills first.');
|
|
15
|
+
}
|
|
16
|
+
async openReadableFile(path, flags) {
|
|
17
|
+
throw NOT_IMPLEMENTED;
|
|
18
|
+
}
|
|
19
|
+
async openWritableFile(path, flags, mode) {
|
|
20
|
+
throw NOT_IMPLEMENTED;
|
|
21
|
+
}
|
|
22
|
+
async readdir() {
|
|
23
|
+
let dirname = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.';
|
|
24
|
+
let options = arguments.length > 1 ? arguments[1] : undefined;
|
|
25
|
+
throw NOT_IMPLEMENTED;
|
|
26
|
+
}
|
|
27
|
+
async stat(path, options) {
|
|
28
|
+
throw NOT_IMPLEMENTED;
|
|
29
|
+
}
|
|
30
|
+
async unlink(path) {
|
|
31
|
+
throw NOT_IMPLEMENTED;
|
|
32
|
+
}
|
|
33
|
+
async fetch(path, options) {
|
|
34
|
+
throw NOT_IMPLEMENTED;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=node-filesystem-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filesystem-facade.js","names":["isBrowser","NOT_IMPLEMENTED","Error","NodeFileSystemFacade","constructor","options","_globalThis$loaders","readable","writable","globalThis","loaders","NodeFileSystem","openReadableFile","path","flags","openWritableFile","mode","readdir","dirname","arguments","length","undefined","stat","unlink","fetch"],"sources":["../../../src/lib/filesystems/node-filesystem-facade.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {isBrowser} from '../env-utils/globals';\nimport {Stat} from '../files/file';\nimport {NodeFileFacade as NodeFile} from '../files/node-file-facade';\nimport {RandomAccessFileSystem} from './filesystem';\n\nconst NOT_IMPLEMENTED = new Error('Not implemented');\n\n/**\n * FileSystem pass-through for Node.js\n * Compatible with BrowserFileSystem.\n * @note Dummy implementation, not used (constructor returns a real NodeFileSystem instance)\n * @param options\n */\nexport class NodeFileSystemFacade implements RandomAccessFileSystem {\n // implements FileSystem\n constructor(options: {[key: string]: any}) {\n if (globalThis.loaders?.NodeFileSystem) {\n return new globalThis.loaders.NodeFileSystem(options);\n }\n if (isBrowser) {\n throw new Error('Can\\'t instantiate NodeFileSystem in browser.');\n }\n throw new Error(\n 'Can\\'t instantiate NodeFileSystem. Make sure to import @loaders.gl/polyfills first.'\n );\n }\n\n // DUMMY IMPLEMENTATION, not used (constructor returns a real NodeFileSystem instance)\n\n // implements RandomAccessReadFileSystem\n\n readonly readable = true;\n readonly writable = true;\n\n async openReadableFile(path: string, flags): Promise<NodeFile> {\n throw NOT_IMPLEMENTED;\n }\n\n // implements RandomAccessWriteFileSystem\n async openWritableFile(path: string, flags, mode): Promise<NodeFile> {\n throw NOT_IMPLEMENTED;\n }\n\n // Implements file system\n\n async readdir(dirname = '.', options?: {}): Promise<string[]> {\n throw NOT_IMPLEMENTED;\n }\n\n async stat(path: string, options?: {}): Promise<Stat> {\n throw NOT_IMPLEMENTED;\n }\n\n async unlink(path: string): Promise<void> {\n throw NOT_IMPLEMENTED;\n }\n\n async fetch(path: RequestInfo, options?: RequestInit): Promise<Response> {\n throw NOT_IMPLEMENTED;\n }\n}\n"],"mappings":"SAEQA,SAAS;AAKjB,MAAMC,eAAe,GAAG,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAQpD,OAAO,MAAMC,oBAAoB,CAAmC;EAElEC,WAAWA,CAACC,OAA6B,EAAE;IAAA,IAAAC,mBAAA;IAAA,KAgBlCC,QAAQ,GAAG,IAAI;IAAA,KACfC,QAAQ,GAAG,IAAI;IAhBtB,KAAAF,mBAAA,GAAIG,UAAU,CAACC,OAAO,cAAAJ,mBAAA,eAAlBA,mBAAA,CAAoBK,cAAc,EAAE;MACtC,OAAO,IAAIF,UAAU,CAACC,OAAO,CAACC,cAAc,CAACN,OAAO,CAAC;IACvD;IACA,IAAIL,SAAS,EAAE;MACb,MAAM,IAAIE,KAAK,CAAC,+CAA+C,CAAC;IAClE;IACA,MAAM,IAAIA,KAAK,CACb,qFACF,CAAC;EACH;EASA,MAAMU,gBAAgBA,CAACC,IAAY,EAAEC,KAAK,EAAqB;IAC7D,MAAMb,eAAe;EACvB;EAGA,MAAMc,gBAAgBA,CAACF,IAAY,EAAEC,KAAK,EAAEE,IAAI,EAAqB;IACnE,MAAMf,eAAe;EACvB;EAIA,MAAMgB,OAAOA,CAAA,EAAiD;IAAA,IAAhDC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;IAAA,IAAEd,OAAY,GAAAc,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IACvC,MAAMpB,eAAe;EACvB;EAEA,MAAMqB,IAAIA,CAACT,IAAY,EAAER,OAAY,EAAiB;IACpD,MAAMJ,eAAe;EACvB;EAEA,MAAMsB,MAAMA,CAACV,IAAY,EAAiB;IACxC,MAAMZ,eAAe;EACvB;EAEA,MAAMuB,KAAKA,CAACX,IAAiB,EAAER,OAAqB,EAAqB;IACvE,MAAMJ,eAAe;EACvB;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-iteration.js","names":["concatenateArrayBuffers","forEach","iterator","visitor","done","value","next","return","cancel","concatenateArrayBuffersAsync","asyncIterator","arrayBuffers","chunk","push","concatenateStringsAsync","strings","join"],"sources":["../../../src/lib/iterators/async-iteration.ts"],"sourcesContent":["import {concatenateArrayBuffers} from '../binary-utils/array-buffer-utils';\n\n// GENERAL UTILITIES\n\n/**\n * Iterate over async iterator, without resetting iterator if end is not reached\n * - forEach intentionally does not reset iterator if exiting loop prematurely\n * so that iteration can continue in a second loop\n * - It is recommended to use a standard for-await as last loop to ensure\n * iterator gets properly reset\n *\n * TODO - optimize using sync iteration if argument is an Iterable?\n *\n * @param iterator\n * @param visitor\n */\nexport async function forEach(iterator, visitor) {\n // eslint-disable-next-line\n while (true) {\n const {done, value} = await iterator.next();\n if (done) {\n iterator.return();\n return;\n }\n const cancel = visitor(value);\n if (cancel) {\n return;\n }\n }\n}\n\n// Breaking big data into iterable chunks, concatenating iterable chunks into big data objects\n\n/**\n * Concatenates all data chunks yielded by an (async) iterator\n * This function can e.g. be used to enable atomic parsers to work on (async) iterator inputs\n */\n\nexport async function concatenateArrayBuffersAsync(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>\n): Promise<ArrayBuffer> {\n const arrayBuffers: ArrayBuffer[] = [];\n for await (const chunk of asyncIterator) {\n arrayBuffers.push(chunk);\n }\n return concatenateArrayBuffers(...arrayBuffers);\n}\n\nexport async function concatenateStringsAsync(\n asyncIterator: AsyncIterable<string> | Iterable<string>\n): Promise<string> {\n const strings: string[] = [];\n for await (const chunk of asyncIterator) {\n strings.push(chunk);\n }\n return strings.join('');\n}\n"],"mappings":"SAAQA,uBAAuB;AAgB/B,OAAO,eAAeC,OAAOA,CAACC,QAAQ,EAAEC,OAAO,EAAE;EAE/C,OAAO,IAAI,EAAE;IACX,MAAM;MAACC,IAAI;MAAEC;IAAK,CAAC,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC;IAC3C,IAAIF,IAAI,EAAE;MACRF,QAAQ,CAACK,MAAM,CAAC,CAAC;MACjB;IACF;IACA,MAAMC,MAAM,GAAGL,OAAO,CAACE,KAAK,CAAC;IAC7B,IAAIG,MAAM,EAAE;MACV;IACF;EACF;AACF;AASA,OAAO,eAAeC,4BAA4BA,CAChDC,aAAiE,EAC3C;EACtB,MAAMC,YAA2B,GAAG,EAAE;EACtC,WAAW,MAAMC,KAAK,IAAIF,aAAa,EAAE;IACvCC,YAAY,CAACE,IAAI,CAACD,KAAK,CAAC;EAC1B;EACA,OAAOZ,uBAAuB,CAAC,GAAGW,YAAY,CAAC;AACjD;AAEA,OAAO,eAAeG,uBAAuBA,CAC3CJ,aAAuD,EACtC;EACjB,MAAMK,OAAiB,GAAG,EAAE;EAC5B,WAAW,MAAMH,KAAK,IAAIF,aAAa,EAAE;IACvCK,OAAO,CAACF,IAAI,CAACD,KAAK,CAAC;EACrB;EACA,OAAOG,OAAO,CAACC,IAAI,CAAC,EAAE,CAAC;AACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-iterators.js","names":["makeTextDecoderIterator","arrayBufferIterator","options","arguments","length","undefined","textDecoder","TextDecoder","arrayBuffer","decode","stream","e","Promise","reject","makeTextEncoderIterator","textIterator","textEncoder","TextEncoder","text","encode","makeLineIterator","previous","textChunk","eolIndex","indexOf","line","slice","makeNumberedLineIterator","lineIterator","counter"],"sources":["../../../src/lib/iterators/text-iterators.ts"],"sourcesContent":["// TextDecoder iterators\n// TextDecoder will keep any partial undecoded bytes between calls to `decode`\n\nexport async function* makeTextDecoderIterator(\n arrayBufferIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: TextDecoderOptions = {}\n): AsyncIterable<string> {\n const textDecoder = new TextDecoder(undefined, options);\n for await (const arrayBuffer of arrayBufferIterator) {\n yield typeof arrayBuffer === 'string'\n ? arrayBuffer\n : textDecoder.decode(arrayBuffer, {stream: true});\n }\n}\n\n// TextEncoder iterator\n// TODO - this is not useful unless min chunk size is given\n// TextEncoder will keep any partial undecoded bytes between calls to `encode`\n// If iterator does not yield strings, assume arrayBuffer and return unencoded\n\nexport async function* makeTextEncoderIterator(\n textIterator: AsyncIterable<string> | Iterable<ArrayBuffer>\n): AsyncIterable<ArrayBuffer> {\n const textEncoder = new TextEncoder();\n for await (const text of textIterator) {\n yield typeof text === 'string' ? textEncoder.encode(text) : text;\n }\n}\n\n/**\n * @param textIterator async iterable yielding strings\n * @returns an async iterable over lines\n * See http://2ality.com/2018/04/async-iter-nodejs.html\n */\n\nexport async function* makeLineIterator(\n textIterator: AsyncIterable<string>\n): AsyncIterable<string> {\n let previous = '';\n for await (const textChunk of textIterator) {\n previous += textChunk;\n let eolIndex;\n while ((eolIndex = previous.indexOf('\\n')) >= 0) {\n // line includes the EOL\n const line = previous.slice(0, eolIndex + 1);\n previous = previous.slice(eolIndex + 1);\n yield line;\n }\n }\n\n if (previous.length > 0) {\n yield previous;\n }\n}\n\n/**\n * @param lineIterator async iterable yielding lines\n * @returns async iterable yielding numbered lines\n *\n * See http://2ality.com/2018/04/async-iter-nodejs.html\n */\nexport async function* makeNumberedLineIterator(\n lineIterator: AsyncIterable<string>\n): AsyncIterable<{counter: number; line: string}> {\n let counter = 1;\n for await (const line of lineIterator) {\n yield {counter, line};\n counter++;\n }\n}\n"],"mappings":"AAGA,OAAO,SAAgBA,uBAAuBA,CAC5CC,mBAAuE;EAAA;IAAA,IACvEC,OAA2B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAA,0BACT;MACvB,MAAMG,WAAW,GAAG,IAAIC,WAAW,CAACF,SAAS,EAAEH,OAAO,CAAC;MACvD,WAAW,MAAMM,WAAW,IAAIP,mBAAmB,EAAE;QACnD,MAAM,OAAOO,WAAW,KAAK,QAAQ,GACjCA,WAAW,GACXF,WAAW,CAACG,MAAM,CAACD,WAAW,EAAE;UAACE,MAAM,EAAE;QAAI,CAAC,CAAC;MACrD;IACF,CAAC;EAAA,SAAAC,CAAA;IAAA,OAAAC,OAAA,CAAAC,MAAA,CAAAF,CAAA;EAAA;AAAA;AAOD,OAAO,gBAAgBG,uBAAuBA,CAC5CC,YAA2D,EAC/B;EAC5B,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAAC,CAAC;EACrC,WAAW,MAAMC,IAAI,IAAIH,YAAY,EAAE;IACrC,MAAM,OAAOG,IAAI,KAAK,QAAQ,GAAGF,WAAW,CAACG,MAAM,CAACD,IAAI,CAAC,GAAGA,IAAI;EAClE;AACF;AAQA,OAAO,gBAAgBE,gBAAgBA,CACrCL,YAAmC,EACZ;EACvB,IAAIM,QAAQ,GAAG,EAAE;EACjB,WAAW,MAAMC,SAAS,IAAIP,YAAY,EAAE;IAC1CM,QAAQ,IAAIC,SAAS;IACrB,IAAIC,QAAQ;IACZ,OAAO,CAACA,QAAQ,GAAGF,QAAQ,CAACG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MAE/C,MAAMC,IAAI,GAAGJ,QAAQ,CAACK,KAAK,CAAC,CAAC,EAAEH,QAAQ,GAAG,CAAC,CAAC;MAC5CF,QAAQ,GAAGA,QAAQ,CAACK,KAAK,CAACH,QAAQ,GAAG,CAAC,CAAC;MACvC,MAAME,IAAI;IACZ;EACF;EAEA,IAAIJ,QAAQ,CAACjB,MAAM,GAAG,CAAC,EAAE;IACvB,MAAMiB,QAAQ;EAChB;AACF;AAQA,OAAO,gBAAgBM,wBAAwBA,CAC7CC,YAAmC,EACa;EAChD,IAAIC,OAAO,GAAG,CAAC;EACf,WAAW,MAAMJ,IAAI,IAAIG,YAAY,EAAE;IACrC,MAAM;MAACC,OAAO;MAAEJ;IAAI,CAAC;IACrBI,OAAO,EAAE;EACX;AACF"}
|
|
@@ -8,5 +8,5 @@ export declare function toArrayBuffer(buffer: any): any;
|
|
|
8
8
|
/**
|
|
9
9
|
* Convert (copy) ArrayBuffer to Buffer
|
|
10
10
|
*/
|
|
11
|
-
export declare function toBuffer(binaryData: ArrayBuffer |
|
|
11
|
+
export declare function toBuffer(binaryData: ArrayBuffer | Buffer): Buffer;
|
|
12
12
|
//# sourceMappingURL=buffer.browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.browser.d.ts","sourceRoot":"","sources":["../../../src/lib/node/buffer.browser.ts"],"names":[],"mappings":";AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,KAAA,OAEnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"buffer.browser.d.ts","sourceRoot":"","sources":["../../../src/lib/node/buffer.browser.ts"],"names":[],"mappings":";AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,KAAA,OAEnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer.browser.js","names":["toArrayBuffer","buffer","toBuffer","binaryData","Error"],"sources":["../../../src/lib/node/buffer.browser.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)\n// this file is selected by the package.json \"browser\" field).\n\n/**\n * Convert Buffer to ArrayBuffer\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toArrayBuffer(buffer) {\n return buffer;\n}\n\n/**\n * Convert (copy) ArrayBuffer to Buffer\n */\nexport function toBuffer(binaryData: ArrayBuffer | Buffer): Buffer {\n throw new Error('Buffer not supported in browser');\n}\n"],"mappings":"AAUA,OAAO,SAASA,aAAaA,CAACC,MAAM,EAAE;EACpC,OAAOA,MAAM;AACf;AAKA,OAAO,SAASC,QAAQA,CAACC,UAAgC,EAAU;EACjE,MAAM,IAAIC,KAAK,CAAC,iCAAiC,CAAC;AACpD"}
|
|
@@ -8,5 +8,5 @@ export declare function toArrayBuffer(buffer: any): any;
|
|
|
8
8
|
/**
|
|
9
9
|
* Convert (copy) ArrayBuffer to Buffer
|
|
10
10
|
*/
|
|
11
|
-
export declare function toBuffer(binaryData: ArrayBuffer |
|
|
11
|
+
export declare function toBuffer(binaryData: ArrayBuffer | Buffer): Buffer;
|
|
12
12
|
//# sourceMappingURL=buffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/lib/node/buffer.ts"],"names":[],"mappings":";AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,KAAA,OAOnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/lib/node/buffer.ts"],"names":[],"mappings":";AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,KAAA,OAOnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAcjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer.js","names":["toArrayBuffer","buffer","Buffer","isBuffer","typedArray","Uint8Array","byteOffset","length","slice","toBuffer","binaryData","ArrayBuffer","isView","from","Error"],"sources":["../../../src/lib/node/buffer.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)\n// this file is selected by the package.json \"browser\" field).\n\n/**\n * Convert Buffer to ArrayBuffer\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toArrayBuffer(buffer) {\n // TODO - per docs we should just be able to call buffer.buffer, but there are issues\n if (Buffer.isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n\n/**\n * Convert (copy) ArrayBuffer to Buffer\n */\nexport function toBuffer(binaryData: ArrayBuffer | Buffer): Buffer {\n if (Buffer.isBuffer(binaryData)) {\n return binaryData;\n }\n\n if (ArrayBuffer.isView(binaryData)) {\n binaryData = binaryData.buffer;\n }\n\n if (typeof Buffer !== 'undefined' && binaryData instanceof ArrayBuffer) {\n return Buffer.from(binaryData);\n }\n\n throw new Error('toBuffer');\n}\n"],"mappings":"AAUA,OAAO,SAASA,aAAaA,CAACC,MAAM,EAAE;EAEpC,IAAIC,MAAM,CAACC,QAAQ,CAACF,MAAM,CAAC,EAAE;IAC3B,MAAMG,UAAU,GAAG,IAAIC,UAAU,CAACJ,MAAM,CAACA,MAAM,EAAEA,MAAM,CAACK,UAAU,EAAEL,MAAM,CAACM,MAAM,CAAC;IAClF,OAAOH,UAAU,CAACI,KAAK,CAAC,CAAC,CAACP,MAAM;EAClC;EACA,OAAOA,MAAM;AACf;AAKA,OAAO,SAASQ,QAAQA,CAACC,UAAgC,EAAU;EACjE,IAAIR,MAAM,CAACC,QAAQ,CAACO,UAAU,CAAC,EAAE;IAC/B,OAAOA,UAAU;EACnB;EAEA,IAAIC,WAAW,CAACC,MAAM,CAACF,UAAU,CAAC,EAAE;IAClCA,UAAU,GAAGA,UAAU,CAACT,MAAM;EAChC;EAEA,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAIQ,UAAU,YAAYC,WAAW,EAAE;IACtE,OAAOT,MAAM,CAACW,IAAI,CAACH,UAAU,CAAC;EAChC;EAEA,MAAM,IAAII,KAAK,CAAC,UAAU,CAAC;AAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.browser.js","names":["isSupported"],"sources":["../../../src/lib/node/fs.browser.ts"],"sourcesContent":["export const isSupported = false;\n"],"mappings":"AAAA,OAAO,MAAMA,WAAW,GAAG,KAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promisify.js","names":["promisify1","fn","args","Promise","resolve","reject","error","callbackArgs","promisify2","arg1","arg2","promisify3","arg3"],"sources":["../../../src/lib/node/promisify.ts"],"sourcesContent":["// @loaders.gl, MIT license\n\n// type Parameter1<T extends (arg1: any, ...args: unknown[]) => unknown> = T extends (\n// arg1: infer P,\n// ...args: unknown[]\n// ) => unknown\n// ? P\n// : never;\n\n// type Parameter2<T extends (arg1: unknown, arg2: any, ...args: unknown[]) => unknown> = T extends (\n// arg1: unknown,\n// arg2: infer P,\n// ...args: unknown[]\n// ) => unknown\n// ? P\n// : never;\n\n// type CallbackParameter2<\n// T extends (arg: unknown, cb: (error: any, value: any) => void) => unknown\n// > = T extends (arg: unknown, cb: (error: any, value: infer P) => void) => unknown ? P : never;\n\n// type CallbackParameter3<\n// T extends (arg: unknown, arg2: unknown, cb: (error: any, value: any) => void) => unknown\n// > = T extends (arg: unknown, arg2: unknown, cb: (error: any, value: infer P) => void) => unknown\n// ? P\n// : never;\n\n// /** Extract the parameters of a function type in a tuple */\n// export type Promisified<F extends (arg1, cb: (error: unknown, value: any) => void) => any> = (\n// arg1: Parameter1<F>\n// ) => Promise<CallbackParameter2<F>>;\n// /** Extract the parameters of a function type in a tuple */\n// export type Promisified2<F extends (arg1, arg2, cb: (error: unknown, value: any) => void) => any> = (\n// arg1: Parameter1<F>,\n// arg2: Parameter2<F>\n// ) => Promise<CallbackParameter3<F>>;\n\n/** Wrapper for Node.js promisify */\ntype Callback<A> = (error: unknown, args: A) => void;\n\n/**\n * Typesafe promisify implementation\n * @link https://dev.to/_gdelgado/implement-a-type-safe-version-of-node-s-promisify-in-7-lines-of-code-in-typescript-2j34\n * @param fn\n * @returns\n */\nexport function promisify1<T, A>(fn: (args: T, cb: Callback<A>) => void): (args: T) => Promise<A> {\n return (args: T) =>\n new Promise((resolve, reject) =>\n fn(args, (error, callbackArgs) => (error ? reject(error) : resolve(callbackArgs)))\n );\n}\n\nexport function promisify2<T1, T2, A>(\n fn: (arg1: T1, arg2: T2, cb: Callback<A>) => void\n): (arg1: T1, arg2: T2) => Promise<A> {\n return (arg1: T1, arg2: T2) =>\n new Promise((resolve, reject) =>\n fn(arg1, arg2, (error, callbackArgs) => (error ? reject(error) : resolve(callbackArgs)))\n );\n}\n\nexport function promisify3<T1, T2, T3, A>(\n fn: (arg1: T1, arg2: T2, arg3: T3, cb: Callback<A>) => void\n): (arg1: T1, arg2: T2, arg3: T3) => Promise<A> {\n return (arg1: T1, arg2: T2, arg3: T3) =>\n new Promise((resolve, reject) =>\n fn(arg1, arg2, arg3, (error, callbackArgs) => (error ? reject(error) : resolve(callbackArgs)))\n );\n}\n"],"mappings":"AA8CA,OAAO,SAASA,UAAUA,CAAOC,EAAsC,EAA2B;EAChG,OAAQC,IAAO,IACb,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAC1BJ,EAAE,CAACC,IAAI,EAAE,CAACI,KAAK,EAAEC,YAAY,KAAMD,KAAK,GAAGD,MAAM,CAACC,KAAK,CAAC,GAAGF,OAAO,CAACG,YAAY,CAAE,CACnF,CAAC;AACL;AAEA,OAAO,SAASC,UAAUA,CACxBP,EAAiD,EACb;EACpC,OAAO,CAACQ,IAAQ,EAAEC,IAAQ,KACxB,IAAIP,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAC1BJ,EAAE,CAACQ,IAAI,EAAEC,IAAI,EAAE,CAACJ,KAAK,EAAEC,YAAY,KAAMD,KAAK,GAAGD,MAAM,CAACC,KAAK,CAAC,GAAGF,OAAO,CAACG,YAAY,CAAE,CACzF,CAAC;AACL;AAEA,OAAO,SAASI,UAAUA,CACxBV,EAA2D,EACb;EAC9C,OAAO,CAACQ,IAAQ,EAAEC,IAAQ,EAAEE,IAAQ,KAClC,IAAIT,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAC1BJ,EAAE,CAACQ,IAAI,EAAEC,IAAI,EAAEE,IAAI,EAAE,CAACN,KAAK,EAAEC,YAAY,KAAMD,KAAK,GAAGD,MAAM,CAACC,KAAK,CAAC,GAAGF,OAAO,CAACG,YAAY,CAAE,CAC/F,CAAC;AACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.browser.js","names":["isSupported"],"sources":["../../../src/lib/node/stream.browser.ts"],"sourcesContent":["export const isSupported = false;\n"],"mappings":"AAAA,OAAO,MAAMA,WAAW,GAAG,KAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","names":["stream","Transform","isSupported","Boolean"],"sources":["../../../src/lib/node/stream.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport * as stream from 'stream';\n\nexport type {Writable} from 'stream';\n\n/** Wrapper for Node.js stream method */\nexport const Transform = stream.Transform;\n\nexport const isSupported = Boolean(stream);\n"],"mappings":"AAEA,OAAO,KAAKA,MAAM,MAAM,QAAQ;AAKhC,OAAO,MAAMC,SAAS,GAAGD,MAAM,CAACC,SAAS;AAEzC,OAAO,MAAMC,WAAW,GAAGC,OAAO,CAACH,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-loader-options.js","names":["mergeLoaderOptions","baseOptions","newOptions","mergeOptionsRecursively","options","key","newValue","Object","entries","Array","isArray"],"sources":["../../../src/lib/option-utils/merge-loader-options.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {LoaderOptions} from '../../loader-types';\n\n/**\n *\n * @param baseOptions Can be undefined, in which case a fresh options object will be minted\n * @param newOptions\n * @returns\n */\nexport function mergeLoaderOptions<Options extends LoaderOptions>(\n baseOptions: Options | undefined,\n newOptions: Options\n): Options {\n return mergeOptionsRecursively(baseOptions || {}, newOptions) as Options;\n}\n\nfunction mergeOptionsRecursively(\n baseOptions: Record<string, unknown>,\n newOptions: Record<string, unknown>\n): Record<string, unknown> {\n const options = {...baseOptions};\n for (const [key, newValue] of Object.entries(newOptions)) {\n if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) {\n options[key] = mergeOptionsRecursively(\n (options[key] as Record<string, unknown>) || {},\n newOptions[key] as Record<string, unknown>\n );\n // Object.assign(options[key] as object, newOptions[key]);\n } else {\n options[key] = newOptions[key];\n }\n }\n return options as Record<string, unknown>;\n}\n"],"mappings":"AAUA,OAAO,SAASA,kBAAkBA,CAChCC,WAAgC,EAChCC,UAAmB,EACV;EACT,OAAOC,uBAAuB,CAACF,WAAW,IAAI,CAAC,CAAC,EAAEC,UAAU,CAAC;AAC/D;AAEA,SAASC,uBAAuBA,CAC9BF,WAAoC,EACpCC,UAAmC,EACV;EACzB,MAAME,OAAO,GAAG;IAAC,GAAGH;EAAW,CAAC;EAChC,KAAK,MAAM,CAACI,GAAG,EAAEC,QAAQ,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,UAAU,CAAC,EAAE;IACxD,IAAII,QAAQ,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAI,CAACG,KAAK,CAACC,OAAO,CAACJ,QAAQ,CAAC,EAAE;MACxEF,OAAO,CAACC,GAAG,CAAC,GAAGF,uBAAuB,CACnCC,OAAO,CAACC,GAAG,CAAC,IAAgC,CAAC,CAAC,EAC/CH,UAAU,CAACG,GAAG,CAChB,CAAC;IAEH,CAAC,MAAM;MACLD,OAAO,CAACC,GAAG,CAAC,GAAGH,UAAU,CAACG,GAAG,CAAC;IAChC;EACF;EACA,OAAOD,OAAO;AAChB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getFirstCharacters } from "../binary-utils/get-first-characters.js";
|
|
2
|
+
export function parseJSON(string) {
|
|
3
|
+
try {
|
|
4
|
+
return JSON.parse(string);
|
|
5
|
+
} catch (_) {
|
|
6
|
+
throw new Error(`Failed to parse JSON from data starting with "${getFirstCharacters(string)}"`);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=parse-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-json.js","names":["getFirstCharacters","parseJSON","string","JSON","parse","_","Error"],"sources":["../../../src/lib/parser-utils/parse-json.ts"],"sourcesContent":["import {getFirstCharacters} from '../binary-utils/get-first-characters';\n\n/**\n * Minimal JSON parser that throws more meaningful error messages\n */\nexport function parseJSON(string: string): any {\n try {\n return JSON.parse(string);\n } catch (_) {\n throw new Error(`Failed to parse JSON from data starting with \"${getFirstCharacters(string)}\"`);\n }\n}\n"],"mappings":"SAAQA,kBAAkB;AAK1B,OAAO,SAASC,SAASA,CAACC,MAAc,EAAO;EAC7C,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAACF,MAAM,CAAC;EAC3B,CAAC,CAAC,OAAOG,CAAC,EAAE;IACV,MAAM,IAAIC,KAAK,CAAE,iDAAgDN,kBAAkB,CAACE,MAAM,CAAE,GAAE,CAAC;EACjG;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-aliases.js","names":["pathPrefix","fileAliases","setPathPrefix","prefix","getPathPrefix","addAliases","aliases","Object","assign","resolvePath","filename","alias","startsWith","replacement","replace"],"sources":["../../../src/lib/path-utils/file-aliases.ts"],"sourcesContent":["// Simple file alias mechanisms for tests.\n\nlet pathPrefix = '';\nconst fileAliases: {[aliasPath: string]: string} = {};\n\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix: string): void {\n pathPrefix = prefix;\n}\n\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix(): string {\n return pathPrefix;\n}\n\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases: {[aliasPath: string]: string}): void {\n Object.assign(fileAliases, aliases);\n}\n\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename: string): string {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n"],"mappings":"AAEA,IAAIA,UAAU,GAAG,EAAE;AACnB,MAAMC,WAA0C,GAAG,CAAC,CAAC;AAKrD,OAAO,SAASC,aAAaA,CAACC,MAAc,EAAQ;EAClDH,UAAU,GAAGG,MAAM;AACrB;AAKA,OAAO,SAASC,aAAaA,CAAA,EAAW;EACtC,OAAOJ,UAAU;AACnB;AASA,OAAO,SAASK,UAAUA,CAACC,OAAsC,EAAQ;EACvEC,MAAM,CAACC,MAAM,CAACP,WAAW,EAAEK,OAAO,CAAC;AACrC;AAKA,OAAO,SAASG,WAAWA,CAACC,QAAgB,EAAU;EACpD,KAAK,MAAMC,KAAK,IAAIV,WAAW,EAAE;IAC/B,IAAIS,QAAQ,CAACE,UAAU,CAACD,KAAK,CAAC,EAAE;MAC9B,MAAME,WAAW,GAAGZ,WAAW,CAACU,KAAK,CAAC;MACtCD,QAAQ,GAAGA,QAAQ,CAACI,OAAO,CAACH,KAAK,EAAEE,WAAW,CAAC;IACjD;EACF;EACA,IAAI,CAACH,QAAQ,CAACE,UAAU,CAAC,SAAS,CAAC,IAAI,CAACF,QAAQ,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;IACvEF,QAAQ,GAAI,GAAEV,UAAW,GAAEU,QAAS,EAAC;EACvC;EACA,OAAOA,QAAQ;AACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-cwd.js","names":["getCWD","_window$location","process","cwd","pathname","window","location","slice","lastIndexOf"],"sources":["../../../src/lib/path-utils/get-cwd.ts"],"sourcesContent":["// loaders.gl MIT license\n\nexport function getCWD() {\n if (typeof process !== 'undefined' && typeof process.cwd !== 'undefined') {\n return process.cwd();\n }\n const pathname = window.location?.pathname;\n return pathname?.slice(0, pathname.lastIndexOf('/') + 1) || '';\n}\n"],"mappings":"AAEA,OAAO,SAASA,MAAMA,CAAA,EAAG;EAAA,IAAAC,gBAAA;EACvB,IAAI,OAAOC,OAAO,KAAK,WAAW,IAAI,OAAOA,OAAO,CAACC,GAAG,KAAK,WAAW,EAAE;IACxE,OAAOD,OAAO,CAACC,GAAG,CAAC,CAAC;EACtB;EACA,MAAMC,QAAQ,IAAAH,gBAAA,GAAGI,MAAM,CAACC,QAAQ,cAAAL,gBAAA,uBAAfA,gBAAA,CAAiBG,QAAQ;EAC1C,OAAO,CAAAA,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEG,KAAK,CAAC,CAAC,EAAEH,QAAQ,CAACI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAI,EAAE;AAChE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getCWD } from
|
|
1
|
+
import { getCWD } from "./get-cwd.js";
|
|
2
2
|
export function filename(url) {
|
|
3
3
|
const slashIndex = url ? url.lastIndexOf('/') : -1;
|
|
4
4
|
return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';
|
|
@@ -14,10 +14,10 @@ export function join() {
|
|
|
14
14
|
const separator = '/';
|
|
15
15
|
parts = parts.map((part, index) => {
|
|
16
16
|
if (index) {
|
|
17
|
-
part = part.replace(new RegExp(
|
|
17
|
+
part = part.replace(new RegExp(`^${separator}`), '');
|
|
18
18
|
}
|
|
19
19
|
if (index !== parts.length - 1) {
|
|
20
|
-
part = part.replace(new RegExp(
|
|
20
|
+
part = part.replace(new RegExp(`${separator}$`), '');
|
|
21
21
|
}
|
|
22
22
|
return part;
|
|
23
23
|
});
|
|
@@ -44,12 +44,12 @@ export function resolve() {
|
|
|
44
44
|
if (path.length === 0) {
|
|
45
45
|
continue;
|
|
46
46
|
}
|
|
47
|
-
resolvedPath =
|
|
47
|
+
resolvedPath = `${path}/${resolvedPath}`;
|
|
48
48
|
resolvedAbsolute = path.charCodeAt(0) === SLASH;
|
|
49
49
|
}
|
|
50
50
|
resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);
|
|
51
51
|
if (resolvedAbsolute) {
|
|
52
|
-
return
|
|
52
|
+
return `/${resolvedPath}`;
|
|
53
53
|
} else if (resolvedPath.length > 0) {
|
|
54
54
|
return resolvedPath;
|
|
55
55
|
}
|
|
@@ -108,7 +108,7 @@ function normalizeStringPosix(path, allowAboveRoot) {
|
|
|
108
108
|
} else {
|
|
109
109
|
const slice = path.slice(lastSlash + 1, i);
|
|
110
110
|
if (res.length > 0) {
|
|
111
|
-
res +=
|
|
111
|
+
res += `/${slice}`;
|
|
112
112
|
} else {
|
|
113
113
|
res = slice;
|
|
114
114
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","names":["getCWD","filename","url","slashIndex","lastIndexOf","substr","dirname","join","_len","arguments","length","parts","Array","_key","separator","map","part","index","replace","RegExp","resolve","paths","_i","undefined","resolvedPath","resolvedAbsolute","cwd","i","path","charCodeAt","SLASH","normalizeStringPosix","DOT","allowAboveRoot","res","lastSlash","dots","code","isAboveRoot","start","j","slice"],"sources":["../../../src/lib/path-utils/path.ts"],"sourcesContent":["// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\n\nimport {getCWD} from './get-cwd';\n\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url: string): string {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';\n}\n\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url: string): string {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(0, slashIndex) : '';\n}\n\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts: string[]): string {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n\n/* eslint-disable no-continue */\n\n/**\n * https://nodejs.org/api/path.html#path_path_resolve_paths\n * @param paths A sequence of paths or path segments.\n * @return resolved path\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\nexport function resolve(...components: string[]): string {\n const paths: string[] = [];\n for (let _i = 0; _i < components.length; _i++) {\n paths[_i] = components[_i];\n }\n let resolvedPath = '';\n let resolvedAbsolute = false;\n let cwd: string | undefined;\n for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path: string | undefined;\n if (i >= 0) {\n path = paths[i];\n } else {\n if (cwd === undefined) {\n cwd = getCWD();\n }\n path = cwd;\n }\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path (removes leading slash)\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n }\n return '.';\n}\n\nconst SLASH = 47;\nconst DOT = 46;\n\n/**\n * Resolves . and .. elements in a path with directory names\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\n/* eslint-disable max-depth */\n// eslint-disable-next-line complexity, max-statements\nfunction normalizeStringPosix(path: string, allowAboveRoot: boolean): string {\n let res = '';\n let lastSlash = -1;\n let dots = 0;\n let code: number | undefined;\n let isAboveRoot = false;\n\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n } else if (code === SLASH) {\n break;\n } else {\n code = SLASH;\n }\n if (code === SLASH) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (\n res.length < 2 ||\n !isAboveRoot ||\n res.charCodeAt(res.length - 1) !== DOT ||\n res.charCodeAt(res.length - 2) !== DOT\n ) {\n if (res.length > 2) {\n const start = res.length - 1;\n let j = start;\n for (; j >= 0; --j) {\n if (res.charCodeAt(j) === SLASH) {\n break;\n }\n }\n if (j !== start) {\n res = j === -1 ? '' : res.slice(0, j);\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += '/..';\n } else {\n res = '..';\n }\n isAboveRoot = true;\n }\n } else {\n const slice = path.slice(lastSlash + 1, i);\n if (res.length > 0) {\n res += `/${slice}`;\n } else {\n res = slice;\n }\n isAboveRoot = false;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === DOT && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n"],"mappings":"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"}
|