@honua/react 0.1.0-beta.0 → 0.1.1-beta.0

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 (315) hide show
  1. package/contract/discovery.d.ts +231 -0
  2. package/contract/discovery.d.ts.map +1 -0
  3. package/contract/discovery.js +554 -0
  4. package/contract/edit-sketch.d.ts +8 -0
  5. package/contract/edit-sketch.d.ts.map +1 -1
  6. package/contract/edit-sketch.js +15 -0
  7. package/contract/edit-snapping.d.ts +160 -0
  8. package/contract/edit-snapping.d.ts.map +1 -0
  9. package/contract/edit-snapping.js +675 -0
  10. package/contract/generated/projjson-v0.7-crs-validator.d.ts +35 -0
  11. package/contract/generated/projjson-v0.7-crs-validator.d.ts.map +1 -0
  12. package/contract/generated/projjson-v0.7-crs-validator.js +3941 -0
  13. package/contract/index.d.ts +11 -2
  14. package/contract/index.d.ts.map +1 -1
  15. package/contract/index.js +4 -1
  16. package/contract/pmtiles.d.ts +31 -0
  17. package/contract/pmtiles.d.ts.map +1 -1
  18. package/contract/pmtiles.js +60 -20
  19. package/contract/protocol-module.d.ts +70 -0
  20. package/contract/protocol-module.d.ts.map +1 -0
  21. package/contract/protocol-module.js +1 -0
  22. package/contract/schema-envelope.d.ts +26 -0
  23. package/contract/schema-envelope.d.ts.map +1 -0
  24. package/contract/schema-envelope.js +25 -0
  25. package/contract/schema.d.ts +582 -0
  26. package/contract/schema.d.ts.map +1 -0
  27. package/contract/schema.js +2483 -0
  28. package/contract/source-capability-support.d.ts +6 -0
  29. package/contract/source-capability-support.d.ts.map +1 -0
  30. package/contract/source-capability-support.js +154 -0
  31. package/contract/source.d.ts +35 -17
  32. package/contract/source.d.ts.map +1 -1
  33. package/contract/source.js +267 -71
  34. package/contract/types.d.ts +140 -4
  35. package/contract/types.d.ts.map +1 -1
  36. package/contract/types.js +6 -14
  37. package/core/bounded-json.d.ts +4 -0
  38. package/core/bounded-json.d.ts.map +1 -0
  39. package/core/bounded-json.js +38 -0
  40. package/core/cache-state.d.ts +9 -0
  41. package/core/cache-state.d.ts.map +1 -1
  42. package/core/cache-state.js +10 -0
  43. package/core/capabilities-xml.d.ts +33 -0
  44. package/core/capabilities-xml.d.ts.map +1 -0
  45. package/core/capabilities-xml.js +331 -0
  46. package/core/client.d.ts +4 -1
  47. package/core/client.d.ts.map +1 -1
  48. package/core/client.js +115 -29
  49. package/core/error-classifications.d.ts +153 -0
  50. package/core/error-classifications.d.ts.map +1 -0
  51. package/core/error-classifications.js +140 -0
  52. package/core/error-code-registry.d.ts +158 -0
  53. package/core/error-code-registry.d.ts.map +1 -0
  54. package/core/error-code-registry.js +143 -0
  55. package/core/error-envelope.d.ts +68 -0
  56. package/core/error-envelope.d.ts.map +1 -0
  57. package/core/error-envelope.js +357 -0
  58. package/core/errors.d.ts +45 -29
  59. package/core/errors.d.ts.map +1 -1
  60. package/core/errors.js +97 -50
  61. package/core/geoparquet-sql.d.ts +30 -2
  62. package/core/geoparquet-sql.d.ts.map +1 -1
  63. package/core/geoparquet-sql.js +38 -3
  64. package/core/odata-key-path.d.ts +12 -0
  65. package/core/odata-key-path.d.ts.map +1 -0
  66. package/core/odata-key-path.js +28 -0
  67. package/core/odata-write-codec.d.ts +66 -0
  68. package/core/odata-write-codec.d.ts.map +1 -0
  69. package/core/odata-write-codec.js +1083 -0
  70. package/core/odata.d.ts +59 -7
  71. package/core/odata.d.ts.map +1 -1
  72. package/core/odata.js +431 -99
  73. package/core/ogc-features.d.ts.map +1 -1
  74. package/core/ogc-features.js +3 -0
  75. package/core/ogc-maps.d.ts +7 -0
  76. package/core/ogc-maps.d.ts.map +1 -1
  77. package/core/ogc-maps.js +46 -7
  78. package/core/ogc-processes.d.ts +2 -1
  79. package/core/ogc-processes.d.ts.map +1 -1
  80. package/core/ogc-processes.js +33 -5
  81. package/core/ogc-records.d.ts +9 -0
  82. package/core/ogc-records.d.ts.map +1 -1
  83. package/core/ogc-records.js +78 -29
  84. package/core/ogc-tiles.d.ts +10 -1
  85. package/core/ogc-tiles.d.ts.map +1 -1
  86. package/core/ogc-tiles.js +56 -17
  87. package/core/path-utils.d.ts +9 -0
  88. package/core/path-utils.d.ts.map +1 -1
  89. package/core/path-utils.js +19 -0
  90. package/core/protocol-transport.d.ts +1 -0
  91. package/core/protocol-transport.d.ts.map +1 -1
  92. package/core/request-pipeline.d.ts.map +1 -1
  93. package/core/request-pipeline.js +1 -1
  94. package/core/spatial-filter.d.ts +8 -4
  95. package/core/spatial-filter.d.ts.map +1 -1
  96. package/core/spatial-filter.js +206 -16
  97. package/core/stac-static.d.ts +6 -2
  98. package/core/stac-static.d.ts.map +1 -1
  99. package/core/stac-static.js +260 -69
  100. package/core/surfaces.d.ts.map +1 -1
  101. package/core/surfaces.js +69 -5
  102. package/core/types.d.ts +125 -7
  103. package/core/types.d.ts.map +1 -1
  104. package/core/wfs-capabilities.d.ts +2 -0
  105. package/core/wfs-capabilities.d.ts.map +1 -1
  106. package/core/wfs-capabilities.js +8 -1
  107. package/core/wfs.d.ts.map +1 -1
  108. package/core/wfs.js +10 -0
  109. package/core/wms-capabilities.d.ts +56 -84
  110. package/core/wms-capabilities.d.ts.map +1 -1
  111. package/core/wms-capabilities.js +212 -509
  112. package/core/wmts-capabilities.d.ts +62 -62
  113. package/core/wmts-capabilities.d.ts.map +1 -1
  114. package/core/wmts-capabilities.js +224 -371
  115. package/esri-compat/editor.d.ts +8 -0
  116. package/esri-compat/editor.d.ts.map +1 -1
  117. package/esri-compat/editor.js +13 -0
  118. package/esri-compat/feature-layer.d.ts +2 -0
  119. package/esri-compat/feature-layer.d.ts.map +1 -1
  120. package/esri-compat/feature-layer.js +1 -0
  121. package/esri-compat/layer-list.d.ts +11 -0
  122. package/esri-compat/layer-list.d.ts.map +1 -1
  123. package/esri-compat/layer-list.js +49 -0
  124. package/esri-compat/legend.d.ts +10 -0
  125. package/esri-compat/legend.d.ts.map +1 -1
  126. package/esri-compat/legend.js +27 -0
  127. package/esri-compat/portal.d.ts +197 -0
  128. package/esri-compat/portal.d.ts.map +1 -0
  129. package/esri-compat/portal.js +251 -0
  130. package/esri-compat/renderer-objects.d.ts +40 -0
  131. package/esri-compat/renderer-objects.d.ts.map +1 -0
  132. package/esri-compat/renderer-objects.js +62 -0
  133. package/esri-compat/sketch.d.ts +43 -0
  134. package/esri-compat/sketch.d.ts.map +1 -1
  135. package/esri-compat/sketch.js +46 -0
  136. package/esri-compat/snapping.d.ts +43 -0
  137. package/esri-compat/snapping.d.ts.map +1 -0
  138. package/esri-compat/snapping.js +45 -0
  139. package/esri-compat/url.d.ts.map +1 -1
  140. package/esri-compat/url.js +1 -1
  141. package/esri-compat/widget-host.d.ts +84 -0
  142. package/esri-compat/widget-host.d.ts.map +1 -0
  143. package/esri-compat/widget-host.js +159 -0
  144. package/filter-registry/index.d.ts +145 -0
  145. package/filter-registry/index.d.ts.map +1 -0
  146. package/filter-registry/index.js +531 -0
  147. package/generated-app/errors.d.ts +18 -2
  148. package/generated-app/errors.d.ts.map +1 -1
  149. package/generated-app/errors.js +44 -11
  150. package/map/automatic-mount-integration.d.ts +134 -0
  151. package/map/automatic-mount-integration.d.ts.map +1 -0
  152. package/map/automatic-mount-integration.js +305 -0
  153. package/map/automatic-source-strategy.d.ts +125 -0
  154. package/map/automatic-source-strategy.d.ts.map +1 -0
  155. package/map/automatic-source-strategy.js +494 -0
  156. package/map/data-to-map-bridge.d.ts +293 -0
  157. package/map/data-to-map-bridge.d.ts.map +1 -0
  158. package/map/data-to-map-bridge.js +817 -0
  159. package/map/geojson-projection.d.ts +33 -0
  160. package/map/geojson-projection.d.ts.map +1 -0
  161. package/map/geojson-projection.js +118 -0
  162. package/map/index.d.ts +14 -0
  163. package/map/index.d.ts.map +1 -1
  164. package/map/index.js +8 -0
  165. package/map/raster-source-spec.d.ts +30 -0
  166. package/map/raster-source-spec.d.ts.map +1 -0
  167. package/map/raster-source-spec.js +190 -0
  168. package/map/raster-source-strategy.d.ts +65 -0
  169. package/map/raster-source-strategy.d.ts.map +1 -0
  170. package/map/raster-source-strategy.js +232 -0
  171. package/map/source-to-maplibre.d.ts +91 -0
  172. package/map/source-to-maplibre.d.ts.map +1 -0
  173. package/map/source-to-maplibre.js +454 -0
  174. package/map/temporal-playback.d.ts +139 -0
  175. package/map/temporal-playback.d.ts.map +1 -0
  176. package/map/temporal-playback.js +247 -0
  177. package/package.json +14 -1
  178. package/query-planner/canonical.d.ts +7 -0
  179. package/query-planner/canonical.d.ts.map +1 -0
  180. package/query-planner/canonical.js +145 -0
  181. package/query-planner/cql2-json.d.ts +17 -0
  182. package/query-planner/cql2-json.d.ts.map +1 -0
  183. package/query-planner/cql2-json.js +646 -0
  184. package/query-planner/diagnostics.d.ts +35 -0
  185. package/query-planner/diagnostics.d.ts.map +1 -0
  186. package/query-planner/diagnostics.js +373 -0
  187. package/query-planner/duckdb.d.ts +79 -0
  188. package/query-planner/duckdb.d.ts.map +1 -0
  189. package/query-planner/duckdb.js +758 -0
  190. package/query-planner/execution-context.d.ts +5 -0
  191. package/query-planner/execution-context.d.ts.map +1 -0
  192. package/query-planner/execution-context.js +50 -0
  193. package/query-planner/executor.d.ts +5 -0
  194. package/query-planner/executor.d.ts.map +1 -0
  195. package/query-planner/executor.js +223 -0
  196. package/query-planner/geoservices.d.ts +91 -0
  197. package/query-planner/geoservices.d.ts.map +1 -0
  198. package/query-planner/geoservices.js +667 -0
  199. package/query-planner/grpc.d.ts +100 -0
  200. package/query-planner/grpc.d.ts.map +1 -0
  201. package/query-planner/grpc.js +736 -0
  202. package/query-planner/index.d.ts +44 -0
  203. package/query-planner/index.d.ts.map +1 -0
  204. package/query-planner/index.js +30 -0
  205. package/query-planner/ir.d.ts +20 -0
  206. package/query-planner/ir.d.ts.map +1 -0
  207. package/query-planner/ir.js +417 -0
  208. package/query-planner/local-aggregate.d.ts +5 -0
  209. package/query-planner/local-aggregate.d.ts.map +1 -0
  210. package/query-planner/local-aggregate.js +126 -0
  211. package/query-planner/odata.d.ts +48 -0
  212. package/query-planner/odata.d.ts.map +1 -0
  213. package/query-planner/odata.js +662 -0
  214. package/query-planner/ogc-compiler.d.ts +55 -0
  215. package/query-planner/ogc-compiler.d.ts.map +1 -0
  216. package/query-planner/ogc-compiler.js +480 -0
  217. package/query-planner/ogc-features.d.ts +53 -0
  218. package/query-planner/ogc-features.d.ts.map +1 -0
  219. package/query-planner/ogc-features.js +617 -0
  220. package/query-planner/planner.d.ts +17 -0
  221. package/query-planner/planner.d.ts.map +1 -0
  222. package/query-planner/planner.js +818 -0
  223. package/query-planner/resource.d.ts +94 -0
  224. package/query-planner/resource.d.ts.map +1 -0
  225. package/query-planner/resource.js +526 -0
  226. package/query-planner/semantic-canonical.d.ts +15 -0
  227. package/query-planner/semantic-canonical.d.ts.map +1 -0
  228. package/query-planner/semantic-canonical.js +62 -0
  229. package/query-planner/semantic-compat.d.ts +10 -0
  230. package/query-planner/semantic-compat.d.ts.map +1 -0
  231. package/query-planner/semantic-compat.js +35 -0
  232. package/query-planner/semantic-compiler.d.ts +64 -0
  233. package/query-planner/semantic-compiler.d.ts.map +1 -0
  234. package/query-planner/semantic-compiler.js +81 -0
  235. package/query-planner/semantic-literals.d.ts +30 -0
  236. package/query-planner/semantic-literals.d.ts.map +1 -0
  237. package/query-planner/semantic-literals.js +133 -0
  238. package/query-planner/semantic-types.d.ts +265 -0
  239. package/query-planner/semantic-types.d.ts.map +1 -0
  240. package/query-planner/semantic-types.js +1 -0
  241. package/query-planner/semantic.d.ts +54 -0
  242. package/query-planner/semantic.d.ts.map +1 -0
  243. package/query-planner/semantic.js +1421 -0
  244. package/query-planner/types.d.ts +560 -0
  245. package/query-planner/types.d.ts.map +1 -0
  246. package/query-planner/types.js +49 -0
  247. package/query-planner/wfs-semantic.d.ts +58 -0
  248. package/query-planner/wfs-semantic.d.ts.map +1 -0
  249. package/query-planner/wfs-semantic.js +547 -0
  250. package/query-planner/wfs.d.ts +6 -0
  251. package/query-planner/wfs.d.ts.map +1 -0
  252. package/query-planner/wfs.js +71 -0
  253. package/react/external-map.d.ts +67 -0
  254. package/react/external-map.d.ts.map +1 -0
  255. package/react/external-map.js +63 -0
  256. package/react/honua-map.d.ts.map +1 -1
  257. package/react/honua-map.js +3 -2
  258. package/react/honua-source-layer.d.ts +110 -0
  259. package/react/honua-source-layer.d.ts.map +1 -0
  260. package/react/honua-source-layer.js +101 -0
  261. package/react/hooks.d.ts +28 -0
  262. package/react/hooks.d.ts.map +1 -1
  263. package/react/hooks.js +26 -4
  264. package/react/index.d.ts +8 -0
  265. package/react/index.d.ts.map +1 -1
  266. package/react/index.js +5 -0
  267. package/react/query-cache.d.ts +26 -4
  268. package/react/query-cache.d.ts.map +1 -1
  269. package/react/query-cache.js +51 -8
  270. package/react/selection.d.ts +177 -0
  271. package/react/selection.d.ts.map +1 -0
  272. package/react/selection.js +0 -0
  273. package/react/use-mounted-source.d.ts +69 -0
  274. package/react/use-mounted-source.d.ts.map +1 -0
  275. package/react/use-mounted-source.js +346 -0
  276. package/runtime/edit-snapping.d.ts +107 -0
  277. package/runtime/edit-snapping.d.ts.map +1 -0
  278. package/runtime/edit-snapping.js +190 -0
  279. package/runtime/errors.d.ts +3 -2
  280. package/runtime/errors.d.ts.map +1 -1
  281. package/runtime/errors.js +19 -2
  282. package/runtime/index.d.ts +6 -0
  283. package/runtime/index.d.ts.map +1 -1
  284. package/runtime/index.js +3 -0
  285. package/runtime/maplibre-renderer.d.ts +41 -0
  286. package/runtime/maplibre-renderer.d.ts.map +1 -0
  287. package/runtime/maplibre-renderer.js +322 -0
  288. package/runtime/query-tiles.d.ts +2 -1
  289. package/runtime/query-tiles.d.ts.map +1 -1
  290. package/runtime/query-tiles.js +6 -2
  291. package/runtime/source-bridge.d.ts +4 -4
  292. package/runtime/source-bridge.d.ts.map +1 -1
  293. package/runtime/source-bridge.js +9 -56
  294. package/runtime/style-interactions.d.ts +3 -2
  295. package/runtime/style-interactions.d.ts.map +1 -1
  296. package/runtime/style-interactions.js +11 -3
  297. package/runtime/terra-draw-sketch.d.ts +275 -0
  298. package/runtime/terra-draw-sketch.d.ts.map +1 -0
  299. package/runtime/terra-draw-sketch.js +404 -0
  300. package/source-capability-registry.d.ts +1 -0
  301. package/source-capability-registry.js +1 -0
  302. package/source-capability-types.d.ts +186 -0
  303. package/source-capability-types.js +7 -0
  304. package/style/index.d.ts +2 -0
  305. package/style/index.d.ts.map +1 -1
  306. package/style/index.js +2 -0
  307. package/style/renderers.d.ts +326 -0
  308. package/style/renderers.d.ts.map +1 -0
  309. package/style/renderers.js +517 -0
  310. package/webmap/convert-renderer.d.ts +24 -3
  311. package/webmap/convert-renderer.d.ts.map +1 -1
  312. package/webmap/convert-renderer.js +93 -112
  313. package/webmap/index.d.ts +1 -1
  314. package/webmap/index.d.ts.map +1 -1
  315. package/webmap/index.js +1 -1
