@honua/react 0.1.14 → 0.1.15

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 (48) hide show
  1. package/contract/generated/projjson-v0.7-crs-validator.d.ts +4 -4
  2. package/contract/generated/projjson-v0.7-crs-validator.d.ts.map +1 -1
  3. package/contract/generated/projjson-v0.7-crs-validator.js +1954 -3756
  4. package/contract/query-filter.d.ts +5 -3
  5. package/contract/query-filter.d.ts.map +1 -1
  6. package/contract/query-filter.js +38 -22
  7. package/contract/source.d.ts.map +1 -1
  8. package/contract/source.js +11 -3
  9. package/contract/types.js +1 -1
  10. package/control-plane/client.d.ts.map +1 -1
  11. package/control-plane/client.js +19 -0
  12. package/control-plane/generated/admin-operations.d.ts +3 -2
  13. package/control-plane/generated/admin-operations.d.ts.map +1 -1
  14. package/control-plane/generated/admin-operations.js +3 -2
  15. package/core/client.d.ts +7 -5
  16. package/core/client.d.ts.map +1 -1
  17. package/core/client.js +127 -25
  18. package/core/geoservices.js +38 -2
  19. package/core/grpc-adapter.d.ts.map +1 -1
  20. package/core/grpc-adapter.js +31 -62
  21. package/core/odata.d.ts +3 -0
  22. package/core/odata.d.ts.map +1 -1
  23. package/core/odata.js +79 -6
  24. package/core/process-runner.d.ts +2 -1
  25. package/core/process-runner.d.ts.map +1 -1
  26. package/core/process-runner.js +3 -1
  27. package/core/surfaces.d.ts +2 -0
  28. package/core/surfaces.d.ts.map +1 -1
  29. package/core/surfaces.js +15 -26
  30. package/core/wfs-filter.d.ts.map +1 -1
  31. package/core/wfs-filter.js +28 -20
  32. package/package.json +2 -2
  33. package/query-planner/odata-v1.d.ts.map +1 -1
  34. package/query-planner/odata-v1.js +3 -1
  35. package/runtime/generated/map-package-schema-validator.d.ts +4 -4
  36. package/runtime/generated/map-package-schema-validator.d.ts.map +1 -1
  37. package/runtime/generated/map-package-schema-validator.js +330 -361
  38. package/runtime/index.d.ts +2 -0
  39. package/runtime/index.d.ts.map +1 -1
  40. package/runtime/index.js +1 -0
  41. package/runtime/online-basemap.d.ts +65 -0
  42. package/runtime/online-basemap.d.ts.map +1 -0
  43. package/runtime/online-basemap.js +409 -0
  44. package/runtime/pmtiles-protocol.d.ts.map +1 -1
  45. package/runtime/pmtiles-protocol.js +2 -1
  46. package/runtime/protocol-registry.d.ts.map +1 -1
  47. package/runtime/protocol-registry.js +7 -5
  48. package/runtime/style-spec-validation.js +4 -5
@@ -70,4 +70,6 @@ export { bindEditSketchSnapping } from "./edit-snapping.js";
70
70
  export type { BindEditSketchSnappingOptions, EditSketchSnapIndicatorOptions, EditSketchSnappingEvents, EditSketchSnappingHandle, SnappingMap, } from "./edit-snapping.js";
71
71
  export { TERRA_DRAW_SKETCH_TOOL_MODES, bindTerraDrawSketch, createTerraDrawSketch, createTerraDrawSnapping, editSketchToolForTerraDrawMode, terraDrawSketchToolCapabilities, } from "./terra-draw-sketch.js";
72
72
  export type { BindTerraDrawSketchOptions, CreateTerraDrawSketchOptions, CreateTerraDrawSnappingOptions, TerraDrawSketchController, TerraDrawSketchFeature, TerraDrawSketchFeatureId, TerraDrawSketchFinishContext, TerraDrawSketchFinishEvent, TerraDrawSketchHandle, TerraDrawSketchInstance, TerraDrawSnapContext, TerraDrawSnapEvent, } from "./terra-draw-sketch.js";
