@honua/app-platform 0.1.2-beta.0 → 0.1.7-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 (400) hide show
  1. package/app/index.d.ts.map +1 -1
  2. package/app/index.js +4 -0
  3. package/collaboration/client.d.ts.map +1 -1
  4. package/connect-url-safety.d.ts +53 -0
  5. package/connect-url-safety.js +189 -0
  6. package/contract/discovery.d.ts +34 -0
  7. package/contract/discovery.d.ts.map +1 -1
  8. package/contract/index.d.ts +7 -5
  9. package/contract/index.d.ts.map +1 -1
  10. package/contract/index.js +3 -2
  11. package/contract/pmtiles.d.ts +10 -1
  12. package/contract/pmtiles.d.ts.map +1 -1
  13. package/contract/pmtiles.js +10 -2
  14. package/contract/protocol-module.d.ts +84 -9
  15. package/contract/protocol-module.d.ts.map +1 -1
  16. package/contract/query-filter-fes.d.ts +18 -0
  17. package/contract/query-filter-fes.d.ts.map +1 -0
  18. package/contract/query-filter-fes.js +122 -0
  19. package/contract/query-filter.d.ts +300 -0
  20. package/contract/query-filter.d.ts.map +1 -0
  21. package/contract/query-filter.js +883 -0
  22. package/contract/schema.d.ts +12 -0
  23. package/contract/schema.d.ts.map +1 -1
  24. package/contract/schema.js +34 -0
  25. package/contract/source-capability-support.d.ts.map +1 -1
  26. package/contract/source-capability-support.js +15 -3
  27. package/contract/source.d.ts +45 -25
  28. package/contract/source.d.ts.map +1 -1
  29. package/contract/source.js +719 -479
  30. package/contract/types.d.ts +88 -19
  31. package/contract/types.d.ts.map +1 -1
  32. package/contract/types.js +4 -0
  33. package/contract/widget-source.d.ts.map +1 -1
  34. package/controls/basemap-switcher.d.ts +19 -11
  35. package/controls/basemap-switcher.d.ts.map +1 -1
  36. package/controls/basemap-switcher.js +58 -25
  37. package/controls/catalog.d.ts +105 -0
  38. package/controls/catalog.d.ts.map +1 -0
  39. package/controls/catalog.js +341 -0
  40. package/controls/element-utils.d.ts +9 -0
  41. package/controls/element-utils.d.ts.map +1 -1
  42. package/controls/element-utils.js +17 -0
  43. package/controls/index.d.ts +29 -8
  44. package/controls/index.d.ts.map +1 -1
  45. package/controls/index.js +26 -8
  46. package/controls/layer-list.d.ts +13 -5
  47. package/controls/layer-list.d.ts.map +1 -1
  48. package/controls/layer-list.js +72 -15
  49. package/controls/legend.d.ts +32 -5
  50. package/controls/legend.d.ts.map +1 -1
  51. package/controls/legend.js +95 -25
  52. package/controls/qualification.d.ts +152 -0
  53. package/controls/qualification.d.ts.map +1 -0
  54. package/controls/qualification.js +1265 -0
  55. package/controls/registry.d.ts +104 -0
  56. package/controls/registry.d.ts.map +1 -0
  57. package/controls/registry.js +150 -0
  58. package/controls/swipe-control.d.ts +6 -1
  59. package/controls/swipe-control.d.ts.map +1 -1
  60. package/controls/swipe-control.js +82 -20
  61. package/core/client.d.ts +51 -21
  62. package/core/client.d.ts.map +1 -1
  63. package/core/client.js +234 -54
  64. package/core/error-classifications.d.ts +23 -0
  65. package/core/error-classifications.d.ts.map +1 -1
  66. package/core/error-classifications.js +23 -0
  67. package/core/error-code-registry.d.ts +24 -1
  68. package/core/error-code-registry.d.ts.map +1 -1
  69. package/core/error-code-registry.js +23 -0
  70. package/core/error-envelope.js +2 -0
  71. package/core/errors.d.ts +2 -2
  72. package/core/errors.d.ts.map +1 -1
  73. package/core/errors.js +1 -1
  74. package/core/geoparquet-sql.d.ts +69 -5
  75. package/core/geoparquet-sql.d.ts.map +1 -1
  76. package/core/geoparquet-sql.js +327 -10
  77. package/core/odata-write-codec.d.ts.map +1 -1
  78. package/core/odata-write-codec.js +0 -1
  79. package/core/odata.d.ts +6 -0
  80. package/core/odata.d.ts.map +1 -1
  81. package/core/odata.js +6 -1
  82. package/core/ogc-processes.d.ts +182 -25
  83. package/core/ogc-processes.d.ts.map +1 -1
  84. package/core/ogc-processes.js +602 -30
  85. package/core/process-runner.d.ts +8 -1
  86. package/core/process-runner.d.ts.map +1 -1
  87. package/core/process-runner.js +1 -0
  88. package/core/protocol-transport.d.ts +2 -0
  89. package/core/protocol-transport.d.ts.map +1 -1
  90. package/core/stac.d.ts +32 -0
  91. package/core/stac.d.ts.map +1 -1
  92. package/core/stac.js +158 -23
  93. package/core/surfaces.d.ts.map +1 -1
  94. package/core/surfaces.js +273 -68
  95. package/core/types.d.ts +138 -11
  96. package/core/types.d.ts.map +1 -1
  97. package/core/wfs-axis-order.d.ts +18 -0
  98. package/core/wfs-axis-order.d.ts.map +1 -0
  99. package/core/wfs-axis-order.js +108 -0
  100. package/core/wfs-capabilities.d.ts +65 -24
  101. package/core/wfs-capabilities.d.ts.map +1 -1
  102. package/core/wfs-capabilities.js +237 -27
  103. package/core/wfs-filter.d.ts +26 -3
  104. package/core/wfs-filter.d.ts.map +1 -1
  105. package/core/wfs-filter.js +48 -53
  106. package/core/wfs-protocol-error.d.ts +12 -0
  107. package/core/wfs-protocol-error.d.ts.map +1 -0
  108. package/core/wfs-protocol-error.js +13 -0
  109. package/core/wfs.d.ts +53 -1
  110. package/core/wfs.d.ts.map +1 -1
  111. package/core/wfs.js +251 -29
  112. package/core/wms-feature-info.d.ts +92 -0
  113. package/core/wms-feature-info.d.ts.map +1 -0
  114. package/core/wms-feature-info.js +285 -0
  115. package/core/wms.d.ts +9 -0
  116. package/core/wms.d.ts.map +1 -1
  117. package/core/wms.js +17 -5
  118. package/esri-compat/event-bus.d.ts +20 -0
  119. package/esri-compat/event-bus.d.ts.map +1 -1
  120. package/esri-compat/feature-filter.d.ts +46 -1
  121. package/esri-compat/feature-filter.d.ts.map +1 -1
  122. package/esri-compat/feature-filter.js +49 -0
  123. package/esri-compat/geojson-layer.d.ts +4 -2
  124. package/esri-compat/geojson-layer.d.ts.map +1 -1
  125. package/esri-compat/geojson-layer.js +4 -2
  126. package/esri-compat/identity-manager.js +2 -2
  127. package/esri-compat/imagery-layer.d.ts +2 -1
  128. package/esri-compat/imagery-layer.d.ts.map +1 -1
  129. package/esri-compat/imagery-layer.js +2 -1
  130. package/esri-compat/layer-list.d.ts +8 -1
  131. package/esri-compat/layer-list.d.ts.map +1 -1
  132. package/esri-compat/layer-list.js +11 -4
  133. package/esri-compat/legend.d.ts.map +1 -1
  134. package/esri-compat/legend.js +1 -1
  135. package/esri-compat/locator.d.ts +297 -0
  136. package/esri-compat/locator.d.ts.map +1 -0
  137. package/esri-compat/locator.js +579 -0
  138. package/esri-compat/map-image-layer.d.ts.map +1 -1
  139. package/esri-compat/map-view.d.ts.map +1 -1
  140. package/esri-compat/map-view.js +1 -1
  141. package/esri-compat/scene-view.d.ts.map +1 -1
  142. package/esri-compat/time-slider.d.ts +29 -0
  143. package/esri-compat/time-slider.d.ts.map +1 -1
  144. package/esri-compat/time-slider.js +117 -0
  145. package/esri-compat/wfs-layer.d.ts +2 -1
  146. package/esri-compat/wfs-layer.d.ts.map +1 -1
  147. package/esri-compat/wfs-layer.js +2 -1
  148. package/esri-compat/widget-host.d.ts +42 -6
  149. package/esri-compat/widget-host.d.ts.map +1 -1
  150. package/esri-compat/widget-host.js +99 -10
  151. package/generated-app/projection.d.ts.map +1 -1
  152. package/generated-app/runtime.d.ts.map +1 -1
  153. package/interactions/declarative-contract.d.ts +149 -0
  154. package/interactions/declarative-contract.d.ts.map +1 -0
  155. package/interactions/declarative-contract.js +293 -0
  156. package/interactions/declarative.d.ts +198 -0
  157. package/interactions/declarative.d.ts.map +1 -0
  158. package/interactions/declarative.js +470 -0
  159. package/interactions/feature-state.d.ts +7 -0
  160. package/interactions/feature-state.d.ts.map +1 -1
  161. package/interactions/feature-state.js +10 -2
  162. package/map/data-to-map-bridge.d.ts +1 -1
  163. package/map/data-to-map-bridge.d.ts.map +1 -1
  164. package/map/data-to-map-bridge.js +1 -2
  165. package/map/honua-map.d.ts.map +1 -1
  166. package/map/honua-map.js +1 -1
  167. package/map/index.d.ts +2 -0
  168. package/map/index.d.ts.map +1 -1
  169. package/map/index.js +2 -0
  170. package/map/maplibre-target.js +1 -1
  171. package/map/realtime-reconciliation-adapter.d.ts +98 -0
  172. package/map/realtime-reconciliation-adapter.d.ts.map +1 -0
  173. package/map/realtime-reconciliation-adapter.js +84 -0
  174. package/map/temporal-playback.d.ts +25 -0
  175. package/map/temporal-playback.d.ts.map +1 -1
  176. package/map/temporal-playback.js +29 -1
  177. package/operator/workspace/workspace.d.ts.map +1 -1
  178. package/operator/workspace/workspace.js +0 -2
  179. package/package.json +4 -3
  180. package/query-planner/canonical-filter.d.ts +30 -0
  181. package/query-planner/canonical-filter.d.ts.map +1 -0
  182. package/query-planner/canonical-filter.js +30 -0
  183. package/query-planner/columnar-plan.d.ts +63 -0
  184. package/query-planner/columnar-plan.d.ts.map +1 -0
  185. package/query-planner/columnar-plan.js +94 -0
  186. package/query-planner/diagnostics.d.ts +3 -3
  187. package/query-planner/diagnostics.d.ts.map +1 -1
  188. package/query-planner/diagnostics.js +17 -4
  189. package/query-planner/duckdb.d.ts.map +1 -1
  190. package/query-planner/duckdb.js +16 -2
  191. package/query-planner/execution-context.d.ts.map +1 -1
  192. package/query-planner/execution-context.js +3 -1
  193. package/query-planner/executor.d.ts.map +1 -1
  194. package/query-planner/executor.js +7 -1
  195. package/query-planner/geoservices.d.ts.map +1 -1
  196. package/query-planner/geoservices.js +24 -5
  197. package/query-planner/grpc.d.ts.map +1 -1
  198. package/query-planner/grpc.js +29 -5
  199. package/query-planner/index.d.ts +20 -5
  200. package/query-planner/index.d.ts.map +1 -1
  201. package/query-planner/index.js +16 -3
  202. package/query-planner/ir.d.ts +6 -1
  203. package/query-planner/ir.d.ts.map +1 -1
  204. package/query-planner/ir.js +63 -1
  205. package/query-planner/odata-protocol-module.d.ts +54 -0
  206. package/query-planner/odata-protocol-module.d.ts.map +1 -0
  207. package/query-planner/odata-protocol-module.js +199 -0
  208. package/query-planner/odata-v1.d.ts +23 -0
  209. package/query-planner/odata-v1.d.ts.map +1 -0
  210. package/query-planner/odata-v1.js +202 -0
  211. package/query-planner/odata.d.ts +0 -3
  212. package/query-planner/odata.d.ts.map +1 -1
  213. package/query-planner/odata.js +0 -143
  214. package/query-planner/ogc-features.d.ts.map +1 -1
  215. package/query-planner/ogc-features.js +23 -1
  216. package/query-planner/planner.d.ts +2 -2
  217. package/query-planner/planner.d.ts.map +1 -1
  218. package/query-planner/planner.js +146 -27
  219. package/query-planner/representation.d.ts +59 -0
  220. package/query-planner/representation.d.ts.map +1 -0
  221. package/query-planner/representation.js +140 -0
  222. package/query-planner/types.d.ts +153 -3
  223. package/query-planner/types.d.ts.map +1 -1
  224. package/query-planner/wfs-protocol-module.d.ts +57 -0
  225. package/query-planner/wfs-protocol-module.d.ts.map +1 -0
  226. package/query-planner/wfs-protocol-module.js +731 -0
  227. package/query-planner/wfs-v1.d.ts +41 -0
  228. package/query-planner/wfs-v1.d.ts.map +1 -0
  229. package/query-planner/wfs-v1.js +366 -0
  230. package/query-planner/wfs.d.ts +1 -3
  231. package/query-planner/wfs.d.ts.map +1 -1
  232. package/query-planner/wfs.js +1 -70
  233. package/realtime/checkpoint-store.d.ts +206 -0
  234. package/realtime/checkpoint-store.d.ts.map +1 -0
  235. package/realtime/checkpoint-store.js +504 -0
  236. package/realtime/honua-server.d.ts +8 -0
  237. package/realtime/honua-server.d.ts.map +1 -1
  238. package/realtime/honua-server.js +123 -14
  239. package/realtime/index.d.ts +4 -0
  240. package/realtime/index.d.ts.map +1 -1
  241. package/realtime/index.js +2 -0
  242. package/realtime/reconciliation.d.ts +245 -0
  243. package/realtime/reconciliation.d.ts.map +1 -0
  244. package/realtime/reconciliation.js +377 -0
  245. package/realtime/resumable-transport.d.ts.map +1 -1
  246. package/realtime/sse.d.ts.map +1 -1
  247. package/realtime/sse.js +7 -1
  248. package/realtime/websocket.d.ts.map +1 -1
  249. package/realtime/wire.d.ts +2 -1
  250. package/realtime/wire.d.ts.map +1 -1
  251. package/realtime/wire.js +24 -8
  252. package/replica-sync/errors.d.ts +19 -1
  253. package/replica-sync/errors.d.ts.map +1 -1
  254. package/replica-sync/errors.js +16 -0
  255. package/replica-sync/geoservices.d.ts +260 -0
  256. package/replica-sync/geoservices.d.ts.map +1 -0
  257. package/replica-sync/geoservices.js +1093 -0
  258. package/replica-sync/index.d.ts +5 -1
  259. package/replica-sync/index.d.ts.map +1 -1
  260. package/replica-sync/index.js +3 -1
  261. package/replica-sync/transport-conformance.d.ts +58 -0
  262. package/replica-sync/transport-conformance.d.ts.map +1 -0
  263. package/replica-sync/transport-conformance.js +265 -0
  264. package/replica-sync/types.d.ts +22 -0
  265. package/replica-sync/types.d.ts.map +1 -1
  266. package/runtime/index.d.ts +6 -2
  267. package/runtime/index.d.ts.map +1 -1
  268. package/runtime/index.js +3 -1
  269. package/runtime/load-package.d.ts +24 -0
  270. package/runtime/load-package.d.ts.map +1 -1
  271. package/runtime/load-package.js +45 -1
  272. package/runtime/maplibre-renderer.d.ts +11 -0
  273. package/runtime/maplibre-renderer.d.ts.map +1 -1
  274. package/runtime/maplibre-renderer.js +32 -7
  275. package/runtime/offline-region-protocol.d.ts +73 -0
  276. package/runtime/offline-region-protocol.d.ts.map +1 -0
  277. package/runtime/offline-region-protocol.js +63 -0
  278. package/runtime/offline-region-style.d.ts +78 -0
  279. package/runtime/offline-region-style.d.ts.map +1 -0
  280. package/runtime/offline-region-style.js +147 -0
  281. package/runtime/pmtiles-protocol.d.ts +7 -8
  282. package/runtime/pmtiles-protocol.d.ts.map +1 -1
  283. package/runtime/pmtiles-protocol.js +19 -66
  284. package/runtime/protocol-registry.d.ts +55 -0
  285. package/runtime/protocol-registry.d.ts.map +1 -0
  286. package/runtime/protocol-registry.js +103 -0
  287. package/runtime/runtime.d.ts +2 -0
  288. package/runtime/runtime.d.ts.map +1 -1
  289. package/runtime/runtime.js +6 -1
  290. package/runtime/style-compose.d.ts.map +1 -1
  291. package/runtime/style-compose.js +78 -9
  292. package/scene-workspace/analysis-widgets.d.ts +4 -2
  293. package/scene-workspace/analysis-widgets.d.ts.map +1 -1
  294. package/scene-workspace/analysis-widgets.js +4 -2
  295. package/scene-workspace/camera-correspondence.d.ts +151 -0
  296. package/scene-workspace/camera-correspondence.d.ts.map +1 -0
  297. package/scene-workspace/camera-correspondence.js +220 -0
  298. package/scene-workspace/cesium-adapter.d.ts +230 -29
  299. package/scene-workspace/cesium-adapter.d.ts.map +1 -1
  300. package/scene-workspace/cesium-adapter.js +741 -56
  301. package/scene-workspace/cesium-mount.d.ts +205 -0
  302. package/scene-workspace/cesium-mount.d.ts.map +1 -0
  303. package/scene-workspace/cesium-mount.js +392 -0
  304. package/scene-workspace/cesium-scene-owner.d.ts +160 -0
  305. package/scene-workspace/cesium-scene-owner.d.ts.map +1 -0
  306. package/scene-workspace/cesium-scene-owner.js +205 -0
  307. package/scene-workspace/cesium-state-sync.d.ts +101 -0
  308. package/scene-workspace/cesium-state-sync.d.ts.map +1 -0
  309. package/scene-workspace/cesium-state-sync.js +432 -0
  310. package/scene-workspace/cesium-time.d.ts +346 -0
  311. package/scene-workspace/cesium-time.d.ts.map +1 -0
  312. package/scene-workspace/cesium-time.js +403 -0
  313. package/scene-workspace/index.d.ts +42 -10
  314. package/scene-workspace/index.d.ts.map +1 -1
  315. package/scene-workspace/index.js +32 -7
  316. package/scene-workspace/maplibre-state-sync.d.ts +112 -0
  317. package/scene-workspace/maplibre-state-sync.d.ts.map +1 -0
  318. package/scene-workspace/maplibre-state-sync.js +400 -0
  319. package/scene-workspace/primitives.d.ts +237 -3
  320. package/scene-workspace/primitives.d.ts.map +1 -1
  321. package/scene-workspace/primitives.js +1087 -17
  322. package/scene-workspace/scene-discovery.d.ts +5 -2
  323. package/scene-workspace/scene-discovery.d.ts.map +1 -1
  324. package/scene-workspace/scene-discovery.js +5 -2
  325. package/scene-workspace/scene-view.d.ts +5 -2
  326. package/scene-workspace/scene-view.d.ts.map +1 -1
  327. package/scene-workspace/scene-view.js +5 -2
  328. package/scene-workspace/source-to-cesium.d.ts +141 -8
  329. package/scene-workspace/source-to-cesium.d.ts.map +1 -1
  330. package/scene-workspace/source-to-cesium.js +497 -72
  331. package/scene-workspace/state-sync-port-kit.d.ts +156 -0
  332. package/scene-workspace/state-sync-port-kit.d.ts.map +1 -0
  333. package/scene-workspace/state-sync-port-kit.js +319 -0
  334. package/scene-workspace/state-sync.d.ts +34 -1
  335. package/scene-workspace/state-sync.d.ts.map +1 -1
  336. package/scene-workspace/state-sync.js +48 -0
  337. package/scene-workspace/types.d.ts +8 -0
  338. package/scene-workspace/types.d.ts.map +1 -1
  339. package/scene-workspace/types.js +2 -0
  340. package/scene-workspace/workspace.d.ts +12 -1
  341. package/scene-workspace/workspace.d.ts.map +1 -1
  342. package/scene-workspace/workspace.js +13 -0
  343. package/studio/index.d.ts +24 -7
  344. package/studio/index.d.ts.map +1 -1
  345. package/studio/index.js +21 -7
  346. package/studio/lifecycle-client.d.ts +164 -0
  347. package/studio/lifecycle-client.d.ts.map +1 -0
  348. package/studio/lifecycle-client.js +299 -0
  349. package/studio/lifecycle-errors.d.ts +91 -0
  350. package/studio/lifecycle-errors.d.ts.map +1 -0
  351. package/studio/lifecycle-errors.js +77 -0
  352. package/studio/lifecycle-types.d.ts +321 -0
  353. package/studio/lifecycle-types.d.ts.map +1 -0
  354. package/studio/lifecycle-types.js +22 -0
  355. package/web-components/controller.d.ts.map +1 -1
  356. package/web-components/csp-styles.d.ts +6 -0
  357. package/web-components/csp-styles.d.ts.map +1 -0
  358. package/web-components/csp-styles.js +53 -0
  359. package/web-components/elements.d.ts +158 -2
  360. package/web-components/elements.d.ts.map +1 -1
  361. package/web-components/elements.js +1302 -215
  362. package/web-components/export-redaction.d.ts +252 -0
  363. package/web-components/export-redaction.d.ts.map +1 -0
  364. package/web-components/export-redaction.js +588 -0
  365. package/web-components/export.d.ts +417 -0
  366. package/web-components/export.d.ts.map +1 -0
  367. package/web-components/export.js +719 -0
  368. package/web-components/feature-editor-model.d.ts +265 -0
  369. package/web-components/feature-editor-model.d.ts.map +1 -0
  370. package/web-components/feature-editor-model.js +438 -0
  371. package/web-components/feature-editor-sketch.d.ts +125 -0
  372. package/web-components/feature-editor-sketch.d.ts.map +1 -0
  373. package/web-components/feature-editor-sketch.js +194 -0
  374. package/web-components/feature-editor-workflow.d.ts +286 -0
  375. package/web-components/feature-editor-workflow.d.ts.map +1 -0
  376. package/web-components/feature-editor-workflow.js +889 -0
  377. package/web-components/feature-editor.d.ts +83 -0
  378. package/web-components/feature-editor.d.ts.map +1 -0
  379. package/web-components/feature-editor.js +829 -0
  380. package/web-components/feature-table-engine.d.ts +465 -0
  381. package/web-components/feature-table-engine.d.ts.map +1 -0
  382. package/web-components/feature-table-engine.js +1360 -0
  383. package/web-components/feature-table-view.d.ts +95 -0
  384. package/web-components/feature-table-view.d.ts.map +1 -0
  385. package/web-components/feature-table-view.js +343 -0
  386. package/web-components/index.d.ts +34 -3
  387. package/web-components/index.d.ts.map +1 -1
  388. package/web-components/index.js +35 -2
  389. package/web-components/maplibre-renderer.d.ts.map +1 -1
  390. package/web-components/maplibre-renderer.js +13 -4
  391. package/web-components/measurement.d.ts +3 -1
  392. package/web-components/measurement.d.ts.map +1 -1
  393. package/web-components/measurement.js +62 -18
  394. package/web-components/time-slider.d.ts +122 -0
  395. package/web-components/time-slider.d.ts.map +1 -0
  396. package/web-components/time-slider.js +740 -0
  397. package/web-components/types.d.ts +310 -0
  398. package/web-components/types.d.ts.map +1 -1
  399. package/webmap/convert-label.js +0 -1
  400. package/webmap/convert-symbol.d.ts.map +1 -1