package/core/ogc-tiles.js CHANGED
@@ -11,42 +11,72 @@ import { encodePathSegments, trimTrailingSlashes } from "./path-utils.js";
11
11
  import { createOgcMetadataParams } from "./wire-shared.js";
12
12
  /** Default OGC tile-matrix-set used when none is specified (Web Mercator XYZ). */
13
13
  export const DEFAULT_OGC_TILE_MATRIX_SET = "WebMercatorQuad";
14
+ /** Honua facade path prefix for OGC API Tiles. */
15
+ const TILES_FACADE_BASE = "/ogc/tiles";
16
+ /**
17
+ * Resolve the OGC API Tiles path prefix: the caller-supplied raw `basePath` (a
18
+ * `connect()`-discovered third-party service root) or the Honua facade default.
19
+ * Trailing slashes are trimmed so a discovered root and the facade compose the
20
+ * same sub-paths. Mirrors the OGC API Records seam in `ogc-records.ts`.
21
+ */
22
+ function tilesBase(request) {
23
+ // An omitted basePath uses the Honua facade; an explicit "" is a legitimate
24
+ // root-mounted raw service and must NOT fall back to the facade prefix.
25
+ if (request.basePath === undefined)
26
+ return TILES_FACADE_BASE;
27
+ const base = request.basePath;
28
+ let end = base.length;
29
+ while (end > 0 && base.charCodeAt(end - 1) === 0x2f)
30
+ end--;
31
+ return base.slice(0, end);
32
+ }
33
+ /** Cache-key discriminator so a discovered root never collides with the facade. */
34
+ function tilesBaseKey(request) {
35
+ const base = tilesBase(request);
36
+ return base === TILES_FACADE_BASE ? "" : `${base}:`;
37
+ }
14
38
  /**
15
39
  * Top-level OGC API Tiles handle. Mirrors `HonuaOgcFeatures` for the
16
40
  * tiles conformance classes.
17
41
  */