73
+ export { HONUA_ONLINE_BASEMAP_STYLES, HonuaOnlineBasemapBinding, resolveHonuaOnlineBasemapStyle, } from "./online-basemap.js";
74
+ export type { HonuaOnlineBasemapTheme, HonuaOnlineBasemapOptions, HonuaOnlineBasemapMap, HonuaOnlineBasemapBindingOptions, } from "./online-basemap.js";
73
75
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EACV,8BAA8B,EAC9B,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,EACzC,+BAA+B,EAC/B,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,+BAA+B,EAC/B,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,qCAAqC,EACrC,8BAA8B,EAC9B,6BAA6B,EAC7B,oCAAoC,EACpC,8BAA8B,EAC9B,kCAAkC,EAClC,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,EAC9B,kCAAkC,EAClC,wCAAwC,EACxC,uCAAuC,EACvC,8BAA8B,EAC9B,kCAAkC,EAClC,oCAAoC,EACpC,2BAA2B,EAC3B,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,8BAA8B,EAC9B,0CAA0C,GAC3C,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAElH,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAChG,YAAY,EACV,yBAAyB,EACzB,6BAA6B,EAC7B,iCAAiC,EACjC,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAExG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,WAAW,EACX,qBAAqB,EACrB,gCAAgC,EAChC,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EACV,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/F,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC9G,OAAO,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC/G,YAAY,EACV,+BAA+B,EAC/B,2BAA2B,EAC3B,gCAAgC,EAChC,2BAA2B,EAC3B,wCAAwC,GACzC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,eAAe,EACf,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,uCAAuC,EACvC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,8BAA8B,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAEpH,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5F,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,gCAAgC,EAChC,8BAA8B,EAC9B,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kCAAkC,EAClC,yBAAyB,EACzB,2BAA2B,EAC3B,iCAAiC,EACjC,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,EAChB,iCAAiC,EACjC,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,8BAA8B,EAC9B,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,sBAAsB,EACtB,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,EAC9B,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,yBAAyB,EACzB,uBAAuB,EACvB,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EACV,6BAA6B,EAC7B,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"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"}
package/runtime/index.js CHANGED
@@ -49,3 +49,4 @@ export { diffPackages } from "./diff.js";
49
49
  export { HonuaRuntimeDiagnosticError, featureStateTargetFromSelection, featureStateTargetKey, featureTargetForLayer, materializeRuntimeLayer, materializeRuntimeSource, materializeStyleValue, protocolForSource, rendererRuntimeDiagnosticError, resolveFeatureIdFromEventFeature, resolveRuntimeBeforeId, selectionTargetForLayer, sourceContextForLayer, throwRuntimeDiagnostics, validateRuntimeFilterExpression, validateRuntimeLayer, validateRuntimeSource, validateRuntimeStyleExpression, } from "./style-interactions.js";
50
50
  export { bindEditSketchSnapping } from "./edit-snapping.js";
51
51
  export { TERRA_DRAW_SKETCH_TOOL_MODES, bindTerraDrawSketch, createTerraDrawSketch, createTerraDrawSnapping, editSketchToolForTerraDrawMode, terraDrawSketchToolCapabilities, } from "./terra-draw-sketch.js";
