@loaders.gl/core 3.2.0-alpha.1 → 3.2.0-alpha.4

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 (65) hide show
  1. package/dist/dist.min.js +161 -36
  2. package/dist/es5/index.js +8 -2
  3. package/dist/es5/index.js.map +1 -1
  4. package/dist/es5/lib/api/encode.js +75 -50
  5. package/dist/es5/lib/api/encode.js.map +1 -1
  6. package/dist/es5/lib/api/loader-options.js +20 -0
  7. package/dist/es5/lib/api/loader-options.js.map +1 -0
  8. package/dist/es5/lib/api/parse.js +36 -17
  9. package/dist/es5/lib/api/parse.js.map +1 -1
  10. package/dist/es5/lib/init.js +1 -1
  11. package/dist/es5/lib/loader-utils/option-utils.js +3 -0
  12. package/dist/es5/lib/loader-utils/option-utils.js.map +1 -1
  13. package/dist/es5/lib/utils/response-utils.js +2 -2
  14. package/dist/es5/lib/utils/response-utils.js.map +1 -1
  15. package/dist/es5/null-loader.js +22 -11
  16. package/dist/es5/null-loader.js.map +1 -1
  17. package/dist/esm/index.js +1 -1
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/lib/api/encode.js +12 -0
  20. package/dist/esm/lib/api/encode.js.map +1 -1
  21. package/dist/esm/lib/api/loader-options.js +3 -0
  22. package/dist/esm/lib/api/loader-options.js.map +1 -0
  23. package/dist/esm/lib/api/parse.js +24 -0
  24. package/dist/esm/lib/api/parse.js.map +1 -1
  25. package/dist/esm/lib/init.js +1 -1
  26. package/dist/esm/lib/loader-utils/option-utils.js +1 -3
  27. package/dist/esm/lib/loader-utils/option-utils.js.map +1 -1
  28. package/dist/esm/lib/utils/response-utils.js +2 -2
  29. package/dist/esm/lib/utils/response-utils.js.map +1 -1
  30. package/dist/esm/null-loader.js +19 -6
  31. package/dist/esm/null-loader.js.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +5 -4
  35. package/dist/lib/api/encode.d.ts +1 -1
  36. package/dist/lib/api/encode.d.ts.map +1 -1
  37. package/dist/lib/api/encode.js +13 -5
  38. package/dist/lib/api/loader-options.d.ts +3 -0
  39. package/dist/lib/api/loader-options.d.ts.map +1 -0
  40. package/dist/lib/api/loader-options.js +7 -0
  41. package/dist/lib/api/parse.d.ts.map +1 -1
  42. package/dist/lib/api/parse.js +8 -0
  43. package/dist/lib/loader-utils/option-utils.d.ts +8 -0
  44. package/dist/lib/loader-utils/option-utils.d.ts.map +1 -1
  45. package/dist/lib/loader-utils/option-utils.js +10 -6
  46. package/dist/lib/utils/response-utils.js +2 -2
  47. package/dist/null-loader.d.ts.map +1 -1
  48. package/dist/null-loader.js +17 -5
  49. package/dist/null-worker.js +16 -7
  50. package/package.json +4 -4
  51. package/src/index.ts +1 -1
  52. package/src/lib/api/encode.ts +9 -1
  53. package/src/lib/api/loader-options.ts +2 -0
  54. package/src/lib/api/parse.ts +9 -0
  55. package/src/lib/loader-utils/option-utils.ts +6 -3
  56. package/src/lib/utils/response-utils.ts +2 -2
  57. package/src/null-loader.ts +17 -5
  58. package/dist/es5/lib/api/set-loader-options.js +0 -13
  59. package/dist/es5/lib/api/set-loader-options.js.map +0 -1
  60. package/dist/esm/lib/api/set-loader-options.js +0 -5
  61. package/dist/esm/lib/api/set-loader-options.js.map +0 -1
  62. package/dist/lib/api/set-loader-options.d.ts +0 -6
  63. package/dist/lib/api/set-loader-options.d.ts.map +0 -1
  64. package/dist/lib/api/set-loader-options.js +0 -12
  65. package/src/lib/api/set-loader-options.ts +0 -9
