@superrouteca/smap 1.1.0 → 1.1.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.1 — 2026-10-27
4
+
5
+ - deck.gl's interleaved overlay works on the map again: `addDeckLayer` and `deckOverlay` with deck.gl 9.x no longer
6
+ fail on every frame ("Cannot read properties of undefined (reading 'height')"). The map engine now answers the
7
+ camera where deck.gl reads it; an engine that already does so is left as it is.
8
+
3
9
  ## 1.1.0 — 2026-10-27
4
10
 
5
11
  - Style layers: sources and layers of the Style Specification v8 are added as they are (`addSource`, `addStyleLayer`,
package/dist/SOURCE.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
- "sdkVersion": "1.1.0",
2
+ "sdkVersion": "1.1.1",
3
3
  "engine": "maplibre-gl 6.16.0",
4
4
  "files": {
5
- "smap.js": "f941ddea5c9145bc0fa66c4764971443540c66a551a693027f480245c6dcb794",
5
+ "smap.js": "1967bba886c34ba175e7d98213bb4a5ac0f239392b3883932e39e0e47ddcf3fe",
6
6
  "smap.css": "5e3bdcb00b8fc8805f545b76cdeea5e783c89984f48ec2fee66c4319af4ada0b",
7
- "smap-client.js": "3c31e433df68578f53bf0a85fa2d8772ae3f7d77663c59593bed04b0635bb5ce",
7
+ "smap-client.js": "026accb89f36a5b1c50c63eb4c124408ce01bdb66c2009dcac5dc235d7bfe0e3",
8
8
  "smap-client.d.ts": "5f0df11bf60c5a9ced34522a284de81260c27871678ab772f16da9ccf6883f58",
9
- "smap.mjs": "60225e3eac69195e29ec120ed24abd94b636f630ec4e1434af5b961ad91ce469",
10
- "smap.cjs": "0593cd1b26cb27140ca0353dcd34093d5d6be7781f43d9e20ae7b4c9d74302a3",
11
- "smap-client.cjs": "2dc2391b3d8c222edf42d781a23bd818222069f28e98b7715adf39908e3bbd09",
12
- "smap-client.mjs": "1e4500b6e28899072dd27f6dd8ee3a1a84c4b697e40fb1ba0463c0bf6cae004c",
9
+ "smap.mjs": "b92255fcf796f0e58b29b1c94d06a3b75d75d84247cd7264d6df4449f98123ee",
10
+ "smap.cjs": "4913c6d9e8741f50bf4620b66071caa9c23145f37d90c9480ec681f7d888d6b0",
11
+ "smap-client.cjs": "b722a6dcee9548bc917ca3c6dc79c311036cf2574b644053fe7450923d1b4b56",
12
+ "smap-client.mjs": "60d9cce0e0dd89fc4c01f8c35b3e1d18c994a88d25e2b73bf07e83c48a987a42",
13
13
  "smap-client.d.cts": "e0fe4eb54cd66b831116082f42bd2f7de260f9f12a2741f4004f8cf10c252116",
14
14
  "smap-client.d.mts": "96830d316ddb33b4ff8edb8b6f810337479636114f75c4170d95038ffda74103",
15
15
  "vendor-licenses.txt": "ee5fc05a0677eaf69601d2c7db0d9ecd6cc27c3abc1d0733bc9ed34707cf8ef2"
@@ -1,5 +1,5 @@
1
1
  /* Generated by js/build.mjs from js/src (see SOURCE.json). Do not edit. */
2
- /*! sMap JS client 1.1.0 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
2
+ /*! sMap JS client 1.1.1 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
3
3
  /*
4
4
  * Runs wherever `fetch` exists: browsers, Node.js 18+, workers; elsewhere (mini programs, older runtimes) pass your
5
5
  * own `fetch`. UMD: `window.SMapClient`, `require('smap-client')`, or an AMD module.
@@ -19,7 +19,7 @@
19
19
  }(typeof self !== 'undefined' ? self : this, function () {
20
20
  'use strict';
21
21
 
22
- var VERSION = '1.1.0';
22
+ var VERSION = '1.1.1';
23
23
  var NODE_TTL = 3600 * 1000; // the measured order
24
24
  var KNOWN_TTL = 30 * 86400 * 1000; // the last node list received, used when none can be read
25
25
 
@@ -1,4 +1,4 @@
1
- /*! sMap JS client 1.1.0 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
1
+ /*! sMap JS client 1.1.1 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
2
2
  /*
3
3
  * Runs wherever `fetch` exists: browsers, Node.js 18+, workers; elsewhere (mini programs, older runtimes) pass your
4
4
  * own `fetch`. UMD: `window.SMapClient`, `require('smap-client')`, or an AMD module.
@@ -18,7 +18,7 @@
18
18
  }(typeof self !== 'undefined' ? self : this, function () {
19
19
  'use strict';
20
20
 
21
- var VERSION = '1.1.0';
21
+ var VERSION = '1.1.1';
22
22
  var NODE_TTL = 3600 * 1000; // the measured order
23
23
  var KNOWN_TTL = 30 * 86400 * 1000; // the last node list received, used when none can be read
24
24
 
@@ -1,7 +1,7 @@
1
1
  /* Generated by js/build.mjs from js/src (see SOURCE.json). Do not edit. */
2
2
  var smapClientModule = { exports: {} };
3
3
  (function (module, exports, define) {
4
- /*! sMap JS client 1.1.0 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
4
+ /*! sMap JS client 1.1.1 — tokens, the nearest node, styles, tiles and raw reads, without a map view. */
5
5
  /*
6
6
  * Runs wherever `fetch` exists: browsers, Node.js 18+, workers; elsewhere (mini programs, older runtimes) pass your
7
7
  * own `fetch`. UMD: `window.SMapClient`, `require('smap-client')`, or an AMD module.
@@ -21,7 +21,7 @@ var smapClientModule = { exports: {} };
21
21
  }(typeof self !== 'undefined' ? self : this, function () {
22
22
  'use strict';
23
23
 
24
- var VERSION = '1.1.0';
24
+ var VERSION = '1.1.1';
25
25
  var NODE_TTL = 3600 * 1000; // the measured order
26
26
  var KNOWN_TTL = 30 * 86400 * 1000; // the last node list received, used when none can be read
27
27
 
package/dist/smap.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /* Generated by js/build.mjs from js/src (see SOURCE.json). Do not edit. */
2
2
  'use strict';
3
- /*! sMap Web SDK 1.1.0. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
3
+ /*! sMap Web SDK 1.1.1. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
4
4
 
5
5
  var smapCore = null;
6
6
  function smapCreateEngine() {
@@ -28353,7 +28353,7 @@ function smapCreateSdk(engine, interop) {
28353
28353
  })(typeof self !== 'undefined' ? self : this, function (engine, interop) {
28354
28354
  'use strict';
28355
28355
 
28356
- var VERSION = '1.1.0';
28356
+ var VERSION = '1.1.1';
28357
28357
  var FLAVORS = ['light', 'white', 'grayscale', 'dark', 'black'];
28358
28358
  var BASEMAP_SOURCE = 'basemap';
28359
28359
  var BUILDINGS_LAYER = 'smap-buildings-3d';
@@ -28837,6 +28837,7 @@ function smapCreateSdk(engine, interop) {
28837
28837
  this.ready = start.then(function () {
28838
28838
  engineOptions.style = self._styleUrl();
28839
28839
  self.engine = new engine.Map(engineOptions);
28840
+ deckCompat(self.engine);
28840
28841
  if (self.engine.addControl) {
28841
28842
  var badge = badgeControl();
28842
28843
  self.engine.addControl(badge, 'bottom-right');
@@ -29741,6 +29742,26 @@ function smapCreateSdk(engine, interop) {
29741
29742
 
29742
29743
  // ------------------------------------------------------------------ deck.gl layers (M36, web only)
29743
29744
 
29745
+ /**
29746
+ * deck.gl's map overlay (MapboxOverlay of @deck.gl/mapbox 9.x) reads the engine map's camera as `map.transform`
29747
+ * (its height, elevation, _nearZ and _farZ) on every frame; the bundled engine keeps it at `map._camera.transform`.
29748
+ * Gives the engine map a read-only `transform` that follows the camera, only when the engine has none of its own.
29749
+ * Every other member the overlay reads (painter.context.gl, style._loaded / _order, getProjection, getTerrain,
29750
+ * getRenderWorldCopies, getPadding, the camera getters, add / move / remove / getLayer, on / off, triggerRepaint,
29751
+ * getCanvas / getContainer, removeControl) is the engine's own.
29752
+ */
29753
+ function deckCompat(map) {
29754
+ if (!map || typeof map !== 'object' || 'transform' in map) { return map; }
29755
+ if (!map._camera || typeof map._camera !== 'object' || !('transform' in map._camera)) { return map; }
29756
+ try {
29757
+ Object.defineProperty(map, 'transform', {
29758
+ configurable: true, enumerable: false,
29759
+ get: function () { return this._camera && this._camera.transform; }
29760
+ });
29761
+ } catch (e) { /* a frozen engine map keeps what it has */ }
29762
+ return map;
29763
+ }
29764
+
29744
29765
  /**
29745
29766
  * Draws a deck.gl layer interleaved with the basemap, through deck.gl's map overlay. deck.gl is optional: load it
29746
29767
  * once with sMap.useDeck(await import('@deck.gl/mapbox')), or the global `deck` of its script build is used.
@@ -29759,6 +29780,7 @@ function smapCreateSdk(engine, interop) {
29759
29780
  }
29760
29781
  this._deckLayers = this._deckLayers.filter(function (l) { return l.id !== layer.id; }).concat([layer]);
29761
29782
  if (!this._deckOverlay) {
29783
+ deckCompat(this.engine);
29762
29784
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29763
29785
  this.engine.addControl(this._deckOverlay);
29764
29786
  } else {
@@ -29778,6 +29800,7 @@ function smapCreateSdk(engine, interop) {
29778
29800
  if (!this._deckOverlay) {
29779
29801
  var d = interop.deck();
29780
29802
  if (!d) { return null; }
29803
+ deckCompat(this.engine);
29781
29804
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29782
29805
  this.engine.addControl(this._deckOverlay);
29783
29806
  }
@@ -30271,7 +30294,7 @@ function SMapMap(options) {
30271
30294
  SMapMap.prototype = core.Map.prototype;
30272
30295
  return new core.Map(options);
30273
30296
  }
30274
- var smapVersion = "1.1.0";
30297
+ var smapVersion = "1.1.1";
30275
30298
  var smapStyles = ['light', 'white', 'grayscale', 'dark', 'black'];
30276
30299
  /** The bundled rendering engine, for anything the SDK does not wrap (loaded on the first call). */
30277
30300
  function smapGetEngine() { return smapLoad().engine; }
package/dist/smap.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! sMap Web SDK 1.1.0. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
1
+ /*! sMap Web SDK 1.1.1. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
2
2
  (function () {
3
3
  function smapCreateEngine() {
4
4
  var SMAP_BASE_URL = (typeof document !== 'undefined' && document.baseURI) || (typeof location !== 'undefined' && location.href) || 'about:blank';
@@ -28350,7 +28350,7 @@ function smapCreateSdk(engine, interop) {
28350
28350
  })(typeof self !== 'undefined' ? self : this, function (engine, interop) {
28351
28351
  'use strict';
28352
28352
 
28353
- var VERSION = '1.1.0';
28353
+ var VERSION = '1.1.1';
28354
28354
  var FLAVORS = ['light', 'white', 'grayscale', 'dark', 'black'];
28355
28355
  var BASEMAP_SOURCE = 'basemap';
28356
28356
  var BUILDINGS_LAYER = 'smap-buildings-3d';
@@ -28834,6 +28834,7 @@ function smapCreateSdk(engine, interop) {
28834
28834
  this.ready = start.then(function () {
28835
28835
  engineOptions.style = self._styleUrl();
28836
28836
  self.engine = new engine.Map(engineOptions);
28837
+ deckCompat(self.engine);
28837
28838
  if (self.engine.addControl) {
28838
28839
  var badge = badgeControl();
28839
28840
  self.engine.addControl(badge, 'bottom-right');
@@ -29738,6 +29739,26 @@ function smapCreateSdk(engine, interop) {
29738
29739
 
29739
29740
  // ------------------------------------------------------------------ deck.gl layers (M36, web only)
29740
29741
 
29742
+ /**
29743
+ * deck.gl's map overlay (MapboxOverlay of @deck.gl/mapbox 9.x) reads the engine map's camera as `map.transform`
29744
+ * (its height, elevation, _nearZ and _farZ) on every frame; the bundled engine keeps it at `map._camera.transform`.
29745
+ * Gives the engine map a read-only `transform` that follows the camera, only when the engine has none of its own.
29746
+ * Every other member the overlay reads (painter.context.gl, style._loaded / _order, getProjection, getTerrain,
29747
+ * getRenderWorldCopies, getPadding, the camera getters, add / move / remove / getLayer, on / off, triggerRepaint,
29748
+ * getCanvas / getContainer, removeControl) is the engine's own.
29749
+ */
29750
+ function deckCompat(map) {
29751
+ if (!map || typeof map !== 'object' || 'transform' in map) { return map; }
29752
+ if (!map._camera || typeof map._camera !== 'object' || !('transform' in map._camera)) { return map; }
29753
+ try {
29754
+ Object.defineProperty(map, 'transform', {
29755
+ configurable: true, enumerable: false,
29756
+ get: function () { return this._camera && this._camera.transform; }
29757
+ });
29758
+ } catch (e) { /* a frozen engine map keeps what it has */ }
29759
+ return map;
29760
+ }
29761
+
29741
29762
  /**
29742
29763
  * Draws a deck.gl layer interleaved with the basemap, through deck.gl's map overlay. deck.gl is optional: load it
29743
29764
  * once with sMap.useDeck(await import('@deck.gl/mapbox')), or the global `deck` of its script build is used.
@@ -29756,6 +29777,7 @@ function smapCreateSdk(engine, interop) {
29756
29777
  }
29757
29778
  this._deckLayers = this._deckLayers.filter(function (l) { return l.id !== layer.id; }).concat([layer]);
29758
29779
  if (!this._deckOverlay) {
29780
+ deckCompat(this.engine);
29759
29781
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29760
29782
  this.engine.addControl(this._deckOverlay);
29761
29783
  } else {
@@ -29775,6 +29797,7 @@ function smapCreateSdk(engine, interop) {
29775
29797
  if (!this._deckOverlay) {
29776
29798
  var d = interop.deck();
29777
29799
  if (!d) { return null; }
29800
+ deckCompat(this.engine);
29778
29801
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29779
29802
  this.engine.addControl(this._deckOverlay);
29780
29803
  }
package/dist/smap.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /* Generated by js/build.mjs from js/src (see SOURCE.json). Do not edit. */
2
- /*! sMap Web SDK 1.1.0. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
2
+ /*! sMap Web SDK 1.1.1. Bundles maplibre-gl 6.16.0 (BSD-3-Clause), see vendor-licenses.txt. */
3
3
 
4
4
  var smapCore = null;
5
5
  function smapCreateEngine() {
@@ -28352,7 +28352,7 @@ function smapCreateSdk(engine, interop) {
28352
28352
  })(typeof self !== 'undefined' ? self : this, function (engine, interop) {
28353
28353
  'use strict';
28354
28354
 
28355
- var VERSION = '1.1.0';
28355
+ var VERSION = '1.1.1';
28356
28356
  var FLAVORS = ['light', 'white', 'grayscale', 'dark', 'black'];
28357
28357
  var BASEMAP_SOURCE = 'basemap';
28358
28358
  var BUILDINGS_LAYER = 'smap-buildings-3d';
@@ -28836,6 +28836,7 @@ function smapCreateSdk(engine, interop) {
28836
28836
  this.ready = start.then(function () {
28837
28837
  engineOptions.style = self._styleUrl();
28838
28838
  self.engine = new engine.Map(engineOptions);
28839
+ deckCompat(self.engine);
28839
28840
  if (self.engine.addControl) {
28840
28841
  var badge = badgeControl();
28841
28842
  self.engine.addControl(badge, 'bottom-right');
@@ -29740,6 +29741,26 @@ function smapCreateSdk(engine, interop) {
29740
29741
 
29741
29742
  // ------------------------------------------------------------------ deck.gl layers (M36, web only)
29742
29743
 
29744
+ /**
29745
+ * deck.gl's map overlay (MapboxOverlay of @deck.gl/mapbox 9.x) reads the engine map's camera as `map.transform`
29746
+ * (its height, elevation, _nearZ and _farZ) on every frame; the bundled engine keeps it at `map._camera.transform`.
29747
+ * Gives the engine map a read-only `transform` that follows the camera, only when the engine has none of its own.
29748
+ * Every other member the overlay reads (painter.context.gl, style._loaded / _order, getProjection, getTerrain,
29749
+ * getRenderWorldCopies, getPadding, the camera getters, add / move / remove / getLayer, on / off, triggerRepaint,
29750
+ * getCanvas / getContainer, removeControl) is the engine's own.
29751
+ */
29752
+ function deckCompat(map) {
29753
+ if (!map || typeof map !== 'object' || 'transform' in map) { return map; }
29754
+ if (!map._camera || typeof map._camera !== 'object' || !('transform' in map._camera)) { return map; }
29755
+ try {
29756
+ Object.defineProperty(map, 'transform', {
29757
+ configurable: true, enumerable: false,
29758
+ get: function () { return this._camera && this._camera.transform; }
29759
+ });
29760
+ } catch (e) { /* a frozen engine map keeps what it has */ }
29761
+ return map;
29762
+ }
29763
+
29743
29764
  /**
29744
29765
  * Draws a deck.gl layer interleaved with the basemap, through deck.gl's map overlay. deck.gl is optional: load it
29745
29766
  * once with sMap.useDeck(await import('@deck.gl/mapbox')), or the global `deck` of its script build is used.
@@ -29758,6 +29779,7 @@ function smapCreateSdk(engine, interop) {
29758
29779
  }
29759
29780
  this._deckLayers = this._deckLayers.filter(function (l) { return l.id !== layer.id; }).concat([layer]);
29760
29781
  if (!this._deckOverlay) {
29782
+ deckCompat(this.engine);
29761
29783
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29762
29784
  this.engine.addControl(this._deckOverlay);
29763
29785
  } else {
@@ -29777,6 +29799,7 @@ function smapCreateSdk(engine, interop) {
29777
29799
  if (!this._deckOverlay) {
29778
29800
  var d = interop.deck();
29779
29801
  if (!d) { return null; }
29802
+ deckCompat(this.engine);
29780
29803
  this._deckOverlay = new d.MapboxOverlay({ interleaved: true, layers: this._deckLayers.slice() });
29781
29804
  this.engine.addControl(this._deckOverlay);
29782
29805
  }
@@ -30270,7 +30293,7 @@ function SMapMap(options) {
30270
30293
  SMapMap.prototype = core.Map.prototype;
30271
30294
  return new core.Map(options);
30272
30295
  }
30273
- var smapVersion = "1.1.0";
30296
+ var smapVersion = "1.1.1";
30274
30297
  var smapStyles = ['light', 'white', 'grayscale', 'dark', 'black'];
30275
30298
  /** The bundled rendering engine, for anything the SDK does not wrap (loaded on the first call). */
30276
30299
  function smapGetEngine() { return smapLoad().engine; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superrouteca/smap",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "sMap for the web: maps from Superroute's sMap service, the Web SDK (map view) and the JS client (tokens, nearest node, styles, tiles).",
5
5
  "license": "MIT",
6
6
  "author": "Goodneo Solutions",
@@ -71,7 +71,10 @@
71
71
  }
72
72
  },
73
73
  "devDependencies": {
74
+ "@deck.gl/core": "9.4.0",
75
+ "@deck.gl/mapbox": "9.4.0",
74
76
  "esbuild": "0.28.2",
77
+ "jsdom": "30.1.3",
75
78
  "maplibre-gl": "6.16.0"
76
79
  }
77
80
  }