@@ -9,10 +9,10 @@
9
9
  * equivalent minimal
10
10
  * seam for a `Source.protocol(...)` escape-hatch adapter: discovery, the
11
11
  * capability set it advertises for a descriptor, diagnostics, and
12
- * disposal. `compile`/`execute` are intentionally absent from this first
13
- * bounded slice — no first-party module has migrated its query-compiler
14
- * pipeline onto the seam yet (see `docs/plugin-manifest-certification.md`
15
- * for the tracked follow-up).
12
+ * disposal. Query-capable modules implement the atomic
13
+ * {@link QueryCapableProtocolModule} extension, whose deterministic `compile`
14
+ * and explicitly-authorized `execute` hooks are always present together.
15
+ * Tiles-only modules such as PMTiles implement only this base interface.
16
16
  *
17
17
  * This module has no dependency on `src/plugin` or any global registry: a
18
18
  * `ProtocolModule` is a plain value object. SDK-internal `Source`
@@ -24,7 +24,7 @@
24
24
  *
25
25
  * @module
26
26
  */
27
- import type { Capabilities, SourceDescriptor } from "./types.js";
27
+ import type { Capabilities, Protocol, Result, SourceDescriptor } from "./types.js";
28
28
  /** Runtime environments a protocol module can execute in. Mirrors `RendererEnvironment`. */
