@loaders.gl/wms 3.3.0-alpha.12 → 3.3.0-alpha.14

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 (244) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +6 -0
  4. package/dist/dist.min.js +3990 -5373
  5. package/dist/es5/index.js +44 -16
  6. package/dist/es5/index.js.map +1 -1
  7. package/dist/es5/lerc-loader.js +74 -0
  8. package/dist/es5/lerc-loader.js.map +1 -0
  9. package/dist/es5/lib/data-sources/adhoc-image-service.js +129 -0
  10. package/dist/es5/lib/data-sources/adhoc-image-service.js.map +1 -0
  11. package/dist/es5/lib/data-sources/arcgis-image-service.js +180 -0
  12. package/dist/es5/lib/data-sources/arcgis-image-service.js.map +1 -0
  13. package/dist/es5/lib/data-sources/create-image-source.js +45 -0
  14. package/dist/es5/lib/data-sources/create-image-source.js.map +1 -0
  15. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js +179 -0
  16. package/dist/es5/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  17. package/dist/es5/lib/data-sources/image-services/image-service.js +163 -0
  18. package/dist/es5/lib/data-sources/image-services/image-service.js.map +1 -0
  19. package/dist/es5/lib/data-sources/image-services/wms-service.js +400 -0
  20. package/dist/es5/lib/data-sources/image-services/wms-service.js.map +1 -0
  21. package/dist/es5/lib/data-sources/image-source.js +14 -0
  22. package/dist/es5/lib/data-sources/image-source.js.map +1 -0
  23. package/dist/es5/lib/gml/deep-strict-equal.js +64 -0
  24. package/dist/es5/lib/gml/deep-strict-equal.js.map +1 -0
  25. package/dist/es5/lib/gml/parse-gml.js +3 -3
  26. package/dist/es5/lib/gml/parse-gml.js.map +1 -1
  27. package/dist/es5/lib/lerc/lerc-types.js +2 -0
  28. package/dist/es5/lib/lerc/lerc-types.js.map +1 -0
  29. package/dist/es5/lib/wcs/parse-wcs.js +43 -0
  30. package/dist/es5/lib/wcs/parse-wcs.js.map +1 -0
  31. package/dist/es5/lib/wcs/wcs-types.js +2 -0
  32. package/dist/es5/lib/wcs/wcs-types.js.map +1 -0
  33. package/dist/es5/lib/wms/parse-wms.js +6 -4
  34. package/dist/es5/lib/wms/parse-wms.js.map +1 -1
  35. package/dist/es5/wip/arcgis-feature-service.js +45 -0
  36. package/dist/es5/wip/arcgis-feature-service.js.map +1 -0
  37. package/dist/es5/wip/data-source.js +4 -0
  38. package/dist/es5/wip/data-source.js.map +1 -0
  39. package/dist/es5/{gml-loader.js → wip/gml-loader.js} +2 -2
  40. package/dist/es5/wip/gml-loader.js.map +1 -0
  41. package/dist/es5/{wcs-capabilities-loader.js → wip/wcs-capabilities-loader.js} +5 -5
  42. package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -0
  43. package/dist/es5/{wfs-capabilities-loader.js → wip/wfs-capabilities-loader.js} +3 -3
  44. package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -0
  45. package/dist/es5/{wms-feature-info-loader.js → wip/wms-feature-info-loader.js} +3 -3
  46. package/dist/es5/wip/wms-feature-info-loader.js.map +1 -0
  47. package/dist/es5/{wms-layer-description-loader.js → wip/wms-layer-description-loader.js} +3 -3
  48. package/dist/es5/wip/wms-layer-description-loader.js.map +1 -0
  49. package/dist/es5/wip/wms-layer-description-loader.md +47 -0
  50. package/dist/es5/{wmts-capabilities-loader.js → wip/wmts-capabilities-loader.js} +3 -3
  51. package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -0
  52. package/dist/es5/wms-capabilities-loader.js +2 -2
  53. package/dist/es5/wms-capabilities-loader.js.map +1 -1
  54. package/dist/es5/wms-error-loader.js +22 -6
  55. package/dist/es5/wms-error-loader.js.map +1 -1
  56. package/dist/esm/index.js +12 -6
  57. package/dist/esm/index.js.map +1 -1
  58. package/dist/esm/lerc-loader.js +25 -0
  59. package/dist/esm/lerc-loader.js.map +1 -0
  60. package/dist/esm/lib/data-sources/adhoc-image-service.js +43 -0
  61. package/dist/esm/lib/data-sources/adhoc-image-service.js.map +1 -0
  62. package/dist/esm/lib/data-sources/arcgis-image-service.js +62 -0
  63. package/dist/esm/lib/data-sources/arcgis-image-service.js.map +1 -0
  64. package/dist/esm/lib/data-sources/create-image-source.js +30 -0
  65. package/dist/esm/lib/data-sources/create-image-source.js.map +1 -0
  66. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js +61 -0
  67. package/dist/esm/lib/data-sources/image-services/arcgis-image-service.js.map +1 -0
  68. package/dist/esm/lib/data-sources/image-services/image-service.js +72 -0
  69. package/dist/esm/lib/data-sources/image-services/image-service.js.map +1 -0
  70. package/dist/esm/lib/data-sources/image-services/wms-service.js +190 -0
  71. package/dist/esm/lib/data-sources/image-services/wms-service.js.map +1 -0
  72. package/dist/esm/lib/data-sources/image-source.js +4 -0
  73. package/dist/esm/lib/data-sources/image-source.js.map +1 -0
  74. package/dist/esm/lib/gml/deep-strict-equal.js +57 -0
  75. package/dist/esm/lib/gml/deep-strict-equal.js.map +1 -0
  76. package/dist/esm/lib/gml/parse-gml.js +1 -1
  77. package/dist/esm/lib/gml/parse-gml.js.map +1 -1
  78. package/dist/esm/lib/lerc/lerc-types.js +2 -0
  79. package/dist/esm/lib/lerc/lerc-types.js.map +1 -0
  80. package/dist/esm/lib/wcs/parse-wcs.js +32 -0
  81. package/dist/esm/lib/wcs/parse-wcs.js.map +1 -0
  82. package/dist/esm/lib/wcs/wcs-types.js +2 -0
  83. package/dist/esm/lib/wcs/wcs-types.js.map +1 -0
  84. package/dist/esm/lib/wms/parse-wms.js +6 -4
  85. package/dist/esm/lib/wms/parse-wms.js.map +1 -1
  86. package/dist/esm/wip/arcgis-feature-service.js +28 -0
  87. package/dist/esm/wip/arcgis-feature-service.js.map +1 -0
  88. package/dist/esm/wip/data-source.js +2 -0
  89. package/dist/esm/wip/data-source.js.map +1 -0
  90. package/dist/esm/{gml-loader.js → wip/gml-loader.js} +2 -2
  91. package/dist/esm/wip/gml-loader.js.map +1 -0
  92. package/dist/esm/{wcs-capabilities-loader.js → wip/wcs-capabilities-loader.js} +3 -3
  93. package/dist/esm/wip/wcs-capabilities-loader.js.map +1 -0
  94. package/dist/esm/{wfs-capabilities-loader.js → wip/wfs-capabilities-loader.js} +3 -3
  95. package/dist/esm/wip/wfs-capabilities-loader.js.map +1 -0
  96. package/dist/esm/{wms-feature-info-loader.js → wip/wms-feature-info-loader.js} +3 -3
  97. package/dist/esm/wip/wms-feature-info-loader.js.map +1 -0
  98. package/dist/esm/{wms-layer-description-loader.js → wip/wms-layer-description-loader.js} +3 -3
  99. package/dist/esm/wip/wms-layer-description-loader.js.map +1 -0
  100. package/dist/esm/wip/wms-layer-description-loader.md +47 -0
  101. package/dist/esm/{wmts-capabilities-loader.js → wip/wmts-capabilities-loader.js} +3 -3
  102. package/dist/esm/wip/wmts-capabilities-loader.js.map +1 -0
  103. package/dist/esm/wms-capabilities-loader.js +2 -2
  104. package/dist/esm/wms-capabilities-loader.js.map +1 -1
  105. package/dist/esm/wms-error-loader.js +20 -5
  106. package/dist/esm/wms-error-loader.js.map +1 -1
  107. package/dist/index.d.ts +27 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +33 -0
  110. package/dist/lerc-loader.d.ts +30 -0
  111. package/dist/lerc-loader.d.ts.map +1 -0
  112. package/dist/lerc-loader.js +56 -0
  113. package/dist/lib/data-sources/adhoc-image-service.d.ts +24 -0
  114. package/dist/lib/data-sources/adhoc-image-service.d.ts.map +1 -0
  115. package/dist/lib/data-sources/adhoc-image-service.js +46 -0
  116. package/dist/lib/data-sources/arcgis-image-service.d.ts +79 -0
  117. package/dist/lib/data-sources/arcgis-image-service.d.ts.map +1 -0
  118. package/dist/lib/data-sources/arcgis-image-service.js +85 -0
  119. package/dist/lib/data-sources/create-image-source.d.ts +16 -0
  120. package/dist/lib/data-sources/create-image-source.d.ts.map +1 -0
  121. package/dist/lib/data-sources/create-image-source.js +39 -0
  122. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts +71 -0
  123. package/dist/lib/data-sources/image-services/arcgis-image-service.d.ts.map +1 -0
  124. package/dist/lib/data-sources/image-services/arcgis-image-service.js +85 -0
  125. package/dist/lib/data-sources/image-services/image-service.d.ts +39 -0
  126. package/dist/lib/data-sources/image-services/image-service.d.ts.map +1 -0
  127. package/dist/lib/data-sources/image-services/image-service.js +82 -0
  128. package/dist/lib/data-sources/image-services/wms-service.d.ts +188 -0
  129. package/dist/lib/data-sources/image-services/wms-service.d.ts.map +1 -0
  130. package/dist/lib/data-sources/image-services/wms-service.js +218 -0
  131. package/dist/lib/data-sources/image-source.d.ts +73 -0
  132. package/dist/lib/data-sources/image-source.d.ts.map +1 -0
  133. package/dist/lib/data-sources/image-source.js +12 -0
  134. package/dist/lib/gml/deep-strict-equal.d.ts +3 -0
  135. package/dist/lib/gml/deep-strict-equal.d.ts.map +1 -0
  136. package/dist/lib/gml/deep-strict-equal.js +119 -0
  137. package/dist/lib/gml/parse-gml.d.ts +28 -0
  138. package/dist/lib/gml/parse-gml.d.ts.map +1 -0
  139. package/dist/lib/gml/parse-gml.js +371 -0
  140. package/dist/lib/lerc/lerc-types.d.ts +30 -0
  141. package/dist/lib/lerc/lerc-types.d.ts.map +1 -0
  142. package/dist/lib/lerc/lerc-types.js +3 -0
  143. package/dist/lib/wcs/parse-wcs.d.ts +7 -0
  144. package/dist/lib/wcs/parse-wcs.d.ts.map +1 -0
  145. package/dist/lib/wcs/parse-wcs.js +36 -0
  146. package/dist/lib/wcs/wcs-types.d.ts +73 -0
  147. package/dist/lib/wcs/wcs-types.d.ts.map +1 -0
  148. package/dist/lib/wcs/wcs-types.js +3 -0
  149. package/dist/lib/wfs/parse-wfs.d.ts +7 -0
  150. package/dist/lib/wfs/parse-wfs.d.ts.map +1 -0
  151. package/dist/lib/wfs/parse-wfs.js +36 -0
  152. package/dist/lib/wfs/wfs-types.d.ts +73 -0
  153. package/dist/lib/wfs/wfs-types.d.ts.map +1 -0
  154. package/dist/lib/wfs/wfs-types.js +3 -0
  155. package/dist/lib/wms/parse-wms.d.ts +24 -0
  156. package/dist/lib/wms/parse-wms.d.ts.map +1 -0
  157. package/dist/lib/wms/parse-wms.js +115 -0
  158. package/dist/lib/wms/wms-types.d.ts +100 -0
  159. package/dist/lib/wms/wms-types.d.ts.map +1 -0
  160. package/dist/lib/wms/wms-types.js +1908 -0
  161. package/dist/lib/wmts/parse-wmts.d.ts +7 -0
  162. package/dist/lib/wmts/parse-wmts.d.ts.map +1 -0
  163. package/dist/lib/wmts/parse-wmts.js +36 -0
  164. package/dist/lib/wmts/wmts-types.d.ts +73 -0
  165. package/dist/lib/wmts/wmts-types.d.ts.map +1 -0
  166. package/dist/lib/wmts/wmts-types.js +3 -0
  167. package/dist/wip/arcgis-feature-service.d.ts +56 -0
  168. package/dist/wip/arcgis-feature-service.d.ts.map +1 -0
  169. package/dist/wip/arcgis-feature-service.js +28 -0
  170. package/dist/wip/data-source.d.ts +54 -0
  171. package/dist/wip/data-source.d.ts.map +1 -0
  172. package/dist/wip/data-source.js +59 -0
  173. package/dist/wip/gml-loader.d.ts +26 -0
  174. package/dist/wip/gml-loader.d.ts.map +1 -0
  175. package/dist/wip/gml-loader.js +31 -0
  176. package/dist/wip/wcs-capabilities-loader.d.ts +26 -0
  177. package/dist/wip/wcs-capabilities-loader.d.ts.map +1 -0
  178. package/dist/wip/wcs-capabilities-loader.js +31 -0
  179. package/dist/wip/wfs-capabilities-loader.d.ts +26 -0
  180. package/dist/wip/wfs-capabilities-loader.d.ts.map +1 -0
  181. package/dist/wip/wfs-capabilities-loader.js +31 -0
  182. package/dist/wip/wms-feature-info-loader.d.ts +22 -0
  183. package/dist/wip/wms-feature-info-loader.d.ts.map +1 -0
  184. package/dist/wip/wms-feature-info-loader.js +17 -0
  185. package/dist/wip/wms-layer-description-loader.d.ts +22 -0
  186. package/dist/wip/wms-layer-description-loader.d.ts.map +1 -0
  187. package/dist/wip/wms-layer-description-loader.js +17 -0
  188. package/dist/wip/wmts-capabilities-loader.d.ts +26 -0
  189. package/dist/wip/wmts-capabilities-loader.d.ts.map +1 -0
  190. package/dist/wip/wmts-capabilities-loader.js +31 -0
  191. package/dist/wms-capabilities-loader.d.ts +26 -0
  192. package/dist/wms-capabilities-loader.d.ts.map +1 -0
  193. package/dist/wms-capabilities-loader.js +31 -0
  194. package/dist/wms-error-loader.d.ts +34 -0
  195. package/dist/wms-error-loader.d.ts.map +1 -0
  196. package/dist/wms-error-loader.js +43 -0
  197. package/package.json +9 -8
  198. package/src/index.ts +41 -15
  199. package/src/lerc-loader.ts +50 -0
  200. package/src/lib/data-sources/adhoc-image-service.ts +61 -0
  201. package/src/lib/data-sources/arcgis-image-service.ts +146 -0
  202. package/src/lib/data-sources/create-image-source.ts +46 -0
  203. package/src/lib/data-sources/image-services/arcgis-image-service.ts +136 -0
  204. package/src/lib/data-sources/image-services/image-service.ts +105 -0
  205. package/src/lib/data-sources/image-services/wms-service.ts +351 -0
  206. package/src/lib/data-sources/image-source.ts +82 -0
  207. package/src/lib/gml/deep-strict-equal.ts +119 -0
  208. package/src/lib/gml/parse-gml.ts +1 -1
  209. package/src/lib/lerc/lerc-types.ts +43 -0
  210. package/src/lib/wcs/parse-wcs.ts +39 -0
  211. package/src/lib/wcs/wcs-types.ts +77 -0
  212. package/src/lib/wms/parse-wms.ts +16 -3
  213. package/src/wip/arcgis-feature-service.ts +89 -0
  214. package/src/{lib/data-sources/image-data-source.ts → wip/data-source.ts} +20 -41
  215. package/src/{gml-loader.ts → wip/gml-loader.ts} +1 -1
  216. package/src/{wcs-capabilities-loader.ts → wip/wcs-capabilities-loader.ts} +2 -2
  217. package/src/{wfs-capabilities-loader.ts → wip/wfs-capabilities-loader.ts} +2 -2
  218. package/src/{wms-feature-info-loader.ts → wip/wms-feature-info-loader.ts} +3 -3
  219. package/src/wip/wms-layer-description-loader.md +47 -0
  220. package/src/{wms-layer-description-loader.ts → wip/wms-layer-description-loader.ts} +3 -3
  221. package/src/{wmts-capabilities-loader.ts → wip/wmts-capabilities-loader.ts} +2 -2
  222. package/src/wms-capabilities-loader.ts +1 -1
  223. package/src/wms-error-loader.ts +25 -6
  224. package/dist/es5/gml-loader.js.map +0 -1
  225. package/dist/es5/lib/data-sources/image-data-source.js +0 -4
  226. package/dist/es5/lib/data-sources/image-data-source.js.map +0 -1
  227. package/dist/es5/lib/data-sources/wms-service.js +0 -340
  228. package/dist/es5/lib/data-sources/wms-service.js.map +0 -1
  229. package/dist/es5/wcs-capabilities-loader.js.map +0 -1
  230. package/dist/es5/wfs-capabilities-loader.js.map +0 -1
  231. package/dist/es5/wms-feature-info-loader.js.map +0 -1
  232. package/dist/es5/wms-layer-description-loader.js.map +0 -1
  233. package/dist/es5/wmts-capabilities-loader.js.map +0 -1
  234. package/dist/esm/gml-loader.js.map +0 -1
  235. package/dist/esm/lib/data-sources/image-data-source.js +0 -2
  236. package/dist/esm/lib/data-sources/image-data-source.js.map +0 -1
  237. package/dist/esm/lib/data-sources/wms-service.js +0 -156
  238. package/dist/esm/lib/data-sources/wms-service.js.map +0 -1
  239. package/dist/esm/wcs-capabilities-loader.js.map +0 -1
  240. package/dist/esm/wfs-capabilities-loader.js.map +0 -1
  241. package/dist/esm/wms-feature-info-loader.js.map +0 -1
  242. package/dist/esm/wms-layer-description-loader.js.map +0 -1
  243. package/dist/esm/wmts-capabilities-loader.js.map +0 -1
  244. package/src/lib/data-sources/wms-service.ts +0 -313