18
42
  export class HonuaOgcTiles {
19
43
  client;
44
+ basePath;
20
45
  constructor(options) {
21
46
  this.client = options.client;
47
+ this.basePath = options.basePath;
48
+ }
49
+ withBase(request) {
50
+ return this.basePath !== undefined ? { ...request, basePath: this.basePath } : request;
22
51
  }
23
52
  tileset(collectionId, tileMatrixSetId) {
24
53
  return new HonuaOgcTileset({
25
54
  client: this.client,
26
55
  collectionId,
27
56
  tileMatrixSetId,
57
+ ...(this.basePath !== undefined ? { basePath: this.basePath } : {}),
28
58
  });
29
59
  }
30
60
  async landing(request = {}) {
31
- return this.client.getOgcTilesLanding(request);
61
+ return this.client.getOgcTilesLanding(this.withBase(request));
32
62
  }
33
63
  async conformance(request = {}) {
34
- return this.client.getOgcTilesConformance(request);
64
+ return this.client.getOgcTilesConformance(this.withBase(request));
35
65
  }
36
66
  async tileMatrixSets(request = {}) {
37
- return this.client.listOgcTileMatrixSets(request);
67
+ return this.client.listOgcTileMatrixSets(this.withBase(request));
38
68
  }
39
69
  async tileMatrixSet(tileMatrixSetId, request = {}) {
40
- return this.client.getOgcTileMatrixSet({ ...request, tileMatrixSetId });
70
+ return this.client.getOgcTileMatrixSet(this.withBase({ ...request, tileMatrixSetId }));
41
71
  }
42
72
  async tilesets(request) {
43
- return this.client.listOgcCollectionTilesets(request);
73
+ return this.client.listOgcCollectionTilesets(this.withBase(request));
44
74
  }
45
75
  async tilesetMetadata(request) {
46
- return this.client.getOgcCollectionTileset(request);
76
+ return this.client.getOgcCollectionTileset(this.withBase(request));
47
77
  }
48
78
  async tile(request) {
49
- return this.client.fetchOgcTile(request);
79
+ return this.client.fetchOgcTile(this.withBase(request));
50
80
  }
51
81
  /**
52
82
  * Build a MapLibre-ready vector source definition for a tiled collection.
@@ -67,7 +97,8 @@ export class HonuaOgcTiles {
67
97
  const baseUrl = trimTrailingSlashes(this.client.serverBaseUrl);
68
98
  const collection = encodePathSegments(serviceId);
69
99
  const matrixSet = encodeURIComponent(tileMatrixSetId);
70
- const template = `${baseUrl}/ogc/tiles/collections/${collection}/tiles/${matrixSet}/{z}/{y}/{x}`;
100
+ const base = tilesBase({ ...(this.basePath !== undefined ? { basePath: this.basePath } : {}) });
101
+ const template = `${baseUrl}${base}/collections/${collection}/tiles/${matrixSet}/{z}/{y}/{x}`;
71
102
  const source = {
72
103
  type: "vector",
73
104
  tiles: [template],
@@ -112,16 +143,19 @@ export class HonuaOgcTileset {
112
143
  client;
113
144
  collectionId;
114
145
  tileMatrixSetId;
146
+ basePath;
115
147
  constructor(options) {
116
148
  this.client = options.client;
117
149
  this.collectionId = options.collectionId;
118
150
  this.tileMatrixSetId = options.tileMatrixSetId;
151
+ this.basePath = options.basePath;
119
152
  }
120
153
  async metadata(request = {}) {
121
154
  return this.client.getOgcCollectionTileset({
122
155
  ...request,
123
156
  collectionId: this.collectionId,
124
157
  tileMatrixSetId: this.tileMatrixSetId,
158
+ ...(this.basePath !== undefined ? { basePath: this.basePath } : {}),
125
159
  });
126
160
  }
127
161
  async tile(request) {
@@ -129,6 +163,7 @@ export class HonuaOgcTileset {
129
163
  ...request,
130
164
  collectionId: this.collectionId,
131
165
  tileMatrixSetId: this.tileMatrixSetId,
166
+ ...(this.basePath !== undefined ? { basePath: this.basePath } : {}),
132
167
  });
133
168
  }
134
169
  }
@@ -142,30 +177,34 @@ export function createHonuaOgcTiles(client) {
142
177
  // exposes thin `get*/list*/fetch*` delegators that call these.
143
178
  export async function getOgcTilesLanding(transport, request = {}) {
144
179
  const params = createOgcMetadataParams(request);
145
- return transport.requestCachedMetadataJson(`ogc-tiles:landing:${params.toString()}`, `/ogc/tiles?${params.toString()}`, request);
180
+ const base = tilesBase(request);
181
+ return transport.requestCachedMetadataJson(`ogc-tiles:landing:${tilesBaseKey(request)}${params.toString()}`, `${base}?${params.toString()}`, request);
146
182
  }
147
183
  export async function getOgcTilesConformance(transport, request = {}) {
148
184
  const params = createOgcMetadataParams(request);
149
- return transport.requestCachedMetadataJson(`ogc-tiles:conformance:${params.toString()}`, `/ogc/tiles/conformance?${params.toString()}`, request);
185
+ const base = tilesBase(request);
186
+ return transport.requestCachedMetadataJson(`ogc-tiles:conformance:${tilesBaseKey(request)}${params.toString()}`, `${base}/conformance?${params.toString()}`, request);
150
187
  }
151
188
  export async function listOgcTileMatrixSets(transport, request = {}) {
152
189
  const params = createOgcMetadataParams(request);
153
- return transport.requestCachedMetadataJson(`ogc-tiles:tile-matrix-sets:${params.toString()}`, `/ogc/tiles/tileMatrixSets?${params.toString()}`, request);
190
+ const base = tilesBase(request);
191
+ return transport.requestCachedMetadataJson(`ogc-tiles:tile-matrix-sets:${tilesBaseKey(request)}${params.toString()}`, `${base}/tileMatrixSets?${params.toString()}`, request);
154
192
  }
155
193
  export async function getOgcTileMatrixSet(transport, request) {
156
194
  const params = createOgcMetadataParams(request);
157
- return transport.requestCachedMetadataJson(`ogc-tiles:tile-matrix-set:${request.tileMatrixSetId}:${params.toString()}`, `/ogc/tiles/tileMatrixSets/${encodeURIComponent(request.tileMatrixSetId)}?${params.toString()}`, request);
195
+ const base = tilesBase(request);
196
+ return transport.requestCachedMetadataJson(`ogc-tiles:tile-matrix-set:${tilesBaseKey(request)}${request.tileMatrixSetId}:${params.toString()}`, `${base}/tileMatrixSets/${encodeURIComponent(request.tileMatrixSetId)}?${params.toString()}`, request);
158
197
  }
159
198
  export async function listOgcCollectionTilesets(transport, request) {
160
199
  const params = createOgcMetadataParams(request);
161
- const path = `/ogc/tiles/collections/${encodeURIComponent(String(request.collectionId))}/tiles`;
162
- return transport.requestCachedMetadataJson(`ogc-tiles:tilesets:${request.collectionId}:${params.toString()}`, `${path}?${params.toString()}`, request);
200
+ const path = `${tilesBase(request)}/collections/${encodeURIComponent(String(request.collectionId))}/tiles`;
201
+ return transport.requestCachedMetadataJson(`ogc-tiles:tilesets:${tilesBaseKey(request)}${request.collectionId}:${params.toString()}`, `${path}?${params.toString()}`, request);
163
202
  }
164
203
  export async function getOgcCollectionTileset(transport, request) {
165
204
  const params = createOgcMetadataParams(request);
166
- const path = `/ogc/tiles/collections/${encodeURIComponent(String(request.collectionId))}` +
205
+ const path = `${tilesBase(request)}/collections/${encodeURIComponent(String(request.collectionId))}` +
167
206
  `/tiles/${encodeURIComponent(request.tileMatrixSetId)}`;
168
- return transport.requestCachedMetadataJson(`ogc-tiles:tileset:${request.collectionId}:${request.tileMatrixSetId}:${params.toString()}`, `${path}?${params.toString()}`, request);
207
+ return transport.requestCachedMetadataJson(`ogc-tiles:tileset:${tilesBaseKey(request)}${request.collectionId}:${request.tileMatrixSetId}:${params.toString()}`, `${path}?${params.toString()}`, request);
169
208
  }
170
209
  export async function fetchOgcTile(transport, request) {
171
210
  const params = new URLSearchParams();
@@ -178,6 +217,6 @@ export async function fetchOgcTile(transport, request) {
178
217
  const matrixSet = encodeURIComponent(request.tileMatrixSetId);
179
218
  const matrix = encodeURIComponent(String(request.tileMatrix));
180
219
  const query = params.size > 0 ? `?${params.toString()}` : "";
181
- const path = `/ogc/tiles/collections/${collection}/tiles/${matrixSet}/${matrix}/${request.tileRow}/${request.tileCol}${query}`;
220
+ const path = `${tilesBase(request)}/collections/${collection}/tiles/${matrixSet}/${matrix}/${request.tileRow}/${request.tileCol}${query}`;
182
221
  return transport.requestBytes("GET", path, request.accept, undefined, request.signal);
183
222
  }
@@ -21,6 +21,15 @@ export declare function trimSurroundingSlashes(value: string): string;
21
21
  * or `_` padding) without anchored `^x+|x+$` regexes.
22
22
  */
23
23
  export declare function trimChar(value: string, char: string): string;
24
+ /**
25
+ * Remove a trailing run of characters from `value` that belong to `chars`.
26
+ *
27
+ * Equivalent to `value.replace(new RegExp(\`[${chars}]+$\`), "")` but avoids
28
+ * building an anchored character-class regex (which can exhibit polynomial
29
+ * matching on adversarial input) by scanning backward from the end with
30
+ * simple index arithmetic instead.
31
+ */
32
+ export declare function trimTrailingCharsIn(value: string, chars: string): string;
24
33
  /**
25
34
  * Return `value` with any `?query` and `#fragment` suffix removed.
26
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD"}
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD"}
@@ -46,6 +46,25 @@ export function trimChar(value, char) {
46
46
  }
47
47
  return start === 0 && end === value.length ? value : value.slice(start, end);
48
48
  }
49
+ /**
50
+ * Remove a trailing run of characters from `value` that belong to `chars`.
51
+ *
52
+ * Equivalent to `value.replace(new RegExp(\`[${chars}]+$\`), "")` but avoids
53
+ * building an anchored character-class regex (which can exhibit polynomial
54
+ * matching on adversarial input) by scanning backward from the end with
55
+ * simple index arithmetic instead.
56
+ */
57
+ export function trimTrailingCharsIn(value, chars) {
58
+ const allowed = new Set();
59
+ for (let i = 0; i < chars.length; i += 1) {
60
+ allowed.add(chars.charCodeAt(i));
61
+ }
62
+ let end = value.length;
63
+ while (end > 0 && allowed.has(value.charCodeAt(end - 1))) {
64
+ end -= 1;
65
+ }
66
+ return end === value.length ? value : value.slice(0, end);
67
+ }
49
68
  /**
50
69
  * Return `value` with any `?query` and `#fragment` suffix removed.
51
70
  *
@@ -66,6 +66,7 @@ export interface HonuaProtocolTransport {
66
66
  */
67
67
  pipelineFetch(method: QueryMethod, path: string, init?: RequestInit, callerSignal?: AbortSignal, options?: {
68
68
  okStatuses?: readonly number[];
69
+ redirect?: "safe-follow" | "error";
69
70
  }): Promise<Response>;
70
71
  /**
71
72
  * Request a PBF binary response and decode it, transparently falling back to
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-transport.d.ts","sourceRoot":"","sources":["../../../src/core/protocol-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAElH;;;OAGG;IACH,WAAW,CACT,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACzF,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElE;;;OAGG;IACH,YAAY,CACV,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEvE;;;OAGG;IACH,yBAAyB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhH;;;OAGG;IACH,aAAa,CACX,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,WAAW,EAC1B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAC3C,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;OAGG;IACH,6BAA6B,CAAC,CAAC,GAAG,OAAO,EACvC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAAC;CACf"}
1
+ {"version":3,"file":"protocol-transport.d.ts","sourceRoot":"","sources":["../../../src/core/protocol-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAElH;;;OAGG;IACH,WAAW,CACT,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACzF,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElE;;;OAGG;IACH,YAAY,CACV,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEvE;;;OAGG;IACH,yBAAyB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhH;;;OAGG;IACH,aAAa,CACX,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,WAAW,EAC1B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAA;KAAE,GAC/E,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;OAGG;IACH,6BAA6B,CAAC,CAAC,GAAG,OAAO,EACvC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAAC;CACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"request-pipeline.d.ts","sourceRoot":"","sources":["../../../src/core/request-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAwC,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;;;GAOG;AAEH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAiC,CAAC;AACzF,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,WAAW,CAAqC,CAAC;AAEjG,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKpF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,sBAAsB,GAAG,SAAS,CAsChH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CAgBzF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAExE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,GACb,OAAO,CAkBT;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,QAAQ,GAClB,MAAM,CAWR;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAK3D,CAAC;AAKH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAYT;AAYD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,MAAM,CAOR;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAQ3D;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAC9C,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,aAAa,CA8Cf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAgB7E"}
1
+ {"version":3,"file":"request-pipeline.d.ts","sourceRoot":"","sources":["../../../src/core/request-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAwC,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;;;GAOG;AAEH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAiC,CAAC;AACzF,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,WAAW,CAA6C,CAAC;AAEzG,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKpF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,sBAAsB,GAAG,SAAS,CAsChH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CAgBzF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAExE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,GACb,OAAO,CAkBT;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,QAAQ,GAClB,MAAM,CAWR;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAK3D,CAAC;AAKH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAYT;AAYD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,sBAAsB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,MAAM,CAOR;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAQ3D;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAC9C,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,aAAa,CA8Cf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAgB7E"}
@@ -1,6 +1,6 @@
1
1
  import { HonuaAbortError, HonuaHttpError, HonuaNetworkError, HonuaTimeoutError } from "./errors.js";
2
2
  export const DEFAULT_RETRY_STATUSES = new Set([429, 502, 503, 504]);
3
- export const DEFAULT_RETRY_METHODS = new Set(["GET", "PUT", "DELETE"]);
3
+ export const DEFAULT_RETRY_METHODS = new Set(["GET", "HEAD", "PUT", "DELETE"]);
4
4
  export function normalizeTimeoutMs(timeoutMs) {
5
5
  if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) {
6
6
  return undefined;
@@ -45,8 +45,12 @@ export declare function point(x: number, y: number, spatialReference?: HonuaSpat
45
45
  */
46
46
  export declare function polygon(rings: number[][][], spatialReference?: HonuaSpatialReference): SpatialFilter;
47
47
  /**
48
- * Create an envelope spatial filter centered on a point, approximating a
49
- * circular buffer as a bounding box.
48
+ * Create an axis-aligned envelope spatial filter centered on a point.
49
+ *
50
+ * This is a planar expansion in the input coordinate system's units. It is an
51
+ * envelope approximation, not a circular, geodesic, or topological geometry
52
+ * buffer. Use `buffer` from `@honua/sdk-js/geometry` when a true geometry
53
+ * buffer is required.
50
54
  *
51
55
  * @param x - Center x coordinate
52
56
  * @param y - Center y coordinate
@@ -58,11 +62,11 @@ export declare function polygon(rings: number[][][], spatialReference?: HonuaSpa
58
62
  * // 0.5-degree bounding box around a point
59
63
  * const req: QueryFeaturesRequest = {
60
64
  * serviceId: "svc", layerId: 0,
61
- * ...buffer(-118.24, 34.05, 0.5),
65
+ * ...bufferEnvelope(-118.24, 34.05, 0.5),
62
66
  * };
63
67
  * ```
64
68
  */
65
- export declare function buffer(x: number, y: number, distance: number, spatialReference?: HonuaSpatialReference): SpatialFilter;
69
+ export declare function bufferEnvelope(x: number, y: number, distance: number, spatialReference?: HonuaSpatialReference): SpatialFilter;
66
70
  /**
67
71
  * Wrap an existing geometry with `esriSpatialRelIntersects`.
68
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-filter.d.ts","sourceRoot":"","sources":["../../../src/core/spatial-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE1F;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,aAAa,CAQf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAQnG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAQpG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,aAAa,CAEf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAMlF;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAMhF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAM9E"}
1
+ {"version":3,"file":"spatial-filter.d.ts","sourceRoot":"","sources":["../../../src/core/spatial-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE1F;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,aAAa,CAQf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAQnG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAQpG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,aAAa,CAuBf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAMlF;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAMhF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAM9E"}
@@ -1,3 +1,4 @@
1
+ import { HonuaGeometryError } from "./errors.js";
1
2
  /**
2
3
  * Create an envelope (bounding box) spatial filter.
3
4
  *
@@ -62,8 +63,12 @@ export function polygon(rings, spatialReference) {
62
63
  };
63
64
  }
64
65
  /**
65
- * Create an envelope spatial filter centered on a point, approximating a
66
- * circular buffer as a bounding box.
66
+ * Create an axis-aligned envelope spatial filter centered on a point.
67
+ *
68
+ * This is a planar expansion in the input coordinate system's units. It is an
69
+ * envelope approximation, not a circular, geodesic, or topological geometry
70
+ * buffer. Use `buffer` from `@honua/sdk-js/geometry` when a true geometry
71
+ * buffer is required.
67
72
  *
68
73
  * @param x - Center x coordinate
69
74
  * @param y - Center y coordinate
@@ -75,12 +80,25 @@ export function polygon(rings, spatialReference) {
75
80
  * // 0.5-degree bounding box around a point
76
81
  * const req: QueryFeaturesRequest = {
77
82
  * serviceId: "svc", layerId: 0,
78
- * ...buffer(-118.24, 34.05, 0.5),
83
+ * ...bufferEnvelope(-118.24, 34.05, 0.5),
79
84
  * };
80
85
  * ```
81
86
  */
82
- export function buffer(x, y, distance, spatialReference) {
83
- return envelope(x - distance, y - distance, x + distance, y + distance, spatialReference);
87
+ export function bufferEnvelope(x, y, distance, spatialReference) {
88
+ if (![x, y, distance].every(isFiniteNumber) || distance < 0) {
89
+ throw new HonuaGeometryError("malformed-geometry", "Cannot create a buffer envelope: x, y, and distance must be finite numbers and distance must be non-negative", {
90
+ operation: "buffer-envelope",
91
+ reason: "invalid-coordinate-or-distance",
92
+ });
93
+ }
94
+ const bounds = [x - distance, y - distance, x + distance, y + distance];
95
+ if (!bounds.every(isFiniteNumber)) {
96
+ throw new HonuaGeometryError("malformed-geometry", "Cannot create a buffer envelope: computed bounds must be finite", {
97
+ operation: "buffer-envelope",
98
+ reason: "computed-bounds-not-finite",
99
+ });
100
+ }
101
+ return envelope(...bounds, spatialReference);
84
102
  }
85
103
  /**
86
104
  * Wrap an existing geometry with `esriSpatialRelIntersects`.
@@ -131,23 +149,195 @@ export function spatialWithin(geometry) {
131
149
  * Detect the Esri geometry type from a plain geometry object by inspecting
132
150
  * its shape (duck-typing).
133
151
  *
152
+ * @see https://developers.arcgis.com/rest/services-reference/enterprise/geometry-objects/
134
153
  * @internal
135
154
  */
136
155
  function detectGeometryType(geometry) {
137
- if ("xmin" in geometry && "ymin" in geometry && "xmax" in geometry && "ymax" in geometry) {
138
- return "esriGeometryEnvelope";
156
+ if (!isGeometryRecord(geometry)) {
157
+ throw new HonuaGeometryError("malformed-geometry", "Unable to classify geometry: geometry must be a non-null object", {
158
+ operation: "classify",
159
+ reason: "geometry-must-be-object",
160
+ keys: [],
161
+ });
162
+ }
163
+ const keys = Object.keys(geometry).sort();
164
+ const candidates = [
165
+ hasAnyOwn(geometry, ["xmin", "ymin", "xmax", "ymax"]) ? "envelope" : undefined,
166
+ hasOwn(geometry, "rings") ? "polygon" : undefined,
167
+ hasOwn(geometry, "paths") ? "polyline" : undefined,
168
+ hasOwn(geometry, "points") ? "multipoint" : undefined,
169
+ hasAnyOwn(geometry, ["x", "y"]) ? "point" : undefined,
170
+ ].filter((candidate) => candidate !== undefined);
171
+ if (candidates.length === 0) {
172
+ throw geometryClassificationError("unknown-geometry", "no supported Esri geometry shape was found", keys);
173
+ }
174
+ if (candidates.length > 1) {
175
+ throw geometryClassificationError("malformed-geometry", `geometry contains conflicting shape discriminators: ${candidates.join(", ")}`, keys);
176
+ }
177
+ const candidate = candidates[0];
178
+ switch (candidate) {
179
+ case "envelope":
180
+ assertEnvelope(geometry, keys);
181
+ return "esriGeometryEnvelope";
182
+ case "polygon":
183
+ assertParts(geometry, "rings", "polygon", 4, true, keys);
184
+ return "esriGeometryPolygon";
185
+ case "polyline":
186
+ assertParts(geometry, "paths", "polyline", 2, false, keys);
187
+ return "esriGeometryPolyline";
188
+ case "multipoint":
189
+ assertPositions(geometry, keys);
190
+ return "esriGeometryMultipoint";
191
+ case "point":
192
+ assertPoint(geometry, keys);
193
+ return "esriGeometryPoint";
194
+ }
195
+ }
196
+ function isGeometryRecord(value) {
197
+ return typeof value === "object" && value !== null && !Array.isArray(value);
198
+ }
199
+ function hasOwn(value, key) {
200
+ return Object.prototype.hasOwnProperty.call(value, key);
201
+ }
202
+ function hasAnyOwn(value, keys) {
203
+ return keys.some((key) => hasOwn(value, key));
204
+ }
205
+ function isFiniteNumber(value) {
206
+ return typeof value === "number" && Number.isFinite(value);
207
+ }
208
+ function assertPoint(geometry, keys) {
209
+ if (hasOwn(geometry, "x") && geometry.x === null) {
210
+ assertEmptyMembers(geometry, ["y", "z", "m", "id"], "point", keys);
211
+ return;
139
212
  }
140
- if ("rings" in geometry) {
141
- return "esriGeometryPolygon";
213
+ if (!isFiniteNumber(geometry.x) || !isFiniteNumber(geometry.y)) {
214
+ throw geometryClassificationError("malformed-geometry", "point requires finite numeric x and y coordinates", keys, "point");
215
+ }
216
+ assertOptionalFiniteMember(geometry, "z", "point", keys);
217
+ assertOptionalFiniteMember(geometry, "m", "point", keys, true);
218
+ assertOptionalFiniteMember(geometry, "id", "point", keys);
219
+ }
220
+ function assertEnvelope(geometry, keys) {
221
+ if (hasOwn(geometry, "xmin") && geometry.xmin === null) {
222
+ assertEmptyMembers(geometry, ["ymin", "xmax", "ymax", "zmin", "zmax", "mmin", "mmax", "idmin", "idmax"], "envelope", keys);
223
+ return;
142
224
  }
143
- if ("paths" in geometry) {
144
- return "esriGeometryPolyline";
225
+ const { xmin, ymin, xmax, ymax } = geometry;
226
+ if (![xmin, ymin, xmax, ymax].every(isFiniteNumber)) {
227
+ throw geometryClassificationError("malformed-geometry", "envelope requires finite numeric xmin, ymin, xmax, and ymax coordinates", keys, "envelope");
145
228
  }
146
- if ("points" in geometry) {
147
- return "esriGeometryMultipoint";
229
+ if (xmin > xmax || ymin > ymax) {
230
+ throw geometryClassificationError("malformed-geometry", "envelope minimum coordinates must not exceed maximum coordinates", keys, "envelope");
148
231
  }
149
- if ("x" in geometry && "y" in geometry) {
150
- return "esriGeometryPoint";
232
+ assertOptionalBounds(geometry, "zmin", "zmax", "envelope", keys);
233
+ assertOptionalBounds(geometry, "mmin", "mmax", "envelope", keys);
234
+ assertOptionalBounds(geometry, "idmin", "idmax", "envelope", keys);
235
+ }
236
+ function assertPositions(geometry, keys) {
237
+ const value = geometry.points;
238
+ if (!Array.isArray(value)) {
239
+ throw geometryClassificationError("malformed-geometry", "multipoint points must be an array of coordinate positions", keys, "multipoint");
240
+ }
241
+ const dimensions = geometryDimensions(geometry, "multipoint", keys);
242
+ for (const position of value) {
243
+ // ArcGIS permits empty point slots in multipoints and ignores them during
244
+ // spatial evaluation. Preserve that wire-compatible behavior while still
245
+ // rejecting every non-empty malformed position.
246
+ if (Array.isArray(position) && position.length === 0)
247
+ continue;
248
+ assertPosition(position, dimensions, "multipoint", keys);
249
+ }
250
+ }
251
+ function assertParts(geometry, property, shape, minimumPositions, requireClosure, keys) {
252
+ const value = geometry[property];
253
+ if (!Array.isArray(value)) {
254
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} must be an array of coordinate arrays`, keys, shape);
151
255
  }
152
- return "esriGeometryPoint";
256
+ const dimensions = geometryDimensions(geometry, shape, keys);
257
+ for (const part of value) {
258
+ if (!Array.isArray(part)) {
259
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} must contain coordinate arrays`, keys, shape);
260
+ }
261
+ // The REST empty sentinel is an empty outer paths/rings array. Empty inner
262
+ // parts are not canonical and cannot be mixed with populated parts.
263
+ if (part.length < minimumPositions) {
264
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} parts require at least ${minimumPositions} positions`, keys, shape);
265
+ }
266
+ for (const position of part)
267
+ assertPosition(position, dimensions, shape, keys);
268
+ if (requireClosure) {
269
+ const first = part[0];
270
+ const last = part[part.length - 1];
271
+ if (first[0] !== last[0] || first[1] !== last[1]) {
272
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} parts must be closed`, keys, shape);
273
+ }
274
+ }
275
+ }
276
+ }
277
+ function geometryDimensions(geometry, shape, keys) {
278
+ return {
279
+ hasZ: geometryBooleanFlag(geometry, "hasZ", shape, keys),
280
+ hasM: geometryBooleanFlag(geometry, "hasM", shape, keys),
281
+ };
282
+ }
283
+ function geometryBooleanFlag(geometry, property, shape, keys) {
284
+ if (!hasOwn(geometry, property))
285
+ return false;
286
+ if (typeof geometry[property] !== "boolean") {
287
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} must be a boolean when present`, keys, shape);
288
+ }
289
+ return geometry[property];
290
+ }
291
+ function assertPosition(value, dimensions, shape, keys) {
292
+ const minimumArity = dimensions.hasZ ? 3 : 2;
293
+ const maximumArity = minimumArity + (dimensions.hasM ? 1 : 0);
294
+ if (!Array.isArray(value) || value.length < minimumArity || value.length > maximumArity || value.length > 4) {
295
+ throw geometryClassificationError("malformed-geometry", `${shape} positions must match declared hasZ/hasM dimensions and contain at most four ordinates`, keys, shape);
296
+ }
297
+ if (!isFiniteNumber(value[0]) || !isFiniteNumber(value[1])) {
298
+ throw geometryClassificationError("malformed-geometry", `${shape} positions require finite numeric x and y ordinates`, keys, shape);
299
+ }
300
+ if (dimensions.hasZ && !isFiniteNumber(value[2])) {
301
+ throw geometryClassificationError("malformed-geometry", `${shape} positions require a finite z ordinate when hasZ is true`, keys, shape);
302
+ }
303
+ if (dimensions.hasM && value.length === maximumArity) {
304
+ const measure = value[maximumArity - 1];
305
+ if (measure !== null && !isFiniteNumber(measure)) {
306
+ throw geometryClassificationError("malformed-geometry", `${shape} m ordinates must be finite numbers, null, or omitted`, keys, shape);
307
+ }
308
+ }
309
+ }
310
+ function assertEmptyMembers(geometry, members, shape, keys) {
311
+ const contradictory = members.filter((member) => hasOwn(geometry, member) && geometry[member] !== null);
312
+ if (contradictory.length > 0) {
313
+ throw geometryClassificationError("malformed-geometry", `${shape} empty sentinel conflicts with non-null members: ${contradictory.join(", ")}`, keys, shape);
314
+ }
315
+ }
316
+ function assertOptionalFiniteMember(geometry, property, shape, keys, allowNull = false) {
317
+ if (!hasOwn(geometry, property))
318
+ return;
319
+ const value = geometry[property];
320
+ if ((allowNull && value === null) || isFiniteNumber(value))
321
+ return;
322
+ const expectation = allowNull ? "a finite number or null" : "a finite number";
323
+ throw geometryClassificationError("malformed-geometry", `${shape} ${property} must be ${expectation} when present`, keys, shape);
324
+ }
325
+ function assertOptionalBounds(geometry, minimumProperty, maximumProperty, shape, keys) {
326
+ const hasMinimum = hasOwn(geometry, minimumProperty);
327
+ const hasMaximum = hasOwn(geometry, maximumProperty);
328
+ if (!hasMinimum && !hasMaximum)
329
+ return;
330
+ const minimum = geometry[minimumProperty];
331
+ const maximum = geometry[maximumProperty];
332
+ if (!hasMinimum || !hasMaximum || !isFiniteNumber(minimum) || !isFiniteNumber(maximum) || minimum > maximum) {
333
+ throw geometryClassificationError("malformed-geometry", `envelope ${minimumProperty}/${maximumProperty} must be a complete ordered pair of finite numbers`, keys, shape);
334
+ }
335
+ }
336
+ function geometryClassificationError(code, reason, keys, shape) {
337
+ return new HonuaGeometryError(code, `Unable to classify geometry: ${reason}`, {
338
+ operation: "classify",
339
+ reason,
340
+ keys,
341
+ ...(shape === undefined ? {} : { shape }),
342
+ });
153
343
  }
@@ -15,6 +15,7 @@
15
15
  *
16
16
  * @module
17
17
  */
18
+ import type { SourceLocator } from "../contract/types.js";
18
19
  import type { HonuaClient } from "./client.js";
19
20
  import type { HonuaStacItemCollectionResponse } from "./types.js";
20
21
  /** Bounded search parameters for a static catalog traversal. */
@@ -34,7 +35,8 @@ export interface StacStaticSearchParams {
34
35
  export declare class HonuaStacStaticCatalog {
35
36
  readonly client: HonuaClient;
36
37
  private readonly rootUrl;
37
- constructor(client: HonuaClient, rootUrl?: string);
38
+ private readonly policy;
39
+ constructor(client: HonuaClient, rootUrl?: string, policy?: SourceLocator["stacStatic"]);
38
40
  /**
39
41
  * Traverse the catalog tree, collect matching items, and return them in
40
42
  * the STAC search envelope shape.
@@ -44,7 +46,9 @@ export declare class HonuaStacStaticCatalog {
44
46
  /**
45
47
  * Breadth-first walk collecting item documents. Descends `rel="child"`
46
48
  * links; a `collections` filter prunes Collection subtrees whose `id`
47
- * is not requested. Bounded by {@link MAX_DOCUMENTS} and the item cap.
49
+ * is not requested. Every attempted document, traversal depth, per-document
50
+ * link list, response body, redirect, and origin is bounded by the locator's
51
+ * admitted policy.
48
52
  */
49
53
  private collectItems;
50
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stac-static.d.ts","sourceRoot":"","sources":["../../../src/core/stac-static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,+BAA+B,EAAyB,MAAM,YAAY,CAAC;AAEzF,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAeD;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEd,MAAM,EAAE,WAAW,EAAE,OAAO,SAAK;IAKpD;;;OAGG;IACU,MAAM,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,+BAA+B,CAAC;YAcpF,QAAQ;IAMtB;;;;OAIG;YACW,YAAY;CA6D3B"}
1
+ {"version":3,"file":"stac-static.d.ts","sourceRoot":"","sources":["../../../src/core/stac-static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,+BAA+B,EAAyB,MAAM,YAAY,CAAC;AAEzF,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6CD;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAE7B,MAAM,EAAE,WAAW,EAAE,OAAO,SAAK,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC;IAM1F;;;OAGG;IACU,MAAM,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,+BAA+B,CAAC;YAcpF,QAAQ;IA0BtB;;;;;;OAMG;YACW,YAAY;CAkE3B"}