@loaders.gl/loader-utils 4.0.0-alpha.9 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/es5/index.js +63 -2
  2. package/dist/es5/index.js.map +1 -1
  3. package/dist/es5/json-loader.js +1 -1
  4. package/dist/es5/json-loader.js.map +1 -1
  5. package/dist/es5/lib/file-provider/data-view-file.js +146 -0
  6. package/dist/es5/lib/file-provider/data-view-file.js.map +1 -0
  7. package/dist/es5/lib/file-provider/file-handle-file.js +236 -0
  8. package/dist/es5/lib/file-provider/file-handle-file.js.map +1 -0
  9. package/dist/es5/lib/file-provider/file-handle.js +98 -0
  10. package/dist/es5/lib/file-provider/file-handle.js.map +1 -0
  11. package/dist/es5/lib/file-provider/file-provider.js +11 -0
  12. package/dist/es5/lib/file-provider/file-provider.js.map +1 -0
  13. package/dist/es5/lib/filesystems/filesystem.js +2 -0
  14. package/dist/es5/lib/filesystems/filesystem.js.map +1 -0
  15. package/dist/es5/lib/filesystems/node-filesystem.browser.js +172 -0
  16. package/dist/es5/lib/filesystems/node-filesystem.browser.js.map +1 -0
  17. package/dist/es5/lib/filesystems/node-filesystem.js +2 -2
  18. package/dist/es5/lib/filesystems/node-filesystem.js.map +1 -1
  19. package/dist/es5/lib/node/fs.browser.js +9 -0
  20. package/dist/es5/lib/node/fs.browser.js.map +1 -0
  21. package/dist/es5/lib/node/fs.js +28 -34
  22. package/dist/es5/lib/node/fs.js.map +1 -1
  23. package/dist/es5/lib/node/stream.browser.js +9 -0
  24. package/dist/es5/lib/node/stream.browser.js.map +1 -0
  25. package/dist/es5/lib/node/stream.js +6 -7
  26. package/dist/es5/lib/node/stream.js.map +1 -1
  27. package/dist/es5/lib/option-utils/merge-loader-options.js +1 -1
  28. package/dist/es5/lib/option-utils/merge-loader-options.js.map +1 -1
  29. package/dist/es5/lib/sources/data-source.js +67 -0
  30. package/dist/es5/lib/sources/data-source.js.map +1 -0
  31. package/dist/es5/lib/sources/image-source.js +31 -0
  32. package/dist/es5/lib/sources/image-source.js.map +1 -0
  33. package/dist/es5/lib/sources/image-tile-source.js +2 -0
  34. package/dist/es5/lib/sources/image-tile-source.js.map +1 -0
  35. package/dist/es5/lib/sources/tile-source.js +2 -0
  36. package/dist/es5/lib/sources/tile-source.js.map +1 -0
  37. package/dist/es5/lib/sources/utils/image-type.js +2 -0
  38. package/dist/es5/lib/sources/utils/image-type.js.map +1 -0
  39. package/dist/es5/lib/sources/utils/utils.js +36 -0
  40. package/dist/es5/lib/sources/utils/utils.js.map +1 -0
  41. package/dist/es5/lib/sources/vector-tile-source.js +2 -0
  42. package/dist/es5/lib/sources/vector-tile-source.js.map +1 -0
  43. package/dist/es5/lib/worker-loader-utils/create-loader-worker.js +2 -2
  44. package/dist/es5/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
  45. package/dist/es5/lib/worker-loader-utils/encode-with-worker.js.map +1 -1
  46. package/dist/es5/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
  47. package/dist/es5/loader-types.js +58 -0
  48. package/dist/es5/loader-types.js.map +1 -0
  49. package/dist/es5/service-types.js +2 -0
  50. package/dist/es5/service-types.js.map +1 -0
  51. package/dist/es5/types.js.map +1 -1
  52. package/dist/es5/writer-types.js +2 -0
  53. package/dist/es5/writer-types.js.map +1 -0
  54. package/dist/esm/index.js +8 -1
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/json-loader.js +1 -1
  57. package/dist/esm/json-loader.js.map +1 -1
  58. package/dist/esm/lib/file-provider/data-view-file.js +33 -0
  59. package/dist/esm/lib/file-provider/data-view-file.js.map +1 -0
  60. package/dist/esm/lib/file-provider/file-handle-file.js +59 -0
  61. package/dist/esm/lib/file-provider/file-handle-file.js.map +1 -0
  62. package/dist/esm/lib/file-provider/file-handle.js +33 -0
  63. package/dist/esm/lib/file-provider/file-handle.js.map +1 -0
  64. package/dist/esm/lib/file-provider/file-provider.js +4 -0
  65. package/dist/esm/lib/file-provider/file-provider.js.map +1 -0
  66. package/dist/esm/lib/filesystems/filesystem.js +2 -0
  67. package/dist/esm/lib/filesystems/filesystem.js.map +1 -0
  68. package/dist/esm/lib/filesystems/node-filesystem.browser.js +42 -0
  69. package/dist/esm/lib/filesystems/node-filesystem.browser.js.map +1 -0
  70. package/dist/esm/lib/filesystems/node-filesystem.js +1 -1
  71. package/dist/esm/lib/filesystems/node-filesystem.js.map +1 -1
  72. package/dist/esm/lib/node/fs.browser.js +2 -0
  73. package/dist/esm/lib/node/fs.browser.js.map +1 -0
  74. package/dist/esm/lib/node/fs.js +16 -27
  75. package/dist/esm/lib/node/fs.js.map +1 -1
  76. package/dist/esm/lib/node/stream.browser.js +2 -0
  77. package/dist/esm/lib/node/stream.browser.js.map +1 -0
  78. package/dist/esm/lib/node/stream.js +2 -5
  79. package/dist/esm/lib/node/stream.js.map +1 -1
  80. package/dist/esm/lib/option-utils/merge-loader-options.js +1 -1
  81. package/dist/esm/lib/option-utils/merge-loader-options.js.map +1 -1
  82. package/dist/esm/lib/sources/data-source.js +43 -0
  83. package/dist/esm/lib/sources/data-source.js.map +1 -0
  84. package/dist/esm/lib/sources/image-source.js +6 -0
  85. package/dist/esm/lib/sources/image-source.js.map +1 -0
  86. package/dist/esm/lib/sources/image-tile-source.js +2 -0
  87. package/dist/esm/lib/sources/image-tile-source.js.map +1 -0
  88. package/dist/esm/lib/sources/tile-source.js +2 -0
  89. package/dist/esm/lib/sources/tile-source.js.map +1 -0
  90. package/dist/esm/lib/sources/utils/image-type.js +2 -0
  91. package/dist/esm/lib/sources/utils/image-type.js.map +1 -0
  92. package/dist/esm/lib/sources/utils/utils.js +21 -0
  93. package/dist/esm/lib/sources/utils/utils.js.map +1 -0
  94. package/dist/esm/lib/sources/vector-tile-source.js +2 -0
  95. package/dist/esm/lib/sources/vector-tile-source.js.map +1 -0
  96. package/dist/esm/lib/worker-loader-utils/create-loader-worker.js +2 -2
  97. package/dist/esm/lib/worker-loader-utils/create-loader-worker.js.map +1 -1
  98. package/dist/esm/lib/worker-loader-utils/encode-with-worker.js.map +1 -1
  99. package/dist/esm/lib/worker-loader-utils/parse-with-worker.js.map +1 -1
  100. package/dist/esm/loader-types.js +16 -0
  101. package/dist/esm/loader-types.js.map +1 -0
  102. package/dist/esm/service-types.js +2 -0
  103. package/dist/esm/service-types.js.map +1 -0
  104. package/dist/esm/types.js.map +1 -1
  105. package/dist/esm/writer-types.js +2 -0
  106. package/dist/esm/writer-types.js.map +1 -0
  107. package/dist/index.d.ts +22 -2
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/json-loader.d.ts +1 -1
  110. package/dist/json-loader.d.ts.map +1 -1
  111. package/dist/lib/file-provider/data-view-file.d.ts +37 -0
  112. package/dist/lib/file-provider/data-view-file.d.ts.map +1 -0
  113. package/dist/lib/file-provider/file-handle-file.d.ts +53 -0
  114. package/dist/lib/file-provider/file-handle-file.d.ts.map +1 -0
  115. package/dist/lib/file-provider/file-handle.d.ts +40 -0
  116. package/dist/lib/file-provider/file-handle.d.ts.map +1 -0
  117. package/dist/lib/file-provider/file-provider.d.ts +45 -0
  118. package/dist/lib/file-provider/file-provider.d.ts.map +1 -0
  119. package/dist/lib/filesystems/filesystem.d.ts +80 -0
  120. package/dist/lib/filesystems/filesystem.d.ts.map +1 -0
  121. package/dist/lib/filesystems/node-filesystem.browser.d.ts +39 -0
  122. package/dist/lib/filesystems/node-filesystem.browser.d.ts.map +1 -0
  123. package/dist/lib/filesystems/node-filesystem.d.ts +3 -3
  124. package/dist/lib/filesystems/node-filesystem.d.ts.map +1 -1
  125. package/dist/lib/node/fs.browser.d.ts +2 -0
  126. package/dist/lib/node/fs.browser.d.ts.map +1 -0
  127. package/dist/lib/node/fs.d.ts +19 -14
  128. package/dist/lib/node/fs.d.ts.map +1 -1
  129. package/dist/lib/node/stream.browser.d.ts +2 -0
  130. package/dist/lib/node/stream.browser.d.ts.map +1 -0
  131. package/dist/lib/node/stream.d.ts +4 -1
  132. package/dist/lib/node/stream.d.ts.map +1 -1
  133. package/dist/lib/option-utils/merge-loader-options.d.ts +1 -1
  134. package/dist/lib/option-utils/merge-loader-options.d.ts.map +1 -1
  135. package/dist/lib/sources/data-source.d.ts +33 -0
  136. package/dist/lib/sources/data-source.d.ts.map +1 -0
  137. package/dist/lib/sources/image-source.d.ts +81 -0
  138. package/dist/lib/sources/image-source.d.ts.map +1 -0
  139. package/dist/lib/sources/image-tile-source.d.ts +11 -0
  140. package/dist/lib/sources/image-tile-source.d.ts.map +1 -0
  141. package/dist/lib/sources/tile-source.d.ts +105 -0
  142. package/dist/lib/sources/tile-source.d.ts.map +1 -0
  143. package/dist/lib/sources/utils/image-type.d.ts +10 -0
  144. package/dist/lib/sources/utils/image-type.d.ts.map +1 -0
  145. package/dist/lib/sources/utils/utils.d.ts +13 -0
  146. package/dist/lib/sources/utils/utils.d.ts.map +1 -0
  147. package/dist/lib/sources/vector-tile-source.d.ts +10 -0
  148. package/dist/lib/sources/vector-tile-source.d.ts.map +1 -0
  149. package/dist/lib/worker-loader-utils/create-loader-worker.d.ts +1 -1
  150. package/dist/lib/worker-loader-utils/create-loader-worker.d.ts.map +1 -1
  151. package/dist/lib/worker-loader-utils/encode-with-worker.d.ts +1 -1
  152. package/dist/lib/worker-loader-utils/encode-with-worker.d.ts.map +1 -1
  153. package/dist/lib/worker-loader-utils/parse-with-worker.d.ts +2 -2
  154. package/dist/lib/worker-loader-utils/parse-with-worker.d.ts.map +1 -1
  155. package/dist/loader-types.d.ts +209 -0
  156. package/dist/loader-types.d.ts.map +1 -0
  157. package/dist/service-types.d.ts +10 -0
  158. package/dist/service-types.d.ts.map +1 -0
  159. package/dist/types.d.ts +1 -240
  160. package/dist/types.d.ts.map +1 -1
  161. package/dist/writer-types.d.ts +34 -0
  162. package/dist/writer-types.d.ts.map +1 -0
  163. package/package.json +9 -5
  164. package/src/index.ts +57 -17
  165. package/src/json-loader.ts +1 -1
  166. package/src/lib/file-provider/data-view-file.ts +72 -0
  167. package/src/lib/file-provider/file-handle-file.ts +116 -0
  168. package/src/lib/file-provider/file-handle.ts +79 -0
  169. package/src/lib/file-provider/file-provider.ts +56 -0
  170. package/src/lib/filesystems/filesystem.ts +87 -0
  171. package/src/lib/filesystems/node-filesystem.browser.ts +61 -0
  172. package/src/lib/filesystems/node-filesystem.ts +4 -4
  173. package/src/lib/node/fs.browser.ts +1 -0
  174. package/src/lib/node/fs.ts +20 -50
  175. package/src/lib/node/stream.browser.ts +1 -0
  176. package/src/lib/node/stream.ts +3 -11
  177. package/src/lib/option-utils/merge-loader-options.ts +2 -2
  178. package/src/lib/sources/data-source.ts +74 -0
  179. package/src/lib/sources/image-source.ts +95 -0
  180. package/src/lib/sources/image-tile-source.ts +14 -0
  181. package/src/lib/sources/tile-source.ts +101 -0
  182. package/src/lib/sources/utils/image-type.ts +10 -0
  183. package/src/lib/sources/utils/utils.ts +42 -0
  184. package/src/lib/sources/vector-tile-source.ts +13 -0
  185. package/src/lib/worker-loader-utils/create-loader-worker.ts +20 -4
  186. package/src/lib/worker-loader-utils/encode-with-worker.ts +1 -1
  187. package/src/lib/worker-loader-utils/parse-with-worker.ts +2 -2
  188. package/src/loader-types.ts +367 -0
  189. package/src/service-types.ts +12 -0
  190. package/src/types.ts +2 -351
  191. package/src/writer-types.ts +56 -0
  192. package/dist/index.js +0 -122
  193. package/dist/json-loader.js +0 -27
  194. package/dist/lib/binary-utils/array-buffer-utils.js +0 -84
  195. package/dist/lib/binary-utils/dataview-copy-utils.js +0 -97
  196. package/dist/lib/binary-utils/get-first-characters.js +0 -45
  197. package/dist/lib/binary-utils/memory-conversion-utils.js +0 -73
  198. package/dist/lib/binary-utils/memory-copy-utils.js +0 -61
  199. package/dist/lib/env-utils/assert.js +0 -13
  200. package/dist/lib/env-utils/globals.js +0 -30
  201. package/dist/lib/filesystems/node-filesystem.js +0 -73
  202. package/dist/lib/filesystems/readable-file.js +0 -25
  203. package/dist/lib/filesystems/writable-file.js +0 -48
  204. package/dist/lib/iterators/async-iteration.js +0 -53
  205. package/dist/lib/iterators/text-iterators.js +0 -61
  206. package/dist/lib/node/buffer.browser.js +0 -22
  207. package/dist/lib/node/buffer.js +0 -36
  208. package/dist/lib/node/fs.js +0 -49
  209. package/dist/lib/node/promisify.js +0 -22
  210. package/dist/lib/node/stream.js +0 -17
  211. package/dist/lib/option-utils/merge-loader-options.js +0 -27
  212. package/dist/lib/parser-utils/parse-json.js +0 -16
  213. package/dist/lib/path-utils/file-aliases.js +0 -47
  214. package/dist/lib/path-utils/get-cwd.js +0 -12
  215. package/dist/lib/path-utils/path.js +0 -178
  216. package/dist/lib/request-utils/request-scheduler.js +0 -142
  217. package/dist/lib/worker-loader-utils/create-loader-worker.js +0 -98
  218. package/dist/lib/worker-loader-utils/encode-with-worker.js +0 -21
  219. package/dist/lib/worker-loader-utils/parse-with-worker.js +0 -81
  220. package/dist/types.js +0 -3
  221. package/dist/workers/json-worker.js +0 -5