29
29
  export type ProtocolModuleEnvironment = "browser" | "node" | "worker";
30
30
  /** Stable, protocol-neutral diagnostic exposed by one discovered module handle. */
@@ -35,6 +35,49 @@ export interface ProtocolModuleDiagnostic {
35
35
  }
36
36
  export interface ProtocolModuleDiscoverOptions {
37
37
  readonly signal?: AbortSignal;
38
+ /**
39
+ * Stable structural authorization-scope identifiers bound to this handle.
40
+ * Tokens and credential values are prohibited; implementations retain only
41
+ * a secret-free derived identity.
42
+ */
43
+ readonly authorizationScope?: readonly string[];
44
+ }
45
+ /** Canonical query-family operations a protocol module may compile and execute. */
46
+ export type ProtocolModuleQueryOperation = "query" | "queryAll" | "queryAggregate";
47
+ /**
48
+ * Type binding for one module's query seam.
49
+ *
50
+ * The compiler source identity is deliberately separate from
51
+ * {@link SourceDescriptor}: deterministic compilers receive a
52
+ * credential-free, serializable identity rather than a runtime descriptor
53
+ * or client. The execution query may carry runtime-only values such as an
54
+ * `AbortSignal`; those values never enter the compiled artifact.
55
+ */
56
+ export interface ProtocolModuleQueryBinding {
57
+ readonly source: unknown;
58
+ readonly compileQuery: unknown;
59
+ readonly compiled: unknown;
60
+ readonly executeQuery: unknown;
61
+ }
62
+ /** Pure input to a protocol module's deterministic compiler. */
63
+ export interface ProtocolModuleQueryCompileInput<TSource = unknown, TQuery = unknown> {
64
+ readonly source: TSource;
65
+ readonly query: TQuery;
66
+ readonly operation: ProtocolModuleQueryOperation;
67
+ }
68
+ /**
69
+ * Runtime input to a protocol module executor.
70
+ *
71
+ * `compiled` is the inspectable, credential-free artifact. Runtime authority
72
+ * stays on the discovered handle and on dependencies explicitly injected into
73
+ * the module factory. `signal` is execution state and is never part of the
74
+ * artifact's deterministic identity.
75
+ */
76
+ export interface ProtocolModuleQueryExecuteInput<TCompiled = unknown, TQuery = unknown> {
77
+ readonly compiled: TCompiled;
78
+ readonly query: TQuery;
79
+ readonly operation: ProtocolModuleQueryOperation;
80
+ readonly signal?: AbortSignal;
38
81
  }
