@honua/react 0.1.0-beta.0 → 0.1.2-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
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Bounded XML tree used by the WMS/WMTS capabilities readers.
3
+ *
4
+ * This is deliberately not a general XML implementation. It accepts the XML
5
+ * 1.0 subset used by OGC service metadata, matches namespace-qualified names
6
+ * by their local suffix, and rejects declarations that could introduce
7
+ * external entities. Every allocation is covered by a small fixed budget so a
8
+ * capabilities response cannot turn metadata discovery into an unbounded
9
+ * parser workload.
10
+ *
11
+ * @internal
12
+ */
13
+ import { decodeXmlText } from "./xml-text.js";
14
+ export const OGC_CAPABILITIES_XML_LIMITS = Object.freeze({
15
+ maxBytes: 2 * 1024 * 1024,
16
+ maxElements: 12_000,
17
+ maxDepth: 32,
18
+ maxAttributesPerElement: 64,
19
+ maxAttributeBytes: 64 * 1024,
20
+ maxTextBytes: 512 * 1024,
21
+ });
22
+ export function parseCapabilitiesXml(xml, family) {
23
+ if (typeof xml !== "string" || xml.length === 0)
24
+ throw new Error(`${family} Capabilities body is empty`);
25
+ if (utf8Length(xml) > OGC_CAPABILITIES_XML_LIMITS.maxBytes) {
26
+ throw new Error(`${family} Capabilities exceeds the ${OGC_CAPABILITIES_XML_LIMITS.maxBytes}-byte XML limit`);
27
+ }
28
+ const declarationProbe = xml.toLowerCase();
29
+ if (declarationProbe.includes("<!doctype") || declarationProbe.includes("<!entity")) {
30
+ throw new Error(`${family} Capabilities rejects DOCTYPE and ENTITY declarations`);
31
+ }
32
+ let cursor = xml.charCodeAt(0) === 0xfeff ? 1 : 0;
33
+ let root;
34
+ const stack = [];
35
+ let elements = 0;
36
+ while (cursor < xml.length) {
37
+ const angle = xml.indexOf("<", cursor);
38
+ if (angle < 0) {
39
+ appendText(stack.at(-1), xml.slice(cursor), family);
40
+ cursor = xml.length;
41
+ break;
42
+ }
43
+ appendText(stack.at(-1), xml.slice(cursor, angle), family);
44
+ if (xml.startsWith("<!--", angle)) {
45
+ const end = xml.indexOf("-->", angle + 4);
46
+ if (end < 0)
47
+ throw new Error(`${family} Capabilities contains an unterminated comment`);
48
+ cursor = end + 3;
49
+ continue;
50
+ }
51
+ if (xml.startsWith("<![CDATA[", angle)) {
52
+ const end = xml.indexOf("]]>", angle + 9);
53
+ if (end < 0)
54
+ throw new Error(`${family} Capabilities contains unterminated CDATA`);
55
+ const node = stack.at(-1);
56
+ if (!node)
57
+ throw new Error(`${family} Capabilities contains CDATA outside its root element`);
58
+ appendDecodedText(node, xml.slice(angle + 9, end), family);
59
+ cursor = end + 3;
60
+ continue;
61
+ }
62
+ if (xml.startsWith("<?", angle)) {
63
+ const end = xml.indexOf("?>", angle + 2);
64
+ if (end < 0)
65
+ throw new Error(`${family} Capabilities contains an unterminated processing instruction`);
66
+ cursor = end + 2;
67
+ continue;
68
+ }
69
+ if (xml.startsWith("<!", angle)) {
70
+ throw new Error(`${family} Capabilities contains an unsupported XML declaration`);
71
+ }
72
+ const close = findTagEnd(xml, angle);
73
+ if (close < 0)
74
+ throw new Error(`${family} Capabilities contains an unterminated tag`);
75
+ const closing = xml.charCodeAt(angle + 1) === 47;
76
+ const rawTag = xml.slice(angle + (closing ? 2 : 1), close);
77
+ if (rawTag.length === 0 || isWhitespace(rawTag.charCodeAt(0))) {
78
+ throw new Error(`${family} Capabilities contains an invalid tag`);
79
+ }
80
+ const raw = trimXmlWhitespaceEnd(rawTag);
81
+ if (closing) {
82
+ const expected = stack.at(-1);
83
+ if (!expected || raw !== expected.name) {
84
+ throw new Error(`${family} Capabilities has mismatched closing tag </${raw}>${expected ? `; expected </${expected.name}>` : ""}`);
85
+ }
86
+ stack.pop();
87
+ cursor = close + 1;
88
+ continue;
89
+ }
90
+ const selfClosing = rawTag.endsWith("/");
91
+ const body = selfClosing ? trimXmlWhitespaceEnd(raw.slice(0, -1)) : raw;
92
+ const { name, attributes } = parseOpeningTag(body, family);
93
+ elements += 1;
94
+ if (elements > OGC_CAPABILITIES_XML_LIMITS.maxElements) {
95
+ throw new Error(`${family} Capabilities exceeds the ${OGC_CAPABILITIES_XML_LIMITS.maxElements}-element limit`);
96
+ }
97
+ if (stack.length + 1 > OGC_CAPABILITIES_XML_LIMITS.maxDepth) {
98
+ throw new Error(`${family} Capabilities exceeds the ${OGC_CAPABILITIES_XML_LIMITS.maxDepth}-level XML limit`);
99
+ }
100
+ const node = {
101
+ name,
102
+ localName: localName(name),
103
+ attributes,
104
+ children: [],
105
+ textChunks: [],
106
+ textBytes: 0,
107
+ };
108
+ const parent = stack.at(-1);
109
+ if (parent)
110
+ parent.children.push(node);
111
+ else if (root)
112
+ throw new Error(`${family} Capabilities contains multiple root elements`);
113
+ else
114
+ root = node;
115
+ if (!selfClosing)
116
+ stack.push(node);
117
+ cursor = close + 1;
118
+ }
119
+ if (stack.length > 0) {
120
+ throw new Error(`${family} Capabilities contains an unclosed <${stack.at(-1).name}> element`);
121
+ }
122
+ if (!root)
123
+ throw new Error(`${family} Capabilities contains no root element`);
124
+ return freezeElement(root);
125
+ }
126
+ export function xmlChild(node, localName) {
127
+ return node?.children.find((child) => child.localName === localName);
128
+ }
129
+ export function xmlChildren(node, localName) {
130
+ return node?.children.filter((child) => child.localName === localName) ?? [];
131
+ }
132
+ export function xmlAttribute(node, name) {
133
+ return node.attributes[name] ?? node.attributes[localName(name)];
134
+ }
135
+ export function xmlText(node) {
136
+ if (!node)
137
+ return undefined;
138
+ const value = node.text.trim();
139
+ return value.length > 0 ? value : undefined;
140
+ }
141
+ function appendText(node, value, family) {
142
+ if (value.length === 0)
143
+ return;
144
+ if (!node) {
145
+ if (!isXmlWhitespaceText(value)) {
146
+ throw new Error(`${family} Capabilities contains text outside its root element`);
147
+ }
148
+ return;
149
+ }
150
+ appendDecodedText(node, decodeCapabilitiesText(value, family), family);
151
+ }
152
+ function appendDecodedText(node, value, family) {
153
+ if (value.length === 0)
154
+ return;
155
+ assertXmlCharacters(value, family);
156
+ const valueBytes = utf8Length(value);
157
+ if (valueBytes > OGC_CAPABILITIES_XML_LIMITS.maxTextBytes - node.textBytes) {
158
+ throw new Error(`${family} Capabilities element text exceeds the bounded text limit`);
159
+ }
160
+ node.textBytes += valueBytes;
161
+ node.textChunks.push(value);
162
+ }
163
+ function parseOpeningTag(body, family) {
164
+ let cursor = 0;
165
+ while (cursor < body.length && !isWhitespace(body.charCodeAt(cursor)))
166
+ cursor += 1;
167
+ const name = body.slice(0, cursor);
168
+ if (!validXmlName(name))
169
+ throw new Error(`${family} Capabilities contains an invalid element name`);
170
+ const attributes = Object.create(null);
171
+ const attributeLocals = new Set();
172
+ let count = 0;
173
+ while (cursor < body.length) {
174
+ while (cursor < body.length && isWhitespace(body.charCodeAt(cursor)))
175
+ cursor += 1;
176
+ if (cursor >= body.length)
177
+ break;
178
+ const nameStart = cursor;
179
+ while (cursor < body.length && !isWhitespace(body.charCodeAt(cursor)) && body[cursor] !== "=")
180
+ cursor += 1;
181
+ const attributeName = body.slice(nameStart, cursor);
182
+ if (!validXmlName(attributeName))
183
+ throw new Error(`${family} Capabilities contains an invalid attribute name`);
184
+ count += 1;
185
+ if (count > OGC_CAPABILITIES_XML_LIMITS.maxAttributesPerElement) {
186
+ throw new Error(`${family} Capabilities element exceeds the bounded attribute count`);
187
+ }
188
+ while (cursor < body.length && isWhitespace(body.charCodeAt(cursor)))
189
+ cursor += 1;
190
+ if (body[cursor] !== "=")
191
+ throw new Error(`${family} Capabilities attribute "${attributeName}" lacks '='`);
192
+ cursor += 1;
193
+ while (cursor < body.length && isWhitespace(body.charCodeAt(cursor)))
194
+ cursor += 1;
195
+ const quote = body[cursor];
196
+ if (quote !== '"' && quote !== "'") {
197
+ throw new Error(`${family} Capabilities attribute "${attributeName}" must be quoted`);
198
+ }
199
+ const end = body.indexOf(quote, cursor + 1);
200
+ if (end < 0)
201
+ throw new Error(`${family} Capabilities attribute "${attributeName}" is unterminated`);
202
+ const rawValue = body.slice(cursor + 1, end);
203
+ if (rawValue.includes("<")) {
204
+ throw new Error(`${family} Capabilities attribute "${attributeName}" contains an unescaped '<'`);
205
+ }
206
+ const value = decodeCapabilitiesText(rawValue, family);
207
+ if (utf8Length(value) > OGC_CAPABILITIES_XML_LIMITS.maxAttributeBytes) {
208
+ throw new Error(`${family} Capabilities attribute "${attributeName}" exceeds the bounded value limit`);
209
+ }
210
+ if (Object.hasOwn(attributes, attributeName)) {
211
+ throw new Error(`${family} Capabilities repeats attribute "${attributeName}"`);
212
+ }
213
+ const local = localName(attributeName);
214
+ const namespaceDeclaration = attributeName === "xmlns" || attributeName.startsWith("xmlns:");
215
+ if (!namespaceDeclaration && attributeLocals.has(local)) {
216
+ throw new Error(`${family} Capabilities repeats namespace-local attribute "${local}"`);
217
+ }
218
+ attributes[attributeName] = value;
219
+ if (!namespaceDeclaration) {
220
+ attributeLocals.add(local);
221
+ if (attributeName !== local)
222
+ attributes[local] = value;
223
+ }
224
+ cursor = end + 1;
225
+ if (cursor < body.length && !isWhitespace(body.charCodeAt(cursor))) {
226
+ throw new Error(`${family} Capabilities attributes must be separated by XML whitespace`);
227
+ }
228
+ }
229
+ return { name, attributes };
230
+ }
231
+ function decodeCapabilitiesText(value, family) {
232
+ let cursor = 0;
233
+ while (cursor < value.length) {
234
+ const ampersand = value.indexOf("&", cursor);
235
+ if (ampersand < 0)
236
+ break;
237
+ const semicolon = value.indexOf(";", ampersand + 1);
238
+ const nestedAmpersand = value.indexOf("&", ampersand + 1);
239
+ if (semicolon < 0 || (nestedAmpersand >= 0 && nestedAmpersand < semicolon)) {
240
+ throw new Error(`${family} Capabilities contains an unterminated XML entity reference`);
241
+ }
242
+ const entity = value.slice(ampersand + 1, semicolon);
243
+ if (!validEntityReference(entity)) {
244
+ throw new Error(`${family} Capabilities contains unsupported XML entity "&${entity};"`);
245
+ }
246
+ cursor = semicolon + 1;
247
+ }
248
+ const decoded = decodeXmlText(value);
249
+ assertXmlCharacters(decoded, family);
250
+ return decoded;
251
+ }
252
+ function validEntityReference(entity) {
253
+ if (entity === "lt" || entity === "gt" || entity === "amp" || entity === "apos" || entity === "quot") {
254
+ return true;
255
+ }
256
+ const numeric = entity.startsWith("#x") || entity.startsWith("#X")
257
+ ? /^[0-9A-Fa-f]+$/.test(entity.slice(2))
258
+ ? Number.parseInt(entity.slice(2), 16)
259
+ : Number.NaN
260
+ : entity.startsWith("#") && /^\d+$/.test(entity.slice(1))
261
+ ? Number.parseInt(entity.slice(1), 10)
262
+ : Number.NaN;
263
+ return Number.isSafeInteger(numeric) && validXmlCodePoint(numeric);
264
+ }
265
+ function assertXmlCharacters(value, family) {
266
+ for (const character of value) {
267
+ if (!validXmlCodePoint(character.codePointAt(0))) {
268
+ throw new Error(`${family} Capabilities contains a character forbidden by XML 1.0`);
269
+ }
270
+ }
271
+ }
272
+ function validXmlCodePoint(value) {
273
+ return (value === 0x09 ||
274
+ value === 0x0a ||
275
+ value === 0x0d ||
276
+ (value >= 0x20 && value <= 0xd7ff) ||
277
+ (value >= 0xe000 && value <= 0xfffd) ||
278
+ (value >= 0x10000 && value <= 0x10ffff));
279
+ }
280
+ function findTagEnd(xml, start) {
281
+ let quote;
282
+ for (let cursor = start + 1; cursor < xml.length; cursor += 1) {
283
+ const value = xml[cursor];
284
+ if (quote) {
285
+ if (value === quote)
286
+ quote = undefined;
287
+ }
288
+ else if (value === '"' || value === "'")
289
+ quote = value;
290
+ else if (value === ">")
291
+ return cursor;
292
+ }
293
+ return -1;
294
+ }
295
+ function validXmlName(value) {
296
+ const parts = value.split(":");
297
+ return parts.length <= 2 && parts.every((part) => /^[A-Za-z_][A-Za-z0-9_.-]*$/u.test(part));
298
+ }
299
+ function localName(value) {
300
+ const separator = value.indexOf(":");
301
+ return separator < 0 ? value : value.slice(separator + 1);
302
+ }
303
+ function isWhitespace(value) {
304
+ return value === 32 || value === 9 || value === 10 || value === 13;
305
+ }
306
+ function isXmlWhitespaceText(value) {
307
+ for (let index = 0; index < value.length; index += 1) {
308
+ if (!isWhitespace(value.charCodeAt(index)))
309
+ return false;
310
+ }
311
+ return true;
312
+ }
313
+ function trimXmlWhitespaceEnd(value) {
314
+ let end = value.length;
315
+ while (end > 0 && isWhitespace(value.charCodeAt(end - 1)))
316
+ end -= 1;
317
+ return value.slice(0, end);
318
+ }
319
+ function utf8Length(value) {
320
+ return new TextEncoder().encode(value).byteLength;
321
+ }
322
+ function freezeElement(node) {
323
+ const children = Object.freeze(node.children.map(freezeElement));
324
+ return Object.freeze({
325
+ name: node.name,
326
+ localName: node.localName,
327
+ attributes: Object.freeze({ ...node.attributes }),
328
+ children,
329
+ text: node.textChunks.join(""),
330
+ });
331
+ }
package/core/client.d.ts CHANGED
@@ -90,8 +90,10 @@ export declare class HonuaClient {
90
90
  private authCredentialsCache;
91
91
  private authRefreshPromise;
92
92
  private connectClient;
93
+ private connectClientPromise;
93
94
  private readonly metadataCache;
94
95
  private readonly ogcLayoutCache;
96
+ private readonly wfsRootCache;
95
97
  /**
96
98
  * Create a new `HonuaClient`.
97
99
  *
@@ -143,7 +145,6 @@ export declare class HonuaClient {
143
145
  * signals are threaded by the individual RPC methods).
144
146
  */
145
147
  private connectTransportOptions;
146
- private initConnectClient;
147
148
  private ensureConnectClient;
148
149
  /**
149
150
  * Perform a fetch that never auto-follows a cross-origin redirect.
@@ -360,6 +361,8 @@ export declare class HonuaClient {
360
361
  */
361
362
  pipelineFetch(method: QueryMethod, path: string, init?: RequestInit, callerSignal?: AbortSignal, options?: {
362
363
  okStatuses?: readonly number[];
364
+ redirect?: "safe-follow" | "error" | "manual";
365
+ discardErrorBody?: boolean;
363
366
  }): Promise<Response>;
364
367
  private requestCachedMetadataJson;
365
368
  private staleMetadataFallback;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/client.ts"],"names":[],"mappings":"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"}
package/core/client.js CHANGED
@@ -171,8 +171,10 @@ export class HonuaClient {
171
171
  authCredentialsCache;
172
172
  authRefreshPromise;
173
173
  connectClient;
174
+ connectClientPromise;
174
175
  metadataCache = new Map();
175
176
  ogcLayoutCache = new Map();
177
+ wfsRootCache = new Map();
176
178
  /**
177
179
  * Create a new `HonuaClient`.
178
180
  *
@@ -226,9 +228,6 @@ export class HonuaClient {
226
228
  pipelineFetch: (method, path, init, callerSignal, pipelineOptions) => this.pipelineFetch(method, path, init, callerSignal, pipelineOptions),
227
229
  requestBinaryWithJsonFallback: (method, path, params, signal) => this.requestBinaryWithJsonFallback(method, path, params, signal),
228
230
  };
229
- if (this.transport === "grpc-web") {
230
- this.initConnectClient();
231
- }
232
231
  }
233
232
  /**
234
233
  * Connect interceptor that injects the same credentials the REST pipeline
@@ -300,26 +299,36 @@ export class HonuaClient {
300
299
  ...(this.timeoutMs !== undefined ? { defaultTimeoutMs: this.timeoutMs } : {}),
301
300
  };
302
301
  }
303
- initConnectClient() {
304
- // Dynamic imports are used to avoid bundling Connect dependencies
305
- // when only the REST transport is used. The imports are resolved
306
- // at module level since they are static ESM imports.
307
- import("@connectrpc/connect").then(({ createClient }) => import("@connectrpc/connect-web").then(({ createGrpcWebTransport }) => import("../gen/honua/v1/feature_service_pb.js").then(({ FeatureService }) => {
308
- const transport = createGrpcWebTransport(this.connectTransportOptions());
309
- this.connectClient = createClient(FeatureService, transport);
310
- })));
311
- }
312
302
  async ensureConnectClient() {
313
303
  if (this.connectClient) {
314
304
  return this.connectClient;
315
305
  }
316
- // If initConnectClient hasn't resolved yet, wait for it
317
- const { createClient } = await import("@connectrpc/connect");
318
- const { createGrpcWebTransport } = await import("@connectrpc/connect-web");
319
- const { FeatureService } = await import("../gen/honua/v1/feature_service_pb.js");
320
- const transport = createGrpcWebTransport(this.connectTransportOptions());
321
- this.connectClient = createClient(FeatureService, transport);
322
- return this.connectClient;
306
+ // Keep optional Connect peers out of the module graph until the first
307
+ // gRPC operation is actually awaited. Caching the in-flight promise also
308
+ // prevents concurrent first calls from constructing competing clients.
309
+ let initPromise = this.connectClientPromise;
310
+ if (!initPromise) {
311
+ initPromise = Promise.all([
312
+ import("@connectrpc/connect"),
313
+ import("@connectrpc/connect-web"),
314
+ import("../gen/honua/v1/feature_service_pb.js"),
315
+ ]).then(([{ createClient }, { createGrpcWebTransport }, { FeatureService }]) => {
316
+ const transport = createGrpcWebTransport(this.connectTransportOptions());
317
+ this.connectClient = createClient(FeatureService, transport);
318
+ return this.connectClient;
319
+ });
320
+ this.connectClientPromise = initPromise;
321
+ }
322
+ try {
323
+ return await initPromise;
324
+ }
325
+ catch (error) {
326
+ // A transient module-loader failure must not poison every later call.
327
+ if (this.connectClientPromise === initPromise) {
328
+ this.connectClientPromise = undefined;
329
+ }
330
+ throw error;
331
+ }
323
332
  }
324
333
  /**
325
334
  * Perform a fetch that never auto-follows a cross-origin redirect.
@@ -332,11 +341,24 @@ export class HonuaClient {
332
341
  * base origin (re-running the {@link resolveRequestUrl} origin guard).
333
342
  * Cross-origin redirects throw before the credentialed request is replayed.
334
343
  */
335
- async fetchWithSafeRedirects(url, init) {
344
+ async fetchWithSafeRedirects(url, init, redirectPolicy = "safe-follow") {
336
345
  let currentUrl = url;
337
346
  let currentInit = init;
338
347
  for (let redirects = 0;; redirects += 1) {
339
- const response = await this.fetchFn(currentUrl, { ...currentInit, redirect: "manual" });
348
+ const response = await this.fetchFn(currentUrl, {
349
+ ...currentInit,
350
+ redirect: redirectPolicy === "error" ? "error" : "manual",
351
+ });
352
+ if (redirectPolicy === "error") {
353
+ if (response.type === "opaqueredirect" ||
354
+ response.redirected ||
355
+ REDIRECT_STATUSES.has(response.status) ||
356
+ (response.url !== "" && response.url !== currentUrl)) {
357
+ await response.body?.cancel().catch(() => undefined);
358
+ throw new HonuaNetworkError("Redirects are not allowed for this bounded request.", undefined);
359
+ }
360
+ return response;
361
+ }
340
362
  // `redirect: "manual"` surfaces redirects as status 3xx with a usable
341
363
  // `Location` header (and, in fetch, an "opaqueredirect" type with status 0
342
364
  // in some runtimes — treated as a same-origin-unverifiable redirect we
@@ -344,9 +366,13 @@ export class HonuaClient {
344
366
  if (response.type === "opaqueredirect") {
345
367
  throw new HonuaNetworkError("Refusing to follow an opaque cross-origin redirect; the request's API key would be leaked to the redirect target.", undefined);
346
368
  }
347
- if (!REDIRECT_STATUSES.has(response.status)) {
369
+ if (!REDIRECT_STATUSES.has(response.status))
370
+ return response;
371
+ // Some bounded metadata callers need the untouched 3xx response so
372
+ // their protocol facade can preserve its typed redirect diagnostic.
373
+ // Credentials are still never replayed because fetch remains manual.
374
+ if (redirectPolicy === "manual")
348
375
  return response;
349
- }
350
376
  if (redirects >= MAX_SAFE_REDIRECTS) {
351
377
  throw new HonuaNetworkError(`Exceeded the maximum of ${MAX_SAFE_REDIRECTS} redirects.`, undefined);
352
378
  }
@@ -559,7 +585,14 @@ export class HonuaClient {
559
585
  return createHonuaProcessRunner(createGeospatialGrpcProcessAdapter(processClient));
560
586
  }
561
587
  wfs(endpointUrl = "/wfs", options = {}) {
562
- return new HonuaWfs({ client: this, endpointUrl, version: options.version });
588
+ const version = options.version ?? "2.0.0";
589
+ const key = `${endpointUrl}\u0000${version}`;
590
+ const cached = this.wfsRootCache.get(key);
591
+ if (cached)
592
+ return cached;
593
+ const root = new HonuaWfs({ client: this, endpointUrl, version });
594
+ this.wfsRootCache.set(key, root);
595
+ return root;
563
596
  }
564
597
  odata(entitySet, options = {}) {
565
598
  return new HonuaOdataEntitySet({ client: this, entitySet, basePath: options.basePath });
@@ -777,6 +810,15 @@ export class HonuaClient {
777
810
  return this.executeRequest(request, {
778
811
  callerSignal,
779
812
  ...(options.okStatuses ? { okStatuses: options.okStatuses } : {}),
813
+ ...(options.redirect ? { redirect: options.redirect } : {}),
814
+ ...(options.discardErrorBody
815
+ ? {
816
+ errorBody: (response) => {
817
+ void response.body?.cancel().catch(() => undefined);
818
+ return Promise.resolve({});
819
+ },
820
+ }
821
+ : {}),
780
822
  finalize: async (response, _durationMs, _request, runAfter) => {
781
823
  await runAfter();
782
824
  return response;
@@ -785,7 +827,11 @@ export class HonuaClient {
785
827
  }
786
828
  async requestCachedMetadataJson(cacheKey, path, options = {}) {
787
829
  const metadataOptions = normalizeHonuaMetadataRequestOptions(options);
788
- const keyFingerprint = `metadata:${cacheKey}`;
830
+ // A byte-bounded trust boundary must never reuse an entry populated by an
831
+ // unbounded or more-permissive request. Partitioning preserves normal cache
832
+ // reuse for callers that share the same ceiling without retaining bodies
833
+ // that were admitted under different limits.
834
+ const keyFingerprint = `metadata:${cacheKey}${metadataOptions.maxResponseBytes === undefined ? "" : `:max-response-bytes:${metadataOptions.maxResponseBytes}`}`;
789
835
  const cached = this.metadataCache.get(keyFingerprint);
790
836
  const bypass = metadataOptions.cache === "bypass";
791
837
  const now = Date.now();
@@ -839,7 +885,7 @@ export class HonuaClient {
839
885
  };
840
886
  },
841
887
  finalize: async (response, durationMs, currentRequest, runAfter) => {
842
- const body = await parseResponseBody(this.hasAfterInterceptors() ? response.clone() : response);
888
+ const body = await parseResponseBody(this.hasAfterInterceptors() ? response.clone() : response, metadataOptions.maxResponseBytes);
843
889
  // GeoServices reports metadata failures (layer not found, invalid token
844
890
  // => code 499, …) as HTTP 200 with a top-level `{error}` envelope.
845
891
  // Detect it before caching so a transient auth/permission error is never
@@ -1385,7 +1431,7 @@ export class HonuaClient {
1385
1431
  ...request.init,
1386
1432
  method: request.method,
1387
1433
  signal: timeout.signal,
1388
- });
1434
+ }, options.redirect);
1389
1435
  }
1390
1436
  catch (error) {
1391
1437
  const durationMs = performance.now() - startTime;
@@ -1544,8 +1590,10 @@ function geoServicesEnvelopeError(httpStatus, body) {
1544
1590
  const message = hasMessage ? error.message : "Request failed";
1545
1591
  return new HonuaHttpError(statusCode, message, body);
1546
1592
  }
1547
- async function parseResponseBody(response) {
1548
- const text = await response.text();
1593
+ async function parseResponseBody(response, maxResponseBytes) {
1594
+ const text = maxResponseBytes === undefined
1595
+ ? await response.text()
1596
+ : new TextDecoder().decode(await readBoundedResponseBytes(response, maxResponseBytes));
1549
1597
  if (!text) {
1550
1598
  return {};
1551
1599
  }
@@ -1556,6 +1604,44 @@ async function parseResponseBody(response) {
1556
1604
  return { raw: text };
1557
1605
  }
1558
1606
  }
1607
+ async function readBoundedResponseBytes(response, maximum) {
1608
+ const advertised = response.headers.get("content-length");
1609
+ if (advertised !== null) {
1610
+ const length = Number(advertised);
1611
+ if (Number.isFinite(length) && length > maximum) {
1612
+ await response.body?.cancel().catch(() => undefined);
1613
+ throw new HonuaNetworkError(`Metadata response exceeds the configured ${maximum}-byte limit.`, undefined);
1614
+ }
1615
+ }
1616
+ if (!response.body)
1617
+ return new Uint8Array();
1618
+ const reader = response.body.getReader();
1619
+ const chunks = [];
1620
+ let total = 0;
1621
+ try {
1622
+ for (;;) {
1623
+ const { done, value } = await reader.read();
1624
+ if (done)
1625
+ break;
1626
+ total += value.byteLength;
1627
+ if (total > maximum) {
1628
+ await reader.cancel().catch(() => undefined);
1629
+ throw new HonuaNetworkError(`Metadata response exceeds the configured ${maximum}-byte limit.`, undefined);
1630
+ }
1631
+ chunks.push(value);
1632
+ }
1633
+ }
1634
+ finally {
1635
+ reader.releaseLock();
1636
+ }
1637
+ const bytes = new Uint8Array(total);
1638
+ let offset = 0;
1639
+ for (const chunk of chunks) {
1640
+ bytes.set(chunk, offset);
1641
+ offset += chunk.byteLength;
1642
+ }
1643
+ return bytes;
1644
+ }
1559
1645
  function isObject(value) {
1560
1646
  return typeof value === "object" && value !== null && !Array.isArray(value);
1561
1647
  }