52
+ export { HONUA_ONLINE_BASEMAP_STYLES, HonuaOnlineBasemapBinding, resolveHonuaOnlineBasemapStyle, } from "./online-basemap.js";
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Explicit online basemap policy for browser samples and installed consumers.
3
+ * Importing this module never fetches styles or constructs a map.
4
+ *
5
+ * Public endpoints are mutable services, not reproducible offline snapshots.
6
+ * Use reviewed local styles and assets in deterministic and offline lanes.
7
+ */
8
+ /** Free, keyless defaults. Override these URLs to use a self-hosted provider. */
9
+ export declare const HONUA_ONLINE_BASEMAP_STYLES: Readonly<{
10
+ positron: "https://tiles.openfreemap.org/styles/positron";
11
+ liberty: "https://tiles.openfreemap.org/styles/liberty";
12
+ dark: "https://tiles.openfreemap.org/styles/dark";
13
+ }>;
14
+ export type HonuaOnlineBasemapTheme = keyof typeof HONUA_ONLINE_BASEMAP_STYLES;
15
+ export interface HonuaOnlineBasemapOptions {
16
+ /** Positron suits thematic maps; Liberty provides detailed street context. */
17
+ readonly theme?: HonuaOnlineBasemapTheme;
18
+ /** Explicit custom/self-hosted style, taking precedence over theme defaults. */
19
+ readonly styleUrl?: string;
20
+ }
21
+ /** Resolve the online policy without starting any network request. */
22
+ export declare function resolveHonuaOnlineBasemapStyle(options?: HonuaOnlineBasemapOptions): string;
23
+ /** MapLibre operations used without importing the renderer at runtime. */
24
+ export interface HonuaOnlineBasemapMap {
25
+ addSource(id: string, source: unknown): unknown;
26
+ removeSource(id: string): unknown;
27
+ getSource(id: string): unknown;
28
+ addLayer(layer: unknown, beforeId?: string): unknown;
29
+ removeLayer(id: string): unknown;
30
+ getLayer(id: string): unknown;
31
+ getStyle(): unknown;
32
+ setGlyphs(url: string | null): unknown;
33
+ addSprite(id: string, url: string): unknown;
34
+ removeSprite(id: string): unknown;
35
+ getSprite(): readonly {
36
+ id: string;
37
+ url: string;
38
+ }[];
39
+ on(type: "error", listener: (event: unknown) => void): unknown;
40
+ off(type: "error", listener: (event: unknown) => void): unknown;
41
+ }
42
+ export interface HonuaOnlineBasemapBindingOptions {
43
+ readonly fetch?: typeof globalThis.fetch;
44
+ /** Display this actionable message beside the map; operational data stays usable. */
45
+ readonly onError: (message: string) => void;
46
+ readonly onReady?: () => void;
47
+ }
48
+ /**
49
+ * Adds complete vector basemaps beneath existing operational layers. Theme
50
+ * changes never replace the map style, sources, filters, feature state, camera
51
+ * or popups owned by the host. Only the active basemap is downloaded initially.
52
+ *
53
+ * Call activate after the host's local initial style has loaded. Glyph URLs
54
+ * must agree with an existing host glyph template: overwriting it would change
55
+ * operational labels. Custom styles can use the same template or omit glyphs.
56
+ */
57
+ export declare class HonuaOnlineBasemapBinding {
58
+ #private;
59
+ constructor(map: HonuaOnlineBasemapMap, options: HonuaOnlineBasemapBindingOptions);
60
+ /** Fetch and activate a theme/override; errors leave the previous base intact. */
61
+ activate(options?: HonuaOnlineBasemapOptions): Promise<boolean>;
62
+ /** Cancel downloads and remove only the sources, layers and sprites we own. */
63
+ dispose(): void;
64
+ }
65
+ //# sourceMappingURL=online-basemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"online-basemap.d.ts","sourceRoot":"","sources":["../../../src/runtime/online-basemap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iFAAiF;AACjF,eAAO,MAAM,2BAA2B;;;;EAItC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAE/E,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IACzC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,sEAAsE;AACtE,wBAAgB,8BAA8B,CAAC,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAO9F;AAKD,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAChD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,IAAI,OAAO,CAAC;IACpB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,SAAS,IAAI,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAC/D,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;CACjE;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAID;;;;;;;;GAQG;AACH,qBAAa,yBAAyB;;gBAcxB,GAAG,EAAE,qBAAqB,EAAE,OAAO,EAAE,gCAAgC;IAajF,kFAAkF;IAC5E,QAAQ,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BzE,+EAA+E;IAC/E,OAAO,IAAI,IAAI;CA8LhB"}
@@ -0,0 +1,409 @@
1
+ /**
2
+ * Explicit online basemap policy for browser samples and installed consumers.
3
+ * Importing this module never fetches styles or constructs a map.
4
+ *
5
+ * Public endpoints are mutable services, not reproducible offline snapshots.
6
+ * Use reviewed local styles and assets in deterministic and offline lanes.
7
+ */
8
+ /** Free, keyless defaults. Override these URLs to use a self-hosted provider. */
9
+ export const HONUA_ONLINE_BASEMAP_STYLES = Object.freeze({
10
+ positron: "https://tiles.openfreemap.org/styles/positron",
11
+ liberty: "https://tiles.openfreemap.org/styles/liberty",
12
+ dark: "https://tiles.openfreemap.org/styles/dark",
13
+ });
14
+ /** Resolve the online policy without starting any network request. */
15
+ export function resolveHonuaOnlineBasemapStyle(options = {}) {
16
+ if (options.styleUrl !== undefined) {
17
+ const override = options.styleUrl.trim();
18
+ if (!override)
19
+ throw new Error("The basemap style URL must not be empty.");
20
+ return override;
21
+ }
22
+ return HONUA_ONLINE_BASEMAP_STYLES[options.theme ?? "positron"];
23
+ }
24
+ import { validateRuntimeStyleSpec } from "./style-spec-validation.js";
25
+ let nextBindingId = 0;
26
+ /**
27
+ * Adds complete vector basemaps beneath existing operational layers. Theme
28
+ * changes never replace the map style, sources, filters, feature state, camera
29
+ * or popups owned by the host. Only the active basemap is downloaded initially.
30
+ *
31
+ * Call activate after the host's local initial style has loaded. Glyph URLs
32
+ * must agree with an existing host glyph template: overwriting it would change
33
+ * operational labels. Custom styles can use the same template or omit glyphs.
34
+ */
35
+ export class HonuaOnlineBasemapBinding {
36
+ #state;
37
+ constructor(map, options) {
38
+ this.#state = {
39
+ map,
40
+ options,
41
+ prefix: `honua-online-basemap-${++nextBindingId}-`,
42
+ styles: new Map(),
43
+ assetPrefixes: new Set(),
44
+ installationId: 0,
45
+ disposed: false,
46
+ };
47
+ map.on("error", this.#onMapError);
48
+ }
49
+ /** Fetch and activate a theme/override; errors leave the previous base intact. */
50
+ async activate(options = {}) {
51
+ const state = this.#state;
52
+ if (state.disposed)
53
+ return false;
54
+ state.request?.abort();
55
+ const request = new AbortController();
56
+ state.request = request;
57
+ let styleUrl = "";
58
+ try {
59
+ styleUrl = resolveHonuaOnlineBasemapStyle(options);
60
+ let downloaded = state.styles.get(styleUrl);
61
+ if (!downloaded) {
62
+ const response = await (state.options.fetch ?? globalThis.fetch)(styleUrl, { signal: request.signal });
63
+ if (!response.ok)
64
+ throw new Error(`Style request returned HTTP ${response.status}.`);
65
+ const value = await response.json();
66
+ if (request.signal.aborted || state.disposed)
67
+ return false;
68
+ downloaded = { value, baseUrl: response.url || new URL(styleUrl, globalThis.location?.href).href };
69
+ }
70
+ const prepared = await this.#prepare(downloaded.value, downloaded.baseUrl);
71
+ if (request.signal.aborted || state.disposed)
72
+ return false;
73
+ this.#install(prepared);
74
+ state.styles.set(styleUrl, downloaded);
75
+ state.options.onReady?.();
76
+ return true;
77
+ }
78
+ catch (error) {
79
+ if (!request.signal.aborted && !state.disposed) {
80
+ state.options.onError(this.#failure(error instanceof Error ? error.message : String(error)));
81
+ }
82
+ return false;
83
+ }
84
+ }
85
+ /** Cancel downloads and remove only the sources, layers and sprites we own. */
86
+ dispose() {
87
+ const state = this.#state;
88
+ if (state.disposed)
89
+ return;
90
+ state.disposed = true;
91
+ state.request?.abort();
92
+ state.map.off("error", this.#onMapError);
93
+ if (state.active) {
94
+ this.#remove(state.active);
95
+ if (state.glyphs && glyphTemplate(state.map) === state.glyphs.installed) {
96
+ state.map.setGlyphs(state.glyphs.host ?? null);
97
+ }
98
+ }
99
+ state.active = undefined;
100
+ }
101
+ #failure(detail) {
102
+ return `Basemap unavailable: ${detail} Operational data and controls remain available. Check connectivity or configure a custom/self-hosted basemap style URL.`;
103
+ }
104
+ #onMapError = (event) => {
105
+ const state = this.#state;
106
+ const record = object(event);
107
+ const sourceId = record?.sourceId;
108
+ const detail = record?.error instanceof Error ? record.error.message : "";
109
+ // An identified operational-source failure belongs to its host, even if
110
+ // its data happens to share a server with the basemap assets.
111
+ if (typeof sourceId === "string" && !sourceId.startsWith(state.prefix))
112
+ return;
113
+ if (typeof sourceId === "string" || [...state.assetPrefixes].some((prefix) => detail.includes(prefix))) {
114
+ state.options.onError(this.#failure(detail || "A tile, glyph or sprite request failed."));
115
+ }
116
+ };
117
+ async #prepare(value, baseUrl) {
118
+ const state = this.#state;
119
+ const style = object(value);
120
+ const sources = object(style?.sources);
121
+ if (style?.version !== 8 || !sources || !Array.isArray(style.layers)) {
122
+ throw new Error("Expected a MapLibre version 8 style with sources and layers.");
123
+ }
124
+ const diagnostics = await validateRuntimeStyleSpec(style, { mode: "strict" });
125
+ const invalid = diagnostics.find((diagnostic) => diagnostic.severity === "error");
126
+ if (invalid)
127
+ throw new Error(`Invalid basemap style: ${invalid.message}`);
128
+ const id = `${state.prefix}${++state.installationId}-`;
129
+ const glyphs = typeof style.glyphs === "string" ? absoluteAsset(style.glyphs, baseUrl) : undefined;
130
+ const spriteDefinitions = typeof style.sprite === "string"
131
+ ? [{ id: "default", url: style.sprite }]
132
+ : Array.isArray(style.sprite)
133
+ ? style.sprite
134
+ : [];
135
+ const sprites = spriteDefinitions.map((entry) => {
136
+ const sprite = object(entry);
137
+ if (typeof sprite?.id !== "string" || typeof sprite.url !== "string")
138
+ throw new Error("Invalid basemap sprite definition.");
139
+ return { id: `${id}${sprite.id}`, url: absoluteAsset(sprite.url, baseUrl) };
140
+ });
141
+ const preparedSources = {};
142
+ for (const [sourceId, sourceValue] of Object.entries(sources)) {
143
+ const source = object(sourceValue);
144
+ if (!source || typeof source.type !== "string")
145
+ throw new Error(`Invalid basemap source ${sourceId}.`);
146
+ preparedSources[`${id}${sourceId}`] = {
147
+ ...source,
148
+ ...(typeof source.url === "string" ? { url: absoluteAsset(source.url, baseUrl) } : {}),
149
+ ...(typeof source.data === "string" && source.type === "geojson"
150
+ ? { data: absoluteAsset(source.data, baseUrl) }
151
+ : {}),
152
+ ...(Array.isArray(source.urls) ? { urls: source.urls.map((url) => absoluteAsset(url, baseUrl)) } : {}),
153
+ ...(Array.isArray(source.tiles)
154
+ ? { tiles: source.tiles.map((tile) => absoluteAsset(tile, baseUrl)) }
155
+ : {}),
156
+ };
157
+ }
158
+ const layers = style.layers.map((layerValue) => {
159
+ const layer = object(layerValue);
160
+ if (typeof layer?.id !== "string" || typeof layer.type !== "string")
161
+ throw new Error("Invalid basemap layer.");
162
+ const layout = object(layer.layout);
163
+ const paint = object(layer.paint);
164
+ return {
165
+ ...layer,
166
+ id: `${id}${layer.id}`,
167
+ ...(typeof layer.source === "string" ? { source: `${id}${layer.source}` } : {}),
168
+ ...(layout ? { layout: rewriteImageProperties(layout, id, sprites.length > 0) } : {}),
169
+ ...(paint ? { paint: rewriteImageProperties(paint, id, sprites.length > 0) } : {}),
170
+ };
171
+ });
172
+ const preparedDiagnostics = await validateRuntimeStyleSpec({
173
+ version: 8,
174
+ sources: preparedSources,
175
+ layers,
176
+ ...(glyphs ? { glyphs } : {}),
177
+ ...(sprites.length > 0 ? { sprite: sprites } : {}),
178
+ }, { mode: "strict" });
179
+ const invalidPrepared = preparedDiagnostics.find((diagnostic) => diagnostic.severity === "error");
180
+ if (invalidPrepared)
181
+ throw new Error(`Invalid prepared basemap style: ${invalidPrepared.message}`);
182
+ return {
183
+ sources: preparedSources,
184
+ layers,
185
+ sprites,
186
+ glyphs,
187
+ baseUrl,
188
+ };
189
+ }
190
+ #remove(prepared) {
191
+ const state = this.#state;
192
+ for (const layer of [...prepared.layers].reverse()) {
193
+ if (state.map.getLayer(layer.id))
194
+ state.map.removeLayer(layer.id);
195
+ }
196
+ for (const sourceId of Object.keys(prepared.sources)) {
197
+ if (state.map.getSource(sourceId))
198
+ state.map.removeSource(sourceId);
199
+ }
200
+ for (const sprite of prepared.sprites) {
201
+ if (state.map.getSprite().some((installed) => installed.id === sprite.id))
202
+ state.map.removeSprite(sprite.id);
203
+ }
204
+ }
205
+ #install(prepared) {
206
+ const state = this.#state;
207
+ // Another SDK module instance or host may already own a generated ID.
208
+ // Check before mutation so rollback can never remove foreign resources.
209
+ for (const id of Object.keys(prepared.sources)) {
210
+ if (state.map.getSource(id))
211
+ throw new Error(`Basemap source namespace collides with an existing source: ${id}.`);
212
+ }
213
+ for (const layer of prepared.layers) {
214
+ if (state.map.getLayer(layer.id))
215
+ throw new Error(`Basemap layer namespace collides with an existing layer: ${layer.id}.`);
216
+ }
217
+ const installedSprites = new Set(state.map.getSprite().map((sprite) => sprite.id));
218
+ for (const sprite of prepared.sprites) {
219
+ if (installedSprites.has(sprite.id))
220
+ throw new Error(`Basemap sprite namespace collides with an existing sprite: ${sprite.id}.`);
221
+ }
222
+ // The host can change its style or glyph template while a style downloads.
223
+ // Capture ownership at mutation time, and retain changes we did not make.
224
+ const previousGlyphs = glyphTemplate(state.map);
225
+ const hostGlyphs = state.glyphs && previousGlyphs === state.glyphs.installed ? state.glyphs.host : previousGlyphs;
226
+ if (prepared.glyphs && hostGlyphs !== undefined && hostGlyphs !== prepared.glyphs) {
227
+ throw new Error("Basemap glyphs conflict; use the host glyph template.");
228
+ }
229
+ const installedGlyphs = prepared.glyphs ?? hostGlyphs;
230
+ try {
231
+ state.map.setGlyphs(installedGlyphs ?? null);
232
+ for (const sprite of prepared.sprites) {
233
+ state.map.addSprite(sprite.id, sprite.url);
234
+ }
235
+ for (const [id, source] of Object.entries(prepared.sources))
236
+ state.map.addSource(id, source);
237
+ const previousLayers = object(state.map.getStyle())?.layers;
238
+ const activeIds = new Set(state.active?.layers.map((layer) => layer.id));
239
+ const anchor = Array.isArray(previousLayers)
240
+ ? previousLayers.find((layer) => {
241
+ const entry = object(layer);
242
+ return typeof entry?.id === "string" && entry.type !== "background" && !activeIds.has(entry.id);
243
+ })
244
+ : undefined;
245
+ const anchorId = object(anchor)?.id;
246
+ for (const layer of prepared.layers)
247
+ state.map.addLayer(layer, typeof anchorId === "string" ? anchorId : undefined);
248
+ }
249
+ catch (error) {
250
+ // A renderer can throw after inserting a resource. The unique namespace
251
+ // lets rollback find even resources it did not return successfully.
252
+ this.#remove(prepared);
253
+ if (glyphTemplate(state.map) === installedGlyphs)
254
+ state.map.setGlyphs(previousGlyphs ?? null);
255
+ throw error;
256
+ }
257
+ if (state.active)
258
+ this.#remove(state.active);
259
+ state.active = prepared;
260
+ state.glyphs = { host: hostGlyphs, installed: installedGlyphs };
261
+ state.assetPrefixes.clear();
262
+ const track = (url) => {
263
+ state.assetPrefixes.add(url.split("{")[0]);
264
+ };
265
+ for (const sprite of prepared.sprites)
266
+ track(sprite.url);
267
+ if (prepared.glyphs)
268
+ track(prepared.glyphs);
269
+ track(prepared.baseUrl);
270
+ for (const value of Object.values(prepared.sources)) {
271
+ const source = object(value);
272
+ if (!source)
273
+ continue;
274
+ for (const key of ["url", "data"]) {
275
+ if (typeof source?.[key] === "string")
276
+ track(source[key]);
277
+ }
278
+ for (const key of ["tiles", "urls"]) {
279
+ if (Array.isArray(source?.[key])) {
280
+ for (const url of source[key])
281
+ if (typeof url === "string")
282
+ track(url);
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ function glyphTemplate(map) {
289
+ const glyphs = object(map.getStyle())?.glyphs;
290
+ return typeof glyphs === "string" ? glyphs : undefined;
291
+ }
292
+ function object(value) {
293
+ return typeof value === "object" && value !== null && !Array.isArray(value)
294
+ ? value
295
+ : undefined;
296
+ }
297
+ function absoluteAsset(value, baseUrl) {
298
+ // URL serializes braces, but MapLibre's URL templates require literal tokens.
299
+ return new URL(value, baseUrl).href.replaceAll("%7B", "{").replaceAll("%7D", "}");
300
+ }
301
+ function spriteName(value, prefix, coerce = false) {
302
+ if (typeof value === "string")
303
+ return value === "" ? "" : `${prefix}${value.includes(":") ? "" : "default:"}${value}`;
304
+ const name = coerce ? ["to-string", value] : value;
305
+ // Complete provider styles use an empty name to intentionally hide icons.
306
+ // Preserve that sentinel rather than requesting a nonexistent sprite.
307
+ // Keep a nullable string result null so mixed coalesce expressions can try their next branch.
308
+ return [
309
+ "case",
310
+ ["==", ["typeof", value], "null"],
311
+ value,
312
+ ["==", name, ""],
313
+ "",
314
+ [">=", ["index-of", ":", name], 0],
315
+ ["concat", prefix, name],
316
+ ["concat", `${prefix}default:`, name],
317
+ ];
318
+ }
319
+ function spriteImage(value, prefix, resolvedOutput = true) {
320
+ if (!Array.isArray(value))
321
+ return spriteName(value, prefix);
322
+ if (value[0] === "image")
323
+ return ["image", spriteName(value[1], prefix), ...value.slice(2)];
324
+ // Keep zoom expressions at the root and leave condition inputs and match labels intact.
325
+ const outputs = imageOutputIndices(value);
326
+ if (value[0] !== "coalesce" || isResolvedImageExpression(value)) {
327
+ if (outputs.length) {
328
+ const rewritten = value.map((part, index) => outputs.includes(index) ? spriteImage(part, prefix, resolvedOutput && value[0] !== "coalesce") : part);
329
+ if (value[0] === "coalesce") {
330
+ if (value
331
+ .slice(1)
332
+ .some((part) => Array.isArray(part) && part[0] !== "coalesce" && imageOutputIndices(part).length))
333
+ throw new Error("Basemap coalesce branches with case, match, step or interpolate need an explicit image expression.");
334
+ // Keep each branch's runtime Value type. Otherwise a leading image or
335
+ // string changes how later branches are coerced before fallback selection.
336
+ rewritten.splice(1, 0, ["get", "", ["literal", {}]]);
337
+ return resolvedOutput ? ["image", ["to-string", rewritten]] : rewritten;
338
+ }
339
+ return rewritten;
340
+ }
341
+ }
342
+ return spriteName(value, prefix, true);
343
+ }
344
+ function imageOutputIndices(value) {
345
+ const op = value[0];
346
+ const first = op === "coalesce"
347
+ ? 1
348
+ : op === "match"
349
+ ? 3
350
+ : op === "case" || op === "step"
351
+ ? 2
352
+ : typeof op === "string" && op.startsWith("interpolate")
353
+ ? 4
354
+ : 0;
355
+ const indices = [];
356
+ if (first)
357
+ for (let i = first; i < value.length; i += op === "coalesce" ? 1 : 2)
358
+ indices.push(i);
359
+ if (op === "case" || op === "match")
360
+ indices.push(value.length - 1);
361
+ return indices;
362
+ }
363
+ function isResolvedImageExpression(value) {
364
+ return (Array.isArray(value) &&
365
+ (value[0] === "image" || imageOutputIndices(value).some((index) => isResolvedImageExpression(value[index]))));
366
+ }
367
+ function inlineImageVariables(value) {
368
+ let remaining = 10000;
369
+ const visit = (value, bindings, depth) => {
370
+ if (--remaining < 0 || depth > 64)
371
+ throw new Error("Basemap image expression exceeds expansion limits.");
372
+ if (!Array.isArray(value)) {
373
+ const record = object(value);
374
+ return record
375
+ ? Object.fromEntries(Object.entries(record).map(([key, part]) => [key, visit(part, bindings, depth + 1)]))
376
+ : value;
377
+ }
378
+ if (value[0] === "literal")
379
+ return value;
380
+ if (value[0] === "var")
381
+ return bindings.has(value[1]) ? visit(bindings.get(value[1]), new Map(), depth + 1) : value;
382
+ if (value[0] === "let") {
383
+ const scope = new Map(bindings);
384
+ // RHS values use the outer scope, never sibling bindings. Resolve every
385
+ // reference before moving the expression into its result's lexical scope.
386
+ for (let i = 1; i < value.length - 1; i += 2)
387
+ scope.set(value[i], visit(value[i + 1], bindings, depth + 1));
388
+ return visit(value[value.length - 1], scope, depth + 1);
389
+ }
390
+ return value.map((part, index) => value[0] === "match" && index >= 2 && index < value.length - 1 && index % 2 === 0
391
+ ? part
392
+ : visit(part, bindings, depth + 1));
393
+ };
394
+ return visit(value, new Map(), 0);
395
+ }
396
+ function rewriteImageProperties(properties, prefix, hasSprites) {
397
+ if (!hasSprites)
398
+ return properties;
399
+ return Object.fromEntries(Object.entries(properties).map(([key, value]) => [
400
+ key,
401
+ key === "icon-image" ||
402
+ key === "fill-pattern" ||
403
+ key === "line-pattern" ||
404
+ key === "background-pattern" ||
405
+ key === "fill-extrusion-pattern"
406
+ ? spriteImage(inlineImageVariables(value), prefix)
407
+ : value,
408
+ ]));
409
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"pmtiles-protocol.d.ts","sourceRoot":"","sources":["../../../src/runtime/pmtiles-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,KAAK,yBAAyB,EAK/B,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAE1C,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,KAAK,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,mBAAmB,CAAC;CACvG;AAED,8EAA8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAC9C,qDAAqD;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,yBAAyB,CAAC;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAMjD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,yBAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/F;AAED,+EAA+E;AAC/E,wBAAgB,2BAA2B,CAAC,MAAM,GAAE,MAAgC,GAAG,OAAO,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAAgC,GAAG,IAAI,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC/D,MAAM,GAAE,MAAgC,GACvC,OAAO,CAET"}
1
+ {"version":3,"file":"pmtiles-protocol.d.ts","sourceRoot":"","sources":["../../../src/runtime/pmtiles-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,KAAK,yBAAyB,EAK/B,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAE1C,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,KAAK,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,mBAAmB,CAAC;CACvG;AAED,8EAA8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAC9C,qDAAqD;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,yBAAyB,CAAC;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAOjD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,yBAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/F;AAED,+EAA+E;AAC/E,wBAAgB,2BAA2B,CAAC,MAAM,GAAE,MAAgC,GAAG,OAAO,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAAgC,GAAG,IAAI,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC/D,MAAM,GAAE,MAAgC,GACvC,OAAO,CAET"}
@@ -27,7 +27,8 @@ import { ensureMaplibreProtocol, isMaplibreProtocolRegistered, resetMaplibreProt
27
27
  /** The default MapLibre protocol scheme PMTiles archives are addressed under. */
28
28
  export const PMTILES_PROTOCOL_SCHEME = "pmtiles";
29
29
  async function loadPmtilesModule() {
30
- return (await import("pmtiles"));
30
+ const { Protocol } = await import("pmtiles");
31
+ return { Protocol };
31
32
  }
32
33
  /**
33
34
  * Register the `pmtiles://` protocol on MapLibre if it has not been registered
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-registry.d.ts","sourceRoot":"","sources":["../../../src/runtime/protocol-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAUD;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAehF;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CAC/C,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB;AAED,sEAAsE;AACtE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO1D;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC/D,MAAM,EAAE,MAAM,GACb,OAAO,CAQT"}
1
+ {"version":3,"file":"protocol-registry.d.ts","sourceRoot":"","sources":["../../../src/runtime/protocol-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAUD;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAqBhF;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CAC/C,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB;AAED,sEAAsE;AACtE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO1D;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC/D,MAAM,EAAE,MAAM,GACb,OAAO,CAQT"}
@@ -23,12 +23,14 @@ const inFlight = new Map();
23
23
  * UMD build. Accept either so this works across the `^5 || ^6` peer range.
24
24
  */
25
25
  export async function loadMaplibreRegistrar() {
26
- const mod = (await import("maplibre-gl"));
27
- if (typeof mod.addProtocol === "function") {
28
- return { addProtocol: mod.addProtocol, removeProtocol: mod.removeProtocol };
26
+ // Name the consumed exports so bundlers can discard unrelated renderer controls.
27
+ // Returning an opaque module namespace retains every MapLibre export.
28
+ const { addProtocol, removeProtocol, default: legacy, } = (await import("maplibre-gl"));
29
+ if (typeof addProtocol === "function") {
30
+ return { addProtocol, removeProtocol };
29
31
  }
30
- if (mod.default && typeof mod.default.addProtocol === "function") {
31
- return mod.default;
32
+ if (legacy && typeof legacy.addProtocol === "function") {
33
+ return legacy;
32
34
  }
33
35
  throw new Error("maplibre-gl does not expose addProtocol(); install maplibre-gl 5.x or 6.x (the SDK peer range is ^5.0.0 || ^6.0.0).");
34
36
  }
@@ -143,14 +143,13 @@ async function loadMapLibreStyleSpecModule() {
143
143
  return loadedModule;
144
144
  loadAttempted = true;
145
145
  loadPromise ??= import("@maplibre/maplibre-gl-style-spec")
146
- .then((mod) => {
147
- const candidate = mod;
148
- if (typeof candidate.validateStyleMin !== "function" || typeof candidate.createExpression !== "function") {
146
+ .then(({ validateStyleMin, createExpression }) => {
147
+ if (typeof validateStyleMin !== "function" || typeof createExpression !== "function") {
149
148
  throw new Error("@maplibre/maplibre-gl-style-spec does not expose the expected validator API.");
150
149
  }
151
150
  loadedModule = {
152
- validateStyleMin: candidate.validateStyleMin,
153
- createExpression: candidate.createExpression,
151
+ validateStyleMin: validateStyleMin,
152
+ createExpression,
154
153
  };
155
154
  loadFailure = undefined;
156
155
  return loadedModule;