diff --git a/docs/backwardcompatibility.html b/docs/backwardcompatibility.html new file mode 100644 index 0000000..4770e15 --- /dev/null +++ b/docs/backwardcompatibility.html @@ -0,0 +1,206 @@ + + + + + + + + @geolonia/embed + + + +

@geolonia/embed

+ + 後方互換性テストのためのサンプルコードです。 + +

loadImage

+
MapLibre GL JS v4.4.1 の から、loadImage の呼び出し方が以下のように変更になりました。Embed API では後方互換性を保つため、v4.4.1 以前の書き方も引き続きサポートしています。
+ 関連する ISSUE: Remove callback from loadImage +
+ +
+  // v4.4.1 以降
+  map.loadImage(url)
+
+  // v4.4.1 以前
+  map.loadImage(url, callback)
+
+ +
+

v4.4.1 以降

+
+
+      var map1 = new geolonia.Map('my-map1');
+      map1.on('load', async () => {
+          image = await map1.loadImage('https://upload.wikimedia.org/wikipedia/commons/7/7c/201408_cat.png');
+          map1.addImage('cat', image.data);
+          map1.addSource('point', {
+              'type': 'geojson',
+              'data': {
+                  'type': 'FeatureCollection',
+                  'features': [
+                      {
+                          'type': 'Feature',
+                          'geometry': {
+                              'type': 'Point',
+                              'coordinates': [139.767125, 35.681236]
+                          }
+                      }
+                  ]
+              }
+          });
+          map1.addLayer({
+              'id': 'points',
+              'type': 'symbol',
+              'source': 'point',
+              'layout': {
+                  'icon-image': 'cat',
+                  'icon-size': 0.25
+              }
+          });
+      });
+    
+
+ +
+

v4.4.1 以前