@@ -6,13 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports._typecheckWMSErrorLoader = exports.WMSErrorLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
11
  var _parseWms = require("./lib/wms/parse-wms");
11
-
12
- var VERSION = typeof "3.3.0-alpha.12" !== 'undefined' ? "3.3.0-alpha.12" : 'latest';
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+ var VERSION = typeof "3.3.0-alpha.14" !== 'undefined' ? "3.3.0-alpha.14" : 'latest';
13
15
  var WMSErrorLoader = {
16
+ id: 'wms-error',
14
17
  name: 'WMS Error',
15
- id: 'wms-capabilities',
16
18
  module: 'wms',
17
19
  version: VERSION,
18
20
  worker: false,
@@ -20,7 +22,9 @@ var WMSErrorLoader = {
20
22
  mimeTypes: ['application/vnd.ogc.se_xml', 'application/xml', 'text/xml'],
21
23
  testText: testXMLFile,
22
24
  options: {
23
- wms: {}
25
+ wms: {
26
+ throwOnError: false
27
+ }
24
28
  },
25
29
  parse: function () {
26
30
  var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
@@ -28,7 +32,7 @@ var WMSErrorLoader = {
28
32
  while (1) {
29
33
  switch (_context.prev = _context.next) {
30
34
  case 0:
31
- return _context.abrupt("return", (0, _parseWms.parseWMSError)(new TextDecoder().decode(arrayBuffer), options));
35
+ return _context.abrupt("return", _parseTextSync(new TextDecoder().decode(arrayBuffer), options));
32
36
  case 1:
33
37
  case "end":
34
38
  return _context.stop();
@@ -41,14 +45,26 @@ var WMSErrorLoader = {
41
45
  }
42
46
  return parse;
43
47
  }(),
48
+ parseSync: function parseSync(arrayBuffer, options) {
49
+ return _parseTextSync(new TextDecoder().decode(arrayBuffer), options);
50
+ },
44
51
  parseTextSync: function parseTextSync(text, options) {
45
- return (0, _parseWms.parseWMSError)(text, options);
52
+ return _parseTextSync(text, options);
46
53
  }
47
54
  };
48
55
  exports.WMSErrorLoader = WMSErrorLoader;
49
56
  function testXMLFile(text) {
50
57
  return text.startsWith('<?xml');
51
58
  }
59
+ function _parseTextSync(text, options) {
60
+ var wmsOptions = _objectSpread(_objectSpread({}, WMSErrorLoader.options.wms), options === null || options === void 0 ? void 0 : options.wms);
61
+ var error = (0, _parseWms.parseWMSError)(text, wmsOptions);
62
+ var message = wmsOptions.minimalErrors ? error : "WMS Service error: ".concat(error);
63
+ if (wmsOptions.throwOnError) {
64
+ throw new Error(message);
65
+ }
66
+ return message;
67
+ }
52
68
  var _typecheckWMSErrorLoader = WMSErrorLoader;
53
69
  exports._typecheckWMSErrorLoader = _typecheckWMSErrorLoader;
54
70
  //# sourceMappingURL=wms-error-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wms-error-loader.js","names":["VERSION","WMSErrorLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testXMLFile","options","wms","parse","arrayBuffer","parseWMSError","TextDecoder","decode","parseTextSync","text","startsWith","_typecheckWMSErrorLoader"],"sources":["../../src/wms-error-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parseWMSError} from './lib/wms/parse-wms';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type WMSLoaderOptions = LoaderOptions & {\n wms?: {};\n};\n\n/**\n * Loader for the response to the WMS GetCapability request\n */\nexport const WMSErrorLoader = {\n name: 'WMS Error',\n id: 'wms-capabilities',\n\n module: 'wms',\n version: VERSION,\n worker: false,\n extensions: ['xml'],\n mimeTypes: ['application/vnd.ogc.se_xml', 'application/xml', 'text/xml'],\n testText: testXMLFile,\n options: {\n wms: {}\n },\n parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions) =>\n parseWMSError(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: WMSLoaderOptions) => parseWMSError(text, options)\n};\n\nfunction testXMLFile(text: string): boolean {\n // TODO - There could be space first.\n return text.startsWith('<?xml');\n}\n\nexport const _typecheckWMSErrorLoader: LoaderWithParser = WMSErrorLoader;\n"],"mappings":";;;;;;;;;AAGA;;AAIA,IAAMA,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,QAAQ;AASpE,IAAMC,cAAc,GAAG;EAC5BC,IAAI,EAAE,WAAW;EACjBC,EAAE,EAAE,kBAAkB;EAEtBC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,UAAU,CAAC;EACxEC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR,CAAC;EACDC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAEH,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChE,IAAAI,uBAAa,EAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEH,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC/DO,aAAa,EAAE,uBAACC,IAAY,EAAER,OAA0B;IAAA,OAAK,IAAAI,uBAAa,EAACI,IAAI,EAAER,OAAO,CAAC;EAAA;AAC3F,CAAC;AAAC;AAEF,SAASD,WAAW,CAACS,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAACC,UAAU,CAAC,OAAO,CAAC;AACjC;AAEO,IAAMC,wBAA0C,GAAGpB,cAAc;AAAC"}
1
+ {"version":3,"file":"wms-error-loader.js","names":["VERSION","WMSErrorLoader","id","name","module","version","worker","extensions","mimeTypes","testText","testXMLFile","options","wms","throwOnError","parse","arrayBuffer","parseTextSync","TextDecoder","decode","parseSync","text","startsWith","wmsOptions","error","parseWMSError","message","minimalErrors","Error","_typecheckWMSErrorLoader"],"sources":["../../src/wms-error-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parseWMSError} from './lib/wms/parse-wms';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type WMSLoaderOptions = LoaderOptions & {\n wms?: {\n /** By default the error loader will throw an error with the parsed error message */\n throwOnError?: boolean;\n /** Do not add any text to errors */\n minimalErrors?: boolean;\n };\n};\n\n/**\n * Loader for the response to the WMS GetCapability request\n */\nexport const WMSErrorLoader = {\n id: 'wms-error',\n name: 'WMS Error',\n\n module: 'wms',\n version: VERSION,\n worker: false,\n extensions: ['xml'],\n mimeTypes: ['application/vnd.ogc.se_xml', 'application/xml', 'text/xml'],\n testText: testXMLFile,\n options: {\n wms: {\n throwOnError: false\n }\n },\n parse: async (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions): Promise<string> =>\n parseTextSync(new TextDecoder().decode(arrayBuffer), options),\n parseSync: (arrayBuffer: ArrayBuffer, options?: WMSLoaderOptions): string =>\n parseTextSync(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: WMSLoaderOptions): string => parseTextSync(text, options)\n};\n\nfunction testXMLFile(text: string): boolean {\n // TODO - There could be space first.\n return text.startsWith('<?xml');\n}\n\nfunction parseTextSync(text: string, options?: WMSLoaderOptions): string {\n const wmsOptions: WMSLoaderOptions['wms'] = {...WMSErrorLoader.options.wms, ...options?.wms};\n const error = parseWMSError(text, wmsOptions);\n const message = wmsOptions.minimalErrors ? error : `WMS Service error: ${error}`;\n if (wmsOptions.throwOnError) {\n throw new Error(message);\n }\n return message;\n}\n\nexport const _typecheckWMSErrorLoader: LoaderWithParser = WMSErrorLoader;\n"],"mappings":";;;;;;;;;;AAGA;AAAkD;AAAA;AAIlD,IAAMA,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,QAAQ;AAcpE,IAAMC,cAAc,GAAG;EAC5BC,EAAE,EAAE,WAAW;EACfC,IAAI,EAAE,WAAW;EAEjBC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,UAAU,CAAC;EACxEC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,YAAY,EAAE;IAChB;EACF,CAAC;EACDC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAEJ,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChEK,cAAa,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEJ,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC/DQ,SAAS,EAAE,mBAACJ,WAAwB,EAAEJ,OAA0B;IAAA,OAC9DK,cAAa,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEJ,OAAO,CAAC;EAAA;EAC/DK,aAAa,EAAE,uBAACI,IAAY,EAAET,OAA0B;IAAA,OAAaK,cAAa,CAACI,IAAI,EAAET,OAAO,CAAC;EAAA;AACnG,CAAC;AAAC;AAEF,SAASD,WAAW,CAACU,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAACC,UAAU,CAAC,OAAO,CAAC;AACjC;AAEA,SAASL,cAAa,CAACI,IAAY,EAAET,OAA0B,EAAU;EACvE,IAAMW,UAAmC,mCAAOrB,cAAc,CAACU,OAAO,CAACC,GAAG,GAAKD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EAC5F,IAAMW,KAAK,GAAG,IAAAC,uBAAa,EAACJ,IAAI,EAAEE,UAAU,CAAC;EAC7C,IAAMG,OAAO,GAAGH,UAAU,CAACI,aAAa,GAAGH,KAAK,gCAAyBA,KAAK,CAAE;EAChF,IAAID,UAAU,CAACT,YAAY,EAAE;IAC3B,MAAM,IAAIc,KAAK,CAACF,OAAO,CAAC;EAC1B;EACA,OAAOA,OAAO;AAChB;AAEO,IAAMG,wBAA0C,GAAG3B,cAAc;AAAC"}
package/dist/esm/index.js CHANGED
@@ -2,13 +2,19 @@
2
2
 
3
3
  export { WMSErrorLoader } from './wms-error-loader';
4
4
  export { WMSCapabilitiesLoader } from './wms-capabilities-loader';
5
- export { WMSFeatureInfoLoader } from './wms-feature-info-loader';
6
- export { WMSLayerDescriptionLoader } from './wms-layer-description-loader';
7
- export { WMSService } from './lib/data-sources/wms-service';
8
5
 
9
- export { WFSCapabilitiesLoader } from './wfs-capabilities-loader';
6
+ export { ImageSource } from './lib/data-sources/image-source';
7
+ export { createImageSource } from './lib/data-sources/create-image-source';
8
+ export { ImageService } from './lib/data-sources/image-services/image-service';
9
+ export { WMSService } from './lib/data-sources/image-services/wms-service';
10
+ export { ArcGISImageService as _ArcGISImageService } from './lib/data-sources/image-services/arcgis-image-service';
10
11
 
11
- export { WMTSCapabilitiesLoader } from './wmts-capabilities-loader';
12
+ export { WMSFeatureInfoLoader as _WMSFeatureInfoLoader } from './wip/wms-feature-info-loader';
13
+ export { WMSLayerDescriptionLoader as _WMSLayerDescriptionLoader } from './wip/wms-layer-description-loader';
12
14
 
13
- export { GMLLoader } from './gml-loader';
15
+ export { WMTSCapabilitiesLoader as _WMTSCapabilitiesLoader } from './wip/wmts-capabilities-loader';
16
+
17
+ export { WFSCapabilitiesLoader as _WFSCapabilitiesLoader } from './wip/wfs-capabilities-loader';
18
+
19
+ export { GMLLoader as _GMLLoader } from './wip/gml-loader';
14
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["WMSErrorLoader","WMSCapabilitiesLoader","WMSFeatureInfoLoader","WMSLayerDescriptionLoader","WMSService","WFSCapabilitiesLoader","WMTSCapabilitiesLoader","GMLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// WMS\n\nexport {WMSErrorLoader} from './wms-error-loader';\n\nexport type {WMSCapabilities, WMSFeatureInfo, WMSLayerDescription} from './lib/wms/wms-types';\nexport type {WMSLoaderOptions} from './wms-capabilities-loader';\nexport {WMSCapabilitiesLoader} from './wms-capabilities-loader';\nexport {WMSFeatureInfoLoader} from './wms-feature-info-loader';\nexport {WMSLayerDescriptionLoader} from './wms-layer-description-loader';\n\nexport type {WMSServiceProps} from './lib/data-sources/wms-service';\nexport {WMSService} from './lib/data-sources/wms-service';\n\n// WFS\n\nexport type {WFSCapabilities} from './lib/wfs/wfs-types';\nexport type {WFSLoaderOptions} from './wfs-capabilities-loader';\nexport {WFSCapabilitiesLoader} from './wfs-capabilities-loader';\n\n// WMTS\n\nexport type {WMTSCapabilities} from './lib/wmts/wmts-types';\nexport type {WMTSLoaderOptions} from './wmts-capabilities-loader';\nexport {WMTSCapabilitiesLoader} from './wmts-capabilities-loader';\n\n// GML\n\nexport type {GeoJSON} from '@loaders.gl/schema';\nexport type {GMLLoaderOptions} from './gml-loader';\nexport {GMLLoader} from './gml-loader';\n"],"mappings":";;AAIA,SAAQA,cAAc,QAAO,oBAAoB;AAIjD,SAAQC,qBAAqB,QAAO,2BAA2B;AAC/D,SAAQC,oBAAoB,QAAO,2BAA2B;AAC9D,SAAQC,yBAAyB,QAAO,gCAAgC;AAGxE,SAAQC,UAAU,QAAO,gCAAgC;;AAMzD,SAAQC,qBAAqB,QAAO,2BAA2B;;AAM/D,SAAQC,sBAAsB,QAAO,4BAA4B;;AAMjE,SAAQC,SAAS,QAAO,cAAc"}
1
+ {"version":3,"file":"index.js","names":["WMSErrorLoader","WMSCapabilitiesLoader","ImageSource","createImageSource","ImageService","WMSService","ArcGISImageService","_ArcGISImageService","WMSFeatureInfoLoader","_WMSFeatureInfoLoader","WMSLayerDescriptionLoader","_WMSLayerDescriptionLoader","WMTSCapabilitiesLoader","_WMTSCapabilitiesLoader","WFSCapabilitiesLoader","_WFSCapabilitiesLoader","GMLLoader","_GMLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// WMS\n\nexport {WMSErrorLoader} from './wms-error-loader';\n\nexport type {WMSLoaderOptions} from './wms-capabilities-loader';\n\nexport type {WMSCapabilities} from './lib/wms/wms-types';\nexport {WMSCapabilitiesLoader} from './wms-capabilities-loader';\n\n// NOTE: Will likely move to tiles module\nexport type {ImageSourceMetadata} from './lib/data-sources/image-source';\nexport type {ImageType} from '@loaders.gl/images';\nexport {ImageSource} from './lib/data-sources/image-source';\n\nexport type {ImageServiceType} from './lib/data-sources/create-image-source';\nexport {createImageSource} from './lib/data-sources/create-image-source';\n\nexport type {ImageServiceProps} from './lib/data-sources/image-services/image-service';\nexport {ImageService} from './lib/data-sources/image-services/image-service';\nexport {WMSService} from './lib/data-sources/image-services/wms-service';\nexport {ArcGISImageService as _ArcGISImageService} from './lib/data-sources/image-services/arcgis-image-service';\n\n// WIP /////////////////////////////////////////////////////////////////\n// Plumbing set up but details of parsing and typing not yet completed\n\n// WMS\n\nexport type {WMSFeatureInfo as _WMSFeatureInfo} from './lib/wms/wms-types';\nexport {WMSFeatureInfoLoader as _WMSFeatureInfoLoader} from './wip/wms-feature-info-loader';\n\nexport type {WMSLayerDescription as _WMSLayerDescription} from './lib/wms/wms-types';\nexport {WMSLayerDescriptionLoader as _WMSLayerDescriptionLoader} from './wip/wms-layer-description-loader';\n\n// WMTS\n\nexport type {WMTSCapabilities as _WMTSCapabilities} from './lib/wmts/wmts-types';\nexport type {WMTSLoaderOptions as _WMTSLoaderOptions} from './wip/wmts-capabilities-loader';\nexport {WMTSCapabilitiesLoader as _WMTSCapabilitiesLoader} from './wip/wmts-capabilities-loader';\n\n// WFS\n\nexport type {WFSCapabilities as _WFSCapabilities} from './lib/wfs/wfs-types';\nexport type {WFSLoaderOptions as _WFSLoaderOptions} from './wip/wfs-capabilities-loader';\nexport {WFSCapabilitiesLoader as _WFSCapabilitiesLoader} from './wip/wfs-capabilities-loader';\n\n// GML\n\nexport type {GeoJSON as _GeoJSON} from '@loaders.gl/schema';\nexport type {GMLLoaderOptions as _GMLLoaderOptions} from './wip/gml-loader';\nexport {GMLLoader as _GMLLoader} from './wip/gml-loader';\n\n// LERC\n\n// TODO - restore once esbuild bundling issues have been resolved\n// export type {LERCData} from './lib/lerc/lerc-types';\n// export {LERCLoader} from './lerc-loader';\n"],"mappings":";;AAIA,SAAQA,cAAc,QAAO,oBAAoB;AAKjD,SAAQC,qBAAqB,QAAO,2BAA2B;;AAK/D,SAAQC,WAAW,QAAO,iCAAiC;AAG3D,SAAQC,iBAAiB,QAAO,wCAAwC;AAGxE,SAAQC,YAAY,QAAO,iDAAiD;AAC5E,SAAQC,UAAU,QAAO,+CAA+C;AACxE,SAAQC,kBAAkB,IAAIC,mBAAmB,QAAO,wDAAwD;;AAQhH,SAAQC,oBAAoB,IAAIC,qBAAqB,QAAO,+BAA+B;AAG3F,SAAQC,yBAAyB,IAAIC,0BAA0B,QAAO,oCAAoC;;AAM1G,SAAQC,sBAAsB,IAAIC,uBAAuB,QAAO,gCAAgC;;AAMhG,SAAQC,qBAAqB,IAAIC,sBAAsB,QAAO,+BAA+B;;AAM7F,SAAQC,SAAS,IAAIC,UAAU,QAAO,kBAAkB"}
@@ -0,0 +1,25 @@
1
+
2
+
3
+ import * as Lerc from 'lerc';
4
+
5
+ const VERSION = typeof "3.3.0-alpha.14" !== 'undefined' ? "3.3.0-alpha.14" : 'latest';
6
+ export const LERCLoader = {
7
+ id: 'lerc',
8
+ name: 'LERC',
9
+ module: 'wms',
10
+ version: VERSION,
11
+ worker: false,
12
+ extensions: ['lrc', 'lerc', 'lerc2', 'lerc1'],
13
+ mimeTypes: ['application/octet-stream'],
14
+ options: {
15
+ wms: {}
16
+ },
17
+ parse: async (arrayBuffer, options) => parseLERC(arrayBuffer, options)
18
+ };
19
+ async function parseLERC(arrayBuffer, options) {
20
+ await Lerc.load();
21
+ const pixelBlock = Lerc.decode(arrayBuffer, options === null || options === void 0 ? void 0 : options.lerc);
22
+ return pixelBlock;
23
+ }
24
+ export const _typecheckLERCLoader = LERCLoader;
25
+ //# sourceMappingURL=lerc-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lerc-loader.js","names":["Lerc","VERSION","LERCLoader","id","name","module","version","worker","extensions","mimeTypes","options","wms","parse","arrayBuffer","parseLERC","load","pixelBlock","decode","lerc","_typecheckLERCLoader"],"sources":["../../src/lerc-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {LERCData} from './lib/lerc/lerc-types';\nimport * as Lerc from 'lerc';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type LERCLoaderOptions = LoaderOptions & {\n lerc?: {\n /**\tThe number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position. */\n inputOffset?: number;\n /**\tIt is recommended to use the returned mask instead of setting this value. */\n noDataValue?: number;\n /**\t(ndepth LERC2 only) If true, returned depth values are pixel-interleaved. */\n returnInterleaved?: boolean;\n };\n};\n\n/**\n * Loader for the LERC raster format\n */\nexport const LERCLoader = {\n id: 'lerc',\n name: 'LERC',\n\n module: 'wms',\n version: VERSION,\n worker: false,\n extensions: ['lrc', 'lerc', 'lerc2', 'lerc1'],\n mimeTypes: ['application/octet-stream'],\n // test: ?,\n options: {\n wms: {}\n },\n parse: async (arrayBuffer: ArrayBuffer, options?: LERCLoaderOptions) =>\n parseLERC(arrayBuffer, options)\n};\n\nasync function parseLERC(arrayBuffer: ArrayBuffer, options?: LERCLoaderOptions): Promise<LERCData> {\n // Load the WASM library\n await Lerc.load();\n // Perform the decode\n const pixelBlock = Lerc.decode(arrayBuffer, options?.lerc);\n return pixelBlock;\n}\n\nexport const _typecheckLERCLoader: LoaderWithParser = LERCLoader;\n"],"mappings":";;AAIA,OAAO,KAAKA,IAAI,MAAM,MAAM;;AAI5B,MAAMC,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,QAAQ;AAgB3E,OAAO,MAAMC,UAAU,GAAG;EACxBC,EAAE,EAAE,MAAM;EACVC,IAAI,EAAE,MAAM;EAEZC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;EAC7CC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAEvCC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR,CAAC;EACDC,KAAK,EAAE,OAAOC,WAAwB,EAAEH,OAA2B,KACjEI,SAAS,CAACD,WAAW,EAAEH,OAAO;AAClC,CAAC;AAED,eAAeI,SAAS,CAACD,WAAwB,EAAEH,OAA2B,EAAqB;EAEjG,MAAMV,IAAI,CAACe,IAAI,EAAE;EAEjB,MAAMC,UAAU,GAAGhB,IAAI,CAACiB,MAAM,CAACJ,WAAW,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,IAAI,CAAC;EAC1D,OAAOF,UAAU;AACnB;AAEA,OAAO,MAAMG,oBAAsC,GAAGjB,UAAU"}
@@ -0,0 +1,43 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ import { ImageLoader } from '@loaders.gl/images';
4
+ import { ImageSource } from './image-source';
5
+ export class AdHocImageService extends ImageSource {
6
+ constructor(props) {
7
+ super();
8
+ _defineProperty(this, "templateUrl", void 0);
9
+ this.templateUrl = props.templateUrl;
10
+ }
11
+
12
+ async getMetadata() {
13
+ throw new Error('ImageSource.getMetadata not implemented');
14
+ }
15
+ async getImage(parameters) {
16
+ const granularParameters = this.getGranularParameters(parameters);
17
+ const url = this.getURLFromTemplate(granularParameters);
18
+ const response = await fetch(url);
19
+ const arrayBuffer = await response.arrayBuffer();
20
+ return await ImageLoader.parse(arrayBuffer);
21
+ }
22
+
23
+ getGranularParameters(parameters) {
24
+ const [east, north, west, south] = parameters.bbox;
25
+ return {
26
+ ...parameters,
27
+ east,
28
+ north,
29
+ south,
30
+ west
31
+ };
32
+ }
33
+ getURLFromTemplate(parameters) {
34
+ let url = this.templateUrl;
35
+ for (const [key, value] of Object.entries(parameters)) {
36
+ url = url.replace("${".concat(key, "}"), String(value));
37
+ }
38
+ return url;
39
+ }
40
+ }
41
+ _defineProperty(AdHocImageService, "type", 'template');
42
+ _defineProperty(AdHocImageService, "testURL", url => url.toLowerCase().includes('{'));
43
+ //# sourceMappingURL=adhoc-image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adhoc-image-service.js","names":["ImageLoader","ImageSource","AdHocImageService","constructor","props","templateUrl","getMetadata","Error","getImage","parameters","granularParameters","getGranularParameters","url","getURLFromTemplate","response","fetch","arrayBuffer","parse","east","north","west","south","bbox","key","value","Object","entries","replace","String","toLowerCase","includes"],"sources":["../../../../src/lib/data-sources/adhoc-image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {ImageType} from '@loaders.gl/images';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport type {ImageSourceMetadata, GetImageParameters} from './image-source';\nimport {ImageSource} from './image-source';\n\nexport type AdHocImageServiceProps = {\n /** Template URL string should contain `${width}` etc which will be substituted. */\n templateUrl: string;\n};\n\n/**\n * Quickly connect to \"ad hoc\" image sources without subclassing ImageSource.\n * ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources\n * Accepts a template url string and builds requests URLs\n */\nexport class AdHocImageService extends ImageSource {\n static type: 'template' = 'template';\n static testURL = (url: string): boolean => url.toLowerCase().includes('{');\n\n templateUrl: string;\n\n constructor(props: AdHocImageServiceProps) {\n super();\n this.templateUrl = props.templateUrl;\n }\n\n // IMAGE SOURCE API\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n throw new Error('ImageSource.getMetadata not implemented');\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n const granularParameters = this.getGranularParameters(parameters);\n const url = this.getURLFromTemplate(granularParameters);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n return await ImageLoader.parse(arrayBuffer);\n }\n\n // HELPERS\n\n /** Break up bounding box in east, north, south, west */\n protected getGranularParameters(parameters: GetImageParameters): Record<string, unknown> {\n const [east, north, west, south] = parameters.bbox;\n return {...parameters, east, north, south, west};\n }\n\n protected getURLFromTemplate(parameters: Record<string, unknown>): string {\n let url = this.templateUrl;\n for (const [key, value] of Object.entries(parameters)) {\n // TODO - parameter could be repeated\n // const regex = new RegExp(`\\${${key}}`, 'g');\n url = url.replace(`\\${${key}}`, String(value));\n }\n return url;\n }\n}\n"],"mappings":";;AAGA,SAAQA,WAAW,QAAO,oBAAoB;AAG9C,SAAQC,WAAW,QAAO,gBAAgB;AAY1C,OAAO,MAAMC,iBAAiB,SAASD,WAAW,CAAC;EAMjDE,WAAW,CAACC,KAA6B,EAAE;IACzC,KAAK,EAAE;IAAC;IACR,IAAI,CAACC,WAAW,GAAGD,KAAK,CAACC,WAAW;EACtC;;EAIA,MAAMC,WAAW,GAAiC;IAChD,MAAM,IAAIC,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EAEA,MAAMC,QAAQ,CAACC,UAA8B,EAAsB;IACjE,MAAMC,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CAACF,UAAU,CAAC;IACjE,MAAMG,GAAG,GAAG,IAAI,CAACC,kBAAkB,CAACH,kBAAkB,CAAC;IACvD,MAAMI,QAAQ,GAAG,MAAMC,KAAK,CAACH,GAAG,CAAC;IACjC,MAAMI,WAAW,GAAG,MAAMF,QAAQ,CAACE,WAAW,EAAE;IAChD,OAAO,MAAMhB,WAAW,CAACiB,KAAK,CAACD,WAAW,CAAC;EAC7C;;EAKUL,qBAAqB,CAACF,UAA8B,EAA2B;IACvF,MAAM,CAACS,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,KAAK,CAAC,GAAGZ,UAAU,CAACa,IAAI;IAClD,OAAO;MAAC,GAAGb,UAAU;MAAES,IAAI;MAAEC,KAAK;MAAEE,KAAK;MAAED;IAAI,CAAC;EAClD;EAEUP,kBAAkB,CAACJ,UAAmC,EAAU;IACxE,IAAIG,GAAG,GAAG,IAAI,CAACP,WAAW;IAC1B,KAAK,MAAM,CAACkB,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACjB,UAAU,CAAC,EAAE;MAGrDG,GAAG,GAAGA,GAAG,CAACe,OAAO,aAAOJ,GAAG,QAAKK,MAAM,CAACJ,KAAK,CAAC,CAAC;IAChD;IACA,OAAOZ,GAAG;EACZ;AACF;AAAC,gBA1CYV,iBAAiB,UACF,UAAU;AAAA,gBADzBA,iBAAiB,aAEVU,GAAW,IAAcA,GAAG,CAACiB,WAAW,EAAE,CAACC,QAAQ,CAAC,GAAG,CAAC"}
@@ -0,0 +1,62 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ import { ImageSource } from './image-source';
4
+ export class ArcGISImageService extends ImageSource {
5
+ constructor(props) {
6
+ super();
7
+ _defineProperty(this, "url", void 0);
8
+ _defineProperty(this, "loadOptions", void 0);
9
+ _defineProperty(this, "fetch", void 0);
10
+ this.url = props.url;
11
+ this.loadOptions = props.loadOptions || {};
12
+ this.fetch = props.fetch || fetch;
13
+ }
14
+
15
+ async getMetadata() {
16
+ return await this.info();
17
+ }
18
+
19
+ async getImage(parameters) {
20
+ throw new Error('not implemented');
21
+ }
22
+
23
+ async info() {
24
+ throw new Error('not implemented');
25
+ }
26
+
27
+ exportImage(options) {
28
+ throw new Error('not implemented');
29
+ }
30
+
31
+ infoURL(options) {
32
+ return this.url;
33
+ }
34
+
35
+ exportImageURL(options) {
36
+ return this.url;
37
+ }
38
+
39
+ getUrl(options, extra) {
40
+ let url = "".concat(this.url);
41
+ let first = true;
42
+ for (const [key, value] of Object.entries(options)) {
43
+ url += first ? '?' : '&';
44
+ first = false;
45
+ if (Array.isArray(value)) {
46
+ url += "".concat(key.toUpperCase(), "=").concat(value.join(','));
47
+ } else {
48
+ url += "".concat(key.toUpperCase(), "=").concat(value ? String(value) : '');
49
+ }
50
+ }
51
+ return url;
52
+ }
53
+
54
+ async checkResponse(response) {
55
+ if (!response.ok) {
56
+ throw new Error('error');
57
+ }
58
+ }
59
+ }
60
+ _defineProperty(ArcGISImageService, "type", 'arcgis-image-server');
61
+ _defineProperty(ArcGISImageService, "testURL", url => url.toLowerCase().includes('ImageServer'));
62
+ //# sourceMappingURL=arcgis-image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-service.js","names":["ImageSource","ArcGISImageService","constructor","props","url","loadOptions","fetch","getMetadata","info","getImage","parameters","Error","exportImage","options","infoURL","exportImageURL","getUrl","extra","first","key","value","Object","entries","Array","isArray","toUpperCase","join","String","checkResponse","response","ok","toLowerCase","includes"],"sources":["../../../../src/lib/data-sources/arcgis-image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {/* ImageLoader, */ ImageType} from '@loaders.gl/images';\nimport type {ImageSourceMetadata, GetImageParameters} from './image-source';\nimport {ImageSource} from './image-source';\n\ntype FetchLike = (url: string, options?: RequestInit) => Promise<Response>;\n\nexport type ArcGISImageServiceProps = {\n url: string;\n loadOptions?: LoaderOptions;\n fetch?: typeof fetch | FetchLike;\n};\n\nexport class ArcGISImageService extends ImageSource {\n static type: 'arcgis-image-server' = 'arcgis-image-server';\n static testURL = (url: string): boolean => url.toLowerCase().includes('ImageServer');\n\n url: string;\n loadOptions: LoaderOptions;\n fetch: typeof fetch | FetchLike;\n\n constructor(props: ArcGISImageServiceProps) {\n super();\n this.url = props.url;\n this.loadOptions = props.loadOptions || {};\n this.fetch = props.fetch || fetch;\n }\n\n // ImageSource (normalized endpoints)\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n return (await this.info()) as ImageSourceMetadata;\n // TODO - normalize metadata\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n throw new Error('not implemented');\n // TODO - Map generic parameters to ArcGIS specific parameters\n // return await this.exportImage(parameters);\n }\n\n // ImageServer endpoints\n\n async info(): Promise<unknown> {\n // We just need a JSON parsing...\n // return this.getUrl({path: '', ...options});\n throw new Error('not implemented');\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,\n */\n exportImage(options: {\n boundingBox: [number, number, number, number];\n boundingBoxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): Promise<ImageType> {\n // See WMSService.getMap()\n throw new Error('not implemented');\n }\n\n // URL creators\n\n infoURL(options: {parameters?: Record<string, unknown>}): string {\n return this.url;\n // return this.getUrl({path: '', ...options});\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,\n */\n exportImageURL(options: {\n boundingBox: [number, number, number, number];\n boundingBoxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): string {\n // const {boundingBox} = options;\n // const bbox = `bbox=${boundingBox[0]},${boundingBox[1]},${boundingBox[2]},${boundingBox[3]}`;\n // const size = `size=${width},${height}`;\n // return this.getUrl({path: 'exportImage'});\n return this.url;\n }\n\n // INTERNAL METHODS\n\n /**\n * @note protected, since perhaps getWMSUrl may need to be overridden to handle certain backends?\n * @note if override is common, maybe add a callback prop?\n * */\n protected getUrl(options: Record<string, unknown>, extra?: Record<string, unknown>): string {\n let url = `${this.url}`;\n let first = true;\n for (const [key, value] of Object.entries(options)) {\n url += first ? '?' : '&';\n first = false;\n if (Array.isArray(value)) {\n url += `${key.toUpperCase()}=${value.join(',')}`;\n } else {\n url += `${key.toUpperCase()}=${value ? String(value) : ''}`;\n }\n }\n return url;\n }\n\n /** Checks for and parses a WMS XML formatted ServiceError and throws an exception */\n protected async checkResponse(response: Response) {\n if (!response.ok) {\n // } || response.headers['content-type'] === WMSErrorLoader.mimeTypes[0]) {\n // const arrayBuffer = await response.arrayBuffer();\n // const error = await WMSErrorLoader.parse(arrayBuffer, this.loadOptions);\n throw new Error('error');\n }\n }\n}\n"],"mappings":";;AAKA,SAAQA,WAAW,QAAO,gBAAgB;AAU1C,OAAO,MAAMC,kBAAkB,SAASD,WAAW,CAAC;EAQlDE,WAAW,CAACC,KAA8B,EAAE;IAC1C,KAAK,EAAE;IAAC;IAAA;IAAA;IACR,IAAI,CAACC,GAAG,GAAGD,KAAK,CAACC,GAAG;IACpB,IAAI,CAACC,WAAW,GAAGF,KAAK,CAACE,WAAW,IAAI,CAAC,CAAC;IAC1C,IAAI,CAACC,KAAK,GAAGH,KAAK,CAACG,KAAK,IAAIA,KAAK;EACnC;;EAIA,MAAMC,WAAW,GAAiC;IAChD,OAAQ,MAAM,IAAI,CAACC,IAAI,EAAE;EAE3B;;EAEA,MAAMC,QAAQ,CAACC,UAA8B,EAAsB;IACjE,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;EAGpC;;EAIA,MAAMH,IAAI,GAAqB;IAG7B,MAAM,IAAIG,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAMAC,WAAW,CAACC,OAkBX,EAAsB;IAErB,MAAM,IAAIF,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAIAG,OAAO,CAACD,OAA+C,EAAU;IAC/D,OAAO,IAAI,CAACT,GAAG;EAEjB;;EAMAW,cAAc,CAACF,OAkBd,EAAU;IAKT,OAAO,IAAI,CAACT,GAAG;EACjB;;EAQUY,MAAM,CAACH,OAAgC,EAAEI,KAA+B,EAAU;IAC1F,IAAIb,GAAG,aAAM,IAAI,CAACA,GAAG,CAAE;IACvB,IAAIc,KAAK,GAAG,IAAI;IAChB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,OAAO,CAAC,EAAE;MAClDT,GAAG,IAAIc,KAAK,GAAG,GAAG,GAAG,GAAG;MACxBA,KAAK,GAAG,KAAK;MACb,IAAIK,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;QACxBhB,GAAG,cAAOe,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,CAACM,IAAI,CAAC,GAAG,CAAC,CAAE;MAClD,CAAC,MAAM;QACLtB,GAAG,cAAOe,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,GAAGO,MAAM,CAACP,KAAK,CAAC,GAAG,EAAE,CAAE;MAC7D;IACF;IACA,OAAOhB,GAAG;EACZ;;EAGA,MAAgBwB,aAAa,CAACC,QAAkB,EAAE;IAChD,IAAI,CAACA,QAAQ,CAACC,EAAE,EAAE;MAIhB,MAAM,IAAInB,KAAK,CAAC,OAAO,CAAC;IAC1B;EACF;AACF;AAAC,gBAlIYV,kBAAkB,UACQ,qBAAqB;AAAA,gBAD/CA,kBAAkB,aAEXG,GAAW,IAAcA,GAAG,CAAC2B,WAAW,EAAE,CAACC,QAAQ,CAAC,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+
2
+
3
+ import { ImageService } from './image-services/image-service';
4
+ import { WMSService } from './image-services/wms-service';
5
+ import { ArcGISImageService } from './image-services/arcgis-image-service';
6
+ const SERVICES = [WMSService, ArcGISImageService, ImageService];
7
+ export function createImageSource(props) {
8
+ const {
9
+ type = 'auto'
10
+ } = props;
11
+ const serviceType = type === 'auto' ? guessServiceType(props.url) : type;
12
+ switch (serviceType) {
13
+ case 'template':
14
+ return new ImageService(props);
15
+ case 'wms':
16
+ return new WMSService(props);
17
+ default:
18
+ throw new Error('Not a valid image source type');
19
+ }
20
+ }
21
+
22
+ function guessServiceType(url) {
23
+ for (const Service of SERVICES) {
24
+ if (Service.testURL && Service.testURL(url)) {
25
+ return Service.type;
26
+ }
27
+ }
28
+ return 'wms';
29
+ }
30
+ //# sourceMappingURL=create-image-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-image-source.js","names":["ImageService","WMSService","ArcGISImageService","SERVICES","createImageSource","props","type","serviceType","guessServiceType","url","Error","Service","testURL"],"sources":["../../../../src/lib/data-sources/create-image-source.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {ImageSource} from './image-source';\nimport {ImageService, ImageServiceProps} from './image-services/image-service';\nimport {WMSService} from './image-services/wms-service';\nimport {ArcGISImageService} from './image-services/arcgis-image-service';\n\nexport type ImageServiceType = 'wms' | 'arcgis-image-server' | 'template';\n\nconst SERVICES = [WMSService, ArcGISImageService, ImageService];\n\ntype Props = ImageServiceProps & {\n type?: ImageServiceType | 'auto';\n};\n\n/**\n * Creates an image source\n * If type is not supplied, will try to automatically detec the the\n * @param url URL to the image source\n * @param type type of source. if not known, set to 'auto'\n * @returns an ImageSource instance\n */\nexport function createImageSource(props: Props): ImageSource {\n const {type = 'auto'} = props;\n const serviceType = type === 'auto' ? guessServiceType(props.url) : type;\n switch (serviceType) {\n case 'template':\n return new ImageService(props);\n case 'wms':\n return new WMSService(props);\n default:\n // currently only wms service supported\n throw new Error('Not a valid image source type');\n }\n}\n\n/** Guess service type from URL */\nfunction guessServiceType(url: string): ImageServiceType {\n for (const Service of SERVICES) {\n if (Service.testURL && Service.testURL(url)) {\n return Service.type;\n }\n }\n // If all else fails, guess that this is MS service\n return 'wms';\n}\n"],"mappings":";;AAGA,SAAQA,YAAY,QAA0B,gCAAgC;AAC9E,SAAQC,UAAU,QAAO,8BAA8B;AACvD,SAAQC,kBAAkB,QAAO,uCAAuC;AAIxE,MAAMC,QAAQ,GAAG,CAACF,UAAU,EAAEC,kBAAkB,EAAEF,YAAY,CAAC;AAa/D,OAAO,SAASI,iBAAiB,CAACC,KAAY,EAAe;EAC3D,MAAM;IAACC,IAAI,GAAG;EAAM,CAAC,GAAGD,KAAK;EAC7B,MAAME,WAAW,GAAGD,IAAI,KAAK,MAAM,GAAGE,gBAAgB,CAACH,KAAK,CAACI,GAAG,CAAC,GAAGH,IAAI;EACxE,QAAQC,WAAW;IACjB,KAAK,UAAU;MACb,OAAO,IAAIP,YAAY,CAACK,KAAK,CAAC;IAChC,KAAK,KAAK;MACR,OAAO,IAAIJ,UAAU,CAACI,KAAK,CAAC;IAC9B;MAEE,MAAM,IAAIK,KAAK,CAAC,+BAA+B,CAAC;EAAC;AAEvD;;AAGA,SAASF,gBAAgB,CAACC,GAAW,EAAoB;EACvD,KAAK,MAAME,OAAO,IAAIR,QAAQ,EAAE;IAC9B,IAAIQ,OAAO,CAACC,OAAO,IAAID,OAAO,CAACC,OAAO,CAACH,GAAG,CAAC,EAAE;MAC3C,OAAOE,OAAO,CAACL,IAAI;IACrB;EACF;EAEA,OAAO,KAAK;AACd"}
@@ -0,0 +1,61 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ import { ImageSource } from '../image-source';
4
+ import { mergeImageServiceProps, getFetchFunction } from './image-service';
5
+ export class ArcGISImageService extends ImageSource {
6
+ constructor(props) {
7
+ super();
8
+ _defineProperty(this, "props", void 0);
9
+ _defineProperty(this, "fetch", void 0);
10
+ this.props = mergeImageServiceProps(props);
11
+ this.fetch = getFetchFunction(this.props);
12
+ }
13
+
14
+ async getMetadata() {
15
+ return await this.info();
16
+ }
17
+
18
+ async getImage(parameters) {
19
+ throw new Error('not implemented');
20
+ }
21
+
22
+ async info() {
23
+ throw new Error('not implemented');
24
+ }
25
+
26
+ exportImage(options) {
27
+ throw new Error('not implemented');
28
+ }
29
+
30
+ infoURL(options) {
31
+ return this.props.url;
32
+ }
33
+
34
+ exportImageURL(options) {
35
+ return this.props.url;
36
+ }
37
+
38
+ getUrl(options, extra) {
39
+ let url = "".concat(this.props.url);
40
+ let first = true;
41
+ for (const [key, value] of Object.entries(options)) {
42
+ url += first ? '?' : '&';
43
+ first = false;
44
+ if (Array.isArray(value)) {
45
+ url += "".concat(key.toUpperCase(), "=").concat(value.join(','));
46
+ } else {
47
+ url += "".concat(key.toUpperCase(), "=").concat(value ? String(value) : '');
48
+ }
49
+ }
50
+ return url;
51
+ }
52
+
53
+ async checkResponse(response) {
54
+ if (!response.ok) {
55
+ throw new Error('error');
56
+ }
57
+ }
58
+ }
59
+ _defineProperty(ArcGISImageService, "type", 'arcgis-image-server');
60
+ _defineProperty(ArcGISImageService, "testURL", url => url.toLowerCase().includes('ImageServer'));
61
+ //# sourceMappingURL=arcgis-image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-service.js","names":["ImageSource","mergeImageServiceProps","getFetchFunction","ArcGISImageService","constructor","props","fetch","getMetadata","info","getImage","parameters","Error","exportImage","options","infoURL","url","exportImageURL","getUrl","extra","first","key","value","Object","entries","Array","isArray","toUpperCase","join","String","checkResponse","response","ok","toLowerCase","includes"],"sources":["../../../../../src/lib/data-sources/image-services/arcgis-image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {ImageType} from '@loaders.gl/images';\nimport type {ImageSourceMetadata, GetImageParameters} from '../image-source';\nimport {ImageSource} from '../image-source';\nimport {ImageServiceProps, mergeImageServiceProps, getFetchFunction} from './image-service';\n\nexport class ArcGISImageService extends ImageSource {\n static type: 'arcgis-image-server' = 'arcgis-image-server';\n static testURL = (url: string): boolean => url.toLowerCase().includes('ImageServer');\n\n props: Required<ImageServiceProps>;\n fetch: (url: string, options?: RequestInit) => Promise<Response>;\n\n constructor(props: ImageServiceProps) {\n super();\n this.props = mergeImageServiceProps(props);\n this.fetch = getFetchFunction(this.props);\n }\n\n // ImageSource (normalized endpoints)\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n return (await this.info()) as ImageSourceMetadata;\n // TODO - normalize metadata\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n throw new Error('not implemented');\n // TODO - Map generic parameters to ArcGIS specific parameters\n // return await this.exportImage(parameters);\n }\n\n // ImageServer endpoints\n\n async info(): Promise<unknown> {\n // We just need a JSON parsing...\n // return this.getUrl({path: '', ...options});\n throw new Error('not implemented');\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,\n */\n exportImage(options: {\n boundingBox: [number, number, number, number];\n boundingBoxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): Promise<ImageType> {\n // See WMSService.getMap()\n throw new Error('not implemented');\n }\n\n // URL creators\n\n infoURL(options: {parameters?: Record<string, unknown>}): string {\n return this.props.url;\n // return this.getUrl({path: '', ...options});\n }\n\n /** \n * Form a URL to an ESRI ImageServer\n // https://sampleserver6.arcgisonline.com/arcgis/rest/services/NLCDLandCover2001/ImageServer/exportImage?bbox=${bounds[0]},${bounds[1]},${bounds[2]},${bounds[3]}&bboxSR=4326&size=${width},${height}&imageSR=102100&time=&format=jpgpng&pixelType=U8&noData=&noDataInterpretation=esriNoDataMatchAny&interpolation=+RSP_NearestNeighbor&compression=&compressionQuality=&bandIds=&mosaicRule=&renderingRule=&f=image`,\n */\n exportImageURL(options: {\n boundingBox: [number, number, number, number];\n boundingBoxSR?: string;\n width: number;\n height: number;\n imageSR?: string;\n time?: never;\n format?: 'jpgpng';\n pixelType?: 'U8';\n noData?: never;\n noDataInterpretation?: 'esriNoDataMatchAny';\n interpolation?: '+RSP_NearestNeighbor';\n compression?: never;\n compressionQuality?: never;\n bandIds?: never;\n mosaicRule?: never;\n renderingRule?: never;\n f?: 'image';\n }): string {\n // const {boundingBox} = options;\n // const bbox = `bbox=${boundingBox[0]},${boundingBox[1]},${boundingBox[2]},${boundingBox[3]}`;\n // const size = `size=${width},${height}`;\n // return this.getUrl({path: 'exportImage'});\n return this.props.url;\n }\n\n // INTERNAL METHODS\n\n /**\n * @note protected, since perhaps getWMSUrl may need to be overridden to handle certain backends?\n * @note if override is common, maybe add a callback prop?\n * */\n protected getUrl(options: Record<string, unknown>, extra?: Record<string, unknown>): string {\n let url = `${this.props.url}`;\n let first = true;\n for (const [key, value] of Object.entries(options)) {\n url += first ? '?' : '&';\n first = false;\n if (Array.isArray(value)) {\n url += `${key.toUpperCase()}=${value.join(',')}`;\n } else {\n url += `${key.toUpperCase()}=${value ? String(value) : ''}`;\n }\n }\n return url;\n }\n\n /** Checks for and parses a WMS XML formatted ServiceError and throws an exception */\n protected async checkResponse(response: Response) {\n if (!response.ok) {\n // } || response.headers['content-type'] === WMSErrorLoader.mimeTypes[0]) {\n // const arrayBuffer = await response.arrayBuffer();\n // const error = await WMSErrorLoader.parse(arrayBuffer, this.loadOptions);\n throw new Error('error');\n }\n }\n}\n"],"mappings":";;AAIA,SAAQA,WAAW,QAAO,iBAAiB;AAC3C,SAA2BC,sBAAsB,EAAEC,gBAAgB,QAAO,iBAAiB;AAE3F,OAAO,MAAMC,kBAAkB,SAASH,WAAW,CAAC;EAOlDI,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,EAAE;IAAC;IAAA;IACR,IAAI,CAACA,KAAK,GAAGJ,sBAAsB,CAACI,KAAK,CAAC;IAC1C,IAAI,CAACC,KAAK,GAAGJ,gBAAgB,CAAC,IAAI,CAACG,KAAK,CAAC;EAC3C;;EAIA,MAAME,WAAW,GAAiC;IAChD,OAAQ,MAAM,IAAI,CAACC,IAAI,EAAE;EAE3B;;EAEA,MAAMC,QAAQ,CAACC,UAA8B,EAAsB;IACjE,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;EAGpC;;EAIA,MAAMH,IAAI,GAAqB;IAG7B,MAAM,IAAIG,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAMAC,WAAW,CAACC,OAkBX,EAAsB;IAErB,MAAM,IAAIF,KAAK,CAAC,iBAAiB,CAAC;EACpC;;EAIAG,OAAO,CAACD,OAA+C,EAAU;IAC/D,OAAO,IAAI,CAACR,KAAK,CAACU,GAAG;EAEvB;;EAMAC,cAAc,CAACH,OAkBd,EAAU;IAKT,OAAO,IAAI,CAACR,KAAK,CAACU,GAAG;EACvB;;EAQUE,MAAM,CAACJ,OAAgC,EAAEK,KAA+B,EAAU;IAC1F,IAAIH,GAAG,aAAM,IAAI,CAACV,KAAK,CAACU,GAAG,CAAE;IAC7B,IAAII,KAAK,GAAG,IAAI;IAChB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACV,OAAO,CAAC,EAAE;MAClDE,GAAG,IAAII,KAAK,GAAG,GAAG,GAAG,GAAG;MACxBA,KAAK,GAAG,KAAK;MACb,IAAIK,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;QACxBN,GAAG,cAAOK,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,CAACM,IAAI,CAAC,GAAG,CAAC,CAAE;MAClD,CAAC,MAAM;QACLZ,GAAG,cAAOK,GAAG,CAACM,WAAW,EAAE,cAAIL,KAAK,GAAGO,MAAM,CAACP,KAAK,CAAC,GAAG,EAAE,CAAE;MAC7D;IACF;IACA,OAAON,GAAG;EACZ;;EAGA,MAAgBc,aAAa,CAACC,QAAkB,EAAE;IAChD,IAAI,CAACA,QAAQ,CAACC,EAAE,EAAE;MAIhB,MAAM,IAAIpB,KAAK,CAAC,OAAO,CAAC;IAC1B;EACF;AACF;AAAC,gBAhIYR,kBAAkB,UACQ,qBAAqB;AAAA,gBAD/CA,kBAAkB,aAEXY,GAAW,IAAcA,GAAG,CAACiB,WAAW,EAAE,CAACC,QAAQ,CAAC,aAAa,CAAC"}
@@ -0,0 +1,72 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ import { ImageLoader } from '@loaders.gl/images';
4
+ import { ImageSource } from '../image-source';
5
+
6
+ export class ImageService extends ImageSource {
7
+ constructor(props) {
8
+ super();
9
+ _defineProperty(this, "props", void 0);
10
+ _defineProperty(this, "fetch", void 0);
11
+ this.props = mergeImageServiceProps(props);
12
+ this.fetch = getFetchFunction(props);
13
+ }
14
+
15
+ async getMetadata() {
16
+ throw new Error('ImageSource.getMetadata not implemented');
17
+ }
18
+ async getImage(parameters) {
19
+ const granularParameters = this.getGranularParameters(parameters);
20
+ const url = this.getURLFromTemplate(granularParameters);
21
+ const response = await this.fetch(url);
22
+ const arrayBuffer = await response.arrayBuffer();
23
+ return await ImageLoader.parse(arrayBuffer);
24
+ }
25
+
26
+ getGranularParameters(parameters) {
27
+ const [east, north, west, south] = parameters.bbox;
28
+ return {
29
+ ...parameters,
30
+ east,
31
+ north,
32
+ south,
33
+ west
34
+ };
35
+ }
36
+
37
+ getURLFromTemplate(parameters) {
38
+ let url = this.props.url;
39
+ for (const [key, value] of Object.entries(parameters)) {
40
+ url = url.replace("${".concat(key, "}"), String(value));
41
+ url = url.replace("{".concat(key, "}"), String(value));
42
+ }
43
+ return url;
44
+ }
45
+ }
46
+
47
+ _defineProperty(ImageService, "type", 'template');
48
+ _defineProperty(ImageService, "testURL", url => url.toLowerCase().includes('{'));
49
+ export function getFetchFunction(options) {
50
+ const fetchFunction = options === null || options === void 0 ? void 0 : options.fetch;
51
+
52
+ if (fetchFunction && typeof fetchFunction === 'function') {
53
+ return (url, fetchOptions) => fetchFunction(url, fetchOptions);
54
+ }
55
+
56
+ const fetchOptions = options === null || options === void 0 ? void 0 : options.fetch;
57
+ if (fetchOptions && typeof fetchOptions !== 'function') {
58
+ return url => fetch(url, fetchOptions);
59
+ }
60
+
61
+ return url => fetch(url);
62
+ }
63
+ export function mergeImageServiceProps(props) {
64
+ return {
65
+ ...props,
66
+ loadOptions: {
67
+ ...props.loadOptions,
68
+ fetch: getFetchFunction(props.loadOptions)
69
+ }
70
+ };
71
+ }
72
+ //# sourceMappingURL=image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-service.js","names":["ImageLoader","ImageSource","ImageService","constructor","props","mergeImageServiceProps","fetch","getFetchFunction","getMetadata","Error","getImage","parameters","granularParameters","getGranularParameters","url","getURLFromTemplate","response","arrayBuffer","parse","east","north","west","south","bbox","key","value","Object","entries","replace","String","toLowerCase","includes","options","fetchFunction","fetchOptions","loadOptions"],"sources":["../../../../../src/lib/data-sources/image-services/image-service.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ImageType} from '@loaders.gl/images';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport type {ImageSourceMetadata, GetImageParameters} from '../image-source';\nimport {ImageSource} from '../image-source';\n\n/** Template URL string should contain `${width}` etc which will be substituted. */\nexport type ImageServiceProps = {\n /** Base URL to the service */\n url: string;\n /** Any load options to the loaders.gl Loaders used by the WMSService methods */\n loadOptions?: LoaderOptions;\n};\n\n/**\n * Quickly connect to \"ad hoc\" image sources without subclassing ImageSource.\n * ImageSource allows template url strings to be used to ad hoc connect to arbitrary image data sources\n * Accepts a template url string and builds requests URLs\n */\nexport class ImageService extends ImageSource {\n static type: 'template' = 'template';\n static testURL = (url: string): boolean => url.toLowerCase().includes('{');\n\n props: Required<ImageServiceProps>;\n fetch: (url: string, options?: RequestInit) => Promise<Response>;\n\n constructor(props: ImageServiceProps) {\n super();\n this.props = mergeImageServiceProps(props);\n this.fetch = getFetchFunction(props);\n }\n\n // IMAGE SOURCE API\n\n async getMetadata(): Promise<ImageSourceMetadata> {\n throw new Error('ImageSource.getMetadata not implemented');\n }\n\n async getImage(parameters: GetImageParameters): Promise<ImageType> {\n const granularParameters = this.getGranularParameters(parameters);\n const url = this.getURLFromTemplate(granularParameters);\n const response = await this.fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n return await ImageLoader.parse(arrayBuffer);\n }\n\n // HELPERS\n\n /** Break up bounding box in east, north, south, west */\n protected getGranularParameters(parameters: GetImageParameters): Record<string, unknown> {\n const [east, north, west, south] = parameters.bbox;\n return {...parameters, east, north, south, west};\n }\n\n /** Supports both ${} and {} notations */\n protected getURLFromTemplate(parameters: Record<string, unknown>): string {\n let url = this.props.url;\n for (const [key, value] of Object.entries(parameters)) {\n // TODO - parameter could be repeated\n // const regex = new RegExp(`\\${${key}}`, 'g');\n url = url.replace(`\\${${key}}`, String(value));\n url = url.replace(`{${key}}`, String(value));\n }\n return url;\n }\n}\n\n/**\n * Gets the current fetch function from options\n * @todo - move to loader-utils module\n * @todo - use in core module counterpart\n * @param options\n * @param context\n */\nexport function getFetchFunction(options?: LoaderOptions) {\n const fetchFunction = options?.fetch;\n\n // options.fetch can be a function\n if (fetchFunction && typeof fetchFunction === 'function') {\n return (url: string, fetchOptions?: RequestInit) => fetchFunction(url, fetchOptions);\n }\n\n // options.fetch can be an options object, use global fetch with those options\n const fetchOptions = options?.fetch;\n if (fetchOptions && typeof fetchOptions !== 'function') {\n return (url) => fetch(url, fetchOptions);\n }\n\n // else return the global fetch function\n return (url) => fetch(url);\n}\n\nexport function mergeImageServiceProps(props: ImageServiceProps): Required<ImageServiceProps> {\n return {\n // Default fetch\n ...props,\n loadOptions: {\n ...props.loadOptions,\n fetch: getFetchFunction(props.loadOptions)\n }\n };\n}\n"],"mappings":";;AAIA,SAAQA,WAAW,QAAO,oBAAoB;AAG9C,SAAQC,WAAW,QAAO,iBAAiB;;AAe3C,OAAO,MAAMC,YAAY,SAASD,WAAW,CAAC;EAO5CE,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,EAAE;IAAC;IAAA;IACR,IAAI,CAACA,KAAK,GAAGC,sBAAsB,CAACD,KAAK,CAAC;IAC1C,IAAI,CAACE,KAAK,GAAGC,gBAAgB,CAACH,KAAK,CAAC;EACtC;;EAIA,MAAMI,WAAW,GAAiC;IAChD,MAAM,IAAIC,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EAEA,MAAMC,QAAQ,CAACC,UAA8B,EAAsB;IACjE,MAAMC,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CAACF,UAAU,CAAC;IACjE,MAAMG,GAAG,GAAG,IAAI,CAACC,kBAAkB,CAACH,kBAAkB,CAAC;IACvD,MAAMI,QAAQ,GAAG,MAAM,IAAI,CAACV,KAAK,CAACQ,GAAG,CAAC;IACtC,MAAMG,WAAW,GAAG,MAAMD,QAAQ,CAACC,WAAW,EAAE;IAChD,OAAO,MAAMjB,WAAW,CAACkB,KAAK,CAACD,WAAW,CAAC;EAC7C;;EAKUJ,qBAAqB,CAACF,UAA8B,EAA2B;IACvF,MAAM,CAACQ,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,KAAK,CAAC,GAAGX,UAAU,CAACY,IAAI;IAClD,OAAO;MAAC,GAAGZ,UAAU;MAAEQ,IAAI;MAAEC,KAAK;MAAEE,KAAK;MAAED;IAAI,CAAC;EAClD;;EAGUN,kBAAkB,CAACJ,UAAmC,EAAU;IACxE,IAAIG,GAAG,GAAG,IAAI,CAACV,KAAK,CAACU,GAAG;IACxB,KAAK,MAAM,CAACU,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAChB,UAAU,CAAC,EAAE;MAGrDG,GAAG,GAAGA,GAAG,CAACc,OAAO,aAAOJ,GAAG,QAAKK,MAAM,CAACJ,KAAK,CAAC,CAAC;MAC9CX,GAAG,GAAGA,GAAG,CAACc,OAAO,YAAKJ,GAAG,QAAKK,MAAM,CAACJ,KAAK,CAAC,CAAC;IAC9C;IACA,OAAOX,GAAG;EACZ;AACF;;AAAC,gBA9CYZ,YAAY,UACG,UAAU;AAAA,gBADzBA,YAAY,aAELY,GAAW,IAAcA,GAAG,CAACgB,WAAW,EAAE,CAACC,QAAQ,CAAC,GAAG,CAAC;AAqD5E,OAAO,SAASxB,gBAAgB,CAACyB,OAAuB,EAAE;EACxD,MAAMC,aAAa,GAAGD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE1B,KAAK;;EAGpC,IAAI2B,aAAa,IAAI,OAAOA,aAAa,KAAK,UAAU,EAAE;IACxD,OAAO,CAACnB,GAAW,EAAEoB,YAA0B,KAAKD,aAAa,CAACnB,GAAG,EAAEoB,YAAY,CAAC;EACtF;;EAGA,MAAMA,YAAY,GAAGF,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE1B,KAAK;EACnC,IAAI4B,YAAY,IAAI,OAAOA,YAAY,KAAK,UAAU,EAAE;IACtD,OAAQpB,GAAG,IAAKR,KAAK,CAACQ,GAAG,EAAEoB,YAAY,CAAC;EAC1C;;EAGA,OAAQpB,GAAG,IAAKR,KAAK,CAACQ,GAAG,CAAC;AAC5B;AAEA,OAAO,SAAST,sBAAsB,CAACD,KAAwB,EAA+B;EAC5F,OAAO;IAEL,GAAGA,KAAK;IACR+B,WAAW,EAAE;MACX,GAAG/B,KAAK,CAAC+B,WAAW;MACpB7B,KAAK,EAAEC,gBAAgB,CAACH,KAAK,CAAC+B,WAAW;IAC3C;EACF,CAAC;AACH"}