@@ -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 {Stats, WriteStream} from 'fs';
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 let stat;
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 let readFile;
17
+ export const readFile: any = fs.readFile;
14
18
  /** Wrapper for Node.js fs method */
15
- export let readFileSync;
19
+ export const readFileSync = fs.readFileSync;
16
20
  /** Wrapper for Node.js fs method */
17
- export let writeFile;
21
+ export const writeFile: any = promisify3(fs.writeFile);
18
22
  /** Wrapper for Node.js fs method */
19
- export let writeFileSync;
23
+ export const writeFileSync = fs.writeFileSync;
20
24
 
21
25
  // file descriptors
22
26
 
23
27
  /** Wrapper for Node.js fs method */
24
- export let open;
28
+ export const open: any = fs.open;
25
29
  /** Wrapper for Node.js fs method */
26
- export let close: (fd: number) => Promise<void>;
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 let read;
33
+ export const read: any = fs.read;
29
34
  /** Wrapper for Node.js fs method */
30
- export let fstat;
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
- /** Wrapper for Node.js fs method */
45
- readFile = fs.readFile;
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
- // file descriptors
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;
@@ -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
- export let Transform;
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
- parse: parseOnMainThread
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(arrayBuffer: ArrayBuffer, options: {[key: string]: any}): Promise<void> {
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({loader, arrayBuffer, options, context}) {
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) {
@@ -1,5 +1,5 @@
1
1
  import {WorkerFarm} from '@loaders.gl/worker-utils';
2
- import {Writer, WriterOptions} from '../../types';
2
+ import {Writer, WriterOptions} from '../../writer-types';
3
3
  import {isBrowser} from '../env-utils/globals';
4
4
 
5
5
  /**
@@ -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<void>
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);