@@ -2,13 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.encodeURLtoURL = exports.encodeInBatches = exports.encodeText = exports.encodeSync = exports.encode = void 0;
4
4
  const loader_utils_1 = require("@loaders.gl/loader-utils");
5
+ const worker_utils_1 = require("@loaders.gl/worker-utils");
5
6
  const loader_utils_2 = require("@loaders.gl/loader-utils");
7
+ const loader_utils_3 = require("@loaders.gl/loader-utils");
6
8
  const write_file_1 = require("../fetch/write-file");
7
9
  const fetch_file_1 = require("../fetch/fetch-file");
10
+ const loader_options_1 = require("./loader-options");
8
11
  /**
9
12
  * Encode loaded data into a binary ArrayBuffer using the specified Writer.
10
13
  */
11
14
  async function encode(data, writer, options) {
15
+ const globalOptions = (0, loader_options_1.getLoaderOptions)();
16
+ options = { ...globalOptions, ...options };
17
+ if ((0, loader_utils_1.canEncodeWithWorker)(writer, options)) {
18
+ return await (0, worker_utils_1.processOnWorker)(writer, data, options);
19
+ }
12
20
  // TODO Merge default writer options with options argument like it is done in load module.
13
21
  if (writer.encode) {
14
22
  return await writer.encode(data, options);
@@ -29,9 +37,9 @@ async function encode(data, writer, options) {
29
37
  chunks.push(batch);
30
38
  }
31
39
  // @ts-ignore
32
- return (0, loader_utils_1.concatenateArrayBuffers)(...chunks);
40
+ return (0, loader_utils_2.concatenateArrayBuffers)(...chunks);
33
41
  }
34
- if (!loader_utils_2.isBrowser && writer.encodeURLtoURL) {
42
+ if (!loader_utils_3.isBrowser && writer.encodeURLtoURL) {
35
43
  // TODO - how to generate filenames with correct extensions?
36
44
  const tmpInputFilename = getTemporaryFilename('input');
37
45
  await (0, write_file_1.writeFile)(tmpInputFilename, data);
@@ -87,9 +95,9 @@ exports.encodeInBatches = encodeInBatches;
87
95
  * @note Node.js only. This function enables using command-line converters as "writers".
88
96
  */
89
97
  async function encodeURLtoURL(inputUrl, outputUrl, writer, options) {
90
- inputUrl = (0, loader_utils_1.resolvePath)(inputUrl);
91
- outputUrl = (0, loader_utils_1.resolvePath)(outputUrl);
92
- if (loader_utils_2.isBrowser || !writer.encodeURLtoURL) {
98
+ inputUrl = (0, loader_utils_2.resolvePath)(inputUrl);
99
+ outputUrl = (0, loader_utils_2.resolvePath)(outputUrl);
100
+ if (loader_utils_3.isBrowser || !writer.encodeURLtoURL) {
93
101
  throw new Error();
94
102
  }
95
103
  const outputFilename = await writer.encodeURLtoURL(inputUrl, outputUrl, options);
@@ -0,0 +1,3 @@
1
+ export { setGlobalOptions as setLoaderOptions } from '../loader-utils/option-utils';
2
+ export { getGlobalLoaderOptions as getLoaderOptions } from '../loader-utils/option-utils';
3
+ //# sourceMappingURL=loader-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-options.d.ts","sourceRoot":"","sources":["../../../src/lib/api/loader-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,IAAI,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAC,sBAAsB,IAAI,gBAAgB,EAAC,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLoaderOptions = exports.setLoaderOptions = void 0;
4
+ var option_utils_1 = require("../loader-utils/option-utils");
5
+ Object.defineProperty(exports, "setLoaderOptions", { enumerable: true, get: function () { return option_utils_1.setGlobalOptions; } });
6
+ var option_utils_2 = require("../loader-utils/option-utils");
7
+ Object.defineProperty(exports, "getLoaderOptions", { enumerable: true, get: function () { return option_utils_2.getGlobalLoaderOptions; } });
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/lib/api/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAU7F;;;;;;GAMG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,EAC3C,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,GAAG,CAAC,CAmCd"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/lib/api/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAW7F;;;;;;GAMG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,EAC3C,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,GAAG,CAAC,CAmCd"}
@@ -4,6 +4,7 @@ exports.parse = void 0;
4
4
  const worker_utils_1 = require("@loaders.gl/worker-utils");
5
5
  const loader_utils_1 = require("@loaders.gl/loader-utils");
6
6
  const normalize_loader_1 = require("../loader-utils/normalize-loader");
7
+ const is_type_1 = require("../../javascript-utils/is-type");
7
8
  const option_utils_1 = require("../loader-utils/option-utils");
8
9
  const get_data_1 = require("../loader-utils/get-data");
9
10
  const loader_context_1 = require("../loader-utils/loader-context");
@@ -50,6 +51,13 @@ exports.parse = parse;
50
51
  // TODO - should accept loader.parseAsyncIterator and concatenate.
51
52
  async function parseWithLoader(loader, data, options, context) {
52
53
  (0, worker_utils_1.validateWorkerVersion)(loader);
54
+ if ((0, is_type_1.isResponse)(data)) {
55
+ // Serialize to support passing the response to web worker
56
+ const response = data;
57
+ const { ok, redirected, status, statusText, type, url } = response;
58
+ const headers = Object.fromEntries(response.headers.entries());
59
+ context.response = { headers, ok, redirected, status, statusText, type, url };
60
+ }
53
61
  data = await (0, get_data_1.getArrayBufferOrStringFromData)(data, loader, options);
54
62
  // First check for synchronous text parser, wrap results in promises
55
63
  if (loader.parseTextSync && typeof data === 'string') {
@@ -13,6 +13,14 @@ declare type GlobalLoaderState = {
13
13
  * Wraps initialization of global variable in function to defeat overly aggressive tree-shakers
14
14
  */
15
15
  export declare function getGlobalLoaderState(): GlobalLoaderState;
16
+ /**
17
+ * Store global loader options on the global object to increase chances of cross loaders-version interoperability
18
+ * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks
19
+ * @returns global loader options merged with default loader options
20
+ */
21
+ export declare const getGlobalLoaderOptions: () => {
22
+ [key: string]: any;
23
+ };
16
24
  /**
17
25
  * Set global loader options
18
26
  * @param options
@@ -1 +1 @@
1
- {"version":3,"file":"option-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/option-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAKnF;;GAEG;AACH,aAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CASxD;AAWD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,OAuB/E"}
1
+ {"version":3,"file":"option-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/option-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAKnF;;GAEG;AACH,aAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CASxD;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;CAKlC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,OAuB/E"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFetchFunction = exports.normalizeOptions = exports.setGlobalOptions = exports.getGlobalLoaderState = void 0;
3
+ exports.getFetchFunction = exports.normalizeOptions = exports.setGlobalOptions = exports.getGlobalLoaderOptions = exports.getGlobalLoaderState = void 0;
4
4
  const is_type_1 = require("../../javascript-utils/is-type");
5
5
  const fetch_file_1 = require("../fetch/fetch-file");
6
6
  const loggers_1 = require("./loggers");
@@ -19,21 +19,25 @@ function getGlobalLoaderState() {
19
19
  return loaders._state;
20
20
  }
21
21
  exports.getGlobalLoaderState = getGlobalLoaderState;
22
- // Store global loader options on the global object to increase chances of cross loaders-version interoperability
23
- // NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks
22
+ /**
23
+ * Store global loader options on the global object to increase chances of cross loaders-version interoperability
24
+ * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks
25
+ * @returns global loader options merged with default loader options
26
+ */
24
27
  const getGlobalLoaderOptions = () => {
25
28
  const state = getGlobalLoaderState();
26
29
  // Ensure all default loader options from this library are mentioned
27
30
  state.globalOptions = state.globalOptions || { ...option_defaults_1.DEFAULT_LOADER_OPTIONS };
28
31
  return state.globalOptions;
29
32
  };
33
+ exports.getGlobalLoaderOptions = getGlobalLoaderOptions;
30
34
  /**
31
35
  * Set global loader options
32
36
  * @param options
33
37
  */
34
38
  function setGlobalOptions(options) {
35
39
  const state = getGlobalLoaderState();
36
- const globalOptions = getGlobalLoaderOptions();
40
+ const globalOptions = (0, exports.getGlobalLoaderOptions)();
37
41
  state.globalOptions = normalizeOptionsInternal(globalOptions, options);
38
42
  }
39
43
  exports.setGlobalOptions = setGlobalOptions;
@@ -57,7 +61,7 @@ exports.normalizeOptions = normalizeOptions;
57
61
  * @param context
58
62
  */
59
63
  function getFetchFunction(options, context) {
60
- const globalOptions = getGlobalLoaderOptions();
64
+ const globalOptions = (0, exports.getGlobalLoaderOptions)();
61
65
  const fetchOptions = options || globalOptions;
62
66
  // options.fetch can be a function
63
67
  if (typeof fetchOptions.fetch === 'function') {
@@ -141,7 +145,7 @@ function normalizeOptionsInternal(loader, options, url) {
141
145
  if (mergedOptions.log === null) {
142
146
  mergedOptions.log = new loggers_1.NullLog();
143
147
  }
144
- mergeNestedFields(mergedOptions, getGlobalLoaderOptions());
148
+ mergeNestedFields(mergedOptions, (0, exports.getGlobalLoaderOptions)());
145
149
  mergeNestedFields(mergedOptions, options);
146
150
  return mergedOptions;
147
151
  }
@@ -61,7 +61,7 @@ exports.checkResponse = checkResponse;
61
61
  function checkResponseSync(response) {
62
62
  if (!response.ok) {
63
63
  let message = `${response.status} ${response.statusText}`;
64
- message = message.length > 60 ? `${message.slice(60)}...` : message;
64
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
65
65
  throw new Error(message);
66
66
  }
67
67
  }
@@ -76,7 +76,7 @@ async function getResponseError(response) {
76
76
  text += ` ${await response.text()}`;
77
77
  }
78
78
  message += text;
79
- message = message.length > 60 ? `${message.slice(60)}...` : message;
79
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
80
80
  }
81
81
  catch (error) {
82
82
  // eslint forbids return in a finally statement, so we just catch here
@@ -1 +1 @@
1
- {"version":3,"file":"null-loader.d.ts","sourceRoot":"","sources":["../src/null-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAY9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,gBAkBxB,CAAC"}
1
+ {"version":3,"file":"null-loader.d.ts","sourceRoot":"","sources":["../src/null-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAY9B,CAAC;AAYF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,gBAoBxB,CAAC"}
@@ -20,6 +20,16 @@ exports.NullWorkerLoader = {
20
20
  null: {}
21
21
  }
22
22
  };
23
+ /**
24
+ * Returns arguments passed to the parse API in a format that can be transfered to a
25
+ * web worker. The `context` parameter is stripped using JSON.stringify & parse.
26
+ */
27
+ function parseSync(arrayBuffer, options, context) {
28
+ if (!options.null.echoParameters)
29
+ return null;
30
+ context = context && JSON.parse(JSON.stringify(context));
31
+ return { arrayBuffer, options, context };
32
+ }
23
33
  /**
24
34
  * Loads any data and returns null (or optionally passes through data unparsed)
25
35
  */
@@ -30,15 +40,17 @@ exports.NullLoader = {
30
40
  version: VERSION,
31
41
  mimeTypes: ['application/x.empty'],
32
42
  extensions: ['null'],
33
- parse: async (arrayBuffer) => arrayBuffer,
34
- parseSync: (arrayBuffer) => arrayBuffer,
35
- parseInBatches: async function* generator(asyncIterator) {
43
+ parse: async (arrayBuffer, options, context) => parseSync(arrayBuffer, options, context),
44
+ parseSync,
45
+ parseInBatches: async function* generator(asyncIterator, options, context) {
36
46
  for await (const batch of asyncIterator) {
37
- yield batch;
47
+ yield parseSync(batch, options, context);
38
48
  }
39
49
  },
40
50
  tests: [() => false],
41
51
  options: {
42
- null: {}
52
+ null: {
53
+ echoParameters: false
54
+ }
43
55
  }
44
56
  };
@@ -118,12 +118,13 @@
118
118
  switch (type) {
119
119
  case "process":
120
120
  try {
121
- const { input, options = {} } = payload;
121
+ const { input, options = {}, context = {} } = payload;
122
122
  const result = await parseData({
123
123
  loader,
124
124
  arrayBuffer: input,
125
125
  options,
126
126
  context: {
127
+ ...context,
127
128
  parse: parseOnMainThread
128
129
  }
129
130
  });
@@ -183,7 +184,13 @@
183
184
  }
184
185
 
185
186
  // src/null-loader.ts
186
- var VERSION = true ? "3.2.0-alpha.1" : "latest";
187
+ var VERSION = true ? "3.2.0-alpha.4" : "latest";
188
+ function parseSync(arrayBuffer, options, context) {
189
+ if (!options.null.echoParameters)
190
+ return null;
191
+ context = context && JSON.parse(JSON.stringify(context));
192
+ return { arrayBuffer, options, context };
193
+ }
187
194
  var NullLoader = {
188
195
  name: "Null loader",
189
196
  id: "null",
@@ -191,16 +198,18 @@
191
198
  version: VERSION,
192
199
  mimeTypes: ["application/x.empty"],
193
200
  extensions: ["null"],
194
- parse: async (arrayBuffer) => arrayBuffer,
195
- parseSync: (arrayBuffer) => arrayBuffer,
196
- parseInBatches: async function* generator(asyncIterator) {
201
+ parse: async (arrayBuffer, options, context) => parseSync(arrayBuffer, options, context),
202
+ parseSync,
203
+ parseInBatches: async function* generator(asyncIterator, options, context) {
197
204
  for await (const batch of asyncIterator) {
198
- yield batch;
205
+ yield parseSync(batch, options, context);
199
206
  }
200
207
  },
201
208
  tests: [() => false],
202
209
  options: {
203
- null: {}
210
+ null: {
211
+ echoParameters: false
212
+ }
204
213
  }
205
214
  };
206
215
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/core",
3
- "version": "3.2.0-alpha.1",
3
+ "version": "3.2.0-alpha.4",
4
4
  "description": "Framework-independent loaders for 3D graphics formats",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/runtime": "^7.3.1",
45
- "@loaders.gl/loader-utils": "3.2.0-alpha.1",
46
- "@loaders.gl/worker-utils": "3.2.0-alpha.1",
45
+ "@loaders.gl/loader-utils": "3.2.0-alpha.4",
46
+ "@loaders.gl/worker-utils": "3.2.0-alpha.4",
47
47
  "@probe.gl/log": "^3.5.0",
48
48
  "probe.gl": "^3.4.0"
49
49
  },
50
- "gitHead": "423a2815092b08dcf93ad5b7dc2940b167305afe"
50
+ "gitHead": "f030d39d5cdedb137e43e757a9da10dd637857fd"
51
51
  }
package/src/index.ts CHANGED
@@ -6,7 +6,7 @@ export {readFileSync} from './lib/fetch/read-file';
6
6
  export {writeFile, writeFileSync} from './lib/fetch/write-file';
7
7
 
8
8
  // CONFIGURATION
9
- export {setLoaderOptions} from './lib/api/set-loader-options';
9
+ export {setLoaderOptions, getLoaderOptions} from './lib/api/loader-options';
10
10
  export {registerLoaders} from './lib/api/register-loaders';
11
11
  export {selectLoader, selectLoaderSync} from './lib/api/select-loader';
12
12
 
@@ -1,8 +1,10 @@
1
- import type {Writer, LoaderOptions} from '@loaders.gl/loader-utils';
1
+ import {Writer, LoaderOptions, canEncodeWithWorker} from '@loaders.gl/loader-utils';
2
+ import {processOnWorker} from '@loaders.gl/worker-utils';
2
3
  import {concatenateArrayBuffers, resolvePath} from '@loaders.gl/loader-utils';
3
4
  import {isBrowser} from '@loaders.gl/loader-utils';
4
5
  import {writeFile} from '../fetch/write-file';
5
6
  import {fetchFile} from '../fetch/fetch-file';
7
+ import {getLoaderOptions} from './loader-options';
6
8
 
7
9
  /**
8
10
  * Encode loaded data into a binary ArrayBuffer using the specified Writer.
@@ -12,6 +14,12 @@ export async function encode(
12
14
  writer: Writer,
13
15
  options?: LoaderOptions
14
16
  ): Promise<ArrayBuffer> {
17
+ const globalOptions = getLoaderOptions();
18
+ options = {...globalOptions, ...options};
19
+ if (canEncodeWithWorker(writer, options)) {
20
+ return await processOnWorker(writer, data, options);
21
+ }
22
+
15
23
  // TODO Merge default writer options with options argument like it is done in load module.
16
24
  if (writer.encode) {
17
25
  return await writer.encode(data, options);
@@ -0,0 +1,2 @@
1
+ export {setGlobalOptions as setLoaderOptions} from '../loader-utils/option-utils';
2
+ export {getGlobalLoaderOptions as getLoaderOptions} from '../loader-utils/option-utils';
@@ -2,6 +2,7 @@ import type {DataType, Loader, LoaderContext, LoaderOptions} from '@loaders.gl/l
2
2
  import {assert, validateWorkerVersion} from '@loaders.gl/worker-utils';
3
3
  import {parseWithWorker, canParseWithWorker} from '@loaders.gl/loader-utils';
4
4
  import {isLoaderObject} from '../loader-utils/normalize-loader';
5
+ import {isResponse} from '../../javascript-utils/is-type';
5
6
  import {normalizeOptions} from '../loader-utils/option-utils';
6
7
  import {getArrayBufferOrStringFromData} from '../loader-utils/get-data';
7
8
  import {getLoaderContext, getLoadersFromContext} from '../loader-utils/loader-context';
@@ -62,6 +63,14 @@ export async function parse(
62
63
  async function parseWithLoader(loader, data, options, context) {
63
64
  validateWorkerVersion(loader);
64
65
 
66
+ if (isResponse(data)) {
67
+ // Serialize to support passing the response to web worker
68
+ const response = data as Response;
69
+ const {ok, redirected, status, statusText, type, url} = response;
70
+ const headers = Object.fromEntries(response.headers.entries());
71
+ context.response = {headers, ok, redirected, status, statusText, type, url};
72
+ }
73
+
65
74
  data = await getArrayBufferOrStringFromData(data, loader, options);
66
75
 
67
76
  // First check for synchronous text parser, wrap results in promises
@@ -26,9 +26,12 @@ export function getGlobalLoaderState(): GlobalLoaderState {
26
26
  return loaders._state;
27
27
  }
28
28
 
29
- // Store global loader options on the global object to increase chances of cross loaders-version interoperability
30
- // NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks
31
- const getGlobalLoaderOptions = () => {
29
+ /**
30
+ * Store global loader options on the global object to increase chances of cross loaders-version interoperability
31
+ * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks
32
+ * @returns global loader options merged with default loader options
33
+ */
34
+ export const getGlobalLoaderOptions = () => {
32
35
  const state = getGlobalLoaderState();
33
36
  // Ensure all default loader options from this library are mentioned
34
37
  state.globalOptions = state.globalOptions || {...DEFAULT_LOADER_OPTIONS};
@@ -65,7 +65,7 @@ export async function checkResponse(response: Response): Promise<void> {
65
65
  export function checkResponseSync(response: Response): void {
66
66
  if (!response.ok) {
67
67
  let message = `${response.status} ${response.statusText}`;
68
- message = message.length > 60 ? `${message.slice(60)}...` : message;
68
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
69
69
  throw new Error(message);
70
70
  }
71
71
  }
@@ -81,7 +81,7 @@ async function getResponseError(response): Promise<string> {
81
81
  text += ` ${await response.text()}`;
82
82
  }
83
83
  message += text;
84
- message = message.length > 60 ? `${message.slice(60)}...` : message;
84
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
85
85
  } catch (error) {
86
86
  // eslint forbids return in a finally statement, so we just catch here
87
87
  }
@@ -21,6 +21,16 @@ export const NullWorkerLoader: Loader = {
21
21
  }
22
22
  };
23
23
 
24
+ /**
25
+ * Returns arguments passed to the parse API in a format that can be transfered to a
26
+ * web worker. The `context` parameter is stripped using JSON.stringify & parse.
27
+ */
28
+ function parseSync(arrayBuffer, options, context) {
29
+ if (!options.null.echoParameters) return null;
30
+ context = context && JSON.parse(JSON.stringify(context));
31
+ return {arrayBuffer, options, context};
32
+ }
33
+
24
34
  /**
25
35
  * Loads any data and returns null (or optionally passes through data unparsed)
26
36
  */
@@ -31,15 +41,17 @@ export const NullLoader: LoaderWithParser = {
31
41
  version: VERSION,
32
42
  mimeTypes: ['application/x.empty'],
33
43
  extensions: ['null'],
34
- parse: async (arrayBuffer) => arrayBuffer,
35
- parseSync: (arrayBuffer) => arrayBuffer,
36
- parseInBatches: async function* generator(asyncIterator) {
44
+ parse: async (arrayBuffer, options, context) => parseSync(arrayBuffer, options, context),
45
+ parseSync,
46
+ parseInBatches: async function* generator(asyncIterator, options, context) {
37
47
  for await (const batch of asyncIterator) {
38
- yield batch;
48
+ yield parseSync(batch, options, context);
39
49
  }
40
50
  },
41
51
  tests: [() => false],
42
52
  options: {
43
- null: {}
53
+ null: {
54
+ echoParameters: false
55
+ }
44
56
  }
45
57
  };
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.setLoaderOptions = setLoaderOptions;
7
-
8
- var _optionUtils = require("../loader-utils/option-utils");
9
-
10
- function setLoaderOptions(options) {
11
- (0, _optionUtils.setGlobalOptions)(options);
12
- }
13
- //# sourceMappingURL=set-loader-options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/api/set-loader-options.ts"],"names":["setLoaderOptions","options"],"mappings":";;;;;;;AAAA;;AAMO,SAASA,gBAAT,CAA0BC,OAA1B,EAAiD;AACtD,qCAAiBA,OAAjB;AACD","sourcesContent":["import {setGlobalOptions} from '../loader-utils/option-utils';\n\n/**\n * Set global loader options\n * @param options\n */\nexport function setLoaderOptions(options: object): void {\n setGlobalOptions(options);\n}\n"],"file":"set-loader-options.js"}
@@ -1,5 +0,0 @@
1
- import { setGlobalOptions } from '../loader-utils/option-utils';
2
- export function setLoaderOptions(options) {
3
- setGlobalOptions(options);
4
- }
5
- //# sourceMappingURL=set-loader-options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/api/set-loader-options.ts"],"names":["setGlobalOptions","setLoaderOptions","options"],"mappings":"AAAA,SAAQA,gBAAR,QAA+B,8BAA/B;AAMA,OAAO,SAASC,gBAAT,CAA0BC,OAA1B,EAAiD;AACtDF,EAAAA,gBAAgB,CAACE,OAAD,CAAhB;AACD","sourcesContent":["import {setGlobalOptions} from '../loader-utils/option-utils';\n\n/**\n * Set global loader options\n * @param options\n */\nexport function setLoaderOptions(options: object): void {\n setGlobalOptions(options);\n}\n"],"file":"set-loader-options.js"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Set global loader options
3
- * @param options
4
- */
5
- export declare function setLoaderOptions(options: object): void;
6
- //# sourceMappingURL=set-loader-options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set-loader-options.d.ts","sourceRoot":"","sources":["../../../src/lib/api/set-loader-options.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtD"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setLoaderOptions = void 0;
4
- const option_utils_1 = require("../loader-utils/option-utils");
5
- /**
6
- * Set global loader options
7
- * @param options
8
- */
9
- function setLoaderOptions(options) {
10
- (0, option_utils_1.setGlobalOptions)(options);
11
- }
12
- exports.setLoaderOptions = setLoaderOptions;
@@ -1,9 +0,0 @@
1
- import {setGlobalOptions} from '../loader-utils/option-utils';
2
-
3
- /**
4
- * Set global loader options
5
- * @param options
6
- */
7
- export function setLoaderOptions(options: object): void {
8
- setGlobalOptions(options);
9
- }