+
+
+      var map2 = new geolonia.Map('my-map2');
+      map2.on('load', () => {
+        map2.loadImage(
+            'https://upload.wikimedia.org/wikipedia/commons/7/7c/201408_cat.png',
+            (error, image) => {
+                if (error) throw error;
+                map2.addImage('cat', image);
+            }
+        );
+        map2.addSource('point', {
+            'type': 'geojson',
+            'data': {
+                'type': 'FeatureCollection',
+                'features': [
+                    {
+                        'type': 'Feature',
+                        'geometry': {
+                            'type': 'Point',
+                            'coordinates': [139.767125, 35.681236]
+                        }
+                    }
+                ]
+            }
+        });
+        map2.addLayer({
+            'id': 'points',
+            'type': 'symbol',
+            'source': 'point',
+            'layout': {
+                'icon-image': 'cat',
+                'icon-size': 0.25
+            }
+        });
+      });
+    
+
+ + + + + + Fork me on GitHub + + + + + + diff --git a/docs/embed.js.LICENSE.txt b/docs/embed.js.LICENSE.txt index ae386fb..eb26a49 100644 --- a/docs/embed.js.LICENSE.txt +++ b/docs/embed.js.LICENSE.txt @@ -1 +1,4 @@ -/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ +/** + * MapLibre GL JS + * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v4.4.1/LICENSE.txt + */ diff --git a/package.json b/package.json index 750696d..0aef1a0 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "homepage": "https://github.com/geolonia/embed#readme", "devDependencies": { "@geolonia/eslint-config": "latest", + "@types/jsdom": "^21.1.7", "@types/mocha": "^10.0.1", "babel-loader": "^9.1.0", "css-loader": "^6.7.2", diff --git a/src/lib/geolonia-map.ts b/src/lib/geolonia-map.ts index e71d5a3..0df34c8 100644 --- a/src/lib/geolonia-map.ts +++ b/src/lib/geolonia-map.ts @@ -8,9 +8,9 @@ import parseAtts from './parse-atts'; import { SimpleStyle } from './simplestyle'; import SimpleStyleVector from './simplestyle-vector'; -import { getContainer, getOptions, getSessionId, getStyle, handleRestrictedMode, isScrollable, parseControlOption, parseSimpleVector, handleErrorMode } from './util'; +import { getContainer, getOptions, getSessionId, getStyle, handleRestrictedMode, isScrollable, parseControlOption, parseSimpleVector, handleErrorMode, loadImageCompatibility, GetImageCallback } from './util'; -import type { MapOptions, PointLike, StyleOptions, StyleSpecification, StyleSwapOptions } from 'maplibre-gl'; +import type { MapOptions, PointLike, StyleOptions, StyleSpecification, StyleSwapOptions, GetResourceResponse } from 'maplibre-gl'; export type GeoloniaMapOptions = MapOptions & { interactive?: boolean }; @@ -319,4 +319,23 @@ export default class GeoloniaMap extends maplibregl.Map { super.remove.call(this); delete (container as HTMLElement & { geoloniaMap: GeoloniaMap }).geoloniaMap; } + + /** + * Backward compatibility for breaking change of loadImage() in MapLibre GL JS v4.0.0. + * Related to https://github.com/maplibre/maplibre-gl-js/pull/3422/ + * @param url + * @param callback + */ + loadImage(url: string, callback: GetImageCallback): void; + loadImage(url: string): Promise>; + loadImage(url: string, callback?: GetImageCallback): Promise> | void { + + const promise = super.loadImage(url); + + if (callback) { + loadImageCompatibility(promise, callback); + } else { + return promise; + } + } } diff --git a/src/lib/parse-atts.test.ts b/src/lib/parse-atts.test.ts index e4e8240..92abd85 100644 --- a/src/lib/parse-atts.test.ts +++ b/src/lib/parse-atts.test.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ + import parseAtts from './parse-atts'; import assert from 'assert'; import { JSDOM } from 'jsdom'; diff --git a/src/lib/simplestyle.ts b/src/lib/simplestyle.ts index ab845c0..58fac60 100644 --- a/src/lib/simplestyle.ts +++ b/src/lib/simplestyle.ts @@ -297,17 +297,14 @@ export class SimpleStyle { }, }); - this.map.on('click', `${this.options.id}-clusters`, (e) => { + this.map.on('click', `${this.options.id}-clusters`, async (e) => { const features = this.map.queryRenderedFeatures(e.point, { layers: [`${this.options.id}-clusters`] }); const clusterId = features[0].properties.cluster_id; - this.map.getSource(`${this.options.id}-points`).getClusterExpansionZoom(clusterId, (err, zoom) => { - if (err) - return; - - this.map.easeTo({ - center: features[0].geometry.coordinates, - zoom: zoom, - }); + const zoom = await this.map.getSource(`${this.options.id}-points`).getClusterExpansionZoom(clusterId); + + this.map.easeTo({ + center: features[0].geometry.coordinates, + zoom: zoom, }); }); diff --git a/src/lib/util.test.ts b/src/lib/util.test.ts index dd85310..68b77e2 100644 --- a/src/lib/util.test.ts +++ b/src/lib/util.test.ts @@ -1,8 +1,8 @@ -'use strict'; +/* eslint-disable @typescript-eslint/ban-ts-comment */ import assert from 'assert'; import { JSDOM } from 'jsdom'; -import { getContainer, getLang, getOptions, getStyle, handleMarkerOptions, isDomElement, isURL, parseControlOption, parseSimpleVector, sanitizeDescription } from './util'; +import { getContainer, getLang, getOptions, getStyle, handleMarkerOptions, isDomElement, isURL, parseControlOption, parseSimpleVector, sanitizeDescription, loadImageCompatibility } from './util'; const base = 'https://base.example.com/parent/'; @@ -62,6 +62,7 @@ describe('Tests for util.js', () => {
`); + // @ts-ignore global.window = dom.window; global.document = dom.window.document; @@ -89,6 +90,7 @@ describe('Tests for util.js', () => {
`); + // @ts-ignore global.window = dom.window; global.document = dom.window.document; @@ -235,3 +237,39 @@ describe('Tests for util.js', () => { }); }); }); + + +describe('loadImageCompatibility', () => { + it('should call the callback with response data when the promise resolves', (done) => { + // モックされた成功した promise + const mockResponse = { + data: new Image(), + cacheControl: 'public, max-age=3600', + expires: '1609459200', + }; + const promise = Promise.resolve(mockResponse); + + loadImageCompatibility(promise, (error, data, expiry) => { + assert.equal(error, null); + assert.deepEqual(data, mockResponse.data); + assert.deepEqual(expiry, { + cacheControl: mockResponse.cacheControl, + expires: mockResponse.expires, + }); + done(); + }); + }); + + it('should call the callback with error when the promise rejects', (done) => { + // モックされた失敗した promise + const mockError = new Error('Failed to load image'); + const promise = Promise.reject(mockError); + + loadImageCompatibility(promise, (error, data, expiry) => { + assert.deepEqual(error, mockError); + assert.strictEqual(data, undefined); + assert.strictEqual(expiry, undefined); + done(); + }); + }); +}); diff --git a/src/lib/util.ts b/src/lib/util.ts index 00e0a07..94ea4fa 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -1,14 +1,17 @@ 'use strict'; import { keyring } from './keyring'; -import type { MapOptions, MarkerOptions } from 'maplibre-gl'; +import type { GetResourceResponse, MapOptions, MarkerOptions, ExpiryData } from 'maplibre-gl'; + +// GetImageCallback extracted from maplibre-gl v3.6.2 ( https://github.com/maplibre/maplibre-gl-js/releases/tag/v3.6.2 ) +export type GetImageCallback = (error?: Error | null, image?: HTMLImageElement | ImageBitmap | null, expiry?: ExpiryData | null) => void; /** * * @param {string} str target URL string * @return {string|false} Resolved URL or false if not resolved */ -export function isURL(str) { +export function isURL(str: string): string | false { if (str.match(/^https?:\/\//)) { return str; } else if (str.match(/^\//) || str.match(/^\.\.?/)) { @@ -300,3 +303,27 @@ export const sanitizeDescription = async (description) => { export const random = (max: number): number => Math.floor(Math.random() * max); +// This function is used to provide backward compatibility with callback invocations, +// so we ignore ESLint rules for this function. +// Note: this cannot be a generic promiseToCallback function because the callback is not +// the traditional (error, result) style callback. +export function loadImageCompatibility( + promise: Promise>, + callback: GetImageCallback, +): void { + promise + // eslint-disable-next-line promise/prefer-await-to-then + .then((response) => { + // eslint-disable-next-line promise/no-callback-in-promise + callback(null, response.data, { + cacheControl: response.cacheControl, + expires: response.expires, + }); + return; + }) + // eslint-disable-next-line promise/prefer-await-to-then + .catch((error) => { + // eslint-disable-next-line promise/no-callback-in-promise + callback(error); + }); +} diff --git a/yarn.lock b/yarn.lock index ece4ab4..d01a9f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -172,7 +172,7 @@ "@mapbox/geojson-rewind@^0.5.2": version "0.5.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a" + resolved "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz" integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== dependencies: get-stream "^6.0.1" @@ -180,7 +180,7 @@ "@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + resolved "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz" integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== "@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": @@ -190,29 +190,29 @@ "@mapbox/tiny-sdf@^2.0.6": version "2.0.6" - resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" + resolved "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz" integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== "@mapbox/unitbezier@^0.0.1": version "0.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" + resolved "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz" integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== "@mapbox/vector-tile@^1.3.1": version "1.3.1" - resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + resolved "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz" integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== dependencies: "@mapbox/point-geometry" "~0.1.0" "@mapbox/whoots-js@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + resolved "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz" integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== "@maplibre/maplibre-gl-style-spec@^20.3.0": version "20.3.0" - resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.0.tgz#7ab199c26a737dbc63e99e43e91eb05c51d83a1b" + resolved "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.0.tgz" integrity sha512-eSiQ3E5LUSxAOY9ABXGyfNhout2iEa6mUxKeaQ9nJ8NL1NuaQYU7zKqzx/LEYcXe1neT4uYAgM1wYZj3fTSXtA== dependencies: "@mapbox/jsonlint-lines-primitives" "~2.0.2" @@ -437,14 +437,14 @@ "@types/geojson-vt@3.2.5": version "3.2.5" - resolved "https://registry.yarnpkg.com/@types/geojson-vt/-/geojson-vt-3.2.5.tgz#b6c356874991d9ab4207533476dfbcdb21e38408" + resolved "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz" integrity sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g== dependencies: "@types/geojson" "*" "@types/geojson@*", "@types/geojson@^7946.0.14": version "7946.0.14" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz" integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== "@types/http-errors@*": @@ -459,6 +459,15 @@ dependencies: "@types/node" "*" +"@types/jsdom@^21.1.7": + version "21.1.7" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.7.tgz#9edcb09e0b07ce876e7833922d3274149c898cfa" + integrity sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.12" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" @@ -471,24 +480,24 @@ "@types/junit-report-builder@^3.0.2": version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/junit-report-builder/-/junit-report-builder-3.0.2.tgz#17cc131d14ceff59dcf14e5847bd971b96f2cbe0" + resolved "https://registry.npmjs.org/@types/junit-report-builder/-/junit-report-builder-3.0.2.tgz" integrity sha512-R5M+SYhMbwBeQcNXYWNCZkl09vkVfAtcPIaCGdzIkkbeaTrVbGQ7HVgi4s+EmM/M1K4ZuWQH0jGcvMvNePfxYA== "@types/leaflet@^1.9.8": version "1.9.12" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.12.tgz#a6626a0b3fba36fd34723d6e95b22e8024781ad6" + resolved "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz" integrity sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg== dependencies: "@types/geojson" "*" "@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.4": version "0.1.4" - resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz#0ef017b75eedce02ff6243b4189210e2e6d5e56d" + resolved "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz" integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA== "@types/mapbox__vector-tile@^1.3.4": version "1.3.4" - resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz#ad757441ef1d34628d9e098afd9c91423c1f8734" + resolved "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz" integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg== dependencies: "@types/geojson" "*" @@ -517,7 +526,7 @@ "@types/pbf@*", "@types/pbf@^3.0.5": version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.5.tgz#a9495a58d8c75be4ffe9a0bd749a307715c07404" + resolved "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz" integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA== "@types/prettier@^2.6.0": @@ -578,11 +587,16 @@ "@types/supercluster@^7.1.3": version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.3.tgz#1a1bc2401b09174d9c9e44124931ec7874a72b27" + resolved "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz" integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA== dependencies: "@types/geojson" "*" +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + "@types/ws@^8.5.5": version "8.5.5" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz" @@ -976,7 +990,7 @@ argparse@^2.0.1: arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-buffer-byte-length@^1.0.0: @@ -1074,7 +1088,7 @@ arrify@^2.0.1: assign-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== asynciterator.prototype@^1.0.0: @@ -1209,14 +1223,14 @@ bytes@3.1.2: bytewise-core@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + resolved "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz" integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== dependencies: typewise-core "^1.2" bytewise@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + resolved "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz" integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== dependencies: bytewise-core "^1.2.2" @@ -1691,7 +1705,7 @@ duplexer@^0.1.2: earcut@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" + resolved "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== editorconfig@^1.0.2: @@ -1742,7 +1756,7 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -2134,14 +2148,14 @@ express@^4.17.3: extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" @@ -2194,7 +2208,7 @@ faye-websocket@^0.11.3: fflate@^0.8.0: version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz" integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== file-entry-cache@^6.0.1: @@ -2354,7 +2368,7 @@ geojson-flatten@^1.0.4: geojson-vt@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + resolved "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz" integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: @@ -2392,12 +2406,12 @@ get-symbol-description@^1.0.0: get-value@^2.0.2, get-value@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== gl-matrix@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" + resolved "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz" integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== glob-parent@^5.1.2, glob-parent@~5.1.2: @@ -2445,7 +2459,7 @@ glob@^7.1.3, glob@^7.2.3: global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -2686,7 +2700,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: ieee754@^1.1.12: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: @@ -2740,7 +2754,7 @@ inherits@2.0.3: ini@^1.3.5: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.3, internal-slot@^1.0.5: @@ -2831,12 +2845,12 @@ is-docker@^2.0.0, is-docker@^2.1.1: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" @@ -3120,7 +3134,7 @@ json-stable-stringify-without-jsonify@^1.0.1: json-stringify-pretty-compact@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz#cf4844770bddee3cb89a6170fe4b00eee5dbf1d4" + resolved "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz" integrity sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q== json5@^1.0.1, json5@^1.0.2: @@ -3142,7 +3156,7 @@ json5@^1.0.1, json5@^1.0.2: kdbush@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39" + resolved "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz" integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== kind-of@^6.0.2: @@ -3281,7 +3295,7 @@ map-obj@^4.1.0: maplibre-gl@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-4.4.1.tgz#823c55817cbdf6f85d0078c489b86f0dcbe310ba" + resolved "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.4.1.tgz" integrity sha512-tD+wn8qWSLCGhABKBrbewmgFfyopZDz+fkYXeOM8vdBhnf126DvMPyaYGGoKvoF4QuswCsgikETd2c39wK+OQw== dependencies: "@mapbox/geojson-rewind" "^0.5.2" @@ -3467,7 +3481,7 @@ multicast-dns@^7.2.5: murmurhash-js@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + resolved "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz" integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== nanoid@3.3.3: @@ -3735,6 +3749,13 @@ parse-srcset@^1.0.2: resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz" integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== +parse5@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.0.tgz#8a0591ce9b7c5e2027173ab737d4d3fc3d826fab" + integrity sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA== + dependencies: + entities "^4.5.0" + parse5@^7.1.1: version "7.1.2" resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" @@ -3789,7 +3810,7 @@ path-type@^4.0.0: pbf@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + resolved "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz" integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== dependencies: ieee754 "^1.1.12" @@ -3821,7 +3842,7 @@ pkg-dir@^7.0.0: pmtiles@^3.0.6: version "3.0.6" - resolved "https://registry.yarnpkg.com/pmtiles/-/pmtiles-3.0.6.tgz#6c331431e6ac08f0b01ba2a56bb8e4a97710ad95" + resolved "https://registry.npmjs.org/pmtiles/-/pmtiles-3.0.6.tgz" integrity sha512-IdeMETd5lBIDVTLul1HFl0Q7l4KLJjzdxgcp+sN7pYvbipaV7o/0u0HiV06kaFCD0IGEN8KtUHyFZpY30WMflw== dependencies: "@types/leaflet" "^1.9.8" @@ -3879,7 +3900,7 @@ postcss@^8.3.11, postcss@^8.4.21: potpack@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" + resolved "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz" integrity sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw== prelude-ls@^1.2.1: @@ -3960,7 +3981,7 @@ prop-types@^15.8.1: protocol-buffers-schema@^3.3.1: version "3.6.0" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" + resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz" integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== proxy-addr@~2.0.7: @@ -4005,7 +4026,7 @@ quick-lru@^5.1.1: quickselect@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + resolved "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz" integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== randombytes@^2.1.0: @@ -4136,7 +4157,7 @@ resolve-from@^5.0.0: resolve-protobuf-schema@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + resolved "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz" integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== dependencies: protocol-buffers-schema "^3.3.1" @@ -4185,7 +4206,7 @@ run-parallel@^1.1.9: rw@^1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== rw@~0.1.4: @@ -4364,7 +4385,7 @@ set-blocking@^2.0.0: set-value@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" @@ -4450,17 +4471,17 @@ sockjs@^0.3.24: sort-asc@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.2.0.tgz#00a49e947bc25d510bfde2cbb8dffda9f50eb2fc" + resolved "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz" integrity sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA== sort-desc@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.2.0.tgz#280c1bdafc6577887cedbad1ed2e41c037976646" + resolved "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz" integrity sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w== sort-object@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-3.0.3.tgz#945727165f244af9dc596ad4c7605a8dee80c269" + resolved "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz" integrity sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ== dependencies: bytewise "^1.1.0" @@ -4513,7 +4534,7 @@ spdy@^4.0.2: split-string@^3.0.1: version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" @@ -4644,7 +4665,7 @@ style-loader@^3.3.1: supercluster@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" + resolved "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz" integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ== dependencies: kdbush "^4.0.2" @@ -4730,7 +4751,7 @@ tinycolor2@^1.4.1: tinyqueue@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + resolved "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz" integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== to-regex-range@^5.0.1: @@ -4909,12 +4930,12 @@ typescript@^5.0.0, typescript@^5.1.3: typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + resolved "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz" integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== typewise@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + resolved "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz" integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== dependencies: typewise-core "^1.2.0" @@ -4931,7 +4952,7 @@ unbox-primitive@^1.0.2: union-value@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" @@ -4999,7 +5020,7 @@ vary@~1.1.2: vt-pbf@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" + resolved "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz" integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== dependencies: "@mapbox/point-geometry" "0.1.0" @@ -5275,7 +5296,7 @@ which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: which@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0"