39
82
  /**
40
83
  * One discovered, disposable protocol-module handle bound to a source
@@ -42,9 +85,14 @@ export interface ProtocolModuleDiscoverOptions {
42
85
  * returned by `Source.protocol(name)` (for example a `HonuaPmtilesArchive`),
43
86
  * so migrating a built-in onto this seam never changes what callers observe
44
87
  * through the existing escape hatch.
88
+ *
89
+ * `TProtocol` mirrors the descriptor kind a `ProtocolModule<TKind>` accepts
90
+ * (built-in `Protocol` by default, or `TKind | Protocol` when parameterized
91
+ * by `discover()` below) so a handle for a custom-kind descriptor carries
92
+ * that kind through rather than widening to `string`.
45
93
  */
46
- export interface ProtocolModuleHandle<TAdapter = unknown> {
47
- readonly descriptor: SourceDescriptor;
94
+ export interface ProtocolModuleHandle<TAdapter = unknown, TProtocol extends string = Protocol> {
95
+ readonly descriptor: SourceDescriptor<TProtocol>;
48
96
  readonly capabilities: Capabilities;
49
97
  readonly adapter: TAdapter;
50
98
  readonly diagnostics: readonly ProtocolModuleDiagnostic[];
@@ -58,13 +106,40 @@ export interface ProtocolModuleHandle<TAdapter = unknown> {
58
106
  * (as PMTiles does — the archive itself is opened lazily on first
59
107
  * `describe()`), or asynchronously for a module whose discovery is
60
108
  * inherently a network round trip.
109
+ *
110
+ * `capabilities()`/`discover()` accept `SourceDescriptor<TKind | Protocol>`
111
+ * — the built-in `Protocol` union plus this module's own `TKind` — so a
112
+ * third-party module with a custom protocol id (e.g. the cloud-tiles fixture's
113
+ * `"cloud-tiles"`, `test/fixtures/plugins/cloud-tiles/protocol-module.ts`)
114
+ * can pass a descriptor typed to its own kind without an `as` cast, matching
115
+ * how `pmtilesProtocolModule()` (`src/contract/pmtiles.ts`) already accepts
116
+ * `SourceDescriptor<"pmtiles" | Protocol>`, i.e. `SourceDescriptor` (issue
117
+ * #671).
61
118
  */
62
119
  export interface ProtocolModule<TKind extends string = string, TAdapter = unknown> {
63
120
  readonly kind: TKind;
64
121
  readonly environments: readonly ProtocolModuleEnvironment[];
65
122
  readonly peer?: unknown;
66
123
  /** Pure and synchronous: never performs I/O. */
67
- capabilities(descriptor: SourceDescriptor): Capabilities;
68
- discover(descriptor: SourceDescriptor, options?: ProtocolModuleDiscoverOptions): ProtocolModuleHandle<TAdapter> | Promise<ProtocolModuleHandle<TAdapter>>;
124
+ capabilities(descriptor: SourceDescriptor<TKind | Protocol>): Capabilities;
125
+ discover(descriptor: SourceDescriptor<TKind | Protocol>, options?: ProtocolModuleDiscoverOptions): ProtocolModuleHandle<TAdapter, TKind | Protocol> | Promise<ProtocolModuleHandle<TAdapter, TKind | Protocol>>;
126
+ }
127
+ /**
128
+ * Atomic query-capable extension of {@link ProtocolModule}.
129
+ *
130
+ * A module either implements this interface and therefore provides both
131
+ * hooks, or implements the discovery-only base interface and provides
132
+ * neither. Keeping the pair in a separate required interface prevents
133
+ * partially executable modules from satisfying the public contract.
134
+ */
135
+ export interface QueryCapableProtocolModule<TKind extends string = string, TAdapter = unknown, TQueryBinding extends ProtocolModuleQueryBinding = ProtocolModuleQueryBinding> extends ProtocolModule<TKind, TAdapter> {
136
+ /** Deterministic, synchronous, and I/O-free query compiler. */
137
+ compile(input: ProtocolModuleQueryCompileInput<TQueryBinding["source"], TQueryBinding["compileQuery"]>): TQueryBinding["compiled"];
138
+ /**
139
+ * Explicitly-authorized executor paired with {@link compile}.
140
+ * Implementations execute only against the supplied discovered handle and
141
+ * must not consult or mutate an ambient registry.
142
+ */
143
+ execute<TRecord = Record<string, unknown>>(handle: ProtocolModuleHandle<TAdapter, TKind | Protocol>, input: ProtocolModuleQueryExecuteInput<TQueryBinding["compiled"], TQueryBinding["executeQuery"]>): Promise<Result<TRecord>>;
69
144
  }
70
145
  //# sourceMappingURL=protocol-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-module.d.ts","sourceRoot":"","sources":["../../../src/contract/protocol-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtE,mFAAmF;AACnF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ,GAAG,OAAO;IACtD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC1D,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO;IAC/E,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,YAAY,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,YAAY,CAAC,UAAU,EAAE,gBAAgB,GAAG,YAAY,CAAC;IACzD,QAAQ,CACN,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,6BAA6B,GACtC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC7E"}
1
+ {"version":3,"file":"protocol-module.d.ts","sourceRoot":"","sources":["../../../src/contract/protocol-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * FES 2.0 lowering for the canonical typed filter.
3
+ *
4
+ * Split out of `query-filter.ts` so only WFS consumers pay for the FES/GML
5
+ * emitter: the GeoParquet, GeoServices, CQL2, and OData lowerings never reach
6
+ * this module's import graph.
7
+ *
8
+ * @module
9
+ */
10
+ import { type FesNode } from "../core/wfs-filter.js";
11
+ import { type QueryFilterContext, type QueryFilterExpression } from "./query-filter.js";
12
+ /**
13
+ * Compile to the FES 2.0 AST the WFS adapter serializes. Spatial predicates
14
+ * name the feature type's geometry property, which the caller resolves (it is
15
+ * server-specific) and passes through `ctx.geometryProperty`.
16
+ */
17
+ export declare function compileQueryFilterToFes(filter: QueryFilterExpression, ctx: QueryFilterContext): FesNode;
18
+ //# sourceMappingURL=query-filter-fes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filter-fes.d.ts","sourceRoot":"","sources":["../../../src/contract/query-filter-fes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAmB,KAAK,OAAO,EAAyC,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAM3B,MAAM,mBAAmB,CAAC;AAkB3B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CA0EvG"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * FES 2.0 lowering for the canonical typed filter.
3
+ *
4
+ * Split out of `query-filter.ts` so only WFS consumers pay for the FES/GML
5
+ * emitter: the GeoParquet, GeoServices, CQL2, and OData lowerings never reach
6
+ * this module's import graph.
7
+ *
8
+ * @module
9
+ */
10
+ import { UNSUPPORTED_FES, compileSpatialFilter } from "../core/wfs-filter.js";
11
+ import { GEOSERVICES_SPATIAL_REL, assertQueryFilter, refuseQueryFilterConstruct, } from "./query-filter.js";
12
+ const FES_COMPARISON = {
13
+ eq: "=",
14
+ ne: "<>",
15
+ lt: "<",
16
+ lte: "<=",
17
+ gt: ">",
18
+ gte: ">=",
19
+ };
20
+ const FES_TEMPORAL = {
21
+ before: "Before",
22
+ after: "After",
23
+ during: "During",
24
+ "time-intersects": "AnyInteracts",
25
+ };
26
+ /**
27
+ * Compile to the FES 2.0 AST the WFS adapter serializes. Spatial predicates
28
+ * name the feature type's geometry property, which the caller resolves (it is
29
+ * server-specific) and passes through `ctx.geometryProperty`.
30
+ */
31
+ export function compileQueryFilterToFes(filter, ctx) {
32
+ assertQueryFilter(filter, ctx);
33
+ const emit = (node) => {
34
+ switch (node.kind) {
35
+ case "comparison": {
36
+ if (node.right.value === null) {
37
+ const isNull = { kind: "isNull", property: node.left.name };
38
+ if (node.operator === "eq")
39
+ return isNull;
40
+ if (node.operator === "ne")
41
+ return { kind: "not", operand: isNull };
42
+ return refuseQueryFilterConstruct(`filter.comparison.${node.operator}.null`, ctx);
43
+ }
44
+ return {
45
+ kind: "compare",
46
+ op: FES_COMPARISON[node.operator],
47
+ property: node.left.name,
48
+ value: fesLiteral(node.right, ctx),
49
+ };
50
+ }
51
+ case "list":
52
+ return {
53
+ kind: "in",
54
+ property: node.operand.name,
55
+ values: node.values.map((value) => fesLiteral(value, ctx)),
56
+ };
57
+ case "range":
58
+ return {
59
+ kind: "between",
60
+ property: node.operand.name,
61
+ lower: fesLiteral(node.lower, ctx),
62
+ upper: fesLiteral(node.upper, ctx),
63
+ };
64
+ case "null": {
65
+ const isNull = { kind: "isNull", property: node.operand.name };
66
+ return node.operator === "is-null" ? isNull : { kind: "not", operand: isNull };
67
+ }
68
+ case "pattern":
69
+ if (node.caseSensitive === false)
70
+ refuseQueryFilterConstruct("filter.pattern.case-insensitive", ctx);
71
+ return { kind: "like", property: node.operand.name, pattern: node.pattern };
72
+ case "spatial": {
73
+ const property = node.property ?? ctx.geometryProperty;
74
+ if (property === undefined)
75
+ refuseQueryFilterConstruct("filter.spatial.geometry-property", ctx);
76
+ const compiled = compileSpatialFilter({
77
+ geometry: node.geometry.geometry,
78
+ geometryType: node.geometry.geometryType,
79
+ spatialRel: fesSpatialRel(node.operator, ctx),
80
+ }, { geometryProperty: property });
81
+ if (compiled === UNSUPPORTED_FES)
82
+ refuseQueryFilterConstruct(`filter.spatial.${node.operator}`, ctx);
83
+ return compiled;
84
+ }
85
+ case "temporal": {
86
+ const value = node.value;
87
+ const time = value.valueType === "instant" ? { instant: value.value } : { start: value.value[0], end: value.value[1] };
88
+ return {
89
+ kind: "temporal",
90
+ op: FES_TEMPORAL[node.operator],
91
+ property: node.operand.name,
92
+ time,
93
+ };
94
+ }
95
+ case "boolean":
96
+ return node.operator === "and"
97
+ ? { kind: "and", operands: node.args.map(emit) }
98
+ : { kind: "or", operands: node.args.map(emit) };
99
+ case "not":
100
+ return { kind: "not", operand: emit(node.arg) };
101
+ default:
102
+ return refuseQueryFilterConstruct("filter.node", ctx);
103
+ }
104
+ };
105
+ return emit(filter);
106
+ }
107
+ function fesSpatialRel(operator, ctx) {
108
+ const rel = GEOSERVICES_SPATIAL_REL[operator];
109
+ if (!rel)
110
+ refuseQueryFilterConstruct(`filter.spatial.${operator}`, ctx);
111
+ return rel;
112
+ }
113
+ function fesLiteral(node, ctx) {
114
+ const value = node.value;
115
+ if (typeof value === "number")
116
+ return { kind: "number", value };
117
+ if (typeof value === "string")
118
+ return { kind: "string", value };
119
+ if (typeof value === "boolean")
120
+ return { kind: "string", value: value ? "true" : "false" };
121
+ return refuseQueryFilterConstruct("filter.literal.null", ctx);
122
+ }
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Canonical typed query filter — the protocol-neutral semantic filter AST that
3
+ * `Source.query()` accepts on the stable surface, plus the per-protocol
4
+ * compilers that lower it onto each wire dialect.
5
+ *
6
+ * The AST mirrors the experimental `/query-planner` semantic filter (comparison,
7
+ * list, range, null, pattern, spatial, temporal, boolean composition) with two
8
+ * deliberate contract-layer differences:
9
+ *
10
+ * - Spatial predicates carry the same canonical geometry value the rest of the
11
+ * contract uses (`SpatialFilter`-shaped `geometry` + `geometryType`, produced
12
+ * by `envelope()` / `point()` / `polygon()`), so a filter composes with
13
+ * `Query.spatialFilter` without a second geometry vocabulary.
14
+ * - Compilation is schema-free. The planner's semantic compilers verify a
15
+ * `SourceSchemaV2` before emitting; the canonical surface has no verified
16
+ * schema at query time, so literals are typed by the value the caller wrote.
17
+ *
18
+ * Every compiler in this module fails closed: a construct the target protocol
19
+ * cannot express exactly throws `HonuaCapabilityNotSupportedError` naming the
20
+ * construct and the protocol. Nothing is silently dropped and nothing is
21
+ * silently widened; a widening that is genuinely safe (the GeoParquet bbox
22
+ * reduction) is reported through `Result.degraded` by its adapter.
23
+ *
24
+ * @module
25
+ */
26
+ import type { SpatialFilter } from "../core/spatial-filter.js";
27
+ import type { EsriGeometryType, EsriSpatialRel } from "../core/types.js";
28
+ /** Literal values a canonical filter may compare against. */
29
+ export type QueryFilterScalar = string | number | boolean | null;
30
+ /** Reference to a source field (attribute, geometry, or temporal column). */
31
+ export interface QueryFilterPropertyNode {
32
+ readonly kind: "property";
33
+ readonly name: string;
34
+ }
35
+ /** Scalar literal operand. */
36
+ export interface QueryFilterLiteralNode {
37
+ readonly kind: "literal";
38
+ readonly value: QueryFilterScalar;
39
+ }
40
+ export type QueryFilterComparisonOperator = "eq" | "ne" | "lt" | "lte" | "gt" | "gte";
41
+ export interface QueryFilterComparisonNode {
42
+ readonly kind: "comparison";
43
+ readonly operator: QueryFilterComparisonOperator;
44
+ readonly left: QueryFilterPropertyNode;
45
+ readonly right: QueryFilterLiteralNode;
46
+ }
47
+ export interface QueryFilterListNode {
48
+ readonly kind: "list";
49
+ readonly operator: "in";
50
+ readonly operand: QueryFilterPropertyNode;
51
+ readonly values: readonly QueryFilterLiteralNode[];
52
+ }
53
+ export interface QueryFilterRangeNode {
54
+ readonly kind: "range";
55
+ readonly operator: "between";
56
+ readonly operand: QueryFilterPropertyNode;
57
+ readonly lower: QueryFilterLiteralNode;
58
+ readonly upper: QueryFilterLiteralNode;
59
+ }
60
+ export interface QueryFilterNullNode {
61
+ readonly kind: "null";
62
+ readonly operator: "is-null" | "is-not-null";
63
+ readonly operand: QueryFilterPropertyNode;
64
+ }
65
+ export interface QueryFilterPatternNode {
66
+ readonly kind: "pattern";
67
+ readonly operator: "like";
68
+ readonly operand: QueryFilterPropertyNode;
69
+ /** SQL-style pattern using `%` (any run) and `_` (single character). */
70
+ readonly pattern: string;
71
+ /** Defaults to `true`. `false` requests a case-insensitive match. */
72
+ readonly caseSensitive?: boolean;
73
+ }
74
+ /** Protocol-neutral spatial predicates. */
75
+ export type QueryFilterSpatialPredicate = "intersects" | "contains" | "within" | "crosses" | "touches" | "overlaps" | "bbox-intersects";
76
+ /** Canonical geometry operand: the value the spatial-filter builders emit. */
77
+ export interface QueryFilterGeometryOperand {
78
+ readonly geometry: Record<string, unknown>;
79
+ readonly geometryType: EsriGeometryType;
80
+ }
81
+ export interface QueryFilterSpatialNode {
82
+ readonly kind: "spatial";
83
+ readonly operator: QueryFilterSpatialPredicate;
84
+ readonly geometry: QueryFilterGeometryOperand;
85
+ /**
86
+ * Geometry property to test. Optional for sources with a single primary
87
+ * geometry (GeoServices, OGC, GeoParquet); the WFS / OData compilers resolve
88
+ * it from the adapter when omitted.
89
+ */
90
+ readonly property?: string;
91
+ }
92
+ export type QueryFilterTemporalPredicate = "before" | "after" | "during" | "time-intersects";
93
+ /** RFC 3339 instant, or an inclusive `[start, end]` interval of instants. */
94
+ export type QueryFilterTemporalLiteralNode = {
95
+ readonly kind: "temporal-literal";
96
+ readonly valueType: "instant";
97
+ readonly value: string;
98
+ } | {
99
+ readonly kind: "temporal-literal";
100
+ readonly valueType: "interval";
101
+ readonly value: readonly [string, string];
102
+ };
103
+ export interface QueryFilterTemporalNode {
104
+ readonly kind: "temporal";
105
+ readonly operator: QueryFilterTemporalPredicate;
106
+ readonly operand: QueryFilterPropertyNode;
107
+ readonly value: QueryFilterTemporalLiteralNode;
108
+ }
109
+ export interface QueryFilterBooleanNode {
110
+ readonly kind: "boolean";
111
+ readonly operator: "and" | "or";
112
+ readonly args: readonly QueryFilterExpression[];
113
+ }
114
+ export interface QueryFilterNotNode {
115
+ readonly kind: "not";
116
+ readonly arg: QueryFilterExpression;
117
+ }
118
+ /** The canonical typed filter accepted by `Query.filter`. */
119
+ export type QueryFilterExpression = QueryFilterComparisonNode | QueryFilterListNode | QueryFilterRangeNode | QueryFilterNullNode | QueryFilterPatternNode | QueryFilterSpatialNode | QueryFilterTemporalNode | QueryFilterBooleanNode | QueryFilterNotNode;
120
+ /**
121
+ * Canonical temporal filter accepted by `Query.temporalFilter`.
122
+ *
123
+ * Without `field` the filter targets the source's own time dimension and
124
+ * compiles to the protocol's time parameter (GeoServices `time=`, OGC / STAC
125
+ * `datetime=`). With `field` it compiles to an explicit temporal predicate on
126
+ * that column, which is the only form OData, WFS, and DuckDB can express.
127
+ * `null` on either interval bound means "open ended".
128
+ */
129
+ export type QueryTemporalFilter = {
130
+ readonly kind: "instant";
131
+ readonly instant: string;
132
+ readonly field?: string;
133
+ } | {
134
+ readonly kind: "interval";
135
+ readonly start: string | null;
136
+ readonly end: string | null;
137
+ readonly field?: string;
138
+ };
139
+ /**
140
+ * Ergonomic constructors for {@link QueryFilterExpression}. Every helper returns
141
+ * plain data, so a filter can equally be written as an object literal, stored as
142
+ * JSON, or produced by the experimental semantic builder.
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * import { envelope, queryFilter } from "@honua/sdk-js";
147
+ *
148
+ * const filter = queryFilter.and(
149
+ * queryFilter.eq("STATUS", "open"),
150
+ * queryFilter.gt("SEVERITY", 3),
151
+ * queryFilter.spatial("intersects", envelope(-158.5, 21.2, -157.6, 21.7)),
152
+ * );
153
+ * ```
154
+ */
155
+ export declare const queryFilter: Readonly<{
156
+ eq: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
157
+ ne: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
158
+ lt: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
159
+ lte: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
160
+ gt: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
161
+ gte: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
162
+ isIn: (field: string, values: readonly QueryFilterScalar[]) => QueryFilterListNode;
163
+ between: (field: string, lower: QueryFilterScalar, upper: QueryFilterScalar) => QueryFilterRangeNode;
164
+ isNull: (field: string) => QueryFilterNullNode;
165
+ isNotNull: (field: string) => QueryFilterNullNode;
166
+ like: (field: string, pattern: string, options?: {
167
+ caseSensitive?: boolean;
168
+ }) => QueryFilterPatternNode;
169
+ spatial: (operator: QueryFilterSpatialPredicate, geometry: QueryFilterGeometryOperand, options?: {
170
+ property?: string;
171
+ }) => QueryFilterSpatialNode;
172
+ before: (field: string, instant: string) => QueryFilterTemporalNode;
173
+ after: (field: string, instant: string) => QueryFilterTemporalNode;
174
+ during: (field: string, start: string, end: string) => QueryFilterTemporalNode;
175
+ timeIntersects: (field: string, start: string, end: string) => QueryFilterTemporalNode;
176
+ and: (...args: readonly QueryFilterExpression[]) => QueryFilterBooleanNode;
177
+ or: (...args: readonly QueryFilterExpression[]) => QueryFilterBooleanNode;
178
+ not: (arg: QueryFilterExpression) => QueryFilterNotNode;
179
+ }>;
180
+ /** Structural bounds mirroring the semantic planner's parser limits. */
181
+ export declare const MAX_QUERY_FILTER_DEPTH = 32;
182
+ export declare const MAX_QUERY_FILTER_NODES = 512;
183
+ /**
184
+ * Boolean, comparison, and set operators a filter can name. Mirrors the
185
+ * `filterOperators` vocabulary of `CapabilityConstraints` so a capability
186
+ * profile's allow list can gate the canonical AST without translation.
187
+ */
188
+ export type QueryFilterOperatorId = QueryFilterComparisonOperator | "in" | "between" | "is-null" | "is-not-null" | "like" | "and" | "or" | "not" | QueryFilterSpatialPredicate | QueryFilterTemporalPredicate;
189
+ /** Compilation identity used to name a refusal. */
190
+ export interface QueryFilterContext {
191
+ /** Wire protocol the filter is being compiled for. */
192
+ readonly protocol: string;
193
+ /** Source id, when the compile is bound to one. */
194
+ readonly sourceId?: string;
195
+ /** Geometry property name, when the dialect must reference it explicitly. */
196
+ readonly geometryProperty?: string;
197
+ /**
198
+ * Operator allow list evaluated for this source. When present, an operator
199
+ * outside it is refused even if the protocol could express it — the source's
200
+ * own capability evidence is narrower than its protocol's grammar.
201
+ */
202
+ readonly supportedFilterOperators?: readonly QueryFilterOperatorId[];
203
+ /** Optional per-source predicate allow list from the capability profile. */
204
+ readonly supportedSpatialPredicates?: readonly QueryFilterSpatialPredicate[];
205
+ /** Optional per-source temporal predicate allow list from the capability profile. */
206
+ readonly supportedTemporalPredicates?: readonly QueryFilterTemporalPredicate[];
207
+ /**
208
+ * Where the allow lists came from. `capability-profile` marks a refusal as
209
+ * source-evidence-driven rather than protocol-driven, which the error context
210
+ * carries so callers can tell "this server cannot" from "this protocol
211
+ * cannot".
212
+ */
213
+ readonly constraintSource?: "capability-profile" | "protocol-default";
214
+ }
215
+ /** Fail closed, naming the construct and the protocol that cannot express it. */
216
+ export declare function refuseQueryFilterConstruct(construct: string, ctx: QueryFilterContext): never;
217
+ /**
218
+ * Narrow the evaluated `CapabilityConstraints` of one capability into the
219
+ * allow lists this compiler understands.
220
+ *
221
+ * Vocabularies that the canonical AST cannot name (distance predicates,
222
+ * extension identifiers) are dropped rather than translated, which fails closed
223
+ * by construction: a profile that advertises only constructs outside the AST
224
+ * yields an empty allow list, and every node of that kind is refused. Omitted
225
+ * constraint arrays stay `undefined` — "the evidence says nothing", not "the
226
+ * source supports nothing".
227
+ */
228
+ export declare function queryFilterConstraints(constraints: {
229
+ readonly filterOperators?: readonly string[];
230
+ readonly spatialPredicates?: readonly string[];
231
+ readonly temporalPredicates?: readonly string[];
232
+ }): Pick<QueryFilterContext, "supportedFilterOperators" | "supportedSpatialPredicates" | "supportedTemporalPredicates">;
233
+ /**
234
+ * Validate a caller-supplied filter before any dialect sees it. Rejects
235
+ * malformed nodes, unbounded nesting, and identifiers that are not plain
236
+ * source field names (the only identifiers every dialect can quote safely).
237
+ */
238
+ export declare function assertQueryFilter(filter: QueryFilterExpression, ctx: QueryFilterContext): void;
239
+ /** Validate `Query.temporalFilter` independently of the filter AST. */
240
+ export declare function assertTemporalFilter(temporal: QueryTemporalFilter, ctx: QueryFilterContext): void;
241
+ /**
242
+ * Lower a field-bound `Query.temporalFilter` into a filter node so every
243
+ * dialect compiles temporal intent through the same path. Returns `undefined`
244
+ * when the filter targets the source's own time dimension (no `field`), which
245
+ * the protocol time parameter carries instead.
246
+ */
247
+ export declare function temporalFilterToExpression(temporal: QueryTemporalFilter, ctx: QueryFilterContext): QueryFilterExpression | undefined;
248
+ /** Combine a filter and a lowered temporal predicate into one expression. */
249
+ export declare function andQueryFilters(...parts: readonly (QueryFilterExpression | undefined)[]): QueryFilterExpression | undefined;
250
+ /** GeoServices carries the spatial predicate as request params, not as SQL. */
251
+ export interface CompiledSql92Filter {
252
+ readonly where?: string;
253
+ readonly spatialFilter?: SpatialFilter;
254
+ }
255
+ /** Esri spatial relationships the canonical predicates map onto. @internal */
256
+ export declare const GEOSERVICES_SPATIAL_REL: Record<QueryFilterSpatialPredicate, EsriSpatialRel | undefined>;
257
+ /**
258
+ * Compile to the GeoServices `where` clause plus (at most one) spatial request
259
+ * parameter set. GeoServices expresses exactly one geometry per `query`
260
+ * request, and only conjunctively, so a spatial predicate nested inside `OR` /
261
+ * `NOT` or a second spatial predicate is refused rather than approximated.
262
+ */
263
+ export declare function compileQueryFilterToSql92(filter: QueryFilterExpression, ctx: QueryFilterContext): CompiledSql92Filter;
264
+ /** True when a filter references geometry anywhere in its tree. */
265
+ export declare function queryFilterHasSpatial(filter: QueryFilterExpression): boolean;
266
+ /** Emitted SQL plus whether a spatial predicate was reduced to its bbox. */
267
+ export interface CompiledDuckDbFilter {
268
+ readonly sql: string;
269
+ readonly bboxApproximated: boolean;
270
+ }
271
+ /**
272
+ * Compile to a DuckDB `WHERE` fragment. Spatial predicates are emitted through
273
+ * `emitSpatial`, which the GeoParquet driver supplies (it owns the geometry
274
+ * column, its encoding, and the bbox reduction that `Result.degraded` reports).
275
+ */
276
+ export declare function compileQueryFilterToDuckDbSql(filter: QueryFilterExpression, ctx: QueryFilterContext, emitSpatial: (node: QueryFilterSpatialNode) => {
277
+ readonly sql: string;
278
+ readonly bboxApproximated: boolean;
279
+ }): CompiledDuckDbFilter;
280
+ /**
281
+ * Compile to CQL2 text (OGC API — Features Part 3 / STAC filter extension).
282
+ * `geometryToWkt` is injected so the WKT writer stays in the OData module that
283
+ * already owns it instead of being duplicated here.
284
+ */
285
+ export declare function compileQueryFilterToCql2Text(filter: QueryFilterExpression, ctx: QueryFilterContext, geometryToWkt: (geometry: Record<string, unknown>, geometryType: string) => string): string;
286
+ /**
287
+ * Compile to an OData `$filter` expression. Spatial predicates are emitted
288
+ * through `emitSpatial` so the adapter's `$metadata`-aware geometry column and
289
+ * SRID resolution stay in one place.
290
+ */
291
+ export declare function compileQueryFilterToOData(filter: QueryFilterExpression, ctx: QueryFilterContext, emitSpatial: (node: QueryFilterSpatialNode) => string): string;
292
+ /**
293
+ * GeoServices `time=` value. Instants serialize as epoch milliseconds and
294
+ * intervals as `start,end`; an open bound serializes as `null`, which the
295
+ * FeatureServer `time` parameter defines as "unbounded on that side".
296
+ */
297
+ export declare function compileTemporalFilterToGeoServicesTime(temporal: QueryTemporalFilter, ctx: QueryFilterContext): string;
298
+ /** OGC / STAC `datetime=` value (RFC 3339 instant or `start/end` interval). */
299
+ export declare function compileTemporalFilterToOgcDatetime(temporal: QueryTemporalFilter, ctx: QueryFilterContext): string;
300
+ //# sourceMappingURL=query-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filter.d.ts","sourceRoot":"","sources":["../../../src/contract/query-filter.ts"],"names":[],"mappings":"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"}