@loaders.gl/loader-utils 4.0.0-alpha.9 → 4.0.0-beta.2
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/es5/index.js +63 -2
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/json-loader.js +1 -1
- package/dist/es5/json-loader.js.map +1 -1
- package/dist/es5/lib/file-provider/data-view-file.js +146 -0
- package/dist/es5/lib/file-provider/data-view-file.js.map +1 -0
- package/dist/es5/lib/file-provider/file-handle-file.js +236 -0
- package/dist/es5/lib/file-provider/file-handle-file.js.map +1 -0
- package/dist/es5/lib/file-provider/file-handle.js +98 -0
- package/dist/es5/lib/file-provider/file-handle.js.map +1 -0
- package/dist/es5/lib/file-provider/file-provider.js +11 -0
- package/dist/es5/lib/file-provider/file-provider.js.map +1 -0
- package/dist/es5/lib/filesystems/filesystem.js +2 -0
- package/dist/es5/lib/filesystems/filesystem.js.map +1 -0
- package/dist/es5/lib/filesystems/node-filesystem.js +28 -62
- package/dist/es5/lib/filesystems/node-filesystem.js.map +1 -1
- package/dist/es5/lib/node/fs.browser.js +9 -0
- package/dist/es5/lib/node/fs.browser.js.map +1 -0
- package/dist/es5/lib/node/fs.js +28 -34
- package/dist/es5/lib/node/fs.js.map +1 -1
- package/dist/es5/lib/node/stream.browser.js +9 -0
- package/dist/es5/lib/node/stream.browser.js.map +1 -0
- package/dist/es5/lib/node/stream.js +6 -7
- package/dist/es5/lib/node/stream.js.map +1 -1
- package/dist/es5/lib/option-utils/merge-loader-options.js +1 -1
- package/dist/es5/lib/option-utils/merge-loader-options.js.map +1 -1
- package/dist/es5/lib/sources/data-source.js +67 -0
- package/dist/es5/lib/sources/data-source.js.map +1 -0
- package/dist/es5/lib/sources/image-source.js +31 -0
- package/dist/es5/lib/sources/image-source.js.map +1 -0
- package/dist/es5/lib/sources/image-tile-source.js +2 -0
- package/dist/es5/lib/sources/image-tile-source.js.map +1 -0
- package/dist/es5/lib/sources/tile-source.js +2 -0
- package/dist/es5/lib/sources/tile-source.js.map +1 -0
- package/dist/es5/lib/sources/utils/image-type.js +2 -0
- package/dist/es5/lib/sources/utils/image-type.js.map +1 -0
- package/dist/es5/lib/sources/utils/utils.js +36 -0
- package/dist/es5/lib/sources/utils/utils.js.map +1 -0
- package/dist/es5/lib/sources/vector-tile-source.js +2 -0
- package/dist/es5/lib/sources/vector-tile-source.js.map +1 -0
- package/dist/es5/lib/worker-loader-utils/create-loader-worker.js +2 -2
- package/dist/es5/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
- package/dist/es5/lib/worker-loader-utils/encode-with-worker.js.map +1 -1
- package/dist/es5/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
- package/dist/es5/loader-types.js +58 -0
- package/dist/es5/loader-types.js.map +1 -0
- package/dist/es5/service-types.js +2 -0
- package/dist/es5/service-types.js.map +1 -0
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/writer-types.js +2 -0
- package/dist/es5/writer-types.js.map +1 -0
- package/dist/esm/index.js +8 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/json-loader.js +1 -1
- package/dist/esm/json-loader.js.map +1 -1
- package/dist/esm/lib/file-provider/data-view-file.js +33 -0
- package/dist/esm/lib/file-provider/data-view-file.js.map +1 -0
- package/dist/esm/lib/file-provider/file-handle-file.js +59 -0
- package/dist/esm/lib/file-provider/file-handle-file.js.map +1 -0
- package/dist/esm/lib/file-provider/file-handle.js +33 -0
- package/dist/esm/lib/file-provider/file-handle.js.map +1 -0
- package/dist/esm/lib/file-provider/file-provider.js +4 -0
- package/dist/esm/lib/file-provider/file-provider.js.map +1 -0
- package/dist/esm/lib/filesystems/filesystem.js +2 -0
- package/dist/esm/lib/filesystems/filesystem.js.map +1 -0
- package/dist/esm/lib/filesystems/node-filesystem.js +18 -25
- package/dist/esm/lib/filesystems/node-filesystem.js.map +1 -1
- package/dist/esm/lib/node/fs.browser.js +2 -0
- package/dist/esm/lib/node/fs.browser.js.map +1 -0
- package/dist/esm/lib/node/fs.js +16 -27
- package/dist/esm/lib/node/fs.js.map +1 -1
- package/dist/esm/lib/node/stream.browser.js +2 -0
- package/dist/esm/lib/node/stream.browser.js.map +1 -0
- package/dist/esm/lib/node/stream.js +2 -5
- package/dist/esm/lib/node/stream.js.map +1 -1
- package/dist/esm/lib/option-utils/merge-loader-options.js +1 -1
- package/dist/esm/lib/option-utils/merge-loader-options.js.map +1 -1
- package/dist/esm/lib/sources/data-source.js +43 -0
- package/dist/esm/lib/sources/data-source.js.map +1 -0
- package/dist/esm/lib/sources/image-source.js +6 -0
- package/dist/esm/lib/sources/image-source.js.map +1 -0
- package/dist/esm/lib/sources/image-tile-source.js +2 -0
- package/dist/esm/lib/sources/image-tile-source.js.map +1 -0
- package/dist/esm/lib/sources/tile-source.js +2 -0
- package/dist/esm/lib/sources/tile-source.js.map +1 -0
- package/dist/esm/lib/sources/utils/image-type.js +2 -0
- package/dist/esm/lib/sources/utils/image-type.js.map +1 -0
- package/dist/esm/lib/sources/utils/utils.js +21 -0
- package/dist/esm/lib/sources/utils/utils.js.map +1 -0
- package/dist/esm/lib/sources/vector-tile-source.js +2 -0
- package/dist/esm/lib/sources/vector-tile-source.js.map +1 -0
- package/dist/esm/lib/worker-loader-utils/create-loader-worker.js +2 -2
- package/dist/esm/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
- package/dist/esm/lib/worker-loader-utils/encode-with-worker.js.map +1 -1
- package/dist/esm/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
- package/dist/esm/loader-types.js +16 -0
- package/dist/esm/loader-types.js.map +1 -0
- package/dist/esm/service-types.js +2 -0
- package/dist/esm/service-types.js.map +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/writer-types.js +2 -0
- package/dist/esm/writer-types.js.map +1 -0
- package/dist/index.d.ts +22 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/json-loader.d.ts +1 -1
- package/dist/json-loader.d.ts.map +1 -1
- package/dist/lib/file-provider/data-view-file.d.ts +37 -0
- package/dist/lib/file-provider/data-view-file.d.ts.map +1 -0
- package/dist/lib/file-provider/file-handle-file.d.ts +53 -0
- package/dist/lib/file-provider/file-handle-file.d.ts.map +1 -0
- package/dist/lib/file-provider/file-handle.d.ts +40 -0
- package/dist/lib/file-provider/file-handle.d.ts.map +1 -0
- package/dist/lib/file-provider/file-provider.d.ts +45 -0
- package/dist/lib/file-provider/file-provider.d.ts.map +1 -0
- package/dist/lib/filesystems/filesystem.d.ts +80 -0
- package/dist/lib/filesystems/filesystem.d.ts.map +1 -0
- package/dist/lib/filesystems/node-filesystem.d.ts +4 -4
- package/dist/lib/filesystems/node-filesystem.d.ts.map +1 -1
- package/dist/lib/node/fs.browser.d.ts +2 -0
- package/dist/lib/node/fs.browser.d.ts.map +1 -0
- package/dist/lib/node/fs.d.ts +19 -14
- package/dist/lib/node/fs.d.ts.map +1 -1
- package/dist/lib/node/stream.browser.d.ts +2 -0
- package/dist/lib/node/stream.browser.d.ts.map +1 -0
- package/dist/lib/node/stream.d.ts +4 -1
- package/dist/lib/node/stream.d.ts.map +1 -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/sources/data-source.d.ts +33 -0
- package/dist/lib/sources/data-source.d.ts.map +1 -0
- package/dist/lib/sources/image-source.d.ts +81 -0
- package/dist/lib/sources/image-source.d.ts.map +1 -0
- package/dist/lib/sources/image-tile-source.d.ts +11 -0
- package/dist/lib/sources/image-tile-source.d.ts.map +1 -0
- package/dist/lib/sources/tile-source.d.ts +105 -0
- package/dist/lib/sources/tile-source.d.ts.map +1 -0
- package/dist/lib/sources/utils/image-type.d.ts +10 -0
- package/dist/lib/sources/utils/image-type.d.ts.map +1 -0
- package/dist/lib/sources/utils/utils.d.ts +13 -0
- package/dist/lib/sources/utils/utils.d.ts.map +1 -0
- package/dist/lib/sources/vector-tile-source.d.ts +10 -0
- package/dist/lib/sources/vector-tile-source.d.ts.map +1 -0
- 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/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/parse-with-worker.d.ts +2 -2
- package/dist/lib/worker-loader-utils/parse-with-worker.d.ts.map +1 -1
- package/dist/loader-types.d.ts +209 -0
- package/dist/loader-types.d.ts.map +1 -0
- package/dist/service-types.d.ts +10 -0
- package/dist/service-types.d.ts.map +1 -0
- package/dist/types.d.ts +1 -240
- package/dist/types.d.ts.map +1 -1
- package/dist/writer-types.d.ts +34 -0
- package/dist/writer-types.d.ts.map +1 -0
- package/package.json +9 -5
- package/src/index.ts +57 -17
- package/src/json-loader.ts +1 -1
- package/src/lib/file-provider/data-view-file.ts +72 -0
- package/src/lib/file-provider/file-handle-file.ts +116 -0
- package/src/lib/file-provider/file-handle.ts +79 -0
- package/src/lib/file-provider/file-provider.ts +56 -0
- package/src/lib/filesystems/filesystem.ts +87 -0
- package/src/lib/filesystems/node-filesystem.ts +19 -31
- package/src/lib/node/fs.browser.ts +1 -0
- package/src/lib/node/fs.ts +20 -50
- package/src/lib/node/stream.browser.ts +1 -0
- package/src/lib/node/stream.ts +3 -11
- package/src/lib/option-utils/merge-loader-options.ts +2 -2
- package/src/lib/sources/data-source.ts +74 -0
- package/src/lib/sources/image-source.ts +95 -0
- package/src/lib/sources/image-tile-source.ts +14 -0
- package/src/lib/sources/tile-source.ts +101 -0
- package/src/lib/sources/utils/image-type.ts +10 -0
- package/src/lib/sources/utils/utils.ts +42 -0
- package/src/lib/sources/vector-tile-source.ts +13 -0
- package/src/lib/worker-loader-utils/create-loader-worker.ts +20 -4
- package/src/lib/worker-loader-utils/encode-with-worker.ts +1 -1
- package/src/lib/worker-loader-utils/parse-with-worker.ts +2 -2
- package/src/loader-types.ts +367 -0
- package/src/service-types.ts +12 -0
- package/src/types.ts +2 -351
- package/src/writer-types.ts +56 -0
- package/dist/index.js +0 -122
- package/dist/json-loader.js +0 -27
- package/dist/lib/binary-utils/array-buffer-utils.js +0 -84
- package/dist/lib/binary-utils/dataview-copy-utils.js +0 -97
- package/dist/lib/binary-utils/get-first-characters.js +0 -45
- package/dist/lib/binary-utils/memory-conversion-utils.js +0 -73
- package/dist/lib/binary-utils/memory-copy-utils.js +0 -61
- package/dist/lib/env-utils/assert.js +0 -13
- package/dist/lib/env-utils/globals.js +0 -30
- package/dist/lib/filesystems/node-filesystem.js +0 -73
- package/dist/lib/filesystems/readable-file.js +0 -25
- package/dist/lib/filesystems/writable-file.js +0 -48
- package/dist/lib/iterators/async-iteration.js +0 -53
- package/dist/lib/iterators/text-iterators.js +0 -61
- package/dist/lib/node/buffer.browser.js +0 -22
- package/dist/lib/node/buffer.js +0 -36
- package/dist/lib/node/fs.js +0 -49
- package/dist/lib/node/promisify.js +0 -22
- package/dist/lib/node/stream.js +0 -17
- package/dist/lib/option-utils/merge-loader-options.js +0 -27
- package/dist/lib/parser-utils/parse-json.js +0 -16
- package/dist/lib/path-utils/file-aliases.js +0 -47
- package/dist/lib/path-utils/get-cwd.js +0 -12
- package/dist/lib/path-utils/path.js +0 -178
- package/dist/lib/request-utils/request-scheduler.js +0 -142
- package/dist/lib/worker-loader-utils/create-loader-worker.js +0 -98
- package/dist/lib/worker-loader-utils/encode-with-worker.js +0 -21
- package/dist/lib/worker-loader-utils/parse-with-worker.js +0 -81
- package/dist/types.js +0 -3
- package/dist/workers/json-worker.js +0 -5
package/src/lib/node/fs.ts
CHANGED
|
@@ -1,73 +1,43 @@
|
|
|
1
1
|
// fs wrapper (promisified fs + avoids bundling fs in browsers)
|
|
2
|
-
import fs from 'fs';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as fsPromises from 'fs/promises';
|
|
3
4
|
import {toArrayBuffer} from './buffer';
|
|
4
5
|
import {promisify2, promisify3} from './promisify';
|
|
5
6
|
|
|
6
|
-
export type {
|
|
7
|
+
export type {BigIntStats, Stats} from 'fs';
|
|
8
|
+
export type {ReadStream, WriteStream} from 'fs';
|
|
7
9
|
|
|
8
|
-
export let readdir;
|
|
9
10
|
/** Wrapper for Node.js fs method */
|
|
10
|
-
export
|
|
11
|
+
export const readdir: any = promisify2(fs.readdir);
|
|
12
|
+
/** Wrapper for Node.js fs method */
|
|
13
|
+
export const stat: any = fsPromises.stat;
|
|
14
|
+
export const statSync = fs.statSync;
|
|
11
15
|
|
|
12
16
|
/** Wrapper for Node.js fs method */
|
|
13
|
-
export
|
|
17
|
+
export const readFile: any = fs.readFile;
|
|
14
18
|
/** Wrapper for Node.js fs method */
|
|
15
|
-
export
|
|
19
|
+
export const readFileSync = fs.readFileSync;
|
|
16
20
|
/** Wrapper for Node.js fs method */
|
|
17
|
-
export
|
|
21
|
+
export const writeFile: any = promisify3(fs.writeFile);
|
|
18
22
|
/** Wrapper for Node.js fs method */
|
|
19
|
-
export
|
|
23
|
+
export const writeFileSync = fs.writeFileSync;
|
|
20
24
|
|
|
21
25
|
// file descriptors
|
|
22
26
|
|
|
23
27
|
/** Wrapper for Node.js fs method */
|
|
24
|
-
export
|
|
28
|
+
export const open: any = fs.open;
|
|
25
29
|
/** Wrapper for Node.js fs method */
|
|
26
|
-
export
|
|
30
|
+
export const close = (fd: number) =>
|
|
31
|
+
new Promise<void>((resolve, reject) => fs.close(fd, (err) => (err ? reject(err) : resolve())));
|
|
27
32
|
/** Wrapper for Node.js fs method */
|
|
28
|
-
export
|
|
33
|
+
export const read: any = fs.read;
|
|
29
34
|
/** Wrapper for Node.js fs method */
|
|
30
|
-
export
|
|
31
|
-
|
|
32
|
-
export let createWriteStream: typeof fs.createWriteStream;
|
|
33
|
-
|
|
34
|
-
export let isSupported = Boolean(fs);
|
|
35
|
-
|
|
36
|
-
// paths
|
|
37
|
-
|
|
38
|
-
try {
|
|
39
|
-
/** Wrapper for Node.js fs method */
|
|
40
|
-
readdir = promisify2(fs.readdir);
|
|
41
|
-
/** Wrapper for Node.js fs method */
|
|
42
|
-
stat = promisify2(fs.stat);
|
|
35
|
+
export const fstat: any = fs.fstat;
|
|
43
36
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/** Wrapper for Node.js fs method */
|
|
47
|
-
readFileSync = fs.readFileSync;
|
|
48
|
-
/** Wrapper for Node.js fs method */
|
|
49
|
-
writeFile = promisify3(fs.writeFile);
|
|
50
|
-
/** Wrapper for Node.js fs method */
|
|
51
|
-
writeFileSync = fs.writeFileSync;
|
|
37
|
+
export const createReadStream = fs.createReadStream;
|
|
38
|
+
export const createWriteStream = fs.createWriteStream;
|
|
52
39
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/** Wrapper for Node.js fs method */
|
|
56
|
-
open = fs.open;
|
|
57
|
-
/** Wrapper for Node.js fs method */
|
|
58
|
-
close = (fd: number) =>
|
|
59
|
-
new Promise((resolve, reject) => fs.close(fd, (err) => (err ? reject(err) : resolve())));
|
|
60
|
-
/** Wrapper for Node.js fs method */
|
|
61
|
-
read = fs.read;
|
|
62
|
-
/** Wrapper for Node.js fs method */
|
|
63
|
-
fstat = fs.fstat;
|
|
64
|
-
|
|
65
|
-
createWriteStream = fs.createWriteStream;
|
|
66
|
-
|
|
67
|
-
isSupported = Boolean(fs);
|
|
68
|
-
} catch {
|
|
69
|
-
// ignore
|
|
70
|
-
}
|
|
40
|
+
export const isSupported = Boolean(fs);
|
|
71
41
|
|
|
72
42
|
export async function _readToArrayBuffer(fd: number, start: number, length: number) {
|
|
73
43
|
const buffer = Buffer.alloc(length);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isSupported = false;
|
package/src/lib/node/stream.ts
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
// loaders.gl, MIT license
|
|
2
2
|
|
|
3
|
-
import stream from 'stream';
|
|
3
|
+
import * as stream from 'stream';
|
|
4
4
|
|
|
5
5
|
export type {Writable} from 'stream';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
/** Wrapper for Node.js stream method */
|
|
8
|
+
export const Transform = stream.Transform;
|
|
8
9
|
|
|
9
10
|
export const isSupported = Boolean(stream);
|
|
10
|
-
|
|
11
|
-
// paths
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
/** Wrapper for Node.js fs method */
|
|
15
|
-
Transform = stream.Transform;
|
|
16
|
-
} catch {
|
|
17
|
-
// ignore
|
|
18
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// loaders.gl, MIT license
|
|
2
2
|
|
|
3
|
-
import {LoaderOptions} from '../../types';
|
|
3
|
+
import {LoaderOptions} from '../../loader-types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
*
|
|
@@ -21,7 +21,7 @@ function mergeOptionsRecursively(
|
|
|
21
21
|
): Record<string, unknown> {
|
|
22
22
|
const options = {...baseOptions};
|
|
23
23
|
for (const [key, newValue] of Object.entries(newOptions)) {
|
|
24
|
-
if (newValue && typeof newValue === 'object') {
|
|
24
|
+
if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) {
|
|
25
25
|
options[key] = mergeOptionsRecursively(
|
|
26
26
|
(options[key] as Record<string, unknown>) || {},
|
|
27
27
|
newOptions[key] as Record<string, unknown>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {LoaderOptions} from '@loaders.gl/loader-utils';
|
|
4
|
+
|
|
5
|
+
/** Common properties for all data sources */
|
|
6
|
+
export type DataSourceProps = {
|
|
7
|
+
/** LoaderOptions provide an option to override `fetch`. Will also be passed to any sub loaders */
|
|
8
|
+
loadOptions?: LoaderOptions;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/** base class of all data sources */
|
|
12
|
+
export abstract class DataSource<PropsT extends DataSourceProps = DataSourceProps> {
|
|
13
|
+
/** A resolved fetch function extracted from loadOptions prop */
|
|
14
|
+
fetch: (url: string, options?: RequestInit) => Promise<Response>;
|
|
15
|
+
/** The actual load options, if calling a loaders.gl loader */
|
|
16
|
+
loadOptions: LoaderOptions;
|
|
17
|
+
_needsRefresh: boolean = true;
|
|
18
|
+
|
|
19
|
+
props: PropsT;
|
|
20
|
+
|
|
21
|
+
constructor(props: PropsT) {
|
|
22
|
+
this.props = {...props};
|
|
23
|
+
this.loadOptions = {...props.loadOptions};
|
|
24
|
+
this.fetch = getFetchFunction(this.loadOptions);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
setProps(props: PropsT) {
|
|
28
|
+
this.props = Object.assign(this.props, props);
|
|
29
|
+
// TODO - add a shallow compare to avoid setting refresh if no change?
|
|
30
|
+
this.setNeedsRefresh();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Mark this data source as needing a refresh (redraw) */
|
|
34
|
+
setNeedsRefresh(): void {
|
|
35
|
+
this._needsRefresh = true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Does this data source need refreshing?
|
|
40
|
+
* @note The specifics of the refresh mechanism depends on type of data source
|
|
41
|
+
*/
|
|
42
|
+
getNeedsRefresh(clear: boolean = true) {
|
|
43
|
+
const needsRefresh = this._needsRefresh;
|
|
44
|
+
if (clear) {
|
|
45
|
+
this._needsRefresh = false;
|
|
46
|
+
}
|
|
47
|
+
return needsRefresh;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Gets the current fetch function from options
|
|
53
|
+
* @todo - move to loader-utils module
|
|
54
|
+
* @todo - use in core module counterpart
|
|
55
|
+
* @param options
|
|
56
|
+
* @param context
|
|
57
|
+
*/
|
|
58
|
+
export function getFetchFunction(options?: LoaderOptions) {
|
|
59
|
+
const fetchFunction = options?.fetch;
|
|
60
|
+
|
|
61
|
+
// options.fetch can be a function
|
|
62
|
+
if (fetchFunction && typeof fetchFunction === 'function') {
|
|
63
|
+
return (url: string, fetchOptions?: RequestInit) => fetchFunction(url, fetchOptions);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// options.fetch can be an options object, use global fetch with those options
|
|
67
|
+
const fetchOptions = options?.fetch;
|
|
68
|
+
if (fetchOptions && typeof fetchOptions !== 'function') {
|
|
69
|
+
return (url) => fetch(url, fetchOptions);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// else return the global fetch function
|
|
73
|
+
return (url) => fetch(url);
|
|
74
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {DataSourceProps} from './data-source';
|
|
4
|
+
import {DataSource} from './data-source';
|
|
5
|
+
import {ImageType} from './utils/image-type';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Normalized capabilities of an Image service
|
|
9
|
+
* @example
|
|
10
|
+
* The WMSService will normalize the response to the WMS `GetCapabilities`
|
|
11
|
+
* data structure extracted from WMS XML response into an ImageSourceMetadata.
|
|
12
|
+
*/
|
|
13
|
+
export type ImageSourceMetadata = {
|
|
14
|
+
name: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
abstract?: string;
|
|
17
|
+
keywords: string[];
|
|
18
|
+
layers: ImageSourceLayer[];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/** Description of one data layer in the image source */
|
|
22
|
+
export type ImageSourceLayer = {
|
|
23
|
+
/** Name of this layer */
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Human readable title of this layer */
|
|
26
|
+
title?: string;
|
|
27
|
+
/** Coordinate systems supported by this layer */
|
|
28
|
+
crs?: string[];
|
|
29
|
+
/** layer limits in unspecified CRS:84-like lng/lat, for quick access w/o CRS calculations. */
|
|
30
|
+
geographicBoundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];
|
|
31
|
+
/** Sub layers of this layer */
|
|
32
|
+
layers?: ImageSourceLayer[];
|
|
33
|
+
|
|
34
|
+
/** @deprecated from v3.4: non-vis.gl style bounding box. Use `.geographicBoundingBox` instead */
|
|
35
|
+
boundingBox?: [number, number, number, number];
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** Generic parameters for requesting an image from an image source */
|
|
39
|
+
export type GetImageParameters = {
|
|
40
|
+
/** Layers to render */
|
|
41
|
+
layers: string | string[];
|
|
42
|
+
/** Styling */
|
|
43
|
+
styles?: unknown;
|
|
44
|
+
/** bounding box of the requested map image */
|
|
45
|
+
bbox: [number, number, number, number];
|
|
46
|
+
/** pixel width of returned image */
|
|
47
|
+
width: number;
|
|
48
|
+
/** pixels */
|
|
49
|
+
height: number;
|
|
50
|
+
/** crs for the image (not the bounding box) */
|
|
51
|
+
crs?: string;
|
|
52
|
+
/** requested format for the return image */
|
|
53
|
+
format?: 'image/png';
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Attempt to break down GetImageParameters
|
|
57
|
+
export type ImageFilters = {
|
|
58
|
+
/** Layers to render */
|
|
59
|
+
layers: string | string[];
|
|
60
|
+
/** Styling */
|
|
61
|
+
styles?: unknown;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type ImageRegion = {
|
|
65
|
+
/** bounding box of the requested map image */
|
|
66
|
+
bbox: [number, number, number, number];
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export type ImageFormat = {
|
|
70
|
+
/** pixel width of returned image */
|
|
71
|
+
width: number;
|
|
72
|
+
/** pixels */
|
|
73
|
+
height: number;
|
|
74
|
+
/** crs for the image (not the bounding box) */
|
|
75
|
+
crs?: string;
|
|
76
|
+
/** requested format for the return image */
|
|
77
|
+
format?: 'image/png';
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export type ImageSourceProps = DataSourceProps;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* MapImageSource - data sources that allow data to be queried by (geospatial) extents
|
|
84
|
+
* @note
|
|
85
|
+
* - If geospatial, bounding box is expected to be in web mercator coordinates
|
|
86
|
+
*/
|
|
87
|
+
export abstract class ImageSource<
|
|
88
|
+
PropsT extends ImageSourceProps = ImageSourceProps
|
|
89
|
+
> extends DataSource<PropsT> {
|
|
90
|
+
static type: string = 'template';
|
|
91
|
+
static testURL = (url: string): boolean => false;
|
|
92
|
+
|
|
93
|
+
abstract getMetadata(): Promise<ImageSourceMetadata>;
|
|
94
|
+
abstract getImage(parameters: GetImageParameters): Promise<ImageType>;
|
|
95
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {ImageType} from './utils/image-type';
|
|
4
|
+
import type {TileSource, TileSourceMetadata} from './tile-source';
|
|
5
|
+
import type {GetTileParameters} from './tile-source';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* MapTileSource - data sources that allow data to be queried by (geospatial) tile
|
|
9
|
+
* @note If geospatial, bounding box is expected to be in web mercator coordinates
|
|
10
|
+
*/
|
|
11
|
+
export interface ImageTileSource<MetadataT extends TileSourceMetadata = TileSourceMetadata>
|
|
12
|
+
extends TileSource<MetadataT> {
|
|
13
|
+
getImageTile(parameters: GetTileParameters): Promise<ImageType | null>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Normalized capabilities of an Image service
|
|
5
|
+
* Sources are expected to normalize the response to capabilities
|
|
6
|
+
* @example
|
|
7
|
+
* A WMS service would normalize the response to the WMS `GetCapabilities` data structure extracted from WMS XML response
|
|
8
|
+
* into an TileSourceMetadata.
|
|
9
|
+
*/
|
|
10
|
+
export type TileSourceMetadata = {
|
|
11
|
+
format?: string;
|
|
12
|
+
formatHeader?: unknown;
|
|
13
|
+
|
|
14
|
+
/** Name of the tileset (extracted from JSON metadata if available) */
|
|
15
|
+
name?: string;
|
|
16
|
+
title?: string;
|
|
17
|
+
abstract?: string;
|
|
18
|
+
keywords?: string[];
|
|
19
|
+
/** Attribution string (extracted from JSON metadata if available) */
|
|
20
|
+
attributions?: string[];
|
|
21
|
+
|
|
22
|
+
/** Minimal zoom level of tiles in this tileset */
|
|
23
|
+
minZoom?: number;
|
|
24
|
+
/** Maximal zoom level of tiles in this tileset */
|
|
25
|
+
maxZoom?: number;
|
|
26
|
+
/** Bounding box of tiles in this tileset `[[w, s], [e, n]]` */
|
|
27
|
+
boundingBox?: [min: [x: number, y: number], max: [x: number, y: number]];
|
|
28
|
+
|
|
29
|
+
/** Layer information */
|
|
30
|
+
layer?: {
|
|
31
|
+
name: string;
|
|
32
|
+
title?: string;
|
|
33
|
+
srs?: string[];
|
|
34
|
+
boundingBox?: [number, number, number, number];
|
|
35
|
+
layers: TileSourceLayer[];
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Description of one data layer in the image source
|
|
41
|
+
*/
|
|
42
|
+
export type TileSourceLayer = {
|
|
43
|
+
name: string;
|
|
44
|
+
title?: string;
|
|
45
|
+
srs?: string[];
|
|
46
|
+
boundingBox?: [number, number, number, number];
|
|
47
|
+
layers: TileSourceLayer[];
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Generic parameters for requesting an image from an image source
|
|
52
|
+
*/
|
|
53
|
+
export type GetTileParameters = {
|
|
54
|
+
/** Layers to render */
|
|
55
|
+
layers: string | string[];
|
|
56
|
+
/** Styling */
|
|
57
|
+
styles?: unknown;
|
|
58
|
+
/** bounding box of the requested map image */
|
|
59
|
+
zoom: number;
|
|
60
|
+
/** tile x coordinate */
|
|
61
|
+
x: number;
|
|
62
|
+
/** tile y coordinate */
|
|
63
|
+
y: number;
|
|
64
|
+
/** srs for the image (not the bounding box) */
|
|
65
|
+
srs?: string;
|
|
66
|
+
/** requested format for the return image */
|
|
67
|
+
format?: 'image/png';
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export type TileLoadParameters = {
|
|
71
|
+
index: {x: number; y: number; z: number};
|
|
72
|
+
id: string;
|
|
73
|
+
bbox: TileBoundingBox;
|
|
74
|
+
zoom?: number;
|
|
75
|
+
url?: string | null;
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
userData?: Record<string, any>;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/** deck.gl compatible bounding box */
|
|
81
|
+
export type TileBoundingBox = NonGeoBoundingBox | GeoBoundingBox;
|
|
82
|
+
export type GeoBoundingBox = {west: number; north: number; east: number; south: number};
|
|
83
|
+
export type NonGeoBoundingBox = {left: number; top: number; right: number; bottom: number};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Props for a TileSource
|
|
87
|
+
*/
|
|
88
|
+
export type TileSourceProps = {};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* MapTileSource - data sources that allow data to be queried by (geospatial) extents
|
|
92
|
+
* @note
|
|
93
|
+
* - If geospatial, bounding box is expected to be in web mercator coordinates
|
|
94
|
+
*/
|
|
95
|
+
export interface TileSource<MetadataT extends TileSourceMetadata> {
|
|
96
|
+
getMetadata(): Promise<MetadataT>;
|
|
97
|
+
/** Flat parameters */
|
|
98
|
+
getTile(parameters: GetTileParameters): Promise<unknown>;
|
|
99
|
+
/** deck.gl style parameters */
|
|
100
|
+
getTileData(parameters: TileLoadParameters): Promise<unknown | null>;
|
|
101
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Supported Image Types @note duplicates definition in images/schema to avoid circular deps */
|
|
2
|
+
export type ImageType = ImageBitmap | ImageDataType | HTMLImageElement;
|
|
3
|
+
|
|
4
|
+
/** data images @note duplicates definition in images/schema to avoid circular deps */
|
|
5
|
+
export type ImageDataType = {
|
|
6
|
+
data: Uint8Array;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
compressed?: boolean;
|
|
10
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {LoaderOptions} from '@loaders.gl/loader-utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Gets the current fetch function from options
|
|
7
|
+
* @todo - move to loader-utils module
|
|
8
|
+
* @todo - use in core module counterpart
|
|
9
|
+
* @param options
|
|
10
|
+
* @param context
|
|
11
|
+
*/
|
|
12
|
+
export function getFetchFunction(options?: LoaderOptions) {
|
|
13
|
+
const fetchFunction = options?.fetch;
|
|
14
|
+
|
|
15
|
+
// options.fetch can be a function
|
|
16
|
+
if (fetchFunction && typeof fetchFunction === 'function') {
|
|
17
|
+
return (url: string, fetchOptions?: RequestInit) => fetchFunction(url, fetchOptions);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// options.fetch can be an options object, use global fetch with those options
|
|
21
|
+
const fetchOptions = options?.fetch;
|
|
22
|
+
if (fetchOptions && typeof fetchOptions !== 'function') {
|
|
23
|
+
return (url) => fetch(url, fetchOptions);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// else return the global fetch function
|
|
27
|
+
return (url) => fetch(url);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function mergeImageServiceProps<Props extends {loadOptions?: any}>(
|
|
31
|
+
props: Props
|
|
32
|
+
): Required<Props> {
|
|
33
|
+
// @ts-expect-error
|
|
34
|
+
return {
|
|
35
|
+
// Default fetch
|
|
36
|
+
...props,
|
|
37
|
+
loadOptions: {
|
|
38
|
+
...props.loadOptions,
|
|
39
|
+
fetch: getFetchFunction(props.loadOptions)
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import {TileSource, TileSourceMetadata} from './tile-source';
|
|
4
|
+
import {GetTileParameters} from './tile-source';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* MapTileSource - data sources that allow data to be queried by (geospatial) tile
|
|
8
|
+
* @note If geospatial, bounding box is expected to be in web mercator coordinates
|
|
9
|
+
*/
|
|
10
|
+
export interface VectorTileSource<MetadataT extends TileSourceMetadata = TileSourceMetadata>
|
|
11
|
+
extends TileSource<MetadataT> {
|
|
12
|
+
getVectorTile(parameters: GetTileParameters): Promise<unknown | null>;
|
|
13
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-restricted-globals */
|
|
2
|
-
import type {LoaderWithParser} from '../../types';
|
|
2
|
+
import type {LoaderWithParser, LoaderOptions, LoaderContext} from '../../loader-types';
|
|
3
3
|
import {WorkerBody} from '@loaders.gl/worker-utils';
|
|
4
4
|
// import {validateLoaderVersion} from './validate-loader-version';
|
|
5
5
|
|
|
@@ -27,9 +27,10 @@ export function createLoaderWorker(loader: LoaderWithParser) {
|
|
|
27
27
|
loader,
|
|
28
28
|
arrayBuffer: input,
|
|
29
29
|
options,
|
|
30
|
+
// @ts-expect-error fetch missing
|
|
30
31
|
context: {
|
|
31
32
|
...context,
|
|
32
|
-
|
|
33
|
+
_parse: parseOnMainThread
|
|
33
34
|
}
|
|
34
35
|
});
|
|
35
36
|
WorkerBody.postMessage('done', {result});
|
|
@@ -43,7 +44,12 @@ export function createLoaderWorker(loader: LoaderWithParser) {
|
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
function parseOnMainThread(
|
|
47
|
+
function parseOnMainThread(
|
|
48
|
+
arrayBuffer: ArrayBuffer,
|
|
49
|
+
loader: any,
|
|
50
|
+
options?: LoaderOptions,
|
|
51
|
+
context?: LoaderContext
|
|
52
|
+
): Promise<void> {
|
|
47
53
|
return new Promise((resolve, reject) => {
|
|
48
54
|
const id = requestId++;
|
|
49
55
|
|
|
@@ -83,7 +89,17 @@ function parseOnMainThread(arrayBuffer: ArrayBuffer, options: {[key: string]: an
|
|
|
83
89
|
// TODO - Why not support async loader.parse* funcs here?
|
|
84
90
|
// TODO - Why not reuse a common function instead of reimplementing loader.parse* selection logic? Keeping loader small?
|
|
85
91
|
// TODO - Lack of appropriate parser functions can be detected when we create worker, no need to wait until parse
|
|
86
|
-
async function parseData({
|
|
92
|
+
async function parseData({
|
|
93
|
+
loader,
|
|
94
|
+
arrayBuffer,
|
|
95
|
+
options,
|
|
96
|
+
context
|
|
97
|
+
}: {
|
|
98
|
+
loader: LoaderWithParser;
|
|
99
|
+
arrayBuffer: ArrayBuffer;
|
|
100
|
+
options: LoaderOptions;
|
|
101
|
+
context: LoaderContext;
|
|
102
|
+
}) {
|
|
87
103
|
let data;
|
|
88
104
|
let parser;
|
|
89
105
|
if (loader.parseSync || loader.parse) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
WorkerMessagePayload,
|
|
5
5
|
isBrowser
|
|
6
6
|
} from '@loaders.gl/worker-utils';
|
|
7
|
-
import type {Loader, LoaderOptions, LoaderContext} from '../../types';
|
|
7
|
+
import type {Loader, LoaderOptions, LoaderContext} from '../../loader-types';
|
|
8
8
|
import {WorkerFarm, getWorkerURL} from '@loaders.gl/worker-utils';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -34,7 +34,7 @@ export async function parseWithWorker(
|
|
|
34
34
|
data: any,
|
|
35
35
|
options?: LoaderOptions,
|
|
36
36
|
context?: LoaderContext,
|
|
37
|
-
parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise<
|
|
37
|
+
parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise<unknown>
|
|
38
38
|
) {
|
|
39
39
|
const name = loader.id; // TODO
|
|
40
40
|
const url = getWorkerURL(loader, options);
|