From a421a2bb3a1e8ec0f796c75603d4ef55c81e0654 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Thu, 19 May 2022 21:34:23 -0400 Subject: [PATCH 001/444] Add Zia symbol for New Mexico shield --- style/icons/shield40_us_nm_2.svg | 5 +++++ style/icons/shield40_us_nm_3.svg | 5 +++++ style/js/shield_defs.js | 14 +++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 style/icons/shield40_us_nm_2.svg create mode 100644 style/icons/shield40_us_nm_3.svg diff --git a/style/icons/shield40_us_nm_2.svg b/style/icons/shield40_us_nm_2.svg new file mode 100644 index 000000000..13a23c708 --- /dev/null +++ b/style/icons/shield40_us_nm_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/style/icons/shield40_us_nm_3.svg b/style/icons/shield40_us_nm_3.svg new file mode 100644 index 000000000..a15b60d6a --- /dev/null +++ b/style/icons/shield40_us_nm_3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/style/js/shield_defs.js b/style/js/shield_defs.js index 50747e018..7a67ea303 100644 --- a/style/js/shield_defs.js +++ b/style/js/shield_defs.js @@ -1112,7 +1112,19 @@ export function loadShields(shieldImages) { ].forEach((county) => (shields[`US:NJ:${county}`] = usMUTCDCountyShield)); shields["US:NJ:Bergen"] = shields["default"]; - shields["US:NM"] = pillShield(colors.white, colors.pink, colors.black); + shields["US:NM"] = { + backgroundImage: [ + shieldImages.shield40_us_nm_2, + shieldImages.shield40_us_nm_3, + ], + textColor: colors.black, + padding: { + left: 7, + right: 7, + top: 7, + bottom: 7, + }, + }; shields["US:NV"] = { backgroundImage: shieldImages.shield40_us_nv, From 7b1d9885c59884b7e7f5e5ee7836670eac1c14e5 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 19:38:10 -0400 Subject: [PATCH 002/444] Add oneway arrows to remaining highway classes --- src/americana.js | 5 +- src/layer/oneway.js | 294 ++++++++++---------------------------------- 2 files changed, 67 insertions(+), 232 deletions(-) diff --git a/src/americana.js b/src/americana.js index 890cee951..6a846b51a 100644 --- a/src/americana.js +++ b/src/americana.js @@ -125,7 +125,6 @@ americanaLayers.push( lyrRoad.smallServiceTollTunnel.fill(), lyrOneway.tunnel, - lyrOneway.tunnelLink, lyrAeroway.runway, lyrAeroway.runwayArea, @@ -223,8 +222,7 @@ americanaLayers.push( lyrRoad.secondaryToll.surface(), lyrRoad.primaryToll.surface(), - lyrOneway.road, - lyrOneway.link + lyrOneway.surface ); americanaLayers.push(lyrBuilding.building); @@ -314,7 +312,6 @@ var bridgeLayers = [ lyrRoadLabel.bridgeSpacer, lyrOneway.bridge, - lyrOneway.bridgeLink, ]; //Render bridge without layer on the lowest bridge layer diff --git a/src/layer/oneway.js b/src/layer/oneway.js index ed1b598f0..85d16a339 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -1,120 +1,70 @@ "use strict"; -export const road = { - id: "road_oneway", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", "oneway", 1], - ["!in", "brunnel", "bridge", "tunnel"], - ["!=", "ramp", 1], +// Common expressions +const highwaySelector = ["match", ["get", "class"]]; + +const linkSelector = ["match", ["get", "ramp"], 1]; + +// Helper function to determine icon opacity +function iconOpacity(maxOpacity) { + return [ + "interpolate", + ["exponential", 2], + ["zoom"], + 15, + 0, + 16, [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", + ...highwaySelector, + ["motorway", "trunk", "primary", "secondary", "tertiary"], + [...linkSelector, 0, maxOpacity], + 0, ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, + 17, + maxOpacity, + ]; +} + +export const surface = { + id: "road_oneway", + filter: ["all", ["==", "oneway", 1], ["!in", "brunnel", "bridge", "tunnel"]], + source: "openmaptiles", - minzoom: 15, "source-layer": "transportation", -}; - -export const tunnel = { - id: "tunnel_oneway", type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", "oneway", 1], - ["==", "brunnel", "tunnel"], - ["!=", "ramp", 1], - [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], - ], - }, - "icon-image": "oneway", - visibility: "visible", - //"icon-rotate": 90, - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", + minzoom: 15, - "source-layer": "transportation", -}; -export const bridge = { - id: "bridge_oneway", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", "oneway", 1], - ["==", "brunnel", "bridge"], - ["!=", "ramp", 1], - [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], + "icon-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 15, + [ + ...highwaySelector, + "motorway", + [...linkSelector, 0.3, 0.5], + ["trunk", "primary"], + [...linkSelector, 0.2, 0.5], + "secondary", + [...linkSelector, 0.2, 0.3], + 0.2, + ], + 19, + [ + ...highwaySelector, + "motorway", + [...linkSelector, 0.8, 1], + ["trunk", "primary"], + [...linkSelector, 0.6, 1], + "secondary", + [...linkSelector, 0.4, 0.8], + "tertiary", + [...linkSelector, 0.3, 0.6], + 0.3, ], - }, + ], "icon-image": "oneway", visibility: "visible", "icon-padding": 2, @@ -122,134 +72,22 @@ export const bridge = { "symbol-placement": "line", "icon-rotation-alignment": "map", }, - source: "openmaptiles", - minzoom: 15, - "source-layer": "transportation", -}; - -export const link = { - id: "road_oneway_link", - type: "symbol", paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", "oneway", 1], - ["!in", "brunnel", "bridge", "tunnel"], - ["==", "ramp", 1], - [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", + "icon-opacity": iconOpacity(0.5), }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", }; -export const tunnelLink = { - id: "tunnel_oneway_link", - type: "symbol", +export const tunnel = { + ...surface, + id: "tunnel_oneway", + filter: ["all", ["==", "oneway", 1], ["==", "brunnel", "tunnel"]], paint: { - "icon-opacity": 0.5, + "icon-opacity": iconOpacity(0.2), }, - filter: [ - "all", - ["==", "oneway", 1], - ["==", "brunnel", "tunnel"], - ["==", "ramp", 1], - [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", - visibility: "visible", - //"icon-rotate": 90, - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", }; -export const bridgeLink = { - id: "bridge_oneway_link", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", "oneway", 1], - ["==", "brunnel", "bridge"], - ["==", "ramp", 1], - [ - "in", - "class", - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", +export const bridge = { + ...surface, + id: "bridge_oneway", + filter: ["all", ["==", "oneway", 1], ["==", "brunnel", "bridge"]], }; From 8e1a6ba807cc6dc5a21a724b26d20ad5c800177e Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 21:17:07 -0400 Subject: [PATCH 003/444] Adjust oneway arrow spacing --- src/layer/oneway.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 85d16a339..4e3d1fe2e 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -68,7 +68,15 @@ export const surface = { "icon-image": "oneway", visibility: "visible", "icon-padding": 2, - "symbol-spacing": 75, + "symbol-spacing": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 15, + 75, + 19, + 300, + ], "symbol-placement": "line", "icon-rotation-alignment": "map", }, From af56c56dcf1192e9fca8e008e5bc2106ea643092 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 21:17:46 -0400 Subject: [PATCH 004/444] Add maxzoom for oneway arrows --- src/layer/oneway.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 4e3d1fe2e..0b85e731c 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -34,6 +34,7 @@ export const surface = { type: "symbol", minzoom: 15, + maxzoom: 20, // Removing this may affect performance layout: { "icon-size": [ From ee8f903f16bf3cbbb14bc37941bf8e6b1e3b9bcb Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 21:28:05 -0400 Subject: [PATCH 005/444] Remove icon opacity expression from oneway layer --- src/layer/oneway.js | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 0b85e731c..7efca9b6e 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -5,26 +5,6 @@ const highwaySelector = ["match", ["get", "class"]]; const linkSelector = ["match", ["get", "ramp"], 1]; -// Helper function to determine icon opacity -function iconOpacity(maxOpacity) { - return [ - "interpolate", - ["exponential", 2], - ["zoom"], - 15, - 0, - 16, - [ - ...highwaySelector, - ["motorway", "trunk", "primary", "secondary", "tertiary"], - [...linkSelector, 0, maxOpacity], - 0, - ], - 17, - maxOpacity, - ]; -} - export const surface = { id: "road_oneway", filter: ["all", ["==", "oneway", 1], ["!in", "brunnel", "bridge", "tunnel"]], @@ -82,7 +62,7 @@ export const surface = { "icon-rotation-alignment": "map", }, paint: { - "icon-opacity": iconOpacity(0.5), + "icon-opacity": 0.5, }, }; @@ -91,7 +71,7 @@ export const tunnel = { id: "tunnel_oneway", filter: ["all", ["==", "oneway", 1], ["==", "brunnel", "tunnel"]], paint: { - "icon-opacity": iconOpacity(0.2), + "icon-opacity": 0.2, }, }; From 20ea9e729d9006d84e85bacfc79b6ed5aedb7bab Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 22:40:44 -0400 Subject: [PATCH 006/444] Change motorway and trunk oneway arrow to white --- icons/{oneway.svg => oneway_black.svg} | 0 icons/oneway_white.svg | 6 ++++++ src/layer/oneway.js | 25 ++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) rename icons/{oneway.svg => oneway_black.svg} (100%) create mode 100644 icons/oneway_white.svg diff --git a/icons/oneway.svg b/icons/oneway_black.svg similarity index 100% rename from icons/oneway.svg rename to icons/oneway_black.svg diff --git a/icons/oneway_white.svg b/icons/oneway_white.svg new file mode 100644 index 000000000..eb01344b3 --- /dev/null +++ b/icons/oneway_white.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 7efca9b6e..367edb65d 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -46,7 +46,30 @@ export const surface = { 0.3, ], ], - "icon-image": "oneway", + "icon-image": [ + "match", + ["get", "brunnel"], + "tunnel", + "oneway_black", + [ + "match", + ["get", "toll"], + 1, + "oneway_black", + [ + "match", + ["get", "expressway"], + 1, + "oneway_black", + [ + ...highwaySelector, + ["motorway", "trunk"], + "oneway_white", + "oneway_black", + ], + ], + ], + ], visibility: "visible", "icon-padding": 2, "symbol-spacing": [ From ae9753fb60219685381141a99cca896d6e0ae071 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 24 Jul 2022 22:46:05 -0400 Subject: [PATCH 007/444] Change trunk oneway arrow to black --- src/layer/oneway.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 367edb65d..262934e8a 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -56,18 +56,7 @@ export const surface = { ["get", "toll"], 1, "oneway_black", - [ - "match", - ["get", "expressway"], - 1, - "oneway_black", - [ - ...highwaySelector, - ["motorway", "trunk"], - "oneway_white", - "oneway_black", - ], - ], + [...highwaySelector, "motorway", "oneway_white", "oneway_black"], ], ], visibility: "visible", From c12dde1100a7c82a2a91702994285df5006803de Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Tue, 30 Aug 2022 20:49:38 -0400 Subject: [PATCH 008/444] Remove oneway arrows from link roads --- src/layer/oneway.js | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 1ad5a997a..62af02c86 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -2,13 +2,13 @@ // Common expressions const highwaySelector = ["match", ["get", "class"]]; -const linkSelector = ["match", ["get", "ramp"], 1]; export const surface = { id: "road_oneway", filter: [ "all", ["==", ["get", "oneway"], 1], + ["!=", ["get", "ramp"], 1], ["!", ["in", ["get", "brunnel"], ["literal", ["bridge", "tunnel"]]]], ], source: "openmaptiles", @@ -25,25 +25,21 @@ export const surface = { 15, [ ...highwaySelector, - "motorway", - [...linkSelector, 0.3, 0.5], - ["trunk", "primary"], - [...linkSelector, 0.2, 0.5], + ["motorway", "trunk", "primary"], + 0.5, "secondary", - [...linkSelector, 0.2, 0.3], + 0.3, 0.2, ], 19, [ ...highwaySelector, - "motorway", - [...linkSelector, 0.8, 1], - ["trunk", "primary"], - [...linkSelector, 0.6, 1], + ["motorway", "trunk", "primary"], + 1, "secondary", - [...linkSelector, 0.4, 0.8], + 0.8, "tertiary", - [...linkSelector, 0.3, 0.6], + 0.6, 0.3, ], ], @@ -85,6 +81,7 @@ export const tunnel = { filter: [ "all", ["==", ["get", "oneway"], 1], + ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "tunnel"], ], paint: { @@ -98,6 +95,7 @@ export const bridge = { filter: [ "all", ["==", ["get", "oneway"], 1], + ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "bridge"], ], }; From 99b859b60ad67b89cbdc22a8e983d4e84914614c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 12 Mar 2023 21:15:30 -0400 Subject: [PATCH 009/444] Separate shield library --- .github/workflows/deploy.yml | 5 + .github/workflows/test-build-mac.yml | 8 + .github/workflows/test-build-ubuntu.yml | 8 + .gitignore | 6 +- .mocharc.yml | 9 + CONTRIBUTING.md | 10 +- README.md | 2 + package-lock.json | 13977 ++++++++++++---- package.json | 35 +- scripts/{build.js => build.ts} | 48 +- scripts/serve.js | 13 - scripts/serve.ts | 16 + scripts/taginfo.js | 91 +- shieldlib/.mocharc.yml | 9 + shieldlib/.prettierignore | 2 + shieldlib/README.md | 306 + shieldlib/package-lock.json | 9520 +++++++++++ shieldlib/package.json | 53 + shieldlib/scripts/build.js | 37 + shieldlib/src/custom_shields.mjs | 72 + shieldlib/src/document_graphics.d.ts | 11 + shieldlib/src/document_graphics.ts | 28 + shieldlib/src/headless_graphics.ts | 19 + shieldlib/src/index.d.ts | 14 + shieldlib/src/index.ts | 17 + shieldlib/src/screen_gfx.d.ts | 30 + shieldlib/src/screen_gfx.ts | 104 + shieldlib/src/shield.d.ts | 20 + {src/js => shieldlib/src}/shield.js | 224 +- .../src/shield_canvas_draw.mjs | 214 +- shieldlib/src/shield_renderer.d.ts | 60 + shieldlib/src/shield_renderer.ts | 191 + .../src/shield_text.mjs | 103 +- shieldlib/src/types.d.ts | 59 + shieldlib/src/types.ts | 77 + shieldlib/test/spec/shield.ts | 45 + shieldlib/tsconfig.json | 15 + src/americana.js | 26 +- src/js/custom_shields.js | 73 - src/js/legend_control.js | 13 +- src/js/poi.js | 21 +- src/js/screen_gfx.js | 135 - src/js/shield_defs.js | 67 +- src/js/shield_format.ts | 29 + src/shieldtest.js | 120 +- test-ts/shield_format/shield_format.spec.ts | 24 + test/spec/shield.js | 93 +- tsconfig.json | 13 + 48 files changed, 21654 insertions(+), 4418 deletions(-) rename scripts/{build.js => build.ts} (55%) delete mode 100644 scripts/serve.js create mode 100644 scripts/serve.ts create mode 100644 shieldlib/.mocharc.yml create mode 100644 shieldlib/.prettierignore create mode 100644 shieldlib/README.md create mode 100644 shieldlib/package-lock.json create mode 100644 shieldlib/package.json create mode 100644 shieldlib/scripts/build.js create mode 100644 shieldlib/src/custom_shields.mjs create mode 100644 shieldlib/src/document_graphics.d.ts create mode 100644 shieldlib/src/document_graphics.ts create mode 100644 shieldlib/src/headless_graphics.ts create mode 100644 shieldlib/src/index.d.ts create mode 100644 shieldlib/src/index.ts create mode 100644 shieldlib/src/screen_gfx.d.ts create mode 100644 shieldlib/src/screen_gfx.ts create mode 100644 shieldlib/src/shield.d.ts rename {src/js => shieldlib/src}/shield.js (52%) rename src/js/shield_canvas_draw.js => shieldlib/src/shield_canvas_draw.mjs (79%) create mode 100644 shieldlib/src/shield_renderer.d.ts create mode 100644 shieldlib/src/shield_renderer.ts rename src/js/shield_text.js => shieldlib/src/shield_text.mjs (75%) create mode 100644 shieldlib/src/types.d.ts create mode 100644 shieldlib/src/types.ts create mode 100644 shieldlib/test/spec/shield.ts create mode 100644 shieldlib/tsconfig.json delete mode 100644 src/js/custom_shields.js delete mode 100644 src/js/screen_gfx.js create mode 100644 src/js/shield_format.ts create mode 100644 test-ts/shield_format/shield_format.spec.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9bd325724..070fe3877 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -22,6 +22,11 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18.x + - name: Build Shield Library ๐Ÿ›ก๏ธ + run: | + cd shieldlib + npm ci --include=dev + npm run build - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev diff --git a/.github/workflows/test-build-mac.yml b/.github/workflows/test-build-mac.yml index ff9d7e0ed..512626b86 100644 --- a/.github/workflows/test-build-mac.yml +++ b/.github/workflows/test-build-mac.yml @@ -14,6 +14,12 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18.x + - name: Build Shield Library ๐Ÿ›ก๏ธ + run: | + cd shieldlib + npm install -g shx + npm ci --include=dev + npm run build - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev @@ -22,3 +28,5 @@ jobs: - name: Test ๐Ÿงช run: | npm test + cd shieldlib + npm test diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index ab52c7603..9d3c03f85 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -14,6 +14,12 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18.x + - name: Build Shield Library ๐Ÿ›ก๏ธ + run: | + cd shieldlib + npm install -g shx + npm ci --include=dev + npm run build - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev @@ -22,3 +28,5 @@ jobs: - name: Test ๐Ÿงช run: | npm test + cd shieldlib + npm test diff --git a/.gitignore b/.gitignore index ba1665b46..ced28cfae 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,8 @@ rebusurance.zip config.js .parcel-cache dist/ -local.config.js +dist-shieldjs/ +download/ +src/local.config.js +shieldlib/dist +shieldlib/node_modules diff --git a/.mocharc.yml b/.mocharc.yml index 7fd0cbb99..da6b538f5 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1 +1,10 @@ recursive: true +extension: + - ts +spec: + - test/**/*.js + - test-ts/**/*.spec.ts +require: ts-node/register +node-option: + - loader=ts-node/esm + - experimental-specifier-resolution=node diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cebbf1dbb..fb72ba263 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -282,17 +282,17 @@ The `loadShields` function in js/shield_defs.js contains a definition object for In addition to `textHaloColor`, the config variable **`SHIELD_TEXT_HALO_COLOR_OVERRIDE`** can be used to override the text halo color on all shields. This can be helpful to avoid collisions with other design features when determining padding values. For example, set `SHIELD_TEXT_HALO_COLOR_OVERRIDE` in src/config.js to `"magenta"` to display a magenta halo around all shield text. -If special code is necessary to style a route with a specific `ref` or `name` in a particular network, **`overrideByRef`** or **`overrideByWayName`** can be used to define and override any of the above properties. `overrideByRef` is an object mapping `ref` values to partial shield definition objects, containing whichever properties are to be overridden for that particular `ref` value. `overrideByWayName` does the same for `name` values. If necessary, these parameters can be used to override the entire shield definition. +If special code is necessary to style a route with a specific `ref` or `name` in a particular network, **`overrideByRef`** or **`overrideByName`** can be used to define and override any of the above properties. `overrideByRef` is an object mapping `ref` values to partial shield definition objects, containing whichever properties are to be overridden for that particular `ref` value. `overrideByName` does the same for `name` values. If necessary, these parameters can be used to override the entire shield definition. -Additionally, **`refsByWayName`** is an object mapping way names to text that can be superimposed on the background as a fallback for a missing `ref` value. (`refsByWayName` implies `notext`.) This temporary fallback is designed for use in [limited situations](https://wiki.openstreetmap.org/wiki/United_States/Unusual_highway_networks). In the future, it is expected that these initialisms will be encoded on the server side by processing appropriate tagging which holds the initialism in the database. +Additionally, **`refsByName`** is an object mapping way names to text that can be superimposed on the background as a fallback for a missing `ref` value. (`refsByName` implies `notext`.) This temporary fallback is designed for use in [limited situations](https://wiki.openstreetmap.org/wiki/United_States/Unusual_highway_networks). In the future, it is expected that these initialisms will be encoded on the server side by processing appropriate tagging which holds the initialism in the database. -`refsByWayName` only works if there is no `ref` tag and the expression in the `routeConcurrency` function in layer/highway_shield.js includes the `name` property in the image name. The network needs to be listed as an input value that causes the `match` expression to append `name` to the image name. +`refsByName` only works if there is no `ref` tag and the expression in the `routeConcurrency` function in layer/highway_shield.js includes the `name` property in the image name. The network needs to be listed as an input value that causes the `match` expression to append `name` to the image name. -When using `overrideByRef` or `refsByWayName`, make sure to add a line to the Special Cases section of this page explaining why it is necessary, as they are only intended for use in special cases. +When using `overrideByRef` or `refsByName`, make sure to add a line to the Special Cases section of this page explaining why it is necessary, as they are only intended for use in special cases. ### Banners -The shield definition supports a property **`modifiers`** which accepts an array of text strings which will be drawn atop each shield, in 10px height increments. This is used in cases where additional text is needed to differentiate shields with a common symbology, for example for [special routes of the US Numbered Highway System](https://en.wikipedia.org/wiki/List_of_special_routes_of_the_United_States_Numbered_Highway_System): +The shield definition supports a property **`banners`** which accepts an array of text strings which will be drawn atop each shield, in 10px height increments. This is used in cases where additional text is needed to differentiate shields with a common symbology, for example for [special routes of the US Numbered Highway System](https://en.wikipedia.org/wiki/List_of_special_routes_of_the_United_States_Numbered_Highway_System):
diff --git a/README.md b/README.md index 75addefd4..cdc2bca64 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ The technology stack for this style can be summarized below: Americana technology stack +The dynamic shield generator is included as a [module](shieldlib/README.md) in this repository and also [published to npm](https://www.npmjs.com/package/@americana/maplibre-shield-generator). + ## Data sources The OpenStreetMap Americana style is built upon the [OpenMapTiles schema](https://openmaptiles.org/schema/), which includes: diff --git a/package-lock.json b/package-lock.json index 898b8d681..b47513dab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,10 @@ "name": "openstreetmap-americana", "version": "0.1.0", "dependencies": { - "color-namer": "^1.4.0", + "@americana/maplibre-shield-generator": "file:shieldlib", "color-rgba": "^2.4.0", "events": "^3.3.0", - "maplibre-gl": "^2.4.0", + "glob": "^8.0.3", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", "tokenfield": "^1.5.2" @@ -19,209 +19,158 @@ "devDependencies": { "@basemaps/sprites": "^6.32.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", + "@types/chai": "^4.3.4", + "@types/color-namer": "^1.3.0", + "@types/expect": "^24.3.0", + "@types/mocha": "^10.0.1", "canvas": "^2.11.0", "chai": "^4.3.7", - "color-name": "^2.0.0", + "color-namer": "^1.4.0", "commander": "^10.0.0", "esbuild": "^0.17.4", "glob": "^9.2.1", + "maplibre-gl": "^2.4.0", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", - "prettier": "2.3.2", + "prettier": "^2.3.2", "shx": "^0.3.4", - "svgo": "^2.8.0" + "svgo": "^2.8.0", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" }, "engines": { "node": ">=14", "npm": ">=8.3.0" } }, - "node_modules/@basemaps/sprites": { - "version": "6.32.1", - "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-6.32.1.tgz", - "integrity": "sha512-9lZmw0TeDji9qkrCGT06oqpUH9eGK7P1hooDtL65Bl79Cu3Mard6GUkmzJ5kxWZEgICeM+9siPpE3t1zumciKA==", + "node_modules/@americana/maplibre-shield-generator": { + "resolved": "shieldlib", + "link": true + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", "dev": true, + "license": "MIT", "dependencies": { - "@mapbox/shelf-pack": "^3.2.0", - "@rushstack/ts-command-line": "^4.3.13", - "sharp": "^0.30.7" - }, - "bin": { - "basemaps-sprites": "bin/basemaps-sprites.mjs" + "@babel/highlight": "^7.18.6" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.4.tgz", - "integrity": "sha512-R9GCe2xl2XDSc2XbQB63mFiFXHIVkOP+ltIxICKXqUPrFX97z6Z7vONCLQM1pSOLGqfLrGi3B7nbhxmFY/fomg==", - "cpu": [ - "arm" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.4.tgz", - "integrity": "sha512-91VwDrl4EpxBCiG6h2LZZEkuNvVZYJkv2T9gyLG/mhGG1qrM7i5SwUcg/hlSPnL/4hDT0TFcF35/XMGSn0bemg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight": { + "version": "7.18.6", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.4.tgz", - "integrity": "sha512-mGSqhEPL7029XL7QHNPxPs15JVa02hvZvysUcyMP9UXdGFwncl2WU0bqx+Ysgzd+WAbv8rfNa73QveOxAnAM2w==", - "cpu": [ - "x64" - ], + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.4.tgz", - "integrity": "sha512-tTyJRM9dHvlMPt1KrBFVB5OW1kXOsRNvAPtbzoKazd5RhD5/wKlXk1qR2MpaZRYwf4WDMadt0Pv0GwxB41CVow==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.4.tgz", - "integrity": "sha512-phQuC2Imrb3TjOJwLN8EO50nb2FHe8Ew0OwgZDH1SV6asIPGudnwTQtighDF2EAYlXChLoMJwqjAp4vAaACq6w==", - "cpu": [ - "x64" - ], + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.4.tgz", - "integrity": "sha512-oH6JUZkocgmjzzYaP5juERLpJQSwazdjZrTPgLRmAU2bzJ688x0vfMB/WTv4r58RiecdHvXOPC46VtsMy/mepg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.4.tgz", - "integrity": "sha512-U4iWGn/9TrAfpAdfd56eO0pRxIgb0a8Wj9jClrhT8hvZnOnS4dfMPW7o4fn15D/KqoiVYHRm43jjBaTt3g/2KA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.4.tgz", - "integrity": "sha512-S2s9xWTGMTa/fG5EyMGDeL0wrWVgOSQcNddJWgu6rG1NCSXJHs76ZP9AsxjB3f2nZow9fWOyApklIgiTGZKhiw==", - "cpu": [ - "arm" - ], + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.4.tgz", - "integrity": "sha512-UkGfQvYlwOaeYJzZG4cLV0hCASzQZnKNktRXUo3/BMZvdau40AOz9GzmGA063n1piq6VrFFh43apRDQx8hMP2w==", - "cpu": [ - "arm64" - ], + "node_modules/@basemaps/sprites": { + "version": "6.32.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@mapbox/shelf-pack": "^3.2.0", + "@rushstack/ts-command-line": "^4.3.13", + "sharp": "^0.30.7" + }, + "bin": { + "basemaps-sprites": "bin/basemaps-sprites.mjs" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.4.tgz", - "integrity": "sha512-3lqFi4VFo/Vwvn77FZXeLd0ctolIJH/uXkH3yNgEk89Eh6D3XXAC9/iTPEzeEpsNE5IqGIsFa5Z0iPeOh25IyA==", - "cpu": [ - "ia32" - ], + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.4.tgz", - "integrity": "sha512-HqpWZkVslDHIwdQ9D+gk7NuAulgQvRxF9no54ut/M55KEb3mi7sQS3GwpPJzSyzzP0UkjQVN7/tbk88/CaX4EQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.17.11", "cpu": [ - "loong64" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -230,186 +179,124 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.4.tgz", - "integrity": "sha512-d/nMCKKh/SVDbqR9ju+b78vOr0tNXtfBjcp5vfHONCCOAL9ad8gN9dC/u+UnH939pz7wO+0u/x9y1MaZcb/lKA==", - "cpu": [ - "mips64el" - ], + "node_modules/@jest/expect-utils": { + "version": "29.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.4.3" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.4.tgz", - "integrity": "sha512-lOD9p2dmjZcNiTU+sGe9Nn6G3aYw3k0HBJies1PU0j5IGfp6tdKOQ6mzfACRFCqXjnBuTqK7eTYpwx09O5LLfg==", - "cpu": [ - "ppc64" - ], + "node_modules/@jest/schemas": { + "version": "29.4.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.4.tgz", - "integrity": "sha512-mTGnwWwVshAjGsd8rP+K6583cPDgxOunsqqldEYij7T5/ysluMHKqUIT4TJHfrDFadUwrghAL6QjER4FeqQXoA==", - "cpu": [ - "riscv64" - ], + "node_modules/@jest/types": { + "version": "29.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.4.tgz", - "integrity": "sha512-AQYuUGp50XM29/N/dehADxvc2bUqDcoqrVuijop1Wv72SyxT6dDB9wjUxuPZm2HwIM876UoNNBMVd+iX/UTKVQ==", - "cpu": [ - "s390x" - ], + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.4.tgz", - "integrity": "sha512-+AsFBwKgQuhV2shfGgA9YloxLDVjXgUEWZum7glR5lLmV94IThu/u2JZGxTgjYby6kyXEx8lKOqP5rTEVBR0Rw==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.4.tgz", - "integrity": "sha512-zD1TKYX9553OiLS/qkXPMlWoELYkH/VkzRYNKEU+GwFiqkq0SuxsKnsCg5UCdxN3cqd+1KZ8SS3R+WG/Hxy2jQ==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.4.tgz", - "integrity": "sha512-PY1NjEsLRhPEFFg1AV0/4Or/gR+q2dOb9s5rXcPuCjyHRzbt8vnHJl3vYj+641TgWZzTFmSUnZbzs1zwTzjeqw==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.4.tgz", - "integrity": "sha512-B3Z7s8QZQW9tKGleMRXvVmwwLPAUoDCHs4WZ2ElVMWiortLJFowU1NjAhXOKjDgC7o9ByeVcwyOlJ+F2r6ZgmQ==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.4.tgz", - "integrity": "sha512-0HCu8R3mY/H5V7N6kdlsJkvrT591bO/oRZy8ztF1dhgNU5xD5tAh5bKByT1UjTGjp/VVBsl1PDQ3L18SfvtnBQ==", - "cpu": [ - "arm64" - ], + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.4.tgz", - "integrity": "sha512-VUjhVDQycse1gLbe06pC/uaA0M+piQXJpdpNdhg8sPmeIZZqu5xPoGWVCmcsOO2gaM2cywuTYTHkXRozo3/Nkg==", - "cpu": [ - "ia32" - ], + "node_modules/@lezer/common": { + "version": "0.15.12", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT" + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^0.15.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.4.tgz", - "integrity": "sha512-0kLAjs+xN5OjhTt/aUA6t48SfENSCKgGPfExADYTOo/UCn0ivxos9/anUVeSfg+L+2O9xkFxvJXIJfG+Q4sYSg==", + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.5.2", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } + "linux" + ] }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", - "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" @@ -420,22 +307,18 @@ }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=", "engines": { "node": ">= 0.6" } }, "node_modules/@mapbox/mapbox-gl-supported": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", - "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + "license": "BSD-3-Clause" }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -453,49 +336,42 @@ }, "node_modules/@mapbox/point-geometry": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" + "license": "ISC" }, "node_modules/@mapbox/shelf-pack": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@mapbox/shelf-pack/-/shelf-pack-3.2.0.tgz", - "integrity": "sha512-dyQxe6ukILV6qaEvxoKCIwhblgRjYp1ZGlClo4xvfbmxzFO5LYu7Tnrg2AZrRgN7VsSragsGcNjzUe9kCdKHYQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=6.0.0" } }, "node_modules/@mapbox/tiny-sdf": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", - "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" + "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } }, "node_modules/@mapbox/whoots-js": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", "engines": { "node": ">=6.0.0" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-17.0.1.tgz", - "integrity": "sha512-pohuxZke5fAJmY7g9EM7tQHjFXOegG58R66tTGrHvdndJOr8hTDUOdgkmq3wCNNOJL8dIf014RVhvPua53P2ZQ==", "dev": true, + "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.0", @@ -514,1408 +390,1514 @@ }, "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@mapbox/unitbezier": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.11.0.tgz", - "integrity": "sha512-ptG9L0mjvJ5QtK11GsAFY+jGfsnqHDS6CY6Yw1xT7a9bhjfNYnf6UPwjV+pF6UgiucfNcMDNW9lkDLxvZKKxMg==", + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@mischnic/json-sourcemap/node_modules/json5": { + "version": "2.2.3", "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true - }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/mapbox__point-geometry": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", - "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" - }, - "node_modules/@types/mapbox__vector-tile": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", - "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", - "dependencies": { - "@types/geojson": "*", - "@types/mapbox__point-geometry": "*", - "@types/pbf": "*" - } - }, - "node_modules/@types/pbf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", - "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@parcel/bundler-default": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@parcel/cache": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + }, "engines": { - "node": ">=8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@parcel/codeframe": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "chalk": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@parcel/compressor-raw": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@parcel/plugin": "2.8.3" }, "engines": { - "node": ">= 8" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-css": "2.8.3", + "@parcel/optimizer-htmlnano": "2.8.3", + "@parcel/optimizer-image": "2.8.3", + "@parcel/optimizer-svgo": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-css": "2.8.3", + "@parcel/packager-html": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/packager-svg": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-browser-hmr": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/runtime-react-refresh": "2.8.3", + "@parcel/runtime-service-worker": "2.8.3", + "@parcel/transformer-babel": "2.8.3", + "@parcel/transformer-css": "2.8.3", + "@parcel/transformer-html": "2.8.3", + "@parcel/transformer-image": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3", + "@parcel/transformer-postcss": "2.8.3", + "@parcel/transformer-posthtml": "2.8.3", + "@parcel/transformer-raw": "2.8.3", + "@parcel/transformer-react-refresh-wrap": "2.8.3", + "@parcel/transformer-svg": "2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/core": { + "version": "2.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "node_modules/@parcel/core/node_modules/json5": { + "version": "2.2.3", "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@parcel/core/node_modules/semver": { + "version": "5.7.1", "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@parcel/diagnostic": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, "engines": { - "node": "*" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@parcel/events": { + "version": "2.8.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@parcel/fs": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@parcel/fs-search": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@parcel/fs-search/node_modules/detect-libc": { + "version": "1.0.3", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/@parcel/graph": { + "version": "2.8.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@parcel/hash": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@parcel/hash/node_modules/detect-libc": { + "version": "1.0.3", "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=10" + "node": ">=0.10" + } + }, + "node_modules/@parcel/logger": { + "version": "2.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/canvas": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.0.tgz", - "integrity": "sha512-bdTjFexjKJEwtIo0oRx8eD4G2yWoUOXP9lj279jmQ2zMnTQhT8C3512OKz3s+ZOaQlLbE7TuVvRDYDB3Llyy5g==", + "node_modules/@parcel/markdown-ansi": { + "version": "2.8.3", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" + "chalk": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/canvas/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "node_modules/@parcel/namer-default": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "mimic-response": "^2.0.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/canvas/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "node_modules/@parcel/node-resolver-core": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, "engines": { - "node": ">=8" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/canvas/node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "node_modules/@parcel/node-resolver-core/node_modules/semver": { + "version": "5.7.1", "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "node_modules/@parcel/optimizer-css": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@parcel/plugin": "2.8.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" }, "engines": { - "node": ">=10" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@parcel/optimizer-image": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "detect-libc": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "node_modules/@parcel/optimizer-image/node_modules/detect-libc": { + "version": "1.0.3", "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": "*" + "node": ">=0.10" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/@parcel/optimizer-svgo": { + "version": "2.8.3", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "svgo": "^2.4.0" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chroma-js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-1.4.1.tgz", - "integrity": "sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ==" - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/@parcel/optimizer-terser": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" }, "engines": { - "node": ">=12.5.0" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@parcel/package-manager": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", - "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "node_modules/@parcel/package-manager/node_modules/semver": { + "version": "5.7.1", "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color-namer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/color-namer/-/color-namer-1.4.0.tgz", - "integrity": "sha512-3mQMY9MJyfdV2uhe+xjQWcKHtYnPtl5svGjt89V2WWT2MlaLAd7C02886Wq7H1MTjjIIEa/NJLYPNF/Lhxhq2A==", - "dependencies": { - "chroma-js": "^1.3.4", - "es6-weak-map": "^2.0.3" - } - }, - "node_modules/color-parse": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", - "dependencies": { - "color-name": "^1.0.0" - } - }, - "node_modules/color-parse/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-rgba": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", - "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", - "dependencies": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/color-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", - "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/@parcel/packager-css": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "node_modules/@parcel/packager-html": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, "engines": { - "node": ">=0.1.90" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "node_modules/@parcel/packager-js": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, "engines": { - "node": ">=14" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/@parcel/packager-raw": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@parcel/plugin": "2.8.3" }, "engines": { - "node": ">=4.8" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@parcel/packager-svg": { + "version": "2.8.3", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "node_modules/@parcel/plugin": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "@parcel/types": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/@parcel/reporter-cli": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "node_modules/@parcel/reporter-dev-server": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, "engines": { - "node": ">= 6" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/@parcel/resolver-default": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" }, "engines": { - "node": ">=8.0.0" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.8.3", + "dev": true, + "license": "MIT", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@parcel/runtime-js": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=6.0" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + }, "engines": { - "node": ">=10" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/@parcel/runtime-service-worker": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/deep-eql": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "node_modules/@parcel/source-map": { + "version": "2.1.1", "dev": true, + "license": "MIT", "dependencies": { - "type-detect": "^4.0.0" + "detect-libc": "^1.0.3" }, "engines": { - "node": ">=6" + "node": "^12.18.3 || >=14" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/@parcel/source-map/node_modules/detect-libc": { + "version": "1.0.3", "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/@parcel/transformer-babel": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "object-keys": "^1.0.12" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "node_modules/@parcel/transformer-babel/node_modules/json5": { + "version": "2.2.3", "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "node_modules/@parcel/transformer-babel/node_modules/semver": { + "version": "5.7.1", "dev": true, - "engines": { - "node": ">=0.3.1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "node_modules/@parcel/transformer-css": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/@parcel/transformer-html": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1", + "srcset": "4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "node_modules/@parcel/transformer-html/node_modules/semver": { + "version": "5.7.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "node_modules/@parcel/transformer-image": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 4" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/@parcel/transformer-js": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/@parcel/transformer-js/node_modules/detect-libc": { + "version": "1.0.3", "dev": true, - "dependencies": { - "once": "^1.4.0" + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/@parcel/transformer-js/node_modules/semver": { + "version": "5.7.1", "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "node_modules/@parcel/transformer-json": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/@parcel/transformer-json/node_modules/json5": { + "version": "2.2.3", "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, + "node_modules/@parcel/transformer-postcss": { + "version": "2.8.3", + "dev": true, + "license": "MIT", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" }, "engines": { - "node": ">=0.10" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node_modules/@parcel/transformer-postcss/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/@parcel/transformer-posthtml": { + "version": "2.8.3", + "dev": true, + "license": "MIT", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "node_modules/@parcel/transformer-posthtml/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/esbuild": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.4.tgz", - "integrity": "sha512-zBn9MeCwT7W5F1a3lXClD61ip6vQM+H8Msb0w8zMT4ZKBpDg+rFAraNyWCDelB/2L6M3g6AXHPnsyvjMFnxtFw==", + "node_modules/@parcel/transformer-raw": { + "version": "2.8.3", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3" }, "engines": { - "node": ">=12" + "node": ">= 12.0.0", + "parcel": "^2.8.3" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.4", - "@esbuild/android-arm64": "0.17.4", - "@esbuild/android-x64": "0.17.4", - "@esbuild/darwin-arm64": "0.17.4", - "@esbuild/darwin-x64": "0.17.4", - "@esbuild/freebsd-arm64": "0.17.4", - "@esbuild/freebsd-x64": "0.17.4", - "@esbuild/linux-arm": "0.17.4", - "@esbuild/linux-arm64": "0.17.4", - "@esbuild/linux-ia32": "0.17.4", - "@esbuild/linux-loong64": "0.17.4", - "@esbuild/linux-mips64el": "0.17.4", - "@esbuild/linux-ppc64": "0.17.4", - "@esbuild/linux-riscv64": "0.17.4", - "@esbuild/linux-s390x": "0.17.4", - "@esbuild/linux-x64": "0.17.4", - "@esbuild/netbsd-x64": "0.17.4", - "@esbuild/openbsd-x64": "0.17.4", - "@esbuild/sunos-x64": "0.17.4", - "@esbuild/win32-arm64": "0.17.4", - "@esbuild/win32-ia32": "0.17.4", - "@esbuild/win32-x64": "0.17.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-refresh": "^0.9.0" + }, "engines": { - "node": ">=6" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/@parcel/transformer-svg": { + "version": "2.8.3", "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "node_modules/@parcel/transformer-svg/node_modules/semver": { + "version": "5.7.1", "dev": true, - "engines": { - "node": ">=6" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/@parcel/types": { + "version": "2.8.3", + "dev": true, + "license": "MIT", "dependencies": { - "type": "^2.7.2" + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@parcel/utils": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/@parcel/watcher": { + "version": "2.1.0", "dev": true, + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=10" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "3.2.1", "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "license": "MIT" }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/@parcel/workers": { + "version": "2.8.3", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "node": ">= 12.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/@rushstack/ts-command-line": { + "version": "4.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "dev": true, + "license": "MIT" }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "node_modules/@swc/helpers": { + "version": "0.4.14", "dev": true, + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" + "tslib": "^2.4.0" } }, - "node_modules/geojson-validation": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/geojson-validation/-/geojson-validation-1.0.2.tgz", - "integrity": "sha512-K5jrJ4wFvORn2pRKeg181LL0QPYuEKn2KHPvfH1m2QtFlAXFLKdseqt0XwBM3ELOY7kNM1fglRQ6ZwUQZ5S00A==", - "bin": { - "gjv": "bin/gjv" + "node_modules/@trysound/sax": { + "version": "0.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" } }, - "node_modules/geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "license": "MIT" }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", "dev": true, - "engines": { - "node": "*" - } + "license": "MIT" }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/@tsconfig/node16": { + "version": "1.0.3", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@types/argparse": { + "version": "1.0.38", + "dev": true, + "license": "MIT" }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/@types/chai": { + "version": "4.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/color-namer": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/expect": { + "version": "24.3.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "expect": "*" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true + "node_modules/@types/geojson": { + "version": "7946.0.10", + "license": "MIT" }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" }, - "node_modules/glob": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.2.1.tgz", - "integrity": "sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "@types/istanbul-lib-report": "*" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@types/json5": { + "version": "0.0.29", "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz", - "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==", + "node_modules/@types/mocha": { + "version": "10.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.14.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.22", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@types/yargs-parser": "*" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "debug": "4" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 6.0.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "node_modules/ansi-colors": { + "version": "4.1.1", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "has-symbols": "^1.0.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/aproba": { + "version": "2.0.0", "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "license": "ISC" }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/are-we-there-yet": { + "version": "2.0.0", "dev": true, + "license": "ISC", "dependencies": { - "agent-base": "6", - "debug": "4" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -1929,643 +1911,569 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/bl": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "license": "ISC" }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/braces": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.21.5", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, - "engines": { - "node": ">= 0.4" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "node_modules/buffer": { + "version": "5.7.1", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/callsites": { + "version": "3.1.0", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/camelcase": { + "version": "6.3.0", "dev": true, - "bin": { - "is-docker": "cli.js" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/caniuse-lite": { + "version": "1.0.30001464", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/canvas": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.0.tgz", + "integrity": "sha512-bdTjFexjKJEwtIo0oRx8eD4G2yWoUOXP9lj279jmQ2zMnTQhT8C3512OKz3s+ZOaQlLbE7TuVvRDYDB3Llyy5g==", "dev": true, + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/canvas/node_modules/decompress-response": { + "version": "4.2.1", "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "mimic-response": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/canvas/node_modules/mimic-response": { + "version": "2.1.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/canvas/node_modules/simple-get": { + "version": "3.1.1", "dev": true, - "engines": { - "node": ">=0.12.0" + "license": "MIT", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "node_modules/chai": { + "version": "4.3.7", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "node_modules/check-error": { + "version": "1.0.2", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "engines": { + "node": "*" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/chokidar": { + "version": "3.5.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 8.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/chownr": { + "version": "1.1.4", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, + "license": "ISC" + }, + "node_modules/chroma-js": { + "version": "1.4.1", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/ci-info": { + "version": "3.8.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/cliui": { + "version": "7.0.4", "dev": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "4.2.3", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">=8" + "node": ">=12.5.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "color-name": "~1.1.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "node_modules/color-namer": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chroma-js": "^1.3.4", + "es6-weak-map": "^2.0.3" + } }, - "node_modules/json-stringify-pretty-compact": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", - "dev": true + "node_modules/color-parse": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } }, - "node_modules/kdbush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + "node_modules/color-parse/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" + "node_modules/color-rgba": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" } }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/color-space": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/color-string/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/colors": { + "version": "1.2.5", "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.1.90" } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/commander": { + "version": "10.0.0", "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "node_modules/concat-map": { + "version": "0.0.1", "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } + "license": "MIT" }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/create-require": { + "version": "1.1.1", "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.8" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver.js" + "semver": "bin/semver" } }, - "node_modules/maplibre-gl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", - "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", - "hasInstallScript": true, + "node_modules/css-select": { + "version": "4.2.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^2.0.1", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.5", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "@types/geojson": "^7946.0.10", - "@types/mapbox__point-geometry": "^0.1.2", - "@types/mapbox__vector-tile": "^1.3.0", - "@types/pbf": "^3.0.2", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.4.3", - "global-prefix": "^3.0.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.2", - "quickselect": "^2.0.0", - "supercluster": "^7.1.5", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.3" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/minimatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz", - "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==", + "node_modules/css-tree": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minipass": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", + "node_modules/css-what": { + "version": "5.1.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "node": ">= 6" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/csscolorparser": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/csso": { + "version": "4.2.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "css-tree": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/d": { + "version": "1.0.1", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "node_modules/debug": { + "version": "4.3.4", "dev": true, + "license": "MIT", "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "ms": "2.1.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/mocha/node_modules/escape-string-regexp": { + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2573,348 +2481,241 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/decompress-response": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/deep-eql": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "type-detect": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "node_modules/deep-extend": { + "version": "0.6.0", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4.0.0" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/define-properties": { + "version": "1.1.3", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "object-keys": "^1.0.12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.4" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/murmurhash-js": { + "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "node_modules/detect-libc": { + "version": "2.0.1", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "license": "Apache-2.0", "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", - "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "node_modules/diff": { + "version": "5.0.0", "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">=0.3.1" } }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true + "node_modules/diff-sequences": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "node_modules/dom-serializer": { + "version": "1.3.2", "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/domelementtype": { + "version": "2.2.0", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "node_modules/domhandler": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/domutils": { + "version": "2.8.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^1.9.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/dotenv": { + "version": "7.0.0", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/dotenv-expand": { + "version": "5.1.0", "dev": true, - "dependencies": { - "color-name": "1.1.3" - } + "license": "BSD-2-Clause" }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/earcut": { + "version": "2.2.4", + "license": "ISC" }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/electron-to-chromium": { + "version": "1.4.325", "dev": true, - "engines": { - "node": ">=4" - } + "license": "ISC" }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, + "license": "MIT", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "once": "^1.4.0" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "node_modules/entities": { + "version": "3.0.1", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/es-abstract": { + "version": "1.19.1", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2923,621 +2724,549 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/es5-ext": { + "version": "0.10.62", "dev": true, + "hasInstallScript": true, + "license": "ISC", "dependencies": { - "wrappy": "1" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/es6-iterator": { + "version": "2.0.3", "dev": true, + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/openmapsamples": { - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples.git#5014e9f74d7fd49b4e57bc2e8045d3e0b913f221", - "license": "LGPL-3.0-or-later", + "node_modules/es6-symbol": { + "version": "3.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "geojson-validation": "^1.0.2" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/openmapsamples-maplibre": { - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples-MapLibre.git#d0bb7b897c95bd0ef6adcd4e3a2ad409b9266c27", - "license": "LGPL-3.0-or-later", + "node_modules/es6-weak-map": { + "version": "2.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "maplibre-gl": "^2.0", - "openmapsamples": "github:adamfranco/OpenMapSamples" + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/esbuild": { + "version": "0.17.11", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/escalade": { + "version": "3.1.1", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.x" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/expand-template": { + "version": "2.0.3", "dev": true, + "license": "(MIT OR WTFPL)", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.1.tgz", - "integrity": "sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==", + "node_modules/expect": { + "version": "29.5.0", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/ext": { + "version": "1.7.0", "dev": true, - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "type": "^2.7.2" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", "dev": true, - "engines": { - "node": "*" - } + "license": "ISC" }, - "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" + "to-regex-range": "^5.0.1" }, - "bin": { - "pbf": "bin/pbf" + "engines": { + "node": ">=8" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "node_modules/flat": { + "version": "5.0.2", "dev": true, + "license": "BSD-3-Clause", "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" + "flat": "cli.js" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/fs-constants": { + "version": "1.0.0", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + "license": "MIT" }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "node_modules/fs-minipass": { + "version": "2.1.0", "dev": true, + "license": "ISC", "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/fs.realpath": { + "version": "1.0.0", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "license": "ISC" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/function-bind": { + "version": "1.1.1", "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } + "license": "MIT" }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/gauge": { + "version": "3.0.2", "dev": true, + "license": "ISC", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/geojson-validation": { + "version": "1.0.2", + "license": "LGPL-3", "bin": { - "rc": "cli.js" + "gjv": "bin/gjv" } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "node_modules/geojson-vt": { + "version": "3.2.1", + "license": "ISC" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, + "license": "ISC", "engines": { - "node": ">=4" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/get-func-name": { + "version": "2.0.0", "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "node_modules/get-intrinsic": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/get-port": { + "version": "4.2.0", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, + "license": "MIT", "engines": { - "node": ">=8.10.0" + "node": ">=6" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/github-from-package": { + "version": "0.0.0", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "node_modules/gl-matrix": { + "version": "3.4.3", + "license": "MIT" + }, + "node_modules/glob": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.2.1.tgz", + "integrity": "sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "protocol-buffers-schema": "^3.3.1" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "balanced-match": "^1.0.0" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/glob/node_modules/minimatch": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz", + "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, + "node_modules/global-prefix": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "node": ">=6" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", + "node_modules/globals": { + "version": "13.20.0", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=12.13.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "node_modules/has": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4.0" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "node_modules/has-bigints": { + "version": "1.0.1", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/has-symbols": { + "version": "1.0.2", "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/has-tostringtag": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "node_modules/has-unicode": { + "version": "2.0.1", "dev": true, - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - }, + "license": "ISC" + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" + "he": "bin/he" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/hosted-git-info": { + "version": "2.8.9", "dev": true, + "license": "ISC" + }, + "node_modules/htmlnano": { + "version": "2.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "cssnano": "^5.0.11", + "postcss": "^8.3.11", + "purgecss": "^5.0.0", + "relateurl": "^0.2.7", + "srcset": "4.0.0", + "svgo": "^2.8.0", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "node_modules/htmlparser2": { + "version": "7.2.0", "dev": true, "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", "funding": [ { "type": "github", @@ -3552,158 +3281,96 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "license": "BSD-3-Clause" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "is-arrayish": "^0.3.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/sort-asc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", - "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", + "node_modules/inflight": { + "version": "1.0.6", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/sort-desc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", - "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "ISC" }, - "node_modules/sort-object": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", - "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "sort-asc": "^0.1.0", - "sort-desc": "^0.1.1" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/interpret": { + "version": "1.4.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "node": ">= 0.10" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/is-arrayish": { + "version": "0.2.1", "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "license": "MIT" }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3712,90 +3379,92 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/is-callable": { + "version": "1.2.4", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/is-core-module": { + "version": "2.9.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "node_modules/is-docker": { + "version": "2.2.1", "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/supercluster": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", - "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", - "dependencies": { - "kdbush": "^3.0.0" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/is-json": { + "version": "2.0.1", "dev": true, + "license": "ISC" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3803,599 +3472,7409 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/is-number": { + "version": "7.0.0", "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=0.12.0" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/is-number-object": { + "version": "1.0.6", "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "node_modules/is-plain-obj": { + "version": "2.1.0", "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, + "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/is-wsl": { + "version": "2.2.0", "dev": true, + "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/tokenfield": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/tokenfield/-/tokenfield-1.5.2.tgz", - "integrity": "sha512-G1mSawKJLSf3RqcI00uojA5BD2WAo+gc3ZyU4ElHFY08RPaksnJPcyEV1PAGPgAVZmQTjFGQ2uLK6WVDJrgTLA==" + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "node_modules/jest-diff": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/jest-get-type": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.5.0", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "node_modules/jest-message-util": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/jest-util": { + "version": "29.5.0", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "node_modules/js-tokens": { + "version": "4.0.0", "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/util-deprecate": { + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-pretty-compact": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "node_modules/kdbush": { + "version": "3.0.0", + "license": "ISC" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lightningcss": { + "version": "1.19.0", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "1.0.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lmdb": { + "version": "2.5.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/maplibre-gl": { + "version": "2.4.0", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "license": "MIT" + }, + "node_modules/minipass": { + "version": "4.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.8.5", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.1" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.17.0", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openmapsamples": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples.git#5014e9f74d7fd49b4e57bc2e8045d3e0b913f221", + "license": "LGPL-3.0-or-later", + "dependencies": { + "geojson-validation": "^1.0.2" + } + }, + "node_modules/openmapsamples-maplibre": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples-MapLibre.git#d0bb7b897c95bd0ef6adcd4e3a2ad409b9266c27", + "license": "LGPL-3.0-or-later", + "dependencies": { + "maplibre-gl": "^2.0", + "openmapsamples": "github:adamfranco/OpenMapSamples" + } + }, + "node_modules/ordered-binary": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parcel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", + "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.8.3", + "@parcel/core": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/reporter-cli": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parcel/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.1.tgz", + "integrity": "sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==", + "dev": true, + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/posthtml": { + "version": "0.16.6", + "dev": true, + "license": "MIT", + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.10.2", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/potpack": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier": { + "version": "2.8.4", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "dev": true, + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.30.7", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.7", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=12.13.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shx": { + "version": "0.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-asc": { + "version": "0.1.0", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.1.1", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "0.3.2", + "dev": true, + "dependencies": { + "sort-asc": "^0.1.0", + "sort-desc": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supercluster": { + "version": "7.1.5", + "license": "ISC", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar": { + "version": "6.1.13", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.16.5", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/timsort": { + "version": "0.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tokenfield": { + "version": "1.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-mocha": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-node": "7.0.1" + }, + "bin": { + "ts-mocha": "bin/ts-mocha" + }, + "engines": { + "node": ">= 6.X.X" + }, + "optionalDependencies": { + "tsconfig-paths": "^3.5.0" + }, + "peerDependencies": { + "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" + } + }, + "node_modules/ts-mocha/node_modules/diff": { + "version": "3.5.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-mocha/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ts-mocha/node_modules/ts-node": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-mocha/node_modules/yn": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib": { + "name": "@americana/maplibre-shield-generator", + "version": "0.0.1-alpha.11", + "license": "CC0-1.0", + "dependencies": { + "color-rgba": "^2.4.0", + "maplibre-gl": "^2.4.0" + }, + "devDependencies": { + "@types/color-rgba": "^2.1.0", + "esbuild": "^0.17.10", + "npm-run-all": "^4.1.5", + "parcel": "latest", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + } + }, + "shieldlib/node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "shieldlib/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "shieldlib/node_modules/@esbuild/linux-x64": { + "version": "0.17.10", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "shieldlib/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "shieldlib/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@types/color-rgba": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT", + "optional": true + }, + "shieldlib/node_modules/@types/node": { + "version": "18.14.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "shieldlib/node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "shieldlib/node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "shieldlib/node_modules/ansi-colors": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "shieldlib/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "shieldlib/node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "shieldlib/node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0", + "peer": true + }, + "shieldlib/node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/available-typed-arrays": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "shieldlib/node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "shieldlib/node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "shieldlib/node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "shieldlib/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "shieldlib/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "shieldlib/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "shieldlib/node_modules/color-parse": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "shieldlib/node_modules/color-rgba": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "shieldlib/node_modules/color-space": { + "version": "2.0.0", + "license": "MIT" + }, + "shieldlib/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "shieldlib/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "shieldlib/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "shieldlib/node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/define-properties": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/diff": { + "version": "5.0.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "shieldlib/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "shieldlib/node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "shieldlib/node_modules/es-abstract": { + "version": "1.21.1", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/es-set-tostringtag": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "shieldlib/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/esbuild": { + "version": "0.17.10", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.10", + "@esbuild/android-arm64": "0.17.10", + "@esbuild/android-x64": "0.17.10", + "@esbuild/darwin-arm64": "0.17.10", + "@esbuild/darwin-x64": "0.17.10", + "@esbuild/freebsd-arm64": "0.17.10", + "@esbuild/freebsd-x64": "0.17.10", + "@esbuild/linux-arm": "0.17.10", + "@esbuild/linux-arm64": "0.17.10", + "@esbuild/linux-ia32": "0.17.10", + "@esbuild/linux-loong64": "0.17.10", + "@esbuild/linux-mips64el": "0.17.10", + "@esbuild/linux-ppc64": "0.17.10", + "@esbuild/linux-riscv64": "0.17.10", + "@esbuild/linux-s390x": "0.17.10", + "@esbuild/linux-x64": "0.17.10", + "@esbuild/netbsd-x64": "0.17.10", + "@esbuild/openbsd-x64": "0.17.10", + "@esbuild/sunos-x64": "0.17.10", + "@esbuild/win32-arm64": "0.17.10", + "@esbuild/win32-ia32": "0.17.10", + "@esbuild/win32-x64": "0.17.10" + } + }, + "shieldlib/node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "shieldlib/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "shieldlib/node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "bin": { + "flat": "cli.js" + } + }, + "shieldlib/node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "shieldlib/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "shieldlib/node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "shieldlib/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "shieldlib/node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "shieldlib/node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "he": "bin/he" + } + }, + "shieldlib/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "shieldlib/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/internal-slot": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "shieldlib/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "shieldlib/node_modules/is-array-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-core-module": { + "version": "2.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "shieldlib/node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-typed-array": { + "version": "1.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "shieldlib/node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "shieldlib/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "shieldlib/node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "shieldlib/node_modules/mocha": { + "version": "10.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "shieldlib/node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "shieldlib/node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "shieldlib/node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "shieldlib/node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "shieldlib/node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "shieldlib/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "shieldlib/node_modules/nanoid": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "shieldlib/node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "shieldlib/node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/npm-run-all": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "shieldlib/node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "shieldlib/node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "shieldlib/node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "shieldlib/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "shieldlib/node_modules/pidtree": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "shieldlib/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/prettier": { + "version": "2.8.4", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "shieldlib/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "shieldlib/node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "shieldlib/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "shieldlib/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "shieldlib/node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "shieldlib/node_modules/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "shieldlib/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/shell-quote": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/shx": { + "version": "0.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "shieldlib/node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "shieldlib/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "shieldlib/node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "shieldlib/node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "shieldlib/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "shieldlib/node_modules/spdx-license-ids": { + "version": "3.0.12", + "dev": true, + "license": "CC0-1.0" + }, + "shieldlib/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/string.prototype.padend": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "shieldlib/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "shieldlib/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "shieldlib/node_modules/ts-mocha": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-node": "7.0.1" + }, + "bin": { + "ts-mocha": "bin/ts-mocha" + }, + "engines": { + "node": ">= 6.X.X" + }, + "optionalDependencies": { + "tsconfig-paths": "^3.5.0" + }, + "peerDependencies": { + "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" + } + }, + "shieldlib/node_modules/ts-mocha/node_modules/diff": { + "version": "3.5.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "shieldlib/node_modules/ts-mocha/node_modules/ts-node": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "shieldlib/node_modules/ts-mocha/node_modules/yn": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "shieldlib/node_modules/ts-node": { + "version": "10.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "shieldlib/node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "shieldlib/node_modules/tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "shieldlib/node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "shieldlib/node_modules/typed-array-length": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/typescript": { + "version": "4.9.5", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "shieldlib/node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "shieldlib/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "shieldlib/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "shieldlib/node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/which-typed-array": { + "version": "1.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "shieldlib/node_modules/workerpool": { + "version": "6.2.1", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "shieldlib/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "shieldlib/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "shieldlib/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "shieldlib/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "shieldlib/node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "shieldlib/node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "shieldlib/node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "shieldlib/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@americana/maplibre-shield-generator": { + "version": "file:shieldlib", + "requires": { + "@types/color-rgba": "^2.1.0", + "color-rgba": "^2.4.0", + "esbuild": "^0.17.10", + "maplibre-gl": "^2.4.0", + "npm-run-all": "^4.1.5", + "parcel": "latest", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@esbuild/linux-x64": { + "version": "0.17.10", + "dev": true, + "optional": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true + }, + "@types/color-rgba": { + "version": "2.1.0", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true, + "optional": true + }, + "@types/node": { + "version": "18.14.6", + "dev": true, + "peer": true + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "dev": true, + "peer": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "peer": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "arrify": { + "version": "1.0.1", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true, + "peer": true + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "peer": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "dev": true, + "peer": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true, + "peer": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "peer": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "color-parse": { + "version": "1.4.2", + "requires": { + "color-name": "^1.0.0" + } + }, + "color-rgba": { + "version": "2.4.0", + "requires": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "color-space": { + "version": "2.0.0" + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.3.4", + "dev": true, + "peer": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "dev": true, + "peer": true + } + } + }, + "decamelize": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "define-properties": { + "version": "1.2.0", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "diff": { + "version": "5.0.0", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true, + "peer": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.21.1", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.17.10", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.10", + "@esbuild/android-arm64": "0.17.10", + "@esbuild/android-x64": "0.17.10", + "@esbuild/darwin-arm64": "0.17.10", + "@esbuild/darwin-x64": "0.17.10", + "@esbuild/freebsd-arm64": "0.17.10", + "@esbuild/freebsd-x64": "0.17.10", + "@esbuild/linux-arm": "0.17.10", + "@esbuild/linux-arm64": "0.17.10", + "@esbuild/linux-ia32": "0.17.10", + "@esbuild/linux-loong64": "0.17.10", + "@esbuild/linux-mips64el": "0.17.10", + "@esbuild/linux-ppc64": "0.17.10", + "@esbuild/linux-riscv64": "0.17.10", + "@esbuild/linux-s390x": "0.17.10", + "@esbuild/linux-x64": "0.17.10", + "@esbuild/netbsd-x64": "0.17.10", + "@esbuild/openbsd-x64": "0.17.10", + "@esbuild/sunos-x64": "0.17.10", + "@esbuild/win32-arm64": "0.17.10", + "@esbuild/win32-ia32": "0.17.10", + "@esbuild/win32-x64": "0.17.10" + } + }, + "escalade": { + "version": "3.1.1", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "peer": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "dev": true, + "peer": true + }, + "for-each": { + "version": "0.3.3", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globalthis": { + "version": "1.0.3", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10", + "dev": true + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "internal-slot": { + "version": "1.0.5", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "is-array-buffer": { + "version": "3.0.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "peer": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true, + "peer": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "peer": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "memorystream": { + "version": "0.3.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mocha": { + "version": "10.2.0", + "dev": true, + "peer": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "glob": { + "version": "7.2.0", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "minimatch": { + "version": "5.0.1", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "dev": true, + "peer": true + }, + "nanoid": { + "version": "3.3.3", + "dev": true, + "peer": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "npm-run-all": { + "version": "4.1.5", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true, + "peer": true + }, + "pidtree": { + "version": "0.3.1", + "dev": true + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "prettier": { + "version": "2.8.4", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "peer": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true, + "peer": true + }, + "safe-regex-test": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "shell-quote": { + "version": "1.8.0", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shx": { + "version": "0.3.4", + "dev": true, + "requires": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + } + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.padend": { + "version": "3.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "peer": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-mocha": { + "version": "10.0.0", + "dev": true, + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "dev": true + }, + "ts-node": { + "version": "7.0.1", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "yn": { + "version": "2.0.0", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.1", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "optional": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "typed-array-length": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typescript": { + "version": "4.9.5", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.9", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "workerpool": { + "version": "6.2.1", + "dev": true, + "peer": true + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true, + "peer": true + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "dev": true, + "peer": true + }, + "yargs-unparser": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true, + "peer": true + } + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@basemaps/sprites": { + "version": "6.32.1", + "dev": true, + "requires": { + "@mapbox/shelf-pack": "^3.2.0", + "@rushstack/ts-command-line": "^4.3.13", + "sharp": "^0.30.7" + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@esbuild/linux-x64": { + "version": "0.17.11", + "dev": true, + "optional": true + }, + "@jest/expect-utils": { + "version": "29.5.0", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/types": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@lezer/common": { + "version": "0.15.12", + "dev": true + }, + "@lezer/lr": { + "version": "0.15.8", + "dev": true, + "requires": { + "@lezer/common": "^0.15.0" + } + }, + "@lmdb/lmdb-linux-x64": { + "version": "2.5.2", + "dev": true, + "optional": true + }, + "@mapbox/geojson-rewind": { + "version": "0.5.2", + "requires": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + } + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2" + }, + "@mapbox/mapbox-gl-supported": { + "version": "2.0.1" + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "dev": true, + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "@mapbox/point-geometry": { + "version": "0.1.0" + }, + "@mapbox/shelf-pack": { + "version": "3.2.0", + "dev": true + }, + "@mapbox/tiny-sdf": { + "version": "2.0.5" + }, + "@mapbox/unitbezier": { + "version": "0.0.1" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@mapbox/whoots-js": { + "version": "3.1.0" + }, + "@maplibre/maplibre-gl-style-spec": { + "version": "17.0.1", + "dev": true, + "requires": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.0", + "csscolorparser": "~1.0.2", + "json-stringify-pretty-compact": "^2.0.0", + "minimist": "^1.2.5", + "rw": "^1.3.3", + "sort-object": "^0.3.2" + }, + "dependencies": { + "@mapbox/unitbezier": { + "version": "0.0.0", + "dev": true + } + } + }, + "@mischnic/json-sourcemap": { + "version": "0.1.0", + "dev": true, + "requires": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "dev": true + } + } + }, + "@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "dev": true, + "optional": true + }, + "@parcel/bundler-default": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/cache": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + } + }, + "@parcel/codeframe": { + "version": "2.8.3", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/compressor-raw": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3" + } + }, + "@parcel/config-default": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-css": "2.8.3", + "@parcel/optimizer-htmlnano": "2.8.3", + "@parcel/optimizer-image": "2.8.3", + "@parcel/optimizer-svgo": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-css": "2.8.3", + "@parcel/packager-html": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/packager-svg": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-browser-hmr": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/runtime-react-refresh": "2.8.3", + "@parcel/runtime-service-worker": "2.8.3", + "@parcel/transformer-babel": "2.8.3", + "@parcel/transformer-css": "2.8.3", + "@parcel/transformer-html": "2.8.3", + "@parcel/transformer-image": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3", + "@parcel/transformer-postcss": "2.8.3", + "@parcel/transformer-posthtml": "2.8.3", + "@parcel/transformer-raw": "2.8.3", + "@parcel/transformer-react-refresh-wrap": "2.8.3", + "@parcel/transformer-svg": "2.8.3" + } + }, + "@parcel/core": { + "version": "2.8.3", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "@parcel/diagnostic": { + "version": "2.8.3", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/events": { + "version": "2.8.3", "dev": true }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "@parcel/fs": { + "version": "2.8.3", "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "requires": { + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" + "@parcel/fs-search": { + "version": "2.8.3", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" }, - "bin": { - "which": "bin/which" + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "dev": true + } } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "@parcel/graph": { + "version": "2.8.3", "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "nullthrows": "^1.1.1" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "@parcel/hash": { + "version": "2.8.3", "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "detect-libc": { + "version": "1.0.3", + "dev": true + } } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "@parcel/logger": { + "version": "2.8.3", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "@parcel/markdown-ansi": { + "version": "2.8.3", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "chalk": "^4.1.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "@parcel/namer-default": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" + } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "@parcel/node-resolver-core": { + "version": "2.8.3", "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } } }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "@parcel/optimizer-css": { + "version": "2.8.3", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "@parcel/optimizer-htmlnano": { + "version": "2.8.3", "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" + "requires": { + "@parcel/plugin": "2.8.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "@parcel/optimizer-image": { + "version": "2.8.3", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "detect-libc": "^1.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "dev": true + } } - } - }, - "dependencies": { - "@basemaps/sprites": { - "version": "6.32.1", - "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-6.32.1.tgz", - "integrity": "sha512-9lZmw0TeDji9qkrCGT06oqpUH9eGK7P1hooDtL65Bl79Cu3Mard6GUkmzJ5kxWZEgICeM+9siPpE3t1zumciKA==", + }, + "@parcel/optimizer-svgo": { + "version": "2.8.3", "dev": true, "requires": { - "@mapbox/shelf-pack": "^3.2.0", - "@rushstack/ts-command-line": "^4.3.13", - "sharp": "^0.30.7" + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "svgo": "^2.4.0" } }, - "@esbuild/android-arm": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.4.tgz", - "integrity": "sha512-R9GCe2xl2XDSc2XbQB63mFiFXHIVkOP+ltIxICKXqUPrFX97z6Z7vONCLQM1pSOLGqfLrGi3B7nbhxmFY/fomg==", + "@parcel/optimizer-terser": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + } }, - "@esbuild/android-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.4.tgz", - "integrity": "sha512-91VwDrl4EpxBCiG6h2LZZEkuNvVZYJkv2T9gyLG/mhGG1qrM7i5SwUcg/hlSPnL/4hDT0TFcF35/XMGSn0bemg==", + "@parcel/package-manager": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@esbuild/android-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.4.tgz", - "integrity": "sha512-mGSqhEPL7029XL7QHNPxPs15JVa02hvZvysUcyMP9UXdGFwncl2WU0bqx+Ysgzd+WAbv8rfNa73QveOxAnAM2w==", + "@parcel/packager-css": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } }, - "@esbuild/darwin-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.4.tgz", - "integrity": "sha512-tTyJRM9dHvlMPt1KrBFVB5OW1kXOsRNvAPtbzoKazd5RhD5/wKlXk1qR2MpaZRYwf4WDMadt0Pv0GwxB41CVow==", + "@parcel/packager-html": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + } }, - "@esbuild/darwin-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.4.tgz", - "integrity": "sha512-phQuC2Imrb3TjOJwLN8EO50nb2FHe8Ew0OwgZDH1SV6asIPGudnwTQtighDF2EAYlXChLoMJwqjAp4vAaACq6w==", + "@parcel/packager-js": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + } }, - "@esbuild/freebsd-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.4.tgz", - "integrity": "sha512-oH6JUZkocgmjzzYaP5juERLpJQSwazdjZrTPgLRmAU2bzJ688x0vfMB/WTv4r58RiecdHvXOPC46VtsMy/mepg==", + "@parcel/packager-raw": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3" + } }, - "@esbuild/freebsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.4.tgz", - "integrity": "sha512-U4iWGn/9TrAfpAdfd56eO0pRxIgb0a8Wj9jClrhT8hvZnOnS4dfMPW7o4fn15D/KqoiVYHRm43jjBaTt3g/2KA==", + "@parcel/packager-svg": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "posthtml": "^0.16.4" + } }, - "@esbuild/linux-arm": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.4.tgz", - "integrity": "sha512-S2s9xWTGMTa/fG5EyMGDeL0wrWVgOSQcNddJWgu6rG1NCSXJHs76ZP9AsxjB3f2nZow9fWOyApklIgiTGZKhiw==", + "@parcel/plugin": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/types": "2.8.3" + } }, - "@esbuild/linux-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.4.tgz", - "integrity": "sha512-UkGfQvYlwOaeYJzZG4cLV0hCASzQZnKNktRXUo3/BMZvdau40AOz9GzmGA063n1piq6VrFFh43apRDQx8hMP2w==", + "@parcel/reporter-cli": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + } }, - "@esbuild/linux-ia32": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.4.tgz", - "integrity": "sha512-3lqFi4VFo/Vwvn77FZXeLd0ctolIJH/uXkH3yNgEk89Eh6D3XXAC9/iTPEzeEpsNE5IqGIsFa5Z0iPeOh25IyA==", + "@parcel/reporter-dev-server": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + } }, - "@esbuild/linux-loong64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.4.tgz", - "integrity": "sha512-HqpWZkVslDHIwdQ9D+gk7NuAulgQvRxF9no54ut/M55KEb3mi7sQS3GwpPJzSyzzP0UkjQVN7/tbk88/CaX4EQ==", + "@parcel/resolver-default": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + } }, - "@esbuild/linux-mips64el": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.4.tgz", - "integrity": "sha512-d/nMCKKh/SVDbqR9ju+b78vOr0tNXtfBjcp5vfHONCCOAL9ad8gN9dC/u+UnH939pz7wO+0u/x9y1MaZcb/lKA==", + "@parcel/runtime-browser-hmr": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + } }, - "@esbuild/linux-ppc64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.4.tgz", - "integrity": "sha512-lOD9p2dmjZcNiTU+sGe9Nn6G3aYw3k0HBJies1PU0j5IGfp6tdKOQ6mzfACRFCqXjnBuTqK7eTYpwx09O5LLfg==", + "@parcel/runtime-js": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } }, - "@esbuild/linux-riscv64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.4.tgz", - "integrity": "sha512-mTGnwWwVshAjGsd8rP+K6583cPDgxOunsqqldEYij7T5/ysluMHKqUIT4TJHfrDFadUwrghAL6QjER4FeqQXoA==", + "@parcel/runtime-react-refresh": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + } }, - "@esbuild/linux-s390x": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.4.tgz", - "integrity": "sha512-AQYuUGp50XM29/N/dehADxvc2bUqDcoqrVuijop1Wv72SyxT6dDB9wjUxuPZm2HwIM876UoNNBMVd+iX/UTKVQ==", + "@parcel/runtime-service-worker": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } }, - "@esbuild/linux-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.4.tgz", - "integrity": "sha512-+AsFBwKgQuhV2shfGgA9YloxLDVjXgUEWZum7glR5lLmV94IThu/u2JZGxTgjYby6kyXEx8lKOqP5rTEVBR0Rw==", + "@parcel/source-map": { + "version": "2.1.1", "dev": true, - "optional": true + "requires": { + "detect-libc": "^1.0.3" + }, + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "dev": true + } + } }, - "@esbuild/netbsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.4.tgz", - "integrity": "sha512-zD1TKYX9553OiLS/qkXPMlWoELYkH/VkzRYNKEU+GwFiqkq0SuxsKnsCg5UCdxN3cqd+1KZ8SS3R+WG/Hxy2jQ==", + "@parcel/transformer-babel": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@esbuild/openbsd-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.4.tgz", - "integrity": "sha512-PY1NjEsLRhPEFFg1AV0/4Or/gR+q2dOb9s5rXcPuCjyHRzbt8vnHJl3vYj+641TgWZzTFmSUnZbzs1zwTzjeqw==", + "@parcel/transformer-css": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + } }, - "@esbuild/sunos-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.4.tgz", - "integrity": "sha512-B3Z7s8QZQW9tKGleMRXvVmwwLPAUoDCHs4WZ2ElVMWiortLJFowU1NjAhXOKjDgC7o9ByeVcwyOlJ+F2r6ZgmQ==", + "@parcel/transformer-html": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1", + "srcset": "4" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@esbuild/win32-arm64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.4.tgz", - "integrity": "sha512-0HCu8R3mY/H5V7N6kdlsJkvrT591bO/oRZy8ztF1dhgNU5xD5tAh5bKByT1UjTGjp/VVBsl1PDQ3L18SfvtnBQ==", + "@parcel/transformer-image": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "nullthrows": "^1.1.1" + } }, - "@esbuild/win32-ia32": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.4.tgz", - "integrity": "sha512-VUjhVDQycse1gLbe06pC/uaA0M+piQXJpdpNdhg8sPmeIZZqu5xPoGWVCmcsOO2gaM2cywuTYTHkXRozo3/Nkg==", + "@parcel/transformer-js": { + "version": "2.8.3", "dev": true, - "optional": true + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@esbuild/win32-x64": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.4.tgz", - "integrity": "sha512-0kLAjs+xN5OjhTt/aUA6t48SfENSCKgGPfExADYTOo/UCn0ivxos9/anUVeSfg+L+2O9xkFxvJXIJfG+Q4sYSg==", + "@parcel/transformer-json": { + "version": "2.8.3", "dev": true, - "optional": true - }, - "@mapbox/geojson-rewind": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", - "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", "requires": { - "get-stream": "^6.0.1", - "minimist": "^1.2.6" + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "dev": true + } } }, - "@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" + "@parcel/transformer-postcss": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@mapbox/mapbox-gl-supported": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", - "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + "@parcel/transformer-posthtml": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "@parcel/transformer-raw": { + "version": "2.8.3", "dev": true, "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "@parcel/plugin": "2.8.3" } }, - "@mapbox/point-geometry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" - }, - "@mapbox/shelf-pack": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@mapbox/shelf-pack/-/shelf-pack-3.2.0.tgz", - "integrity": "sha512-dyQxe6ukILV6qaEvxoKCIwhblgRjYp1ZGlClo4xvfbmxzFO5LYu7Tnrg2AZrRgN7VsSragsGcNjzUe9kCdKHYQ==", - "dev": true - }, - "@mapbox/tiny-sdf": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", - "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" + "@parcel/transformer-react-refresh-wrap": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-refresh": "^0.9.0" + } }, - "@mapbox/unitbezier": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "@parcel/transformer-svg": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } }, - "@mapbox/vector-tile": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "@parcel/types": { + "version": "2.8.3", + "dev": true, "requires": { - "@mapbox/point-geometry": "~0.1.0" + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" } }, - "@mapbox/whoots-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + "@parcel/utils": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" + } }, - "@maplibre/maplibre-gl-style-spec": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-17.0.1.tgz", - "integrity": "sha512-pohuxZke5fAJmY7g9EM7tQHjFXOegG58R66tTGrHvdndJOr8hTDUOdgkmq3wCNNOJL8dIf014RVhvPua53P2ZQ==", + "@parcel/watcher": { + "version": "2.1.0", "dev": true, "requires": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/unitbezier": "^0.0.0", - "csscolorparser": "~1.0.2", - "json-stringify-pretty-compact": "^2.0.0", - "minimist": "^1.2.5", - "rw": "^1.3.3", - "sort-object": "^0.3.2" + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, "dependencies": { - "@mapbox/unitbezier": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "node-addon-api": { + "version": "3.2.1", "dev": true } } }, + "@parcel/workers": { + "version": "2.8.3", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + } + }, "@rushstack/ts-command-line": { "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.11.0.tgz", - "integrity": "sha512-ptG9L0mjvJ5QtK11GsAFY+jGfsnqHDS6CY6Yw1xT7a9bhjfNYnf6UPwjV+pF6UgiucfNcMDNW9lkDLxvZKKxMg==", "dev": true, "requires": { "@types/argparse": "1.0.38", @@ -4404,53 +10883,141 @@ "string-argv": "~0.3.1" } }, + "@sinclair/typebox": { + "version": "0.25.24", + "dev": true + }, + "@swc/helpers": { + "version": "0.4.14", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, "@trysound/sax": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", "dev": true }, "@types/argparse": { "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", "dev": true }, + "@types/chai": { + "version": "4.3.4", + "dev": true + }, + "@types/color-namer": { + "version": "1.3.0", + "dev": true + }, + "@types/expect": { + "version": "24.3.0", + "dev": true, + "requires": { + "expect": "*" + } + }, "@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + "version": "7946.0.10" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json5": { + "version": "0.0.29", + "dev": true, + "optional": true }, "@types/mapbox__point-geometry": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", - "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + "version": "0.1.2" }, "@types/mapbox__vector-tile": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", - "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", "requires": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", "@types/pbf": "*" } }, + "@types/mocha": { + "version": "10.0.1", + "dev": true + }, + "@types/node": { + "version": "18.14.6", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "dev": true + }, "@types/pbf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", - "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + "version": "3.0.2" + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/yargs": { + "version": "17.0.22", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true }, "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.5", + "dev": true + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", "dev": true }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -4458,20 +11025,14 @@ }, "ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -4479,8 +11040,6 @@ }, "anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -4489,57 +11048,56 @@ }, "aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, + "arg": { + "version": "4.1.3", + "dev": true + }, "argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, + "arrify": { + "version": "1.0.1", + "dev": true + }, "assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base-x": { + "version": "3.0.9", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { "buffer": "^5.5.0", @@ -4549,14 +11107,10 @@ }, "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -4565,8 +11119,6 @@ }, "braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -4574,34 +11126,48 @@ }, "browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.21.5", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, "buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, "call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, + "callsites": { + "version": "3.1.0", + "dev": true + }, "camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001464", "dev": true }, "canvas": { @@ -4617,8 +11183,6 @@ "dependencies": { "decompress-response": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "dev": true, "requires": { "mimic-response": "^2.0.0" @@ -4626,14 +11190,10 @@ }, "mimic-response": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "dev": true }, "simple-get": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dev": true, "requires": { "decompress-response": "^4.2.0", @@ -4645,8 +11205,6 @@ }, "chai": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -4660,8 +11218,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4670,8 +11226,6 @@ "dependencies": { "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4681,14 +11235,10 @@ }, "check-error": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true }, "chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -4703,19 +11253,22 @@ }, "chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chroma-js": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-1.4.1.tgz", - "integrity": "sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ==" + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "dev": true }, "cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -4723,10 +11276,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "2.1.2", + "dev": true + }, "color": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, "requires": { "color-convert": "^2.0.1", @@ -4735,8 +11290,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -4744,22 +11297,13 @@ "dependencies": { "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, - "color-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", - "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", - "dev": true - }, "color-namer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/color-namer/-/color-namer-1.4.0.tgz", - "integrity": "sha512-3mQMY9MJyfdV2uhe+xjQWcKHtYnPtl5svGjt89V2WWT2MlaLAd7C02886Wq7H1MTjjIIEa/NJLYPNF/Lhxhq2A==", + "dev": true, "requires": { "chroma-js": "^1.3.4", "es6-weak-map": "^2.0.3" @@ -4767,37 +11311,27 @@ }, "color-parse": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", "requires": { "color-name": "^1.0.0" }, "dependencies": { "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" } } }, "color-rgba": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", - "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", "requires": { "color-parse": "^1.4.2", "color-space": "^2.0.0" } }, "color-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", - "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" + "version": "2.0.0" }, "color-string": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -4806,46 +11340,47 @@ "dependencies": { "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, "color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colors": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", "dev": true }, "commander": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", "dev": true }, "cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -4857,16 +11392,12 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "css-select": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -4878,8 +11409,6 @@ }, "css-tree": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { "mdn-data": "2.0.14", @@ -4888,19 +11417,13 @@ }, "css-what": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" + "version": "1.0.3" }, "csso": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { "css-tree": "^1.1.2" @@ -4908,8 +11431,7 @@ }, "d": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -4917,8 +11439,6 @@ }, "debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -4926,22 +11446,16 @@ "dependencies": { "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { "mimic-response": "^3.1.0" @@ -4949,8 +11463,6 @@ }, "deep-eql": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -4958,20 +11470,14 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, "define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" @@ -4979,26 +11485,22 @@ }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "detect-libc": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true }, "diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diff-sequences": { + "version": "29.4.3", "dev": true }, "dom-serializer": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -5008,22 +11510,16 @@ "dependencies": { "entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } } }, "domelementtype": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domhandler": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -5031,8 +11527,6 @@ }, "domutils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -5040,30 +11534,38 @@ "domhandler": "^4.2.0" } }, + "dotenv": { + "version": "7.0.0", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "dev": true + }, "earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + "version": "2.2.4" + }, + "electron-to-chromium": { + "version": "1.4.325", + "dev": true }, "emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, + "entities": { + "version": "3.0.1", + "dev": true + }, "error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -5071,8 +11573,6 @@ }, "es-abstract": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5099,8 +11599,6 @@ }, "es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -5110,8 +11608,7 @@ }, "es5-ext": { "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -5120,8 +11617,7 @@ }, "es6-iterator": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -5130,8 +11626,7 @@ }, "es6-symbol": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, "requires": { "d": "^1.0.1", "ext": "^1.1.2" @@ -5139,8 +11634,7 @@ }, "es6-weak-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.46", @@ -5149,77 +11643,74 @@ } }, "esbuild": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.4.tgz", - "integrity": "sha512-zBn9MeCwT7W5F1a3lXClD61ip6vQM+H8Msb0w8zMT4ZKBpDg+rFAraNyWCDelB/2L6M3g6AXHPnsyvjMFnxtFw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.4", - "@esbuild/android-arm64": "0.17.4", - "@esbuild/android-x64": "0.17.4", - "@esbuild/darwin-arm64": "0.17.4", - "@esbuild/darwin-x64": "0.17.4", - "@esbuild/freebsd-arm64": "0.17.4", - "@esbuild/freebsd-x64": "0.17.4", - "@esbuild/linux-arm": "0.17.4", - "@esbuild/linux-arm64": "0.17.4", - "@esbuild/linux-ia32": "0.17.4", - "@esbuild/linux-loong64": "0.17.4", - "@esbuild/linux-mips64el": "0.17.4", - "@esbuild/linux-ppc64": "0.17.4", - "@esbuild/linux-riscv64": "0.17.4", - "@esbuild/linux-s390x": "0.17.4", - "@esbuild/linux-x64": "0.17.4", - "@esbuild/netbsd-x64": "0.17.4", - "@esbuild/openbsd-x64": "0.17.4", - "@esbuild/sunos-x64": "0.17.4", - "@esbuild/win32-arm64": "0.17.4", - "@esbuild/win32-ia32": "0.17.4", - "@esbuild/win32-x64": "0.17.4" + "version": "0.17.11", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" } }, "escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "version": "3.3.0" }, "expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true }, + "expect": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, "ext": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, "requires": { "type": "^2.7.2" }, "dependencies": { "type": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "dev": true } } }, "fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -5227,8 +11718,6 @@ }, "find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", @@ -5237,20 +11726,14 @@ }, "flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -5258,8 +11741,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -5269,20 +11750,14 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "gauge": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -5297,31 +11772,21 @@ } }, "geojson-validation": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/geojson-validation/-/geojson-validation-1.0.2.tgz", - "integrity": "sha512-K5jrJ4wFvORn2pRKeg181LL0QPYuEKn2KHPvfH1m2QtFlAXFLKdseqt0XwBM3ELOY7kNM1fglRQ6ZwUQZ5S00A==" + "version": "1.0.2" }, "geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "version": "3.2.1" }, "get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-func-name": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true }, "get-intrinsic": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -5329,15 +11794,15 @@ "has-symbols": "^1.0.1" } }, + "get-port": { + "version": "4.2.0", + "dev": true + }, "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "version": "6.0.1" }, "get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5346,14 +11811,10 @@ }, "github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true }, "gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + "version": "3.4.3" }, "glob": { "version": "9.2.1", @@ -5389,8 +11850,6 @@ }, "glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -5398,24 +11857,25 @@ }, "global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" } }, + "globals": { + "version": "13.20.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, "graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -5423,26 +11883,18 @@ }, "has-bigints": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -5450,26 +11902,37 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "htmlnano": { + "version": "2.0.3", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + } + }, + "htmlparser2": { + "version": "7.2.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, "https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -5477,14 +11940,18 @@ } }, "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "version": "1.2.1" + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", @@ -5493,19 +11960,13 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "1.3.8" }, "internal-slot": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", @@ -5515,20 +11976,14 @@ }, "interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -5536,8 +11991,6 @@ }, "is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" @@ -5545,8 +11998,6 @@ }, "is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5555,14 +12006,10 @@ }, "is-callable": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -5570,8 +12017,6 @@ }, "is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -5579,47 +12024,37 @@ }, "is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, + "is-json": { + "version": "2.0.1", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -5627,14 +12062,10 @@ }, "is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -5643,14 +12074,10 @@ }, "is-shared-array-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -5658,8 +12085,6 @@ }, "is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -5667,37 +12092,82 @@ }, "is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isexe": { + "version": "2.0.0" + }, + "jest-diff": { + "version": "29.5.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-get-type": { + "version": "29.4.3", + "dev": true + }, + "jest-matcher-utils": { + "version": "29.5.0", "dev": true, "requires": { - "call-bind": "^1.0.2" + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "jest-message-util": { + "version": "29.5.0", "dev": true, "requires": { - "is-docker": "^2.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "jest-util": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "dev": true }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -5705,38 +12175,96 @@ "dependencies": { "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true } } }, "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", "dev": true }, "json-stringify-pretty-compact": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, + "json5": { + "version": "1.0.2", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.0" + } + }, "kdbush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + "version": "3.0.0" }, "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "version": "6.0.3" + }, + "lightningcss": { + "version": "1.19.0", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + }, + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "dev": true + } + } + }, + "lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.19.0", + "dev": true, + "optional": true + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "lmdb": { + "version": "2.5.2", + "dev": true, + "requires": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2", + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "dev": true + } + } }, "load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -5747,8 +12275,6 @@ "dependencies": { "parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -5759,8 +12285,6 @@ }, "locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" @@ -5768,8 +12292,6 @@ }, "log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -5778,8 +12300,6 @@ }, "loupe": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "requires": { "get-func-name": "^2.0.0" @@ -5787,8 +12307,6 @@ }, "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -5796,8 +12314,6 @@ }, "make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -5805,16 +12321,16 @@ "dependencies": { "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, + "make-error": { + "version": "1.3.6", + "dev": true + }, "maplibre-gl": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", - "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", "requires": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -5844,46 +12360,40 @@ }, "mdn-data": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "memorystream": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true }, "minimatch": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz", - "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.6" }, "minipass": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", "dev": true }, "minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { "minipass": "^3.0.0", @@ -5892,8 +12402,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -5903,20 +12411,14 @@ }, "mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "mocha": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -5944,14 +12446,10 @@ "dependencies": { "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5964,8 +12462,6 @@ "dependencies": { "minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -5975,8 +12471,6 @@ }, "minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -5984,8 +12478,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -5995,56 +12487,67 @@ }, "strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true } } }, "ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "msgpackr": { + "version": "1.8.5", + "dev": true, + "requires": { + "msgpackr-extract": "^3.0.1" + } + }, + "msgpackr-extract": { + "version": "3.0.2", + "dev": true, + "optional": true, + "requires": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2", + "node-gyp-build-optional-packages": "5.0.7" + }, + "dependencies": { + "node-gyp-build-optional-packages": { + "version": "5.0.7", + "dev": true, + "optional": true + } + } + }, "murmurhash-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" + "version": "1.0.0" }, "nan": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true }, "nanoid": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, "next-tick": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "dev": true }, "nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-abi": { "version": "3.33.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", - "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", "dev": true, "requires": { "semver": "^7.3.5" @@ -6052,23 +12555,29 @@ }, "node-addon-api": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "dev": true }, "node-fetch": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "requires": { "whatwg-url": "^5.0.0" } }, + "node-gyp-build": { + "version": "4.6.0", + "dev": true + }, + "node-gyp-build-optional-packages": { + "version": "5.0.3", + "dev": true + }, + "node-releases": { + "version": "2.0.10", + "dev": true + }, "nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { "abbrev": "1" @@ -6076,8 +12585,6 @@ }, "normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -6088,22 +12595,16 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-run-all": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6119,8 +12620,6 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -6128,8 +12627,6 @@ }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6139,8 +12636,6 @@ }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -6148,20 +12643,14 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6171,8 +12660,6 @@ }, "npmlog": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, "requires": { "are-we-there-yet": "^2.0.0", @@ -6183,35 +12670,29 @@ }, "nth-check": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { "boolbase": "^1.0.0" } }, + "nullthrows": { + "version": "1.1.1", + "dev": true + }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, "object-inspect": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -6222,8 +12703,6 @@ }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -6231,8 +12710,6 @@ }, "open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -6255,10 +12732,12 @@ "openmapsamples": "github:adamfranco/OpenMapSamples" } }, + "ordered-binary": { + "version": "1.4.0", + "dev": true + }, "p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" @@ -6266,35 +12745,70 @@ }, "p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, + "parcel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", + "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", + "dev": true, + "requires": { + "@parcel/config-default": "2.8.3", + "@parcel/core": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/reporter-cli": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + } + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-scurry": { @@ -6315,16 +12829,16 @@ } } }, + "path-type": { + "version": "4.0.0", + "dev": true + }, "pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbf": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", "requires": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -6332,37 +12846,60 @@ }, "picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pidtree": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true }, "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "posthtml": { + "version": "0.16.6", + "dev": true, + "requires": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "dependencies": { + "posthtml-parser": { + "version": "0.11.0", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + } + } + }, + "posthtml-parser": { + "version": "0.10.2", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + }, + "posthtml-render": { + "version": "3.0.0", + "dev": true, + "requires": { + "is-json": "^2.0.1" + } + }, "potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + "version": "1.0.2" }, "prebuild-install": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, "requires": { "detect-libc": "^2.0.0", @@ -6380,20 +12917,29 @@ } }, "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.8.4", "dev": true }, + "pretty-format": { + "version": "29.5.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, "protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + "version": "3.6.0" }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -6401,14 +12947,10 @@ } }, "quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "version": "2.0.0" }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -6416,8 +12958,6 @@ }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { "deep-extend": "^0.6.0", @@ -6426,10 +12966,20 @@ "strip-json-comments": "~2.0.1" } }, + "react-error-overlay": { + "version": "6.0.9", + "dev": true + }, + "react-is": { + "version": "18.2.0", + "dev": true + }, + "react-refresh": { + "version": "0.9.0", + "dev": true + }, "read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -6439,8 +12989,6 @@ "dependencies": { "path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -6450,8 +12998,6 @@ }, "readable-stream": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -6461,8 +13007,6 @@ }, "readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -6470,23 +13014,21 @@ }, "rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "requires": { "resolve": "^1.1.6" } }, + "regenerator-runtime": { + "version": "0.13.11", + "dev": true + }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "resolve": { "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { "is-core-module": "^2.8.1", @@ -6494,18 +13036,18 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, "resolve-protobuf-schema": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", "requires": { "protocol-buffers-schema": "^3.3.1" } }, "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -6513,8 +13055,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6529,20 +13069,14 @@ }, "rw": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "dev": true }, "safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "semver": { "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -6550,8 +13084,6 @@ }, "serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -6559,14 +13091,10 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "sharp": { "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", "dev": true, "requires": { "color": "^4.2.3", @@ -6581,8 +13109,6 @@ }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -6590,20 +13116,14 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "shell-quote": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -6613,8 +13133,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6629,8 +13147,6 @@ }, "shx": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", "dev": true, "requires": { "minimist": "^1.2.3", @@ -6639,8 +13155,6 @@ }, "side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -6650,20 +13164,14 @@ }, "signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true }, "simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "requires": { "decompress-response": "^6.0.0", @@ -6673,8 +13181,6 @@ }, "simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, "requires": { "is-arrayish": "^0.3.1" @@ -6682,28 +13188,24 @@ "dependencies": { "is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true } } }, + "slash": { + "version": "3.0.0", + "dev": true + }, "sort-asc": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", - "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", "dev": true }, "sort-desc": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", - "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", "dev": true }, "sort-object": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", - "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", "dev": true, "requires": { "sort-asc": "^0.1.0", @@ -6712,14 +13214,18 @@ }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -6728,14 +13234,10 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -6744,26 +13246,35 @@ }, "spdx-license-ids": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "srcset": { + "version": "4.0.0", "dev": true }, "stable": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-utils": { + "version": "2.0.6", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -6771,22 +13282,16 @@ "dependencies": { "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "string-argv": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -6796,8 +13301,6 @@ }, "string.prototype.padend": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -6807,8 +13310,6 @@ }, "string.prototype.trimend": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -6817,8 +13318,6 @@ }, "string.prototype.trimstart": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -6827,8 +13326,6 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" @@ -6836,28 +13333,20 @@ }, "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true }, "supercluster": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", - "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", "requires": { "kdbush": "^3.0.0" } }, "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -6865,14 +13354,10 @@ }, "supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "svgo": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "requires": { "@trysound/sax": "0.2.0", @@ -6886,16 +13371,12 @@ "dependencies": { "commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } }, "tar": { "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -6908,16 +13389,12 @@ "dependencies": { "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true } } }, "tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { "chownr": "^1.1.1", @@ -6928,8 +13405,6 @@ }, "tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { "bl": "^4.0.3", @@ -6939,35 +13414,128 @@ "readable-stream": "^3.1.1" } }, + "term-size": { + "version": "2.2.1", + "dev": true + }, + "terser": { + "version": "5.16.5", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "timsort": { + "version": "0.3.0", + "dev": true + }, "tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "version": "2.0.3" }, "to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "tokenfield": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/tokenfield/-/tokenfield-1.5.2.tgz", - "integrity": "sha512-G1mSawKJLSf3RqcI00uojA5BD2WAo+gc3ZyU4ElHFY08RPaksnJPcyEV1PAGPgAVZmQTjFGQ2uLK6WVDJrgTLA==" + "version": "1.5.2" }, "tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "ts-mocha": { + "version": "10.0.0", + "dev": true, + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "ts-node": { + "version": "7.0.1", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "yn": { + "version": "2.0.0", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.1", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "optional": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.5.0", "dev": true }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -6975,19 +13543,22 @@ }, "type": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "dev": true }, "type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "typescript": { + "version": "4.9.5", "dev": true }, "unbox-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -6996,16 +13567,32 @@ "which-boxed-primitive": "^1.0.2" } }, + "update-browserslist-db": { + "version": "1.0.10", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utility-types": { + "version": "3.10.0", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -7014,24 +13601,22 @@ }, "vt-pbf": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", "requires": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", "pbf": "^3.2.1" } }, + "weak-lru-cache": { + "version": "1.2.2", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { "tr46": "~0.0.3", @@ -7040,16 +13625,12 @@ }, "which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -7061,8 +13642,6 @@ }, "wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -7070,14 +13649,10 @@ }, "workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -7087,26 +13662,26 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xxhash-wasm": { + "version": "0.4.2", "dev": true }, "y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", "dev": true }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -7120,14 +13695,10 @@ }, "yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true }, "yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", @@ -7136,10 +13707,12 @@ "is-plain-obj": "^2.1.0" } }, + "yn": { + "version": "3.1.1", + "dev": true + }, "yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index 9aab5424c..9b7b84b48 100644 --- a/package.json +++ b/package.json @@ -12,25 +12,28 @@ "code_format": "run-s code_format:prettier code_format:svgo", "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", - "clean": "shx rm -rf dist", + "clean:shieldlib": "cd shieldlib && shx rm -rf dist", + "clean:code": "shx rm -rf dist", + "clean": "run-s clean:shieldlib clean:code", "presprites": "shx rm -rf dist/sprites", "sprites": "node scripts/sprites.js", "status_map": "node scripts/status_map.js", - "taginfo": "node scripts/taginfo.js", - "start": "run-s clean sprites serve", - "serve": "node scripts/serve.js", - "build:code": "node scripts/build.js", - "build": "run-s clean sprites build:code taginfo status_map", - "test": "mocha", + "taginfo": "exec ts-node scripts/taginfo", + "start": "run-s clean build:shieldlib sprites shields serve", + "serve": "ts-node scripts/serve", + "build:shieldlib": "cd shieldlib && node scripts/build.js && cd ..", + "build:code": "exec ts-node scripts/build", + "build": "run-s clean sprites build:shieldlib build:code taginfo status_map", + "test": "npm exec -- ts-mocha", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", "stats": "node scripts/stats.js", "style": "node scripts/generate_style.js -o dist/style.json" }, "dependencies": { - "color-namer": "^1.4.0", + "@americana/maplibre-shield-generator": "file:shieldlib", "color-rgba": "^2.4.0", "events": "^3.3.0", - "maplibre-gl": "^2.4.0", + "glob": "^8.0.3", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", "tokenfield": "^1.5.2" @@ -38,18 +41,26 @@ "devDependencies": { "@basemaps/sprites": "^6.32.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", + "@types/chai": "^4.3.4", + "@types/color-namer": "^1.3.0", + "@types/expect": "^24.3.0", + "@types/mocha": "^10.0.1", "canvas": "^2.11.0", "chai": "^4.3.7", - "color-name": "^2.0.0", + "color-namer": "^1.4.0", "commander": "^10.0.0", "esbuild": "^0.17.4", "glob": "^9.2.1", + "maplibre-gl": "^2.4.0", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", - "prettier": "2.3.2", + "prettier": "^2.3.2", "shx": "^0.3.4", - "svgo": "^2.8.0" + "svgo": "^2.8.0", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" }, "engines": { "npm": ">=8.3.0", diff --git a/scripts/build.js b/scripts/build.ts similarity index 55% rename from scripts/build.js rename to scripts/build.ts index 5b56e9204..8b64f162c 100644 --- a/scripts/build.js +++ b/scripts/build.ts @@ -1,7 +1,7 @@ import { stat, copyFile, mkdir } from "node:fs/promises"; import { pathToFileURL } from "node:url"; -import esbuild from "esbuild"; +import esbuild, { BuildContext, BuildOptions } from "esbuild"; const maybeLocalConfig = async (name = "local.config.js") => { let exists = await stat(name) @@ -19,8 +19,12 @@ const maybeLocalConfig = async (name = "local.config.js") => { } }; -const buildWith = async (key, buildOptions) => { +const buildWith = async ( + key: string, + buildOptions: BuildOptions +): Promise => { await mkdir("dist", { recursive: true }); + await Promise.all( ["index.html", "shieldtest.html", "favicon.ico"].map((f) => copyFile(`src/${f}`, `dist/${f}`) @@ -44,18 +48,40 @@ const buildWith = async (key, buildOptions) => { ...buildOptions?.define, }, }; - return ( - esbuild[key](options) - // esbuild will pretty-print its own error messages; - // suppress node.js from printing the exception. - .catch(() => process.exit(1)) - ); + + const shieldLibOptions = { + entryPoints: ["shieldlib/src/index.ts"], + format: "esm", + bundle: true, + minify: true, + sourcemap: true, + outdir: "shieldlib/dist", + logLevel: "info", + ...localConfig, + ...buildOptions, + define: { + ...localConfig?.define, + ...buildOptions?.define, + }, + }; + + // esbuild will pretty-print its own error messages; + // suppress node.js from printing the exception. + const suppressErrors = () => process.exit(1); + + return await Promise.all([ + esbuild[key](options).catch(suppressErrors), + esbuild[key](shieldLibOptions).catch(suppressErrors), + ]); }; -export const buildContext = (buildOptions = {}) => - buildWith("context", buildOptions); +export const buildContext = ( + buildOptions: BuildOptions = {} +): Promise => buildWith("context", buildOptions); -export const build = (buildOptions = {}) => buildWith("build", buildOptions); +export const build = ( + buildOptions: BuildOptions = {} +): Promise => buildWith("build", buildOptions); const mainModule = pathToFileURL(process.argv[1]).toString(); const isMain = import.meta.url === mainModule; diff --git a/scripts/serve.js b/scripts/serve.js deleted file mode 100644 index 503feb30b..000000000 --- a/scripts/serve.js +++ /dev/null @@ -1,13 +0,0 @@ -import open from "open"; - -import { buildContext } from "./build.js"; - -const port = 1776; - -const context = await buildContext({ - define: { "window.LIVE_RELOAD": "true" }, -}); -await context.watch(); -await context.serve({ servedir: "dist", host: "::", port }); - -open(`http://localhost:${port}/`); diff --git a/scripts/serve.ts b/scripts/serve.ts new file mode 100644 index 000000000..32527e892 --- /dev/null +++ b/scripts/serve.ts @@ -0,0 +1,16 @@ +import { BuildContext } from "esbuild"; +import open from "open"; + +import { buildContext } from "./build"; + +const port = 1776; + +const [mainContext, shieldLibContext]: BuildContext[] = await buildContext({ + define: { "window.LIVE_RELOAD": "true" }, +}); + +await mainContext.watch(); +await shieldLibContext.watch(); +await mainContext.serve({ servedir: "dist", host: "::", port }); + +open(`http://localhost:${port}/`); diff --git a/scripts/taginfo.js b/scripts/taginfo.js index f3df82846..135109f24 100644 --- a/scripts/taginfo.js +++ b/scripts/taginfo.js @@ -2,27 +2,36 @@ import * as fs from "fs"; import * as ShieldDef from "../src/js/shield_defs.js"; -import * as Shields from "../src/js/shield.js"; -import * as Gfx from "../src/js/screen_gfx.js"; -import * as CustomShields from "../src/js/custom_shields.js"; -import { Canvas } from "canvas"; import namer from "color-namer"; import { mkdir } from "node:fs/promises"; +import { + ShieldRenderer, + InMemorySpriteRepository, +} from "@americana/maplibre-shield-generator"; +/** + * TODO - BUG + * Exporting HeadlessGraphicsFactory in shieldlib's index.ts causes an unexplained error in node-canvas + * where it thinks it's running in a browser and attempts to create a browser canvas, and fails. The same + * behavior occurs in skia-canvas. This hack works well enough for the taginfo script, but ideally the shield + * library should be capable of generating shields outside the browser. + */ +import { HeadlessGraphicsFactory } from "@americana/maplibre-shield-generator/src/headless_graphics"; +import { + routeParser, + shieldPredicate, + networkPredicate, +} from "../src/js/shield_format.js"; await mkdir("dist/shield-sample", { recursive: true }); -//Headless graphics context -Gfx.setGfxFactory((bounds) => { - let canvas = new Canvas(bounds.width, bounds.height, "svg"); - let ctx = canvas.getContext("2d"); - ctx.imageSmoothingQuality = "high"; - ctx.textAlign = "center"; - ctx.textBaseline = "top"; - ctx.canvas = canvas; - return ctx; -}); - const shieldGfxMap = new Map(); +const shields = ShieldDef.loadShields(); + +const shieldRenderer = new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .graphicsFactory(new HeadlessGraphicsFactory("svg")) + .renderOnRepository(new InMemorySpriteRepository()); const colorNames = new Map(); @@ -49,46 +58,36 @@ function getNamedColor(colorString, defaultColor) { * @param {*} project - The project description object to modify. */ function addNetworkTags(project) { - CustomShields.loadCustomShields(); - let shields = ShieldDef.loadShields(); + let shieldSpec = shields; // Convert each shield's rendering metadata to an entry that taginfo understands. - let tags = Object.entries(shields) + let tags = Object.entries(shieldSpec.networks) .filter((entry) => !entry[0].match(/^omt-/)) .map((entry) => { let network = entry[0], - definition = entry[1]; + shieldDef = entry[1]; - let icon = definition.spriteBlank || definition.noref?.spriteBlank; + let icon = shieldDef.spriteBlank || shieldDef.noref?.spriteBlank; if (Array.isArray(icon)) { icon = icon[0]; } let icon_url; + let defBanners = shieldDef.banners; - //Shield ID with ref as a single space character - let id = `shield\n${network}= `; - - let routeDef = Shields.getRouteDef(id); - let shieldDef = Shields.getShieldDef(routeDef); + if (icon == undefined && shieldDef?.shapeBlank !== undefined) { + //Remove banners and allow blank to render without a ref + delete shieldDef.banners; + shieldDef.notext = true; - if (icon == undefined && shieldDef.canvasDrawnBlank !== undefined) { - //Generate empty canvas sized to the graphic - let shieldGfx = Gfx.getGfxContext( - Shields.getDrawnShieldBounds(shieldDef, " ") - ); + let shieldGfx = shieldRenderer.getGraphicForRoute(network, "", ""); - //Draw shield to the canvas - Shields.drawShield(shieldGfx, shieldDef, routeDef); - - delete shields[network].modifiers; - let def = JSON.stringify(shields[network]); - - if (!shieldGfxMap.has(def)) { - shieldGfxMap.set(def, shieldGfxMap.size); + let shieldDefText = JSON.stringify(shieldDef); + if (!shieldGfxMap.has(shieldDefText)) { + shieldGfxMap.set(shieldDefText, shieldGfxMap.size); } - let network_filename_id = shieldGfxMap.get(def); + let network_filename_id = shieldGfxMap.get(shieldDefText); let save_filename = `dist/shield-sample/shield_${network_filename_id}.svg`; if (!fs.existsSync(save_filename)) { @@ -110,8 +109,8 @@ function addNetworkTags(project) { svgText = svgText.replace(/#fff/gi, shieldDef.colorDarken); } - delete shields[network].modifiers; - let def = JSON.stringify(shields[network]); + delete shieldSpec.networks[network].banners; + let def = JSON.stringify(shieldSpec.networks[network]); if (!shieldGfxMap.has(def)) { shieldGfxMap.set(def, shieldGfxMap.size); @@ -129,8 +128,8 @@ function addNetworkTags(project) { } let description = `Roads carrying routes in this network are marked by `; - if (definition.canvasDrawnBlank) { - let shapeDef = definition.canvasDrawnBlank; + if (shieldDef.shapeBlank) { + let shapeDef = shieldDef.shapeBlank; let prettyShapeName = `${shapeDef.drawFunc}-shaped`; let prettyFillColor = getNamedColor(shapeDef.params.fillColor, "white"); let prettyStrokeColor = getNamedColor( @@ -171,10 +170,8 @@ function addNetworkTags(project) { description += "shields"; } - if (definition.modifiers && definition.modifiers.length > 0) { - description += ` modified by ${definition.modifiers.join( - ", " - )} banners`; + if (defBanners && defBanners.length > 0) { + description += ` modified by ${defBanners.join(", ")} banners`; } description += "."; diff --git a/shieldlib/.mocharc.yml b/shieldlib/.mocharc.yml new file mode 100644 index 000000000..0e5405489 --- /dev/null +++ b/shieldlib/.mocharc.yml @@ -0,0 +1,9 @@ +recursive: true +extension: + - ts +spec: + - test/spec/*.ts +require: ts-node/register +node-option: + - loader=ts-node/esm + - experimental-specifier-resolution=node diff --git a/shieldlib/.prettierignore b/shieldlib/.prettierignore new file mode 100644 index 000000000..9d0b71a3c --- /dev/null +++ b/shieldlib/.prettierignore @@ -0,0 +1,2 @@ +build +dist diff --git a/shieldlib/README.md b/shieldlib/README.md new file mode 100644 index 000000000..abcb72542 --- /dev/null +++ b/shieldlib/README.md @@ -0,0 +1,306 @@ +# Americana Shield Renderer + +The Americana shield renderer is a library intended to draw highway shields on a [maplibre-gl-js](https://github.com/maplibre/maplibre-gl-js) vector-tiled map. + +![Pictoral highway shields](https://wiki.openstreetmap.org/w/images/6/6d/Rendered_shields_americana.png) + +## Shield rendering workflow + +Rendering shields requires the following compoments: + +1. **Encode shield information in vector tiles**. First, your tiles must contain the information which tells the shield renderer what shields to draw. In OpenMapTiles, shield information is encoded in the [`transportation_name`](https://openmaptiles.org/schema/#transportation_name) vector tile layer with a series of attributes named `route_1`, `route_2`, etc. Each attribute contains a text string which contains all of the information needed to determine which graphic to display, including numeric route number if the shield is numbered. However, this library allows you to specify how the shield information has been encoded, and it's possible to stitch together data from multiple fields when encoding shield data. + +2. **Expose shield information in a style layer**. Next, route information must be exposed in a maplibre expression using [image](https://maplibre.org/maplibre-gl-js-docs/style-spec/expressions/#types-image) in a structured string containing the route information. For example, you might encode Interstate 95 as an image named `shield|US:I=95`. Normally, the image expression is used to point to pre-designated sprites in a sprite sheet, but in this case, we're pointing to a sprite which doesn't exist called `shield|US:I=95`. This will trigger a `styleimagemissing` event which allows the shield renderer to create the required graphic on the fly. As an example of how to encode shield information, see OSM Americana's [`highway_shield`](https://github.com/ZeLonewolf/openstreetmap-americana/blob/main/src/layer/highway_shield.js) style layer. + +3. **Define a parser that describes how route information is encoded**. There are three parts to a route definition: + 1. The `network` string, which defines a network with a common shield shape, graphic, and color + 1. The `ref` string, which defines a text sequence that should be drawn on top of the shield graphic + 1. The `name` string, which defines a name, separate from the ref, that is used to determine which graphic to draw + +```typescript +let routeParser = { + //format is `shield|${network}=${ref}|${name}` + parse: (id: string) => { + let id_parts = id.split("|"); + let network_ref = id_parts[1].split("="); + + return { + network: network_ref[0], + ref: network_ref[1], + name: id_parts[2], + }; + }, + format: (network: string, ref: string, name: string) => + `shield|${network}=${ref}|${name}`, +}; +``` + +4. **(Optional) Create predicates that define which shields will be handled**. For example, if all sprite IDs in your style that need a shield begin with the string `shield|`, this would look like: + +```typescript +let shieldPredicate = (imageID: string) => imageID.startsWith("shield"); +``` + +This step can be skipped if all unhandled image IDs are shields. + +Additionally, you can specify which networks will be handled. The example below ignores all nwn, lwn, ncn, etc network values: + +```typescript +let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); +``` + +5. **Create shield definitions and artwork**. The shield definition is expressed as a JSON file along with a set of sprites containing any raster artwork used for the shields. It can be generated as an object or hosted as a JSON file accessible by URL. See the next section for how to create this definition. + +6. **Hook up the shield generator to a maplibre-gl-js map**. Pass either the URL of the JSON shield definition or create an object in javascript code. There are two separate classes for each approach. + +```typescript +new URLShieldRenderer("shields.json", routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); +``` + +```typescript +new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); +``` + +## Shield Definition + +The purpose of the shield definition is to define which graphics and text to draw for each network/ref/name combination that you wish to display. This can be created in javascript as an object, or as an HTTP-accessible JSON file. + +This description uses the following conventions: + +- A **network** is a set of routes with a _common graphical presentation_. Each route may have variations in appearance, such as a different route number, or a special case definition as described below. The network value corresponds in concept to the OpenStreetMap [network tag](https://wiki.openstreetmap.org/wiki/Key:network). +- A **ref** contains the text to be drawn on shield artwork. The ref value corresponds in concept to the OpenStreetMap [ref tag](https://wiki.openstreetmap.org/wiki/Key:ref). + +The structure is as follows: + +```json +{ + "options": { + "bannerTextColor": "black", + "bannerTextHaloColor": "white", + "shieldFont": "sans-serif-condensed, 'Arial Narrow', sans-serif", + "shieldSize": 20 + }, + "default": { ...definition }, + "network_1": { ...definition }, + "network_2": { ...definition }, + "network_2": { ...definition } +} + +``` + +The options block contains global parameters that apply across all shield drawing: + +- **`bannerTextColor`**: color to draw text banners above the shield +- **`bannerTextHaloColor`**: color to draw an outline around the text banner +- **`shieldFont`**: font to use for shield text and banners +- **`shieldSize`**: "standard" size to use for shields in 1x pixels. However, some shields may diverge, for example, drawn diamond shields are drawn slightly larger for visual similarity with squares. + +You should create one definition entry for each network. The entry key must match the encoded `network` value exactly. The "default" network defines what should be drawn if there's no definition for a particular network. A network definiton can contain any combination of the following parameters: + +```json +{ + "textColor": "black", + "textHaloColor": "white", + "padding": { + "left": 3, + "right": 3, + "top": 3, + "bottom": 3 + }, + "spriteBlank": "name_of_image_1", + "noref": { + "spriteBlank": "name_of_image_2" + } + "shapeBlank": { + "drawFunc": "pentagon", + "params": { + "pointUp": false, + "offset": 5, + "angle": 0, + "fillColor": "white", + "strokeColor": "black", + "radius1": 2, + "radius2": 2 + } + }, + "banners": ["ALT"], + "textLayout": { + "constraintFunc": "roundedRect", + "options": { + "radius": 2 + } + }, + "colorLighten": "#006747", + "overrideByRef": { + "REF": { + "spriteBlank": "special_case_image", + "textColor": "#003f87", + "colorLighten": "#003f87" + } + }, + "refsByName": { + "Audubon Parkway": "AU" + }, + "overrideByName": { + "Merritt Parkway": { + "spriteBlank": "shield_us_ct_parkway_merritt" + } + } +} +``` + +### Shield property descriptions + +- **`textColor`**: determines what color to draw the `ref` on the shield. +- **`textHaloColor`**: color to draw a knockout halo around the `ref` text. +- **`padding`**: padding around the `ref`, which allows you to squeeze the text into a smaller space within the shield. +- **`spriteBlank`**: specify the name of an image in the sprite sheet to use as the shield background. This can either be a single string or an array of strings if there are multiple options for different width. If it's an array of strings, they must be ordered from narrowest to widest, and the engine will choose the narrowest shield graphic that fits the text at a reasonable size. +- **`noref`**: specify alternate attributes to apply in the event that no `ref` is supplied. This allows you to use one graphic for numbered routes and a separate unitary graphic for non-numbered routes within the same network. Supports **`spriteBlank`**, **`colorLighten`**, and **`colorDarken`**. +- **`shapeBlank`**: specify that a shield should be drawn as a common shape (rectangle, ellipse, pentagon, etc), with colors and dimensions as specified. See the [drawn shield shapes](#defining-drawn-shield-shapes) section for available drawing options. +- **`banners`**: specify that one or more short text strings (up to 4 characters) should be drawn above the shield. This is specified as an array, and text will be drawn in order from top to bottom. Below is an example of bannered shields with up to three banners: + +![Bannered routes near Downington, PA](https://wiki.openstreetmap.org/w/images/f/f8/Downington_bannered_routes_Americana.png) + +- **`textLayout`**: specify how text should be inscribed within the padded bounds of the shield. The text will be drawn at the maximum size allowed by this constraint. See the [text layout functions](#text-layout-functions) section for text layout options. +- **`colorLighten`**: specify that the shield artwork should be lightened (multiplied) by the specified color. This means that black areas will be recolor with this color and white areas will remain the same. Alpha values will remain unmodified. +- **`colorDarken`**: specify that the shield artwork should be darkened by the specified color. This means that white areas will be recolor with this color and black areas will remain the same. Alpha values will remain unmodified. +- **`overrideByRef`**: specify that a specific `ref` within a `network` should have different shield properties than other routes in the network, with one entry per special-case `ref`. Supported options are **`spriteBlank`**, **`textColor`**, and **`colorLighten`**. +- **`refsByName`**: specify that a `name` with the specified key should be treated as a `ref` with the specified value. +- **`overrideByName`**: specify that particular `name` should use a specific **`spriteBlank`** which differs from the rest of the network. + +### Handling special case networks + +The shield specification allows for the handling of special cases. For example, in OSM Americana, we wanted to create special shields for the [Kentucky Parkway System](https://en.wikipedia.org/wiki/List_of_parkways_and_named_highways_in_Kentucky). This network used a particularly ugly set of shields that looked something like this: + +![Western Kentucky Parkway shield](https://upload.wikimedia.org/wikipedia/en/d/db/Western_Kentucky_Parkway_fair_use.svg) + +The Americana team wanted to draw a series of shields that used two-letter codes to represent each of the Parkways, so that it would look like this: + +![Kentucky parkways](https://wiki.openstreetmap.org/w/images/d/da/Kentucky_parkway_Americana.png) + +However, these two-letter codes weren't actually used as route numbers on shields, so it wasn't appropriate to add them to the `ref=*` tag in OpenStreetMap. Instead, the team used the `refsByName` property, and then defined what two-letter code is assigned to each named route network as follows: + +```json + "US:KY:Parkway": { + "spriteBlank":"shield_us_ky_parkway", + "textColor":"#003f87", + "padding": { + "left":2, + "right":2, + "top":2, + "bottom":6 + }, + "refsByName": { + "Audubon Parkway":"AU", + "Bluegrass Parkway":"BG", + "Bluegrass Pkwy":"BG", + "Cumberland Parkway":"LN", + "Cumberland Pkwy":"LN", + "Hal Rogers Parkway":"HR", + "Hal Rogers Pkwy":"HR", + "Mountain Parkway":"MP", + "Mountain Pkwy":"MP", + "Purchase Parkway":"JC", + "Purchase Pkwy":"JC", + "Western Kentucky Parkway":"WK", + "Western Kentucky Pkwy":"WK" + } + }, + +``` + +Another special case is when select routes within a network need to be styled differently. For example, [Georgia State Route 520](https://en.wikipedia.org/wiki/Georgia_State_Route_520) is signed with a green-colored shield, while the default color for Georgia state highways is black. The shield assembly below shows an intersection and concurrency with both styles of Georgia state route: + +![Georgia Route 520](https://upload.wikimedia.org/wikipedia/commons/4/4f/GA_green_route_concurrency.png) + +This effect can be achieved by overriding the text and sprite color in the route definition as follows. For multiple special case refs, add multiple entries. + +```json +"US:GA": { + "spriteBlank": ["shield_us_ga_narrow", "shield_us_ga_wide"], + "textColor": "black", + "overrideByRef": { + "520": { + "textColor": "#006747", + "colorLighten": "#006747" + } + } +} +``` + +In this example, the two `shield_us_ga_...` sprite blanks represent the narrow and wide versions of the Georgia state route shield, and are colored black with white fill. This results in the following: + +![Georgia State Route 520 Concurrency](https://wiki.openstreetmap.org/w/images/0/0b/Columbs_georgia_concurrency.png) + +Finally, the last special case is when one _named_ route in a network requires a different shield from other routes in the network. For example, the Merritt Parkway in Connecticut is tagged in OSM as `network=US:CT:Parkway` + `name=Merritt Parkway`. There are also two additional parkways in Connecticut tagged the same way. However, only the Merritt Parkway has a shield. Thus, we can define the `US:CT:Parkway` as an empty definition with an exception for a route named `Merritt Parkway`: + +```json +"US:CT:Parkway": { + "overrideByName" : { + "Merritt Parkway": { + "spriteBlank": "shield_us_ct_parkway_merritt", + }, + } +} +``` + +The clip below shows the result where the Merritt Parkway (concurrent with CT-15) ends and the Wilbur Cross Parkway (name but no shield) begins: + +![Merritt Parkway Shield](https://wiki.openstreetmap.org/w/images/3/37/Ct_parkway_shield.png) + +### Text layout functions + +Text is laid out on shields in accordance with the specified `textLayout` value. The text will be drawn, measured, and expanded until it hits the edge of a text layout constraint. For example, an `ellipse` constraint would fill a padded shield like this, with the text drawn from the center and expanding until it reaches the ellipse: + +![Ellipse constraint](https://upload.wikimedia.org/wikipedia/commons/7/72/Ellipse_constraint.png) + +Not all constraints are center-specified. For example, the `southHalfEllipse` constraint would grow from the top of the shield as follows: + +![South half-ellipse constraint](https://upload.wikimedia.org/wikipedia/commons/6/62/South_half-ellipse_constraint.png) + +The supported text constraints are: + +- `ellipse` +- `rect` +- `roundedRect` +- `southHalfEllipse` + +### Defining drawn shield shapes + +If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to be specified with a drawing function, `drawFunc` and a `params` block the describes how the shape will be drawn. The draw functions are as follows: + +| | `drawFunc` | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| ![](https://upload.wikimedia.org/wikipedia/commons/c/cf/Diamond_highway_shield_shape.svg) | `diamond` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `ellipse` | +| ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Escutcheon_highway_shield_shape.svg) | `escutcheon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Fishhead_highway_shield_shape.svg) | `fishhead` | +| ![](https://upload.wikimedia.org/wikipedia/commons/6/61/Hexagon_highway_shield_shape.svg) | `hexagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/2/25/Horizontal_hexagon_shape.svg) | `hexagonHorizontal` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Octagon_shield_shape.svg) | `octagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/ff/Pentagon_shield_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/b/b0/Black_and_white_home_plate_shape_as_used_in_highway_shields.svg) | `pentagon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `roundedRectangle` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Black_and_white_downward_trapezoid_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/5/56/Black_and_white_upward_trapezoid_as_used_in_highway_shields.svg) | `trapezoid` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Downward_triangle_highway_shield_shape.svg) | `triangle` | + +The following `params` options can be specified: + +- `angle` - applies to several shape types, indicates the key angle in degrees. +- `fill` - specifies the internal fill color. +- `outline` - specifies the outline color. +- `outlineWidth` - specifies the width of the outline. +- `pointUp` - applies to several shape types and specifies whether the pointy side is up. +- `radius` - specifies the rounding radius, in pixels, to use for corners. +- `radius1` - Corner radius of pointed side of pentagon (defaults to 2) +- `radius2` - Corner radius of flat side of pentagon (defaults to 0) +- `shortSideUp` - for `trapezoid` only, a boolean which specifies whether the short side is up or down. + +### Custom shield graphics + +In addition to the stock drawing functions, a custom draw function can be specified. `paDot` and `branson` are included as examples of this, for rendering the [Allegheny County belt system](https://en.wikipedia.org/wiki/Allegheny_County_belt_system) and the Branson, Missouri colored route system. See the file `src/custom_shields.mjs` for an example of how this is done. diff --git a/shieldlib/package-lock.json b/shieldlib/package-lock.json new file mode 100644 index 000000000..347c58fac --- /dev/null +++ b/shieldlib/package-lock.json @@ -0,0 +1,9520 @@ +{ + "name": "@americana/maplibre-shield-generator", + "version": "0.0.1-alpha.11", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@americana/maplibre-shield-generator", + "version": "0.0.1-alpha.11", + "license": "CC0-1.0", + "dependencies": { + "color-rgba": "^2.4.0", + "maplibre-gl": "^2.4.0" + }, + "devDependencies": { + "@types/color-rgba": "^2.1.0", + "esbuild": "^0.17.10", + "npm-run-all": "^4.1.5", + "parcel": "latest", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.10.tgz", + "integrity": "sha512-7YEBfZ5lSem9Tqpsz+tjbdsEshlO9j/REJrfv4DXgKTt1+/MHqGwbtlyxQuaSlMeUZLxUKBaX8wdzlTfHkmnLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.10.tgz", + "integrity": "sha512-ht1P9CmvrPF5yKDtyC+z43RczVs4rrHpRqrmIuoSvSdn44Fs1n6DGlpZKdK6rM83pFLbVaSUwle8IN+TPmkv7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.10.tgz", + "integrity": "sha512-CYzrm+hTiY5QICji64aJ/xKdN70IK8XZ6iiyq0tZkd3tfnwwSWTYH1t3m6zyaaBxkuj40kxgMyj1km/NqdjQZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.10.tgz", + "integrity": "sha512-3HaGIowI+nMZlopqyW6+jxYr01KvNaLB5znXfbyyjuo4lE0VZfvFGcguIJapQeQMS4cX/NEispwOekJt3gr5Dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.10.tgz", + "integrity": "sha512-J4MJzGchuCRG5n+B4EHpAMoJmBeAE1L3wGYDIN5oWNqX0tEr7VKOzw0ymSwpoeSpdCa030lagGUfnfhS7OvzrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.10.tgz", + "integrity": "sha512-ZkX40Z7qCbugeK4U5/gbzna/UQkM9d9LNV+Fro8r7HA7sRof5Rwxc46SsqeMvB5ZaR0b1/ITQ/8Y1NmV2F0fXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.10.tgz", + "integrity": "sha512-0m0YX1IWSLG9hWh7tZa3kdAugFbZFFx9XrvfpaCMMvrswSTvUZypp0NFKriUurHpBA3xsHVE9Qb/0u2Bbi/otg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.10.tgz", + "integrity": "sha512-whRdrrl0X+9D6o5f0sTZtDM9s86Xt4wk1bf7ltx6iQqrIIOH+sre1yjpcCdrVXntQPCNw/G+XqsD4HuxeS+2QA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.10.tgz", + "integrity": "sha512-g1EZJR1/c+MmCgVwpdZdKi4QAJ8DCLP5uTgLWSAVd9wlqk9GMscaNMEViG3aE1wS+cNMzXXgdWiW/VX4J+5nTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.10.tgz", + "integrity": "sha512-1vKYCjfv/bEwxngHERp7huYfJ4jJzldfxyfaF7hc3216xiDA62xbXJfRlradiMhGZbdNLj2WA1YwYFzs9IWNPw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.10.tgz", + "integrity": "sha512-mvwAr75q3Fgc/qz3K6sya3gBmJIYZCgcJ0s7XshpoqIAIBszzfXsqhpRrRdVFAyV1G9VUjj7VopL2HnAS8aHFA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.10.tgz", + "integrity": "sha512-XilKPgM2u1zR1YuvCsFQWl9Fc35BqSqktooumOY2zj7CSn5czJn279j9TE1JEqSqz88izJo7yE4x3LSf7oxHzg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.10.tgz", + "integrity": "sha512-kM4Rmh9l670SwjlGkIe7pYWezk8uxKHX4Lnn5jBZYBNlWpKMBCVfpAgAJqp5doLobhzF3l64VZVrmGeZ8+uKmQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.10.tgz", + "integrity": "sha512-r1m9ZMNJBtOvYYGQVXKy+WvWd0BPvSxMsVq8Hp4GzdMBQvfZRvRr5TtX/1RdN6Va8JMVQGpxqde3O+e8+khNJQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.10.tgz", + "integrity": "sha512-LsY7QvOLPw9WRJ+fU5pNB3qrSfA00u32ND5JVDrn/xG5hIQo3kvTxSlWFRP0NJ0+n6HmhPGG0Q4jtQsb6PFoyg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.10.tgz", + "integrity": "sha512-zJUfJLebCYzBdIz/Z9vqwFjIA7iSlLCFvVi7glMgnu2MK7XYigwsonXshy9wP9S7szF+nmwrelNaP3WGanstEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.10.tgz", + "integrity": "sha512-lOMkailn4Ok9Vbp/q7uJfgicpDTbZFlXlnKT2DqC8uBijmm5oGtXAJy2ZZVo5hX7IOVXikV9LpCMj2U8cTguWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.10.tgz", + "integrity": "sha512-/VE0Kx6y7eekqZ+ZLU4AjMlB80ov9tEz4H067Y0STwnGOYL8CsNg4J+cCmBznk1tMpxMoUOf0AbWlb1d2Pkbig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.10.tgz", + "integrity": "sha512-ERNO0838OUm8HfUjjsEs71cLjLMu/xt6bhOlxcJ0/1MG3hNqCmbWaS+w/8nFLa0DDjbwZQuGKVtCUJliLmbVgg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.10.tgz", + "integrity": "sha512-fXv+L+Bw2AeK+XJHwDAQ9m3NRlNemG6Z6ijLwJAAVdu4cyoFbBWbEtyZzDeL+rpG2lWI51cXeMt70HA8g2MqIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.10.tgz", + "integrity": "sha512-3s+HADrOdCdGOi5lnh5DMQEzgbsFsd4w57L/eLKKjMnN0CN4AIEP0DCP3F3N14xnxh3ruNc32A0Na9zYe1Z/AQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.10.tgz", + "integrity": "sha512-oP+zFUjYNaMNmjTwlFtWep85hvwUu19cZklB3QsBOcZSs6y7hmH4LNCJ7075bsqzYaNvZFXJlAVaQ2ApITDXtw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", + "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", + "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", + "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", + "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", + "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", + "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "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", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "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" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.0.tgz", + "integrity": "sha512-5qpnNHUyyEj9H3sm/4Um/bnx1lrQGhe8iqry/1d+cQYCRd/gzYA0YLeq0ezlk4hKx4vO+dsEsNyeowqRqslwQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.0.tgz", + "integrity": "sha512-ZphTFFd6SFweNAMKD+QJCrWpgkjf4qBuHltiMkKkD6FFrB3NOTRVmetAGTkJ57pa+s6J0yCH06LujWB9rZe94g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.0.tgz", + "integrity": "sha512-ztKVV1dO/sSZyGse0PBCq3Pk1PkYjsA/dsEWE7lfrGoAK3i9HpS2o7XjGQ7V4va6nX+xPPOiuYpQwa4Bi6vlww==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.0.tgz", + "integrity": "sha512-NEX6hdSvP4BmVyegaIbrGxvHzHvTzzsPaxXCsUt0mbLbPpEftsvNwaEVKOowXnLoeuGeD4MaqSwL3BUK2elsUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.0.tgz", + "integrity": "sha512-9uvdAkZMOPCY7SPRxZLW8XGqBOVNVEhqlgffenN8shA1XR9FWVsSM13nr/oHtNgXg6iVyML7RwWPyqUeThlwxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.0.tgz", + "integrity": "sha512-Wg0+9615kHKlr9iLVcG5I+/CHnf6w3x5UADRv8Ad16yA0Bu5l9eVOROjV7aHPG6uC8ZPFIVVaoSjDChD+Y0pzg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@parcel/bundler-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", + "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", + "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", + "dev": true, + "dependencies": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", + "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", + "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", + "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-css": "2.8.3", + "@parcel/optimizer-htmlnano": "2.8.3", + "@parcel/optimizer-image": "2.8.3", + "@parcel/optimizer-svgo": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-css": "2.8.3", + "@parcel/packager-html": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/packager-svg": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-browser-hmr": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/runtime-react-refresh": "2.8.3", + "@parcel/runtime-service-worker": "2.8.3", + "@parcel/transformer-babel": "2.8.3", + "@parcel/transformer-css": "2.8.3", + "@parcel/transformer-html": "2.8.3", + "@parcel/transformer-image": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3", + "@parcel/transformer-postcss": "2.8.3", + "@parcel/transformer-posthtml": "2.8.3", + "@parcel/transformer-raw": "2.8.3", + "@parcel/transformer-react-refresh-wrap": "2.8.3", + "@parcel/transformer-svg": "2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", + "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", + "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", + "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", + "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "dev": true, + "dependencies": { + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/fs-search": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", + "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/graph": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", + "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "dev": true, + "dependencies": { + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/hash": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", + "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", + "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", + "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", + "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", + "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", + "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", + "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", + "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-svgo": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", + "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-terser": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", + "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", + "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", + "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", + "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", + "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", + "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", + "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", + "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", + "dev": true, + "dependencies": { + "@parcel/types": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", + "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", + "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", + "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "dev": true, + "dependencies": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", + "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", + "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", + "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", + "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", + "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", + "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", + "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1", + "srcset": "4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", + "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", + "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", + "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", + "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", + "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", + "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", + "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", + "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", + "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", + "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", + "dev": true, + "dependencies": { + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", + "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/color-rgba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.0.tgz", + "integrity": "sha512-tWcJLEiKdZ3ihJdThfLCe6Kw5vo0lgGcuucGkbtzcp1zifDA1E2Z96wxeSS/r+ytpHD15NCAWabX8GV911ywCA==", + "dev": true + }, + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/node": { + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "dev": true, + "peer": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "peer": true + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", + "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.308", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz", + "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.10.tgz", + "integrity": "sha512-n7V3v29IuZy5qgxx25TKJrEm0FHghAlS6QweUcyIgh/U0zYmQcvogWROitrTyZId1mHSkuhhuyEXtI9OXioq7A==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.10", + "@esbuild/android-arm64": "0.17.10", + "@esbuild/android-x64": "0.17.10", + "@esbuild/darwin-arm64": "0.17.10", + "@esbuild/darwin-x64": "0.17.10", + "@esbuild/freebsd-arm64": "0.17.10", + "@esbuild/freebsd-x64": "0.17.10", + "@esbuild/linux-arm": "0.17.10", + "@esbuild/linux-arm64": "0.17.10", + "@esbuild/linux-ia32": "0.17.10", + "@esbuild/linux-loong64": "0.17.10", + "@esbuild/linux-mips64el": "0.17.10", + "@esbuild/linux-ppc64": "0.17.10", + "@esbuild/linux-riscv64": "0.17.10", + "@esbuild/linux-s390x": "0.17.10", + "@esbuild/linux-x64": "0.17.10", + "@esbuild/netbsd-x64": "0.17.10", + "@esbuild/openbsd-x64": "0.17.10", + "@esbuild/sunos-x64": "0.17.10", + "@esbuild/win32-arm64": "0.17.10", + "@esbuild/win32-ia32": "0.17.10", + "@esbuild/win32-x64": "0.17.10" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "peer": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "peer": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/htmlnano": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.3.tgz", + "integrity": "sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + }, + "peerDependencies": { + "cssnano": "^5.0.11", + "postcss": "^8.3.11", + "purgecss": "^5.0.0", + "relateurl": "^0.2.7", + "srcset": "4.0.0", + "svgo": "^2.8.0", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lmdb": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", + "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "peer": true + }, + "node_modules/msgpackr": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.3.tgz", + "integrity": "sha512-m2JefwcKNzoHYXkH/5jzHRxAw7XLWsAdvu0FOJ+OLwwozwOV/J6UA62iLkfIMbg7G8+dIuRwgg6oz+QoQ4YkoA==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.0" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.0.tgz", + "integrity": "sha512-oy6KCk1+X4Bn5m6Ycq5N1EWl9npqG/cLrE8ga8NX7ZqfqYUUBS08beCQaGq80fjbKBySur0E6x//yZjzNJDt3A==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.0" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", + "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "dev": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-binary": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", + "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", + "dev": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parcel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", + "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.8.3", + "@parcel/core": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/reporter-cli": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "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" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shx": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", + "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", + "dev": true, + "dependencies": { + "ts-node": "7.0.1" + }, + "bin": { + "ts-mocha": "bin/ts-mocha" + }, + "engines": { + "node": ">= 6.X.X" + }, + "optionalDependencies": { + "tsconfig-paths": "^3.5.0" + }, + "peerDependencies": { + "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" + } + }, + "node_modules/ts-mocha/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-mocha/node_modules/ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dev": true, + "dependencies": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-mocha/node_modules/yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "optional": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "optional": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true, + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@esbuild/android-arm": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.10.tgz", + "integrity": "sha512-7YEBfZ5lSem9Tqpsz+tjbdsEshlO9j/REJrfv4DXgKTt1+/MHqGwbtlyxQuaSlMeUZLxUKBaX8wdzlTfHkmnLw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.10.tgz", + "integrity": "sha512-ht1P9CmvrPF5yKDtyC+z43RczVs4rrHpRqrmIuoSvSdn44Fs1n6DGlpZKdK6rM83pFLbVaSUwle8IN+TPmkv7g==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.10.tgz", + "integrity": "sha512-CYzrm+hTiY5QICji64aJ/xKdN70IK8XZ6iiyq0tZkd3tfnwwSWTYH1t3m6zyaaBxkuj40kxgMyj1km/NqdjQZA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.10.tgz", + "integrity": "sha512-3HaGIowI+nMZlopqyW6+jxYr01KvNaLB5znXfbyyjuo4lE0VZfvFGcguIJapQeQMS4cX/NEispwOekJt3gr5Dg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.10.tgz", + "integrity": "sha512-J4MJzGchuCRG5n+B4EHpAMoJmBeAE1L3wGYDIN5oWNqX0tEr7VKOzw0ymSwpoeSpdCa030lagGUfnfhS7OvzrQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.10.tgz", + "integrity": "sha512-ZkX40Z7qCbugeK4U5/gbzna/UQkM9d9LNV+Fro8r7HA7sRof5Rwxc46SsqeMvB5ZaR0b1/ITQ/8Y1NmV2F0fXQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.10.tgz", + "integrity": "sha512-0m0YX1IWSLG9hWh7tZa3kdAugFbZFFx9XrvfpaCMMvrswSTvUZypp0NFKriUurHpBA3xsHVE9Qb/0u2Bbi/otg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.10.tgz", + "integrity": "sha512-whRdrrl0X+9D6o5f0sTZtDM9s86Xt4wk1bf7ltx6iQqrIIOH+sre1yjpcCdrVXntQPCNw/G+XqsD4HuxeS+2QA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.10.tgz", + "integrity": "sha512-g1EZJR1/c+MmCgVwpdZdKi4QAJ8DCLP5uTgLWSAVd9wlqk9GMscaNMEViG3aE1wS+cNMzXXgdWiW/VX4J+5nTA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.10.tgz", + "integrity": "sha512-1vKYCjfv/bEwxngHERp7huYfJ4jJzldfxyfaF7hc3216xiDA62xbXJfRlradiMhGZbdNLj2WA1YwYFzs9IWNPw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.10.tgz", + "integrity": "sha512-mvwAr75q3Fgc/qz3K6sya3gBmJIYZCgcJ0s7XshpoqIAIBszzfXsqhpRrRdVFAyV1G9VUjj7VopL2HnAS8aHFA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.10.tgz", + "integrity": "sha512-XilKPgM2u1zR1YuvCsFQWl9Fc35BqSqktooumOY2zj7CSn5czJn279j9TE1JEqSqz88izJo7yE4x3LSf7oxHzg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.10.tgz", + "integrity": "sha512-kM4Rmh9l670SwjlGkIe7pYWezk8uxKHX4Lnn5jBZYBNlWpKMBCVfpAgAJqp5doLobhzF3l64VZVrmGeZ8+uKmQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.10.tgz", + "integrity": "sha512-r1m9ZMNJBtOvYYGQVXKy+WvWd0BPvSxMsVq8Hp4GzdMBQvfZRvRr5TtX/1RdN6Va8JMVQGpxqde3O+e8+khNJQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.10.tgz", + "integrity": "sha512-LsY7QvOLPw9WRJ+fU5pNB3qrSfA00u32ND5JVDrn/xG5hIQo3kvTxSlWFRP0NJ0+n6HmhPGG0Q4jtQsb6PFoyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.10.tgz", + "integrity": "sha512-zJUfJLebCYzBdIz/Z9vqwFjIA7iSlLCFvVi7glMgnu2MK7XYigwsonXshy9wP9S7szF+nmwrelNaP3WGanstEg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.10.tgz", + "integrity": "sha512-lOMkailn4Ok9Vbp/q7uJfgicpDTbZFlXlnKT2DqC8uBijmm5oGtXAJy2ZZVo5hX7IOVXikV9LpCMj2U8cTguWA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.10.tgz", + "integrity": "sha512-/VE0Kx6y7eekqZ+ZLU4AjMlB80ov9tEz4H067Y0STwnGOYL8CsNg4J+cCmBznk1tMpxMoUOf0AbWlb1d2Pkbig==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.10.tgz", + "integrity": "sha512-ERNO0838OUm8HfUjjsEs71cLjLMu/xt6bhOlxcJ0/1MG3hNqCmbWaS+w/8nFLa0DDjbwZQuGKVtCUJliLmbVgg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.10.tgz", + "integrity": "sha512-fXv+L+Bw2AeK+XJHwDAQ9m3NRlNemG6Z6ijLwJAAVdu4cyoFbBWbEtyZzDeL+rpG2lWI51cXeMt70HA8g2MqIg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.10.tgz", + "integrity": "sha512-3s+HADrOdCdGOi5lnh5DMQEzgbsFsd4w57L/eLKKjMnN0CN4AIEP0DCP3F3N14xnxh3ruNc32A0Na9zYe1Z/AQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.10.tgz", + "integrity": "sha512-oP+zFUjYNaMNmjTwlFtWep85hvwUu19cZklB3QsBOcZSs6y7hmH4LNCJ7075bsqzYaNvZFXJlAVaQ2ApITDXtw==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.0" + } + }, + "@lmdb/lmdb-darwin-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", + "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-darwin-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", + "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-arm": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", + "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-arm64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", + "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", + "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-win32-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", + "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", + "dev": true, + "optional": true + }, + "@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "requires": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + } + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==" + }, + "@mapbox/mapbox-gl-supported": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + }, + "@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + } + }, + "@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.0.tgz", + "integrity": "sha512-5qpnNHUyyEj9H3sm/4Um/bnx1lrQGhe8iqry/1d+cQYCRd/gzYA0YLeq0ezlk4hKx4vO+dsEsNyeowqRqslwQA==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.0.tgz", + "integrity": "sha512-ZphTFFd6SFweNAMKD+QJCrWpgkjf4qBuHltiMkKkD6FFrB3NOTRVmetAGTkJ57pa+s6J0yCH06LujWB9rZe94g==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.0.tgz", + "integrity": "sha512-ztKVV1dO/sSZyGse0PBCq3Pk1PkYjsA/dsEWE7lfrGoAK3i9HpS2o7XjGQ7V4va6nX+xPPOiuYpQwa4Bi6vlww==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.0.tgz", + "integrity": "sha512-NEX6hdSvP4BmVyegaIbrGxvHzHvTzzsPaxXCsUt0mbLbPpEftsvNwaEVKOowXnLoeuGeD4MaqSwL3BUK2elsUA==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.0.tgz", + "integrity": "sha512-9uvdAkZMOPCY7SPRxZLW8XGqBOVNVEhqlgffenN8shA1XR9FWVsSM13nr/oHtNgXg6iVyML7RwWPyqUeThlwxg==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.0.tgz", + "integrity": "sha512-Wg0+9615kHKlr9iLVcG5I+/CHnf6w3x5UADRv8Ad16yA0Bu5l9eVOROjV7aHPG6uC8ZPFIVVaoSjDChD+Y0pzg==", + "dev": true, + "optional": true + }, + "@parcel/bundler-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", + "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/cache": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", + "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", + "dev": true, + "requires": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + } + }, + "@parcel/codeframe": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", + "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/compressor-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", + "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3" + } + }, + "@parcel/config-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", + "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-css": "2.8.3", + "@parcel/optimizer-htmlnano": "2.8.3", + "@parcel/optimizer-image": "2.8.3", + "@parcel/optimizer-svgo": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-css": "2.8.3", + "@parcel/packager-html": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/packager-svg": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-browser-hmr": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/runtime-react-refresh": "2.8.3", + "@parcel/runtime-service-worker": "2.8.3", + "@parcel/transformer-babel": "2.8.3", + "@parcel/transformer-css": "2.8.3", + "@parcel/transformer-html": "2.8.3", + "@parcel/transformer-image": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3", + "@parcel/transformer-postcss": "2.8.3", + "@parcel/transformer-posthtml": "2.8.3", + "@parcel/transformer-raw": "2.8.3", + "@parcel/transformer-react-refresh-wrap": "2.8.3", + "@parcel/transformer-svg": "2.8.3" + } + }, + "@parcel/core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", + "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + } + }, + "@parcel/diagnostic": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", + "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", + "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", + "dev": true + }, + "@parcel/fs": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", + "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "dev": true, + "requires": { + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" + } + }, + "@parcel/fs-search": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", + "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "@parcel/graph": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", + "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "dev": true, + "requires": { + "nullthrows": "^1.1.1" + } + }, + "@parcel/hash": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", + "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + } + }, + "@parcel/logger": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", + "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" + } + }, + "@parcel/markdown-ansi": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", + "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/namer-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", + "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/node-resolver-core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", + "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + } + }, + "@parcel/optimizer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", + "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + } + }, + "@parcel/optimizer-htmlnano": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", + "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + } + }, + "@parcel/optimizer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", + "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "detect-libc": "^1.0.3" + } + }, + "@parcel/optimizer-svgo": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", + "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "svgo": "^2.4.0" + } + }, + "@parcel/optimizer-terser": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", + "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + } + }, + "@parcel/package-manager": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", + "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" + } + }, + "@parcel/packager-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", + "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", + "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + } + }, + "@parcel/packager-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", + "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", + "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3" + } + }, + "@parcel/packager-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", + "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "posthtml": "^0.16.4" + } + }, + "@parcel/plugin": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", + "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", + "dev": true, + "requires": { + "@parcel/types": "2.8.3" + } + }, + "@parcel/reporter-cli": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", + "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + } + }, + "@parcel/reporter-dev-server": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", + "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + } + }, + "@parcel/resolver-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", + "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "dev": true, + "requires": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + } + }, + "@parcel/runtime-browser-hmr": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", + "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + } + }, + "@parcel/runtime-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", + "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/runtime-react-refresh": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", + "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + } + }, + "@parcel/runtime-service-worker": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", + "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "@parcel/transformer-babel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", + "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + } + }, + "@parcel/transformer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", + "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", + "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1", + "srcset": "4" + } + }, + "@parcel/transformer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", + "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", + "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-json": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", + "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" + } + }, + "@parcel/transformer-postcss": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", + "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-posthtml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", + "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", + "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3" + } + }, + "@parcel/transformer-react-refresh-wrap": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", + "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-refresh": "^0.9.0" + } + }, + "@parcel/transformer-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", + "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + } + }, + "@parcel/types": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", + "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "dev": true, + "requires": { + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" + } + }, + "@parcel/utils": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", + "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", + "dev": true, + "requires": { + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" + } + }, + "@parcel/watcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "dev": true, + "requires": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@parcel/workers": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", + "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + } + }, + "@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/color-rgba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.0.tgz", + "integrity": "sha512-tWcJLEiKdZ3ihJdThfLCe6Kw5vo0lgGcuucGkbtzcp1zifDA1E2Z96wxeSS/r+ytpHD15NCAWabX8GV911ywCA==", + "dev": true + }, + "@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "optional": true + }, + "@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + }, + "@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "requires": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "@types/node": { + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "dev": true, + "peer": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + }, + "abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "peer": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "peer": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "peer": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "peer": true + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true + }, + "caniuse-lite": { + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "peer": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "requires": { + "color-name": "^1.0.0" + } + }, + "color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "requires": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "color-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", + "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + } + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "peer": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "peer": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "electron-to-chromium": { + "version": "1.4.308", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz", + "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.17.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.10.tgz", + "integrity": "sha512-n7V3v29IuZy5qgxx25TKJrEm0FHghAlS6QweUcyIgh/U0zYmQcvogWROitrTyZId1mHSkuhhuyEXtI9OXioq7A==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.10", + "@esbuild/android-arm64": "0.17.10", + "@esbuild/android-x64": "0.17.10", + "@esbuild/darwin-arm64": "0.17.10", + "@esbuild/darwin-x64": "0.17.10", + "@esbuild/freebsd-arm64": "0.17.10", + "@esbuild/freebsd-x64": "0.17.10", + "@esbuild/linux-arm": "0.17.10", + "@esbuild/linux-arm64": "0.17.10", + "@esbuild/linux-ia32": "0.17.10", + "@esbuild/linux-loong64": "0.17.10", + "@esbuild/linux-mips64el": "0.17.10", + "@esbuild/linux-ppc64": "0.17.10", + "@esbuild/linux-riscv64": "0.17.10", + "@esbuild/linux-s390x": "0.17.10", + "@esbuild/linux-x64": "0.17.10", + "@esbuild/netbsd-x64": "0.17.10", + "@esbuild/openbsd-x64": "0.17.10", + "@esbuild/sunos-x64": "0.17.10", + "@esbuild/win32-arm64": "0.17.10", + "@esbuild/win32-ia32": "0.17.10", + "@esbuild/win32-x64": "0.17.10" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "peer": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true, + "peer": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "peer": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "htmlnano": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.3.tgz", + "integrity": "sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "peer": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "peer": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "peer": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "dev": true, + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "dev": true, + "optional": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lmdb": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", + "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", + "dev": true, + "requires": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2", + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + } + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "peer": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "requires": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "peer": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "peer": true + }, + "msgpackr": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.3.tgz", + "integrity": "sha512-m2JefwcKNzoHYXkH/5jzHRxAw7XLWsAdvu0FOJ+OLwwozwOV/J6UA62iLkfIMbg7G8+dIuRwgg6oz+QoQ4YkoA==", + "dev": true, + "requires": { + "msgpackr-extract": "^3.0.0" + } + }, + "msgpackr-extract": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.0.tgz", + "integrity": "sha512-oy6KCk1+X4Bn5m6Ycq5N1EWl9npqG/cLrE8ga8NX7ZqfqYUUBS08beCQaGq80fjbKBySur0E6x//yZjzNJDt3A==", + "dev": true, + "optional": true, + "requires": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.0", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.0", + "node-gyp-build-optional-packages": "5.0.7" + }, + "dependencies": { + "node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true + } + } + }, + "murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "peer": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true + }, + "node-gyp-build-optional-packages": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", + "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "dev": true + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "peer": true + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "ordered-binary": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", + "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parcel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", + "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", + "dev": true, + "requires": { + "@parcel/config-default": "2.8.3", + "@parcel/core": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/reporter-cli": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "requires": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "dependencies": { + "posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + } + } + }, + "posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + }, + "posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "requires": { + "is-json": "^2.0.1" + } + }, + "potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, + "prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true + }, + "react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "peer": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shx": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "dev": true, + "requires": { + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true + }, + "supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "requires": { + "kdbush": "^3.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", + "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", + "dev": true, + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "optional": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "requires": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true, + "peer": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "peer": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "peer": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "peer": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "peer": true + } + } +} diff --git a/shieldlib/package.json b/shieldlib/package.json new file mode 100644 index 000000000..fd73adb33 --- /dev/null +++ b/shieldlib/package.json @@ -0,0 +1,53 @@ +{ + "name": "@americana/maplibre-shield-generator", + "description": "Generate highway shields for maplibre-gl-js maps", + "version": "0.0.1-alpha.11", + "author": "OpenStreetMap Americana Contributors", + "type": "module", + "keywords": [ + "americana", + "highway", + "shields", + "shield", + "generator", + "maplibre", + "maplibre-gl", + "maplibre-gl-js" + ], + "license": "CC0-1.0", + "main": "dist/index.js", + "source": "src/index.ts", + "devDependencies": { + "@types/color-rgba": "^2.1.0", + "esbuild": "^0.17.10", + "npm-run-all": "^4.1.5", + "parcel": "latest", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + }, + "scripts": { + "code_format": "run-s code_format:prettier", + "code_format:prettier": "prettier --write --list-different .", + "clean": "shx rm -rf dist", + "test": "npm exec -- ts-mocha", + "build:code": "node scripts/build.js", + "build": "run-s clean build:code", + "preversion": "npm version --no-git-tag-version --preid alpha", + "publish-alpha": "npm publish --access=public --tag alpha" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ZeLonewolf/openstreetmap-americana.git" + }, + "bugs": { + "url": "https://github.com/ZeLonewolf/openstreetmap-americana/issues" + }, + "homepage": "https://github.com/ZeLonewolf/openstreetmap-americana#readme", + "dependencies": { + "color-rgba": "^2.4.0", + "maplibre-gl": "^2.4.0" + } +} diff --git a/shieldlib/scripts/build.js b/shieldlib/scripts/build.js new file mode 100644 index 000000000..e9bb97ce2 --- /dev/null +++ b/shieldlib/scripts/build.js @@ -0,0 +1,37 @@ +import { mkdir } from "node:fs/promises"; +import { pathToFileURL } from "node:url"; + +import esbuild from "esbuild"; + +const buildWith = async (key, buildOptions) => { + await mkdir("dist", { recursive: true }); + + const options = { + entryPoints: ["src/index.ts"], + format: "esm", + bundle: true, + minify: true, + sourcemap: true, + outdir: "dist", + logLevel: "info", + ...buildOptions, + define: { + ...buildOptions?.define, + }, + }; + return ( + esbuild[key](options) + // esbuild will pretty-print its own error messages; + // suppress node.js from printing the exception. + .catch(() => process.exit(1)) + ); +}; + +export const buildContext = (buildOptions = {}) => + buildWith("context", buildOptions); + +export const build = (buildOptions = {}) => buildWith("build", buildOptions); + +const mainModule = pathToFileURL(process.argv[1]).toString(); + +await build({}); diff --git a/shieldlib/src/custom_shields.mjs b/shieldlib/src/custom_shields.mjs new file mode 100644 index 000000000..c390e60a6 --- /dev/null +++ b/shieldlib/src/custom_shields.mjs @@ -0,0 +1,72 @@ +"use strict"; + +import * as ShieldDraw from "./shield_canvas_draw.mjs"; + +// Special case for Allegheny, PA Belt System +export function paBelt(r, ctx, params) { + ShieldDraw.roundedRectangle(r, ctx, { + fillColor: "white", + strokeColor: "black", + outlineWidth: 1, + radius: 2, + rectWidth: 20, + }); + + let fillColor = params.fillColor; + + let lineWidth = r.px(0.5); + let diameter = r.shieldSize() / 3 - lineWidth; + ctx.beginPath(); + ctx.arc( + r.shieldSize() / 2, + r.shieldSize() / 2, + diameter, + 0, + 2 * Math.PI, + false + ); + + ctx.fillStyle = fillColor; + ctx.strokeStyle = params.strokeColor; + ctx.fill(); + + ctx.lineWidth = lineWidth; + ctx.stroke(); + return ctx; +} + +// Special case for Branson color-coded routes +export function bransonRoute(r, ctx, params) { + ShieldDraw.roundedRectangle(r, ctx, { + fillColor: "#006747", + strokeColor: "white", + outlineWidth: 1, + radius: 2, + rectWidth: 20, + }); + + let fillColor = params.fillColor; + + let lineWidth = r.px(0.5); + let x = 0.15 * r.shieldSize() + lineWidth; + let width = 0.7 * r.shieldSize() - 2 * lineWidth; + + let y = 0.4 * r.shieldSize() + lineWidth; + let height = 0.45 * r.shieldSize() - 2 * lineWidth; + + ctx.beginPath(); + ctx.rect(x, y, width, height); + + ctx.fillStyle = fillColor; + ctx.strokeStyle = params.strokeColor; + ctx.fill(); + + ctx.lineWidth = lineWidth; + ctx.stroke(); + return ctx; +} + +export function loadCustomShields() { + ShieldDraw.registerDrawFunction("branson", bransonRoute, 20); + ShieldDraw.registerDrawFunction("paBelt", paBelt, 20); +} diff --git a/shieldlib/src/document_graphics.d.ts b/shieldlib/src/document_graphics.d.ts new file mode 100644 index 000000000..6402f6026 --- /dev/null +++ b/shieldlib/src/document_graphics.d.ts @@ -0,0 +1,11 @@ +import { Bounds, GraphicsFactory } from "./types"; +/** + * Get the Maplibre pixel reation being used in this browser. This determines + * which sprite sheet is used and whether or not to double dimensions on graphics draws. + * @returns Returns either 1 or 2 for "1x" or "2x+" displays. + */ +export declare function getDOMPixelRatio(): 1 | 2; +export declare class DOMGraphicsFactory implements GraphicsFactory { + createGraphics(bounds: Bounds): CanvasRenderingContext2D; + pixelRatio(): number; +} diff --git a/shieldlib/src/document_graphics.ts b/shieldlib/src/document_graphics.ts new file mode 100644 index 000000000..24335decc --- /dev/null +++ b/shieldlib/src/document_graphics.ts @@ -0,0 +1,28 @@ +import { Bounds, GraphicsFactory } from "./types"; + +/** + * Get the Maplibre pixel reation being used in this browser. This determines + * which sprite sheet is used and whether or not to double dimensions on graphics draws. + * @returns Returns either 1 or 2 for "1x" or "2x+" displays. + */ +export function getDOMPixelRatio(): 1 | 2 { + return (typeof window !== "undefined" && window.devicePixelRatio) > 1 ? 2 : 1; +} + +export class DOMGraphicsFactory implements GraphicsFactory { + createGraphics(bounds: Bounds): CanvasRenderingContext2D { + var ctx = document.createElement("canvas").getContext("2d"); + var ctx = document + .createElement("canvas") + .getContext("2d", { willReadFrequently: true }); + ctx.imageSmoothingQuality = "high"; + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + ctx.canvas.width = bounds.width; + ctx.canvas.height = bounds.height; + return ctx; + } + pixelRatio(): number { + return getDOMPixelRatio(); + } +} diff --git a/shieldlib/src/headless_graphics.ts b/shieldlib/src/headless_graphics.ts new file mode 100644 index 000000000..08c47ace4 --- /dev/null +++ b/shieldlib/src/headless_graphics.ts @@ -0,0 +1,19 @@ +import { Bounds, GraphicsFactory } from "./types"; +import { createCanvas } from "canvas"; + +export class HeadlessGraphicsFactory implements GraphicsFactory { + private _type: "pdf" | "svg"; + constructor(type: "pdf" | "svg") { + this._type = type; + } + createGraphics(bounds: Bounds): CanvasRenderingContext2D { + let canvas = createCanvas(bounds.width, bounds.height, this._type); + let ctx = canvas.getContext("2d"); + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + return ctx as any as CanvasRenderingContext2D; + } + pixelRatio(): number { + return 1; + } +} diff --git a/shieldlib/src/index.d.ts b/shieldlib/src/index.d.ts new file mode 100644 index 000000000..1fe27f46d --- /dev/null +++ b/shieldlib/src/index.d.ts @@ -0,0 +1,14 @@ +export { + Bounds, + GfxFactory, + RouteDefinition, + ShieldSpecification, + SpriteRepository, +} from "./types"; +export { transposeImageData } from "./screen_gfx"; +export { + URLShieldRenderer, + ShieldRenderer, + InMemorySpriteRepository, +} from "./shield_renderer"; +export { getDOMPixelRatio } from "./document_graphics"; diff --git a/shieldlib/src/index.ts b/shieldlib/src/index.ts new file mode 100644 index 000000000..9cd52f669 --- /dev/null +++ b/shieldlib/src/index.ts @@ -0,0 +1,17 @@ +export { + Bounds, + GraphicsFactory, + RouteDefinition, + ShieldSpecification, + SpriteRepository, +} from "./types"; + +export { transposeImageData } from "./screen_gfx"; + +export { + URLShieldRenderer, + ShieldRenderer, + InMemorySpriteRepository, +} from "./shield_renderer"; + +export { getDOMPixelRatio } from "./document_graphics"; diff --git a/shieldlib/src/screen_gfx.d.ts b/shieldlib/src/screen_gfx.d.ts new file mode 100644 index 000000000..404299cbb --- /dev/null +++ b/shieldlib/src/screen_gfx.d.ts @@ -0,0 +1,30 @@ +import { StyleImage } from "maplibre-gl"; +export declare const shieldFont: (size: string, fontFamily: string) => string; +export declare const fontSizeThreshold = 12; +export declare function blendedColorVal( + sourceVal: any, + lightenVal: any, + darkenVal: any +): number; +export declare function copyPixel( + source: any, + dest: any, + sourceOffset: any, + destOffset: any +): void; +export declare function copyAndRecolorPixel( + source: any, + dest: any, + sourceOffset: any, + destOffset: any, + colorLighten: any, + colorDarken: any +): void; +export declare function transposeImageData( + destination: CanvasRenderingContext2D, + source: StyleImage, + yOffset: number, + verticalReflect: boolean, + colorLighten: string, + colorDarken: string +): void; diff --git a/shieldlib/src/screen_gfx.ts b/shieldlib/src/screen_gfx.ts new file mode 100644 index 000000000..225b43420 --- /dev/null +++ b/shieldlib/src/screen_gfx.ts @@ -0,0 +1,104 @@ +import { StyleImage } from "maplibre-gl"; + +import rgba from "color-rgba"; + +const defaultFontFamily = '"sans-serif-condensed", "Arial Narrow", sans-serif'; +export const shieldFont = (size: string, fontFamily: string) => + `bold ${size}px ${fontFamily || defaultFontFamily}`; +export const fontSizeThreshold = 12; + +// Replaces `sourceVal` with a blend of `lightenVal` and `darkenVal` proportional to the brightness; +// i.e. white becomes `darkenVal`, black becomes `lightenVal`, and anit-aliased pixels remain anit-aliased +export function blendedColorVal(sourceVal, lightenVal, darkenVal) { + return ( + 255 - + (sourceVal / 255) * (255 - darkenVal) - + (1 - sourceVal / 255) * (255 - lightenVal) + ); +} + +export function copyPixel(source, dest, sourceOffset, destOffset) { + //Red + dest[destOffset] = source[sourceOffset]; + //Green + dest[destOffset + 1] = source[sourceOffset + 1]; + //Blue + dest[destOffset + 2] = source[sourceOffset + 2]; + //Alpha + dest[destOffset + 3] = source[sourceOffset + 3]; +} + +export function copyAndRecolorPixel( + source, + dest, + sourceOffset, + destOffset, + colorLighten, + colorDarken +) { + //Red + dest[destOffset] = blendedColorVal( + source[sourceOffset], + colorLighten[0], + colorDarken[0] + ); + //Green + dest[destOffset + 1] = blendedColorVal( + source[sourceOffset + 1], + colorLighten[1], + colorDarken[1] + ); + //Blue + dest[destOffset + 2] = blendedColorVal( + source[sourceOffset + 2], + colorLighten[2], + colorDarken[2] + ); + //Alpha + dest[destOffset + 3] = source[sourceOffset + 3]; +} + +export function transposeImageData( + destination: CanvasRenderingContext2D, + source: StyleImage, + yOffset: number, + verticalReflect: boolean, + colorLighten: string, + colorDarken: string +): void { + let imgData = destination.createImageData( + source.data.width, + source.data.height + ); + + let pixelCopyFn = + colorLighten || colorDarken ? copyAndRecolorPixel : copyPixel; + + let lighten = colorLighten ? rgba(colorLighten) : rgba("#000"); + let darken = colorDarken ? rgba(colorDarken) : rgba("#fff"); + + if (!verticalReflect) { + for (let i = 0; i < source.data.data.length; i += 4) { + pixelCopyFn(source.data.data, imgData.data, i, i, lighten, darken); + } + } else { + //4 bytes/px, copy in reverse vertical order. + for (let y = 0; y < source.data.height; y++) { + for (let x = 0; x < source.data.width; x++) { + let destRow = source.data.height - y - 1; + let destIdx = (destRow * source.data.width + x) * 4; + let srcIdx = (y * source.data.width + x) * 4; + pixelCopyFn( + source.data.data, + imgData.data, + srcIdx, + destIdx, + lighten, + darken + ); + } + } + } + + destination.putImageData(imgData, 0, yOffset); +} diff --git a/shieldlib/src/shield.d.ts b/shieldlib/src/shield.d.ts new file mode 100644 index 000000000..77589c812 --- /dev/null +++ b/shieldlib/src/shield.d.ts @@ -0,0 +1,20 @@ +import { RouteDefinition } from "./types"; + +import { ShieldRenderingContext } from "./shield_renderer"; + +export function generateShieldCtx( + renderContext: ShieldRenderingContext, + routeDef: RouteDefinition +): CanvasRenderingContext2D; + +export function storeNoShield( + renderingContext: ShieldRenderingContext, + id: string +): void; + +export function missingIconLoader( + renderContext: ShieldRenderingContext, + routeDef: RouteDefinition +): void; + +export function romanizeRef(ref: string): string; diff --git a/src/js/shield.js b/shieldlib/src/shield.js similarity index 52% rename from src/js/shield.js rename to shieldlib/src/shield.js index f967a78c3..0e8bc5d0a 100644 --- a/src/js/shield.js +++ b/shieldlib/src/shield.js @@ -1,40 +1,31 @@ "use strict"; -import config from "../config.js"; - -import * as ShieldDef from "./shield_defs.js"; -import * as ShieldText from "./shield_text.js"; -import * as ShieldDraw from "./shield_canvas_draw.js"; +import * as ShieldText from "./shield_text.mjs"; +import * as ShieldDraw from "./shield_canvas_draw.mjs"; import * as Gfx from "./screen_gfx.js"; -function drawBannerPart(ctx, network, drawFunc) { - var shieldDef = ShieldDef.shields[network]; +//Height of modifier banners +export const bannerSizeH = 9; - if (shieldDef == null || typeof shieldDef.modifiers == "undefined") { +function drawBannerPart(r, ctx, shieldDef, drawFunc) { + if (shieldDef == null || typeof shieldDef.banners == "undefined") { return ctx; //Unadorned shield } - for (var i = 0; i < shieldDef.modifiers.length; i++) { - drawFunc(ctx, shieldDef.modifiers[i], i); + for (var i = 0; i < shieldDef.banners.length; i++) { + drawFunc(r, ctx, shieldDef.banners[i], i); } return ctx; } -function compoundShieldSize(dimension, bannerCount) { +function compoundShieldSize(r, dimension, bannerCount) { return { width: dimension.width, - height: dimension.height + bannerCount * ShieldDef.bannerSizeH, + height: dimension.height + bannerCount * r.px(bannerSizeH), }; } -export function isValidNetwork(network) { - // On recreational route relations, network=* indicates the network's scope, - // not the network itself. - // https://github.com/ZeLonewolf/openstreetmap-americana/issues/94 - return !/^[lrni][chimpw]n$/.test(network); -} - export function isValidRef(ref) { return ref !== null && ref.length !== 0 && ref.length <= 6; } @@ -45,23 +36,23 @@ export function isValidRef(ref) { * @param {*} shield - Shield definition * @returns the number of banner placards that need to be drawn */ -export function getBannerCount(shield) { - if (shield == null || typeof shield.modifiers == "undefined") { +function getBannerCount(shield) { + if (shield == null || typeof shield.banners == "undefined") { return 0; //Unadorned shield } - return shield.modifiers.length; + return shield.banners.length; } /** * Retrieve the shield blank that goes with a particular route. If there are * multiple shields for a route (different widths), it picks the best shield. * - * @param {*} map - maplibre Map + * @param {*} r - render context * @param {*} shieldDef - shield definition for this route * @param {*} routeDef - route tagging from OSM * @returns shield blank or null if no shield exists */ -function getRasterShieldBlank(map, shieldDef, routeDef) { +function getRasterShieldBlank(r, shieldDef, routeDef) { var shieldArtwork = null; var textLayout; var bannerCount = 0; @@ -69,20 +60,21 @@ function getRasterShieldBlank(map, shieldDef, routeDef) { if (Array.isArray(shieldDef.spriteBlank)) { for (var i = 0; i < shieldDef.spriteBlank.length; i++) { - shieldArtwork = map.style.getImage(shieldDef.spriteBlank[i]); + shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank[i]); - bounds = compoundShieldSize(shieldArtwork.data, bannerCount); + bounds = compoundShieldSize(r, shieldArtwork.data, bannerCount); textLayout = ShieldText.layoutShieldTextFromDef( + r, routeDef.ref, shieldDef, bounds ); - if (textLayout.fontPx > Gfx.fontSizeThreshold * Gfx.getPixelRatio()) { + if (textLayout.fontPx > r.px(Gfx.fontSizeThreshold)) { break; } } } else { - shieldArtwork = map.style.getImage(shieldDef.spriteBlank); + shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank); } return shieldArtwork; @@ -96,53 +88,54 @@ function textColor(shieldDef) { } function getDrawFunc(shieldDef) { - if (typeof shieldDef.canvasDrawnBlank != "undefined") { - return (ctx, ref) => + if (typeof shieldDef.shapeBlank != "undefined") { + return (r, ctx, ref) => ShieldDraw.draw( - shieldDef.canvasDrawnBlank.drawFunc, + r, + shieldDef.shapeBlank.drawFunc, ctx, - shieldDef.canvasDrawnBlank.params, + shieldDef.shapeBlank.params, ref ); } return ShieldDraw.blank; } -export function drawShield(ctx, shieldDef, routeDef) { +function drawShield(r, ctx, shieldDef, routeDef) { let bannerCount = getBannerCount(shieldDef); - let yOffset = bannerCount * ShieldDef.bannerSizeH; + let yOffset = bannerCount * r.px(bannerSizeH); //Shift canvas to draw shield below banner ctx.save(); ctx.translate(0, yOffset); let drawFunc = getDrawFunc(shieldDef); - drawFunc(ctx, routeDef.ref); + drawFunc(r, ctx, routeDef.ref); ctx.restore(); } -function getDrawHeight(shieldDef) { - if (typeof shieldDef.canvasDrawnBlank != "undefined") { - return ShieldDraw.shapeHeight(shieldDef.canvasDrawnBlank.drawFunc); +function getDrawHeight(r, shieldDef) { + if (typeof shieldDef.shapeBlank != "undefined") { + return ShieldDraw.shapeHeight(r, shieldDef.shapeBlank.drawFunc); } - return ShieldDraw.CS; + return r.shieldSize(); } -function drawShieldText(ctx, map, shieldDef, routeDef) { +function drawShieldText(r, ctx, shieldDef, routeDef) { var bannerCount = getBannerCount(shieldDef); var shieldBounds = null; - var shieldArtwork = getRasterShieldBlank(map, shieldDef, routeDef); - let yOffset = bannerCount * ShieldDef.bannerSizeH; + var shieldArtwork = getRasterShieldBlank(r, shieldDef, routeDef); + let yOffset = bannerCount * r.px(bannerSizeH); if (shieldArtwork == null) { ctx.translate(0, yOffset); let drawFunc = getDrawFunc(shieldDef); - drawFunc(ctx, routeDef.ref); + drawFunc(r, ctx, routeDef.ref); ctx.translate(0, -yOffset); shieldBounds = { width: ctx.canvas.width, - height: getDrawHeight(shieldDef), + height: getDrawHeight(r, shieldDef), }; } else { shieldBounds = { @@ -158,95 +151,91 @@ function drawShieldText(ctx, map, shieldDef, routeDef) { //The ref is valid and we're supposed to draw it var textLayout = ShieldText.layoutShieldTextFromDef( + r, routeDef.ref, shieldDef, shieldBounds ); - textLayout.yBaseline += bannerCount * ShieldDef.bannerSizeH; + textLayout.yBaseline += bannerCount * r.px(bannerSizeH); - if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { - ctx.strokeStyle = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; - ShieldText.drawShieldHaloText(ctx, routeDef.ref, textLayout); + if (typeof r.options.SHIELD_TEXT_HALO_COLOR_OVERRIDE !== "undefined") { + ctx.strokeStyle = options.SHIELD_TEXT_HALO_COLOR_OVERRIDE; + ShieldText.drawShieldHaloText(r, ctx, routeDef.ref, textLayout); } else if (shieldDef.textHaloColor) { ctx.strokeStyle = shieldDef.textHaloColor; - ShieldText.drawShieldHaloText(ctx, routeDef.ref, textLayout); + ShieldText.drawShieldHaloText(r, ctx, routeDef.ref, textLayout); } ctx.fillStyle = textColor(shieldDef); - ShieldText.drawShieldText(ctx, routeDef.ref, textLayout); + ShieldText.renderShieldText(r, ctx, routeDef.ref, textLayout); - if (config.SHIELD_TEXT_BBOX_COLOR) { - ctx.strokeStyle = config.SHIELD_TEXT_BBOX_COLOR; - ctx.lineWidth = ShieldDraw.PXR; + if (r.options.SHIELD_TEXT_BBOX_COLOR) { + ctx.strokeStyle = r.options.SHIELD_TEXT_BBOX_COLOR; //TODO move to debugOptions + ctx.lineWidth = r.px(1); ctx.strokeRect( - (shieldDef.padding.left - 0.5) * ShieldDraw.PXR, - bannerCount * ShieldDef.bannerSizeH + - (shieldDef.padding.top - 0.5) * ShieldDraw.PXR, + r.px(shieldDef.padding.left - 0.5), + bannerCount * r.px(bannerSizeH) + r.px(shieldDef.padding.top - 0.5), shieldBounds.width - - (shieldDef.padding.left + shieldDef.padding.right - 1) * ShieldDraw.PXR, + r.px(shieldDef.padding.left + shieldDef.padding.right - 1), shieldBounds.height - - (shieldDef.padding.top + shieldDef.padding.bottom - 1) * ShieldDraw.PXR + r.px(shieldDef.padding.top + shieldDef.padding.bottom - 1) ); } return ctx; } -export function missingIconHandler(map, e) { - try { - missingIconLoader(map, e); - } catch (err) { - console.error(`Exception while loading image โ€˜${e?.id}โ€™:\n`, err); - } -} - -export function missingIconLoader(map, e) { - let ctx = generateShieldCtx(map, e.id); +export function missingIconLoader(r, routeDef) { + let ctx = generateShieldCtx(r, routeDef); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 - console.warn("Didn't produce a shield for", JSON.stringify(e.id)); - ctx = Gfx.getGfxContext({ width: 1, height: 1 }); + console.warn("Didn't produce a shield for", JSON.stringify(routeDef)); + ctx = r.gfxFactory.createGraphics({ width: 1, height: 1 }); } + storeSprite(r, routeDef.spriteID, ctx); +} + +function storeSprite(r, id, ctx) { const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); - map.addImage( - e.id, + r.spriteRepo.putSprite( + id, { width: ctx.canvas.width, height: ctx.canvas.height, data: imgData.data, }, - { - pixelRatio: ShieldDraw.PXR, - } + r.px(1) ); } +export function storeNoShield(r, id) { + storeSprite(r, id, r.emptySprite()); +} + function refForDefs(routeDef, shieldDef) { // Handle special case for manually-applied abbreviations if ( - shieldDef.refsByWayName && - routeDef.wayName && - shieldDef.refsByWayName[routeDef.wayName] + shieldDef.refsByName && + routeDef.name && + shieldDef.refsByName[routeDef.name] ) { - return shieldDef.refsByWayName[routeDef.wayName]; + return shieldDef.refsByName[routeDef.name]; } return routeDef.ref; } -export function getShieldDef(routeDef) { +function getShieldDef(shields, routeDef) { + var shieldDef = shields[routeDef.network]; + if (routeDef == null) { return null; } - var shieldDef = ShieldDef.shields[routeDef.network]; - if (shieldDef == null) { // Default to plain black text with halo and no background shield console.debug("Generic shield for", JSON.stringify(routeDef)); - return isValidNetwork(routeDef.network) && isValidRef(routeDef.ref) - ? ShieldDef.shields.default - : null; + return isValidRef(routeDef.ref) ? shields.default : null; } var ref = refForDefs(routeDef, shieldDef); @@ -258,10 +247,10 @@ export function getShieldDef(routeDef) { }; } - if (shieldDef.overrideByWayName) { + if (shieldDef.overrideByName) { shieldDef = { ...shieldDef, - ...shieldDef.overrideByWayName[routeDef.wayName || ""], + ...shieldDef.overrideByName[routeDef.name || ""], }; } @@ -277,7 +266,7 @@ export function getShieldDef(routeDef) { if ( !isValidRef(ref) && !shieldDef.notext && - !(shieldDef.refsByWayName && routeDef.wayName) + !(shieldDef.refsByName && routeDef.name) ) { return null; } @@ -285,24 +274,6 @@ export function getShieldDef(routeDef) { return shieldDef; } -export function getRouteDef(id) { - if (id == "shield_") { - return null; - } - - var network_ref = id.split("\n")[1]; - var network_ref_parts = network_ref.split("="); - var network = network_ref_parts[0]; - var ref = network_ref_parts[1]; - var wayName = id.split("\n")[2]; - - return { - network: network, - ref: ref, - wayName: wayName, - }; -} - /** * Reformats an alphanumeric ref as Roman numerals, preserving any alphabetic * suffix. @@ -331,22 +302,23 @@ export function romanizeRef(ref) { return roman + ref.slice(number.toString().length); } -export function getDrawnShieldBounds(shieldDef, ref) { +function getDrawnShieldBounds(r, shieldDef, ref) { let width = Math.max( - ShieldDraw.CS, + r.shieldSize(), ShieldDraw.computeWidth( - shieldDef.canvasDrawnBlank.params, + r, + shieldDef.shapeBlank.params, ref, - shieldDef.canvasDrawnBlank.drawFunc + shieldDef.shapeBlank.drawFunc ) ); - let height = ShieldDraw.shapeHeight(shieldDef.canvasDrawnBlank.drawFunc); + let height = ShieldDraw.shapeHeight(r, shieldDef.shapeBlank.drawFunc); + return { width, height }; } -export function generateShieldCtx(map, id) { - let routeDef = getRouteDef(id); - let shieldDef = getShieldDef(routeDef); +export function generateShieldCtx(r, routeDef) { + let shieldDef = getShieldDef(r.shieldDef, routeDef); if (shieldDef == null) { return null; @@ -357,14 +329,14 @@ export function generateShieldCtx(map, id) { //Determine overall shield+banner dimensions let bannerCount = getBannerCount(shieldDef); - let sourceSprite = getRasterShieldBlank(map, shieldDef, routeDef); + let sourceSprite = getRasterShieldBlank(r, shieldDef, routeDef); - let width = ShieldDraw.CS; - let height = ShieldDraw.CS; + let width = r.shieldSize(); + let height = r.shieldSize(); if (sourceSprite == null) { - if (typeof shieldDef.canvasDrawnBlank != "undefined") { - let bounds = getDrawnShieldBounds(shieldDef, routeDef.ref); + if (typeof shieldDef.shapeBlank != "undefined") { + let bounds = getDrawnShieldBounds(r, shieldDef, routeDef.ref); width = bounds.width; height = bounds.height; } @@ -373,11 +345,11 @@ export function generateShieldCtx(map, id) { height = sourceSprite.data.height; } - let bannerHeight = bannerCount * ShieldDef.bannerSizeH; + let bannerHeight = bannerCount * r.px(bannerSizeH); height += bannerHeight; //Generate empty canvas sized to the graphic - let ctx = Gfx.getGfxContext({ width, height }); + let ctx = r.gfxFactory.createGraphics({ width, height }); // Convert numbering systems. Normally alternative numbering systems should be // tagged directly in ref=*, but some shields use different numbering systems @@ -387,12 +359,12 @@ export function generateShieldCtx(map, id) { } // Add the halo around modifier plaque text - drawBannerPart(ctx, routeDef.network, ShieldText.drawBannerHaloText); + drawBannerPart(r, ctx, shieldDef, ShieldText.drawBannerHaloText); if (sourceSprite == null) { - drawShield(ctx, shieldDef, routeDef); + drawShield(r, ctx, shieldDef, routeDef); } else { - Gfx.copyImageData( + Gfx.transposeImageData( ctx, sourceSprite, bannerHeight, @@ -403,10 +375,10 @@ export function generateShieldCtx(map, id) { } // Draw the shield text - drawShieldText(ctx, map, shieldDef, routeDef); + drawShieldText(r, ctx, shieldDef, routeDef); // Add modifier plaque text - drawBannerPart(ctx, routeDef.network, ShieldText.drawBannerText); + drawBannerPart(r, ctx, shieldDef, ShieldText.drawBannerText); return ctx; } diff --git a/src/js/shield_canvas_draw.js b/shieldlib/src/shield_canvas_draw.mjs similarity index 79% rename from src/js/shield_canvas_draw.js rename to shieldlib/src/shield_canvas_draw.mjs index 994f71e91..5b8236d6c 100644 --- a/src/js/shield_canvas_draw.js +++ b/shieldlib/src/shield_canvas_draw.mjs @@ -4,21 +4,16 @@ * Shield blanks which are drawn rather built from raster shield blanks */ -import * as Gfx from "./screen_gfx.js"; -import * as ShieldText from "./shield_text.js"; +import * as ShieldText from "./shield_text.mjs"; +import { loadCustomShields } from "./custom_shields.mjs"; -export const PXR = Gfx.getPixelRatio(); +const minGenericShieldWidth = 20; +const maxGenericShieldWidth = 34; +const genericShieldFontSize = 18; -// Canvas size in pixels. Length of smallest dimension (typically height) -export const CS = 20 * PXR; - -const minGenericShieldWidth = 20 * PXR; -const maxGenericShieldWidth = 34 * PXR; -const genericShieldFontSize = 18 * PXR; - -export function computeWidth(params, ref, shape) { +export function computeWidth(r, params, ref, shape) { if (fixedWidthDefinitions[shape] !== undefined) { - return fixedWidthDefinitions[shape]; + return r.px(fixedWidthDefinitions[shape]); } let rectWidth = params.rectWidth == undefined ? null : params.rectWidth; @@ -27,48 +22,52 @@ export function computeWidth(params, ref, shape) { if (rectWidth == null) { let shieldWidth = - ShieldText.calculateTextWidth(ref, genericShieldFontSize) + 2 * PXR; - let minWidth = minGenericShieldWidth; + ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + + r.px(2); + let minWidth = r.px(minGenericShieldWidth); //Shape-specific width adjustments switch (shape) { case "pentagon": let offset = params.offset == undefined ? 0 : params.offset; - shieldWidth += ((CS - offset * PXR) * tangent) / 2; + shieldWidth += ((r.shieldSize() - r.px(offset)) * tangent) / 2; break; case "trapezoid": - shieldWidth += (CS * tangent) / 2; + shieldWidth += (r.shieldSize() * tangent) / 2; break; case "triangle": - minWidth += 2 * PXR; + minWidth += r.px(2); break; case "diamond": case "hexagonHorizontal": - minWidth += 4 * PXR; + minWidth += r.px(4); break; } - return Math.max(minWidth, Math.min(maxGenericShieldWidth, shieldWidth)); + return Math.max( + minWidth, + Math.min(r.px(maxGenericShieldWidth), shieldWidth) + ); } else { - return rectWidth * PXR; + return r.px(rectWidth); } } -function ellipse(ctx, params, ref) { +function ellipse(r, ctx, params, ref) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineWidth = PXR; + let lineWidth = r.px(1); let radiusX = width / 2 - lineWidth; - let radiusY = CS / 2 - lineWidth; + let radiusY = r.shieldSize() / 2 - lineWidth; ctx.beginPath(); ctx.ellipse( ctx.canvas.width / 2, - CS / 2, + r.shieldSize() / 2, radiusX, radiusY, 0, @@ -85,27 +84,31 @@ function ellipse(ctx, params, ref) { return width; } -export function blank(ref) { +export function blank(r, ref) { var shieldWidth = - ShieldText.calculateTextWidth(ref, genericShieldFontSize) + 2 * PXR; + ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + + r.px(2); var width = Math.max( - minGenericShieldWidth, - Math.min(maxGenericShieldWidth, shieldWidth) + r.px(minGenericShieldWidth), + Math.min(r.px(maxGenericShieldWidth), shieldWidth) ); - return Gfx.getGfxContext({ width: width, height: CS }); + return r.gfxFactory.createGraphics({ + width: width, + height: r.shieldSize(), + }); } -export function roundedRectangle(ctx, params, ref) { +export function roundedRectangle(r, ctx, params, ref) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; + let drawRadius = r.px(radius); let x0 = lineWidth; let x1 = lineWidth + drawRadius; @@ -114,8 +117,8 @@ export function roundedRectangle(ctx, params, ref) { let y0 = lineWidth; let y1 = lineWidth + drawRadius; - let y2 = CS - lineWidth - drawRadius; - let y3 = CS - lineWidth; + let y2 = r.shieldSize() - lineWidth - drawRadius; + let y3 = r.shieldSize() - lineWidth; ctx.beginPath(); ctx.moveTo(x2, y0); @@ -137,25 +140,25 @@ export function roundedRectangle(ctx, params, ref) { return width; } -function escutcheon(ctx, params, ref) { +function escutcheon(r, ctx, params, ref) { let offset = params.offset == undefined ? 0 : params.offset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; - let drawOffset = offset * PXR; + let drawRadius = r.px(radius); + let drawOffset = r.px(offset); let x0 = lineWidth; let x5 = width - lineWidth; let y0 = lineWidth; - let y5 = CS - lineWidth; + let y5 = r.shieldSize() - lineWidth; let x1 = x0 + drawRadius; let x3 = (x0 + x5) / 2; @@ -189,7 +192,7 @@ function escutcheon(ctx, params, ref) { return width; } -function fishhead(ctx, params, ref) { +function fishhead(r, ctx, params, ref) { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -197,27 +200,27 @@ function fishhead(ctx, params, ref) { let angleSign = pointUp ? -1 : 1; - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; let x0 = lineWidth; let x8 = width - lineWidth; - let y0 = pointUp ? CS - lineWidth : lineWidth; - let y6 = pointUp ? lineWidth : CS - lineWidth; + let y0 = pointUp ? r.shieldSize() - lineWidth : lineWidth; + let y6 = pointUp ? lineWidth : r.shieldSize() - lineWidth; - let x1 = x0 + PXR; - let x2 = x0 + 2.5 * PXR; + let x1 = x0 + r.px(1); + let x2 = x0 + r.px(2.5); let x4 = (x0 + x8) / 2; - let x6 = x8 - 2.5 * PXR; - let x7 = x8 - PXR; - let y1 = y0 + angleSign * 2 * PXR; - let y2 = y0 + angleSign * 4.5 * PXR; - let y3 = y0 + angleSign * 7 * PXR; - let y4 = y6 - angleSign * 6 * PXR; - let y5 = y6 - angleSign * PXR; + let x6 = x8 - r.px(2.5); + let x7 = x8 - r.px(1); + let y1 = y0 + angleSign * r.px(2); + let y2 = y0 + angleSign * r.px(4.5); + let y3 = y0 + angleSign * r.px(7); + let y4 = y6 - angleSign * r.px(6); + let y5 = y6 - angleSign * r.px(1); let x3 = (x0 + x4) / 2; let x5 = (x4 + x8) / 2; @@ -241,7 +244,7 @@ function fishhead(ctx, params, ref) { } } -function triangle(ctx, params, ref) { +function triangle(r, ctx, params, ref) { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -250,16 +253,16 @@ function triangle(ctx, params, ref) { let angleSign = pointUp ? -1 : 1; - let width = computeWidth(params, ref, "triangle"); + let width = computeWidth(r, params, ref, "triangle"); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; + let drawRadius = r.px(radius); let x0 = lineWidth; let x8 = width - lineWidth; - let y0 = pointUp ? CS - lineWidth : lineWidth; - let y5 = pointUp ? lineWidth : CS - lineWidth; + let y0 = pointUp ? r.shieldSize() - lineWidth : lineWidth; + let y5 = pointUp ? lineWidth : r.shieldSize() - lineWidth; let x2 = x0 + drawRadius; let x4 = (x0 + x8) / 2; @@ -302,7 +305,7 @@ function triangle(ctx, params, ref) { return width; } -function trapezoid(ctx, params, ref) { +function trapezoid(r, ctx, params, ref) { let shortSideUp = params.shortSideUp == undefined ? false : params.shortSideUp; let angle = params.angle == undefined ? 0 : params.angle; @@ -316,16 +319,16 @@ function trapezoid(ctx, params, ref) { let cosine = Math.cos(angle); let tangent = Math.tan(angle); - let width = computeWidth(params, ref, "trapezoid"); + let width = computeWidth(r, params, ref, "trapezoid"); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; + let drawRadius = r.px(radius); let x0 = lineWidth; let x9 = width - lineWidth; - let y0 = shortSideUp ? CS - lineWidth : lineWidth; - let y3 = shortSideUp ? lineWidth : CS - lineWidth; + let y0 = shortSideUp ? r.shieldSize() - lineWidth : lineWidth; + let y3 = shortSideUp ? lineWidth : r.shieldSize() - lineWidth; let y1 = y0 + angleSign * drawRadius * (1 + sine); let y2 = y3 - angleSign * drawRadius * (1 - sine); @@ -359,18 +362,18 @@ function trapezoid(ctx, params, ref) { return width; } -function diamond(ctx, params, ref) { +function diamond(r, ctx, params, ref) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let height = shapeHeight("diamond"); - let width = computeWidth(params, ref, "diamond"); + let height = shapeHeight(r, "diamond"); + let width = computeWidth(r, params, ref, "diamond"); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; + let drawRadius = r.px(radius); let x0 = lineWidth; let x8 = width - lineWidth; @@ -423,7 +426,7 @@ function diamond(ctx, params, ref) { return width; } -function pentagon(ctx, params, ref) { +function pentagon(r, ctx, params, ref) { let pointUp = params.pointUp == undefined ? true : params.pointUp; let offset = params.offset == undefined ? 0 : params.offset; let angle = params.angle == undefined ? 0 : params.angle; @@ -438,18 +441,18 @@ function pentagon(ctx, params, ref) { let cosine = Math.cos(angle); let tangent = Math.tan(angle); - let width = computeWidth(params, ref, "pentagon"); + let width = computeWidth(r, params, ref, "pentagon"); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius1 = radius1 * PXR; - let drawRadius2 = radius2 * PXR; - let drawOffset = offset * PXR; + let drawRadius1 = r.px(radius1); + let drawRadius2 = r.px(radius2); + let drawOffset = r.px(offset); let x0 = lineWidth; let x8 = width - lineWidth; - let y0 = pointUp ? CS - lineWidth : lineWidth; - let y3 = pointUp ? lineWidth : CS - lineWidth; + let y0 = pointUp ? r.shieldSize() - lineWidth : lineWidth; + let y3 = pointUp ? lineWidth : r.shieldSize() - lineWidth; let y2 = y3 - angleSign * drawOffset; @@ -491,24 +494,24 @@ function pentagon(ctx, params, ref) { return width; } -function hexagonVertical(ctx, params, ref) { +function hexagonVertical(r, ctx, params, ref) { let offset = params.offset == undefined ? 0 : params.offset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; - let drawOffset = offset * PXR; + let drawRadius = r.px(radius); + let drawOffset = r.px(offset); let x0 = lineWidth; let x2 = width - lineWidth; let y0 = lineWidth; - let y5 = CS - lineWidth; + let y5 = r.shieldSize() - lineWidth; let x1 = (x0 + x2) / 2; let y1 = y0 + drawOffset; @@ -540,7 +543,7 @@ function hexagonVertical(ctx, params, ref) { return width; } -function hexagonHorizontal(ctx, params, ref) { +function hexagonHorizontal(r, ctx, params, ref) { let angle = params.angle == undefined ? 0 : params.angle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -552,16 +555,16 @@ function hexagonHorizontal(ctx, params, ref) { let tangent = Math.tan(angle); let halfComplementTangent = Math.tan(Math.PI / 4 - angle / 2); - let width = computeWidth(params, ref, "hexagonHorizontal"); + let width = computeWidth(r, params, ref, "hexagonHorizontal"); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; + let drawRadius = r.px(radius); let x0 = lineWidth; let x9 = width - lineWidth; let y0 = lineWidth; - let y6 = CS - lineWidth; + let y6 = r.shieldSize() - lineWidth; let y3 = (y0 + y6) / 2; @@ -601,7 +604,7 @@ function hexagonHorizontal(ctx, params, ref) { return width; } -function octagonVertical(ctx, params, ref) { +function octagonVertical(r, ctx, params, ref) { let offset = params.offset == undefined ? 0 : params.offset; let angle = params.angle == undefined ? 0 : params.angle; let fill = params.fillColor == undefined ? "white" : params.fillColor; @@ -613,17 +616,17 @@ function octagonVertical(ctx, params, ref) { let cosine = Math.cos(angle); let tangent = Math.tan(angle); - let width = computeWidth(params, ref); + let width = computeWidth(r, params, ref); - let lineThick = outlineWidth * PXR; + let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; - let drawRadius = radius * PXR; - let drawOffset = offset * PXR; + let drawRadius = r.px(radius); + let drawOffset = r.px(offset); let x0 = lineWidth; let x10 = width - lineWidth; let y0 = lineWidth; - let y10 = CS - lineWidth; + let y10 = r.shieldSize() - lineWidth; let x1 = x0 + drawRadius * tangent * sine; let x5 = (x0 + x10) / 2; @@ -681,17 +684,17 @@ function octagonVertical(ctx, params, ref) { return width; } -export function shapeHeight(name) { +export function shapeHeight(r, name) { switch (name) { case "diamond": - return CS + 4 * PXR; + return r.shieldSize() + r.px(4); default: - return CS; + return r.shieldSize(); } } -export function draw(name, ctx, options, ref) { - return drawFunctions[name](ctx, options, ref); +export function draw(r, name, ctx, options, ref) { + return drawFunctions[name](r, ctx, options, ref); } //Register draw functions @@ -710,7 +713,7 @@ const fixedWidthDefinitions = {}; export function registerDrawFunction(name, fxn, fixedWidth) { drawFunctions[name] = fxn; if (fixedWidth !== undefined) { - fixedWidthDefinitions[name] = fixedWidth * PXR; + fixedWidthDefinitions[name] = fixedWidth; } } @@ -726,3 +729,6 @@ registerDrawFunction("pentagon", pentagon); registerDrawFunction("roundedRectangle", roundedRectangle); registerDrawFunction("trapezoid", trapezoid); registerDrawFunction("triangle", triangle); + +//Built-in custom draw functions (weird stuff) +loadCustomShields(); diff --git a/shieldlib/src/shield_renderer.d.ts b/shieldlib/src/shield_renderer.d.ts new file mode 100644 index 000000000..7b3fd26a9 --- /dev/null +++ b/shieldlib/src/shield_renderer.d.ts @@ -0,0 +1,60 @@ +import { Map, MapStyleImageMissingEvent, StyleImage } from "maplibre-gl"; +import { + Bounds, + DebugOptions, + GraphicsFactory, + RouteParser, + ShieldDefinitions, + ShieldOptions, + ShieldSpecification, + SpriteRepository, + StringPredicate, +} from "./types"; +export declare class ShieldRenderingContext { + shieldDef: ShieldDefinitions; + options: ShieldOptions; + debugOptions: DebugOptions; + gfxFactory: GraphicsFactory; + spriteRepo: SpriteRepository; + private _emptySpriteCache; + emptySprite(): CanvasRenderingContext2D; + px(pixels: number): number; + shieldSize(): number; +} +declare class AbstractShieldRenderer { + private _shieldPredicate; + private _networkPredicate; + private _routeParser; + private _renderContext; + constructor(routeParser: RouteParser); + protected setShields(shieldSpec: ShieldSpecification): void; + debugOptions(debugOptions: DebugOptions): AbstractShieldRenderer; + filterImageID(shieldPredicate: StringPredicate): AbstractShieldRenderer; + filterNetwork(networkPredicate: StringPredicate): AbstractShieldRenderer; + graphicsFactory(gfxFactory: GraphicsFactory): AbstractShieldRenderer; + renderOnMaplibreGL(map: Map): AbstractShieldRenderer; + renderOnRepository(repo: SpriteRepository): AbstractShieldRenderer; + getStyleImageMissingHandler(): (e: MapStyleImageMissingEvent) => void; + getGraphicForRoute( + network: string, + ref: string, + name: string + ): CanvasRenderingContext2D; + emptySprite(): CanvasRenderingContext2D; + createGraphics(bounds: Bounds): CanvasRenderingContext2D; + pixelRatio(): number; +} +export declare class ShieldRenderer extends AbstractShieldRenderer { + constructor(shieldSpec: ShieldSpecification, routeParser: RouteParser); +} +export declare class URLShieldRenderer extends AbstractShieldRenderer { + constructor(shieldsURL: URL, routeParser: RouteParser); + setShieldURL(shieldsURL: URL): Promise; +} +export declare class InMemorySpriteRepository implements SpriteRepository { + sprites: {}; + getSprite(spriteID: string): StyleImage; + hasSprite(spriteID: string): boolean; + putSprite(spriteID: string, image: ImageData): void; +} +export {}; diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts new file mode 100644 index 000000000..42b0452ac --- /dev/null +++ b/shieldlib/src/shield_renderer.ts @@ -0,0 +1,191 @@ +import { Map, MapStyleImageMissingEvent, StyleImage } from "maplibre-gl"; +import { + Bounds, + DebugOptions, + GraphicsFactory, + RouteDefinition, + RouteParser, + ShieldDefinitions, + ShieldOptions, + ShieldSpecification, + SpriteRepository, + StringPredicate, +} from "./types"; +import { + storeNoShield, + missingIconLoader, + generateShieldCtx, +} from "./shield.js"; +import { DOMGraphicsFactory } from "./document_graphics"; + +export class ShieldRenderingContext { + shieldDef: ShieldDefinitions; + options: ShieldOptions; + debugOptions: DebugOptions; + gfxFactory: GraphicsFactory; + spriteRepo: SpriteRepository; + private _emptySpriteCache: CanvasRenderingContext2D; + + public emptySprite(): CanvasRenderingContext2D { + if (!this._emptySpriteCache) { + this._emptySpriteCache = this.gfxFactory.createGraphics({ + width: 1, + height: 1, + }); + } + return this._emptySpriteCache; + } + public px(pixels: number): number { + return pixels * this.gfxFactory.pixelRatio(); + } + public shieldSize(): number { + return this.px(this.options.shieldSize); + } +} + +class MaplibreGLSpriteRepository implements SpriteRepository { + map: Map; + constructor(map: Map) { + this.map = map; + } + getSprite(spriteID: string): StyleImage { + return this.map.style.getImage(spriteID); + } + putSprite(spriteID: string, image: ImageData, pixelRatio: number): void { + this.map.addImage(spriteID, image, { pixelRatio: pixelRatio }); + } +} + +class AbstractShieldRenderer { + private _shieldPredicate: StringPredicate = () => true; + private _networkPredicate: StringPredicate = () => true; + private _routeParser: RouteParser; + private _renderContext: ShieldRenderingContext; + + constructor(routeParser: RouteParser) { + this._routeParser = routeParser; + this._renderContext = new ShieldRenderingContext(); + this._renderContext.gfxFactory = new DOMGraphicsFactory(); + } + + protected setShields(shieldSpec: ShieldSpecification) { + this._renderContext.options = shieldSpec.options; + this._renderContext.shieldDef = shieldSpec.networks; + } + + public debugOptions(debugOptions: DebugOptions): AbstractShieldRenderer { + this._renderContext.debugOptions = debugOptions; + return this; + } + + public filterImageID( + shieldPredicate: StringPredicate + ): AbstractShieldRenderer { + this._shieldPredicate = shieldPredicate; + return this; + } + + public filterNetwork( + networkPredicate: StringPredicate + ): AbstractShieldRenderer { + this._networkPredicate = networkPredicate; + return this; + } + + public graphicsFactory(gfxFactory: GraphicsFactory): AbstractShieldRenderer { + this._renderContext.gfxFactory = gfxFactory; + return this; + } + + public renderOnMaplibreGL(map: Map): AbstractShieldRenderer { + this.renderOnRepository(new MaplibreGLSpriteRepository(map)); + map.on("styleimagemissing", this.getStyleImageMissingHandler()); + return this; + } + + public renderOnRepository(repo: SpriteRepository): AbstractShieldRenderer { + if (!this._renderContext.spriteRepo) { + this._renderContext.spriteRepo = repo; + } + return this; + } + + public getStyleImageMissingHandler() { + return (e: MapStyleImageMissingEvent) => { + try { + if (!this._shieldPredicate(e.id)) { + return; + } + let routeDef: RouteDefinition = this._routeParser.parse(e.id); + if (!this._networkPredicate(routeDef.network)) { + storeNoShield(this._renderContext, e.id); + return; + } + routeDef.spriteID = e.id; //Original ID so we can store the sprite + this._renderContext.debugOptions = this.debugOptions; + if (routeDef) { + missingIconLoader(this._renderContext, routeDef); + } + } catch (err) { + console.error(`Exception while loading image โ€˜${e?.id}โ€™:\n`, err); + } + }; + } + + public getGraphicForRoute(network: string, ref: string, name: string) { + return generateShieldCtx(this._renderContext, { + network, + ref, + name, + spriteID: this._routeParser.format(network, ref, name), + }); + } + + public emptySprite(): CanvasRenderingContext2D { + return this._renderContext.emptySprite(); + } + + public createGraphics(bounds: Bounds) { + return this._renderContext.gfxFactory.createGraphics(bounds); + } + + public pixelRatio(): number { + return this._renderContext.px(1); + } +} + +export class ShieldRenderer extends AbstractShieldRenderer { + constructor(shieldSpec: ShieldSpecification, routeParser: RouteParser) { + super(routeParser); + this.setShields(shieldSpec); + } +} + +export class URLShieldRenderer extends AbstractShieldRenderer { + constructor(shieldsURL: URL, routeParser: RouteParser) { + super(routeParser); + this.setShieldURL(shieldsURL); + } + + public async setShieldURL(shieldsURL: URL) { + await fetch(shieldsURL) + .then((res) => res.json()) + .then((json) => super.setShields(json)) + .catch((err) => console.error(err)); + } +} + +export class InMemorySpriteRepository implements SpriteRepository { + sprites = {}; + public getSprite(spriteID: string): StyleImage { + return this.sprites[spriteID]; + } + public hasSprite(spriteID: string): boolean { + return spriteID in this.sprites; + } + public putSprite(spriteID: string, image: ImageData): void { + this.sprites[spriteID] = image; + } +} + +const localRepo = new InMemorySpriteRepository(); diff --git a/src/js/shield_text.js b/shieldlib/src/shield_text.mjs similarity index 75% rename from src/js/shield_text.js rename to shieldlib/src/shield_text.mjs index 949dc94f5..28616a824 100644 --- a/src/js/shield_text.js +++ b/shieldlib/src/shield_text.mjs @@ -1,10 +1,7 @@ "use strict"; -import * as Color from "../constants/color.js"; import * as Gfx from "./screen_gfx.js"; -import * as ShieldDef from "./shield_defs.js"; - -export const PXR = Gfx.getPixelRatio(); +import * as Shield from "./shield.js"; const VerticalAlignment = { Middle: "middle", @@ -71,6 +68,7 @@ function roundedRectTextConstraint(spaceBounds, textBounds, options) { * Determines the position and font size to draw text so that it fits within * a bounding box. * + * @param {*} r - rendering context * @param {*} text - text to draw * @param {*} padding - top/bottom/left/right padding around text * @param {*} bounds - size of the overall graphics area @@ -78,19 +76,24 @@ function roundedRectTextConstraint(spaceBounds, textBounds, options) { * @param {*} maxFontSize - maximum font size * @returns JOSN object containing (X,Y) draw position and font size */ -function layoutShieldText(text, padding, bounds, textLayoutDef, maxFontSize) { - const PXR = Gfx.getPixelRatio(); - - var padTop = padding.top * PXR || 0; - var padBot = padding.bottom * PXR || 0; - var padLeft = padding.left * PXR || 0; - var padRight = padding.right * PXR || 0; - - var maxFont = maxFontSize * PXR; +function layoutShieldText( + r, + text, + padding, + bounds, + textLayoutDef, + maxFontSize +) { + var padTop = r.px(padding.top) || 0; + var padBot = r.px(padding.bottom) || 0; + var padLeft = r.px(padding.left) || 0; + var padRight = r.px(padding.right) || 0; + + var maxFont = r.px(maxFontSize); //Temporary canvas for text measurment - var ctx = Gfx.getGfxContext(bounds); + var ctx = r.gfxFactory.createGraphics(bounds); - ctx.font = Gfx.shieldFont(Gfx.fontSizeThreshold); + ctx.font = Gfx.shieldFont(Gfx.fontSizeThreshold, r.options.shieldFont); ctx.textAlign = "center"; ctx.textBaseline = "top"; @@ -118,7 +121,7 @@ function layoutShieldText(text, padding, bounds, textLayoutDef, maxFontSize) { Gfx.fontSizeThreshold * textConstraint.scale ); - ctx.font = Gfx.shieldFont(fontSize); + ctx.font = Gfx.shieldFont(fontSize, r.options.shieldFont); ctx.textAlign = "center"; ctx.textBaseline = "top"; @@ -160,12 +163,14 @@ const defaultDefForLayout = { * Determines the position and font size to draw text so that it fits within * a bounding box. * + * @param {*} r - rendering context * @param {*} text - text to draw * @param {*} def - shield definition * @param {*} bounds - size of the overall graphics area * @returns JOSN object containing (X,Y) draw position and font size */ -export function layoutShieldTextFromDef(text, def, bounds) { +export function layoutShieldTextFromDef(r, text, def, bounds) { + //FIX if (def == null) { def = defaultDefForLayout; } @@ -186,21 +191,20 @@ export function layoutShieldTextFromDef(text, def, bounds) { maxFontSize = Math.min(maxFontSize, def.maxFontSize); // shield definition cannot set max size higher than default } - return layoutShieldText(text, padding, bounds, textLayoutDef, maxFontSize); + return layoutShieldText(r, text, padding, bounds, textLayoutDef, maxFontSize); } /** * Draw text on a shield * + * @param {*} r - rendering context * @param {*} ctx - graphics context to draw to * @param {*} text - text to draw * @param {*} textLayout - location to draw text */ -export function drawShieldText(ctx, text, textLayout) { +export function renderShieldText(r, ctx, text, textLayout) { //Text color is set by fillStyle - ctx.textAlign = "center"; - ctx.textBaseline = "top"; - ctx.font = Gfx.shieldFont(textLayout.fontPx); + configureShieldText(r, ctx, textLayout); ctx.fillText(text, textLayout.xBaseline, textLayout.yBaseline); } @@ -208,41 +212,47 @@ export function drawShieldText(ctx, text, textLayout) { /** * Draw drop shadow for text on a shield * + * @param {*} r - rendering context * @param {*} ctx - graphics context to draw to * @param {*} text - text to draw * @param {*} textLayout - location to draw text */ -export function drawShieldHaloText(ctx, text, textLayout) { +export function drawShieldHaloText(r, ctx, text, textLayout) { //Stroke color is set by strokeStyle - ctx.textAlign = "center"; - ctx.textBaseline = "top"; - ctx.font = Gfx.shieldFont(textLayout.fontPx); + configureShieldText(r, ctx, textLayout); ctx.shadowColor = ctx.strokeStyle; ctx.shadowBlur = 0; - ctx.lineWidth = 2 * PXR; + ctx.lineWidth = r.px(2); ctx.strokeText(text, textLayout.xBaseline, textLayout.yBaseline); ctx.shadowColor = null; ctx.shadowBlur = null; } +function configureShieldText(r, ctx, textLayout) { + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); +} + /** * Draw text on a modifier plate above a shield * + * @param {*} r - rendering context * @param {*} ctx - graphics context to draw to * @param {*} text - text to draw * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ -export function drawBannerText(ctx, text, bannerIndex) { - var textLayout = layoutShieldTextFromDef(text, null, { +export function drawBannerText(r, ctx, text, bannerIndex) { + var textLayout = layoutShieldTextFromDef(r, text, null, { width: ctx.canvas.width, - height: ShieldDef.bannerSizeH - ShieldDef.bannerPadding, + height: Shield.bannerSizeH - Shield.bannerPadding, }); - ctx.fillStyle = "black"; + ctx.fillStyle = r.options.bannerTextColor; - ctx.font = Gfx.shieldFont(textLayout.fontPx); + ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); ctx.textBaseline = "top"; ctx.textAlign = "center"; @@ -250,45 +260,48 @@ export function drawBannerText(ctx, text, bannerIndex) { text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * ShieldDef.bannerSizeH - - ShieldDef.bannerPadding + bannerIndex * Shield.bannerSizeH - + Shield.bannerPadding ); } /** * Draw drop shadow for text on a modifier plate above a shield * + * @param {*} r - rendering context * @param {*} ctx - graphics context to draw to * @param {*} text - text to draw * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ -export function drawBannerHaloText(ctx, text, bannerIndex) { - var textLayout = layoutShieldTextFromDef(text, null, { +export function drawBannerHaloText(r, ctx, text, bannerIndex) { + //FIX + var textLayout = layoutShieldTextFromDef(r, text, null, { width: ctx.canvas.width, - height: ShieldDef.bannerSizeH - ShieldDef.bannerPadding, + height: Shield.bannerSizeH - Shield.bannerPadding, }); - (ctx.shadowColor = Color.backgroundFill), (ctx.strokeStyle = ctx.shadowColor); - ctx.font = Gfx.shieldFont(textLayout.fontPx); + //TODO - pass backgroundFill as a parameter + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; + ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); ctx.textBaseline = "top"; ctx.textAlign = "center"; ctx.shadowBlur = 0; - ctx.lineWidth = 2 * PXR; + ctx.lineWidth = r.px(2); ctx.strokeText( text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * ShieldDef.bannerSizeH - - ShieldDef.bannerPadding + bannerIndex * Shield.bannerSizeH - + Shield.bannerPadding ); ctx.shadowColor = null; ctx.shadowBlur = null; } -export function calculateTextWidth(text, fontSize) { - var ctx = Gfx.getGfxContext({ width: 1, height: 1 }); //dummy canvas - ctx.font = Gfx.shieldFont(fontSize); +export function calculateTextWidth(r, text, fontSize) { + var ctx = r.emptySprite(); //dummy canvas + ctx.font = Gfx.shieldFont(fontSize, r.options.shieldFont); return Math.ceil(ctx.measureText(text).width); } diff --git a/shieldlib/src/types.d.ts b/shieldlib/src/types.d.ts new file mode 100644 index 000000000..eb2a19e7d --- /dev/null +++ b/shieldlib/src/types.d.ts @@ -0,0 +1,59 @@ +import { StyleImage } from "maplibre-gl"; +export interface RouteDefinition { + network: string; + ref: string; + name: string; + spriteID?: string; +} +export interface ShieldDefinition { + spriteBlank: string[]; + textColor: string; + padding: { + left: number; + right: number; + top: number; + bottom: number; + }; +} +export type StringPredicate = (spriteID: string) => boolean; +export interface RouteParser { + parse(spriteID: string): RouteDefinition; + format(network: string, ref: string, name: string): string; +} +export interface SpriteProducer { + getSprite(spriteID: string): StyleImage; +} +export interface SpriteConsumer { + putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; +} +export type SpriteRepository = SpriteProducer & SpriteConsumer; +export interface ShieldDefinitions { + shield: { + [key: string]: ShieldDefinition; + }; +} +export interface DebugOptions {} +export interface ShieldOptions { + bannerTextColor: string; + bannerTextHaloColor: string; + shieldFont: string; + shieldSize: number; +} +export interface ShieldSpecification { + networks: ShieldDefinitions; + options: ShieldOptions; +} +export type Bounds = { + width: number; + height: number; +}; +export type GfxFactory = (bounds: Bounds) => CanvasRenderingContext2D; +export interface GraphicsFactory { + createGraphics(bounds: Bounds): CanvasRenderingContext2D; + /** + * Get pixel ratio MapLibre is using for icons based on devicePixelRatio (DPR). + * MapLibre uses 2x sprites whenever DPR > 1 and 1x sprites otherwise. + * So this function will always return 1 or 2 as appropriate based on DPR. + */ + pixelRatio(): number; +} diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts new file mode 100644 index 000000000..cb5719dc2 --- /dev/null +++ b/shieldlib/src/types.ts @@ -0,0 +1,77 @@ +import { StyleImage } from "maplibre-gl"; + +export interface RouteDefinition { + network: string; + ref: string; + name: string; + spriteID?: string; +} + +export interface ShieldDefinition { + spriteBlank: string[]; + textColor: string; + padding: { + left: number; + right: number; + top: number; + bottom: number; + }; +} + +export type StringPredicate = (spriteID: string) => boolean; + +// RouteParser unpacks a route definition from a sprite image string. +export interface RouteParser { + parse(spriteID: string): RouteDefinition; + format(network: string, ref: string, name: string): string; +} + +// SpriteProducer returns a sprite graphic based on an ID. +export interface SpriteProducer { + getSprite(spriteID: string): StyleImage; +} + +// SpriteConsumer stores a sprite graphic based on an ID. +export interface SpriteConsumer { + putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; +} + +export type SpriteRepository = SpriteProducer & SpriteConsumer; + +// ShieldDefinitions maps routes to visual appearances +export interface ShieldDefinitions { + shield: { + [key: string]: ShieldDefinition; + }; +} + +export interface DebugOptions {} + +export interface ShieldOptions { + bannerTextColor: string; + bannerTextHaloColor: string; + shieldFont: string; + shieldSize: number; +} + +export interface ShieldSpecification { + networks: ShieldDefinitions; + options: ShieldOptions; +} + +export type Bounds = { + width: number; + height: number; +}; + +// export type GfxFactory = (bounds: Bounds) => CanvasRenderingContext2D; + +export interface GraphicsFactory { + createGraphics(bounds: Bounds): CanvasRenderingContext2D; + /** + * Get pixel ratio MapLibre is using for icons based on devicePixelRatio (DPR). + * MapLibre uses 2x sprites whenever DPR > 1 and 1x sprites otherwise. + * So this function will always return 1 or 2 as appropriate based on DPR. + */ + pixelRatio(): number; +} diff --git a/shieldlib/test/spec/shield.ts b/shieldlib/test/spec/shield.ts new file mode 100644 index 000000000..d8e4d7a23 --- /dev/null +++ b/shieldlib/test/spec/shield.ts @@ -0,0 +1,45 @@ +"use strict"; + +import { expect } from "chai"; +import { romanizeRef } from "../../src/shield"; + +describe("shield", function () { + describe("#romanizeRef", function () { + it("adds", function () { + expect(romanizeRef("0")).to.be.eql(""); + expect(romanizeRef("1")).to.be.eql("I"); + expect(romanizeRef("2")).to.be.eql("II"); + expect(romanizeRef("5")).to.be.eql("V"); + expect(romanizeRef("6")).to.be.eql("VI"); + expect(romanizeRef("10")).to.be.eql("X"); + expect(romanizeRef("11")).to.be.eql("XI"); + expect(romanizeRef("50")).to.be.eql("L"); + expect(romanizeRef("51")).to.be.eql("LI"); + expect(romanizeRef("60")).to.be.eql("LX"); + expect(romanizeRef("61")).to.be.eql("LXI"); + expect(romanizeRef("100")).to.be.eql("C"); + expect(romanizeRef("101")).to.be.eql("CI"); + expect(romanizeRef("111")).to.be.eql("CXI"); + expect(romanizeRef("555")).to.be.eql("DLV"); + expect(romanizeRef("5000")).to.be.eql("MMMMM"); + }); + it("subtracts", function () { + expect(romanizeRef("4")).to.be.eql("IV"); + expect(romanizeRef("9")).to.be.eql("IX"); + expect(romanizeRef("14")).to.be.eql("XIV"); + expect(romanizeRef("40")).to.be.eql("XL"); + expect(romanizeRef("49")).to.be.eql("XLIX"); + expect(romanizeRef("90")).to.be.eql("XC"); + expect(romanizeRef("99")).to.be.eql("XCIX"); + expect(romanizeRef("400")).to.be.eql("CD"); + expect(romanizeRef("499")).to.be.eql("CDXCIX"); + expect(romanizeRef("900")).to.be.eql("CM"); + expect(romanizeRef("999")).to.be.eql("CMXCIX"); + expect(romanizeRef("4000")).to.be.eql("MMMM"); + }); + it("preserves suffixes", function () { + expect(romanizeRef("2A")).to.be.eql("IIA"); + expect(romanizeRef("2I")).to.be.eql("III"); + }); + }); +}); diff --git a/shieldlib/tsconfig.json b/shieldlib/tsconfig.json new file mode 100644 index 000000000..1953dfae4 --- /dev/null +++ b/shieldlib/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + }, + "exclude": ["node_modules", "**/*.json"], + "include": ["src/**/*.ts", "scripts/**.ts"] +} diff --git a/src/americana.js b/src/americana.js index 6b715aaf3..4f71e224b 100644 --- a/src/americana.js +++ b/src/americana.js @@ -5,10 +5,6 @@ import config from "./config.js"; import * as Label from "./constants/label.js"; import * as Style from "./js/style.js"; -import * as Shield from "./js/shield.js"; -import * as ShieldDef from "./js/shield_defs.js"; -import * as CustomShields from "./js/custom_shields.js"; - import * as Poi from "./js/poi.js"; import * as languageLabel from "./js/language_label.js"; @@ -21,6 +17,12 @@ import LegendControl from "./js/legend_control.js"; import * as LegendConfig from "./js/legend_config.js"; import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; +import { URLShieldRenderer } from "@americana/maplibre-shield-generator"; +import { + shieldPredicate, + networkPredicate, + routeParser, +} from "./js/shield_format.js"; export function buildStyle() { var getUrl = window.location; @@ -58,16 +60,24 @@ export const map = (window.map = new maplibregl.Map({ attributionControl: false, })); -CustomShields.loadCustomShields(); -ShieldDef.loadShields(); +let options = {}; + +if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { + options["SHIELD_TEXT_HALO_COLOR_OVERRIDE"] = + config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; +} + +const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); map.on("styleimagemissing", function (e) { switch (e.id.split("\n")[0]) { case "shield": - Shield.missingIconHandler(map, e); break; case "poi": - Poi.missingIconHandler(map, e); + Poi.missingIconHandler(shieldRenderer, map, e); break; default: console.warn("Image id not recognized:", JSON.stringify(e.id)); diff --git a/src/js/custom_shields.js b/src/js/custom_shields.js deleted file mode 100644 index 63036d6b9..000000000 --- a/src/js/custom_shields.js +++ /dev/null @@ -1,73 +0,0 @@ -"use strict"; - -import * as Color from "../constants/color.js"; -import * as ShieldDraw from "./shield_canvas_draw.js"; - -// Special case for Allegheny, PA Belt System, documented in CONTRIBUTE.md -export function paBelt(ctx, params) { - ShieldDraw.roundedRectangle(ctx, { - fillColor: Color.shields.white, - strokeColor: Color.shields.black, - outlineWidth: 1, - radius: 2, - rectWidth: 20, - }); - - let fillColor = params.fillColor; - - let lineWidth = 0.5 * ShieldDraw.PXR; - let diameter = ShieldDraw.CS / 3 - lineWidth; - ctx.beginPath(); - ctx.arc( - ShieldDraw.CS / 2, - ShieldDraw.CS / 2, - diameter, - 0, - 2 * Math.PI, - false - ); - - ctx.fillStyle = fillColor; - ctx.strokeStyle = params.strokeColor; - ctx.fill(); - - ctx.lineWidth = lineWidth; - ctx.stroke(); - return ctx; -} - -// Special case for Branson color-coded routes, documented in CONTRIBUTE.md -export function bransonRoute(ctx, params) { - ShieldDraw.roundedRectangle(ctx, { - fillColor: Color.shields.green, - strokeColor: Color.shields.white, - outlineWidth: 1, - radius: 2, - rectWidth: 20, - }); - - let fillColor = params.fillColor; - - let lineWidth = 0.5 * ShieldDraw.PXR; - let x = 0.15 * ShieldDraw.CS + lineWidth; - let width = 0.7 * ShieldDraw.CS - 2 * lineWidth; - - let y = 0.4 * ShieldDraw.CS + lineWidth; - let height = 0.45 * ShieldDraw.CS - 2 * lineWidth; - - ctx.beginPath(); - ctx.rect(x, y, width, height); - - ctx.fillStyle = fillColor; - ctx.strokeStyle = params.strokeColor; - ctx.fill(); - - ctx.lineWidth = lineWidth; - ctx.stroke(); - return ctx; -} - -export function loadCustomShields() { - ShieldDraw.registerDrawFunction("branson", bransonRoute, 20); - ShieldDraw.registerDrawFunction("paBelt", paBelt, 20); -} diff --git a/src/js/legend_control.js b/src/js/legend_control.js index 0a9d8e8e0..a380265bd 100644 --- a/src/js/legend_control.js +++ b/src/js/legend_control.js @@ -1,6 +1,6 @@ "use strict"; -import * as ShieldDraw from "./shield_canvas_draw.js"; +import { getDOMPixelRatio } from "@americana/maplibre-shield-generator"; import * as Label from "../constants/label.js"; import * as ShieldDef from "./shield_defs.js"; @@ -9,7 +9,7 @@ import * as HighwayShieldLayers from "../layer/highway_shield.js"; import * as maplibregl from "maplibre-gl"; const maxPopupWidth = 30; /* em */ - +const PXR = getDOMPixelRatio(); /** * Wikidata labels are normally lowercased so that they can appear in any * context. Convert them to sentence case for consistency with the rest of the @@ -392,10 +392,7 @@ export default class LegendControl { let width = f.layer.paint["line-width"] ?? 1; let gapWidth = f.layer.paint["line-gap-width"]; // Round the stroke width up to one point to ensure legibility. - return Math.max( - 1 / ShieldDraw.PXR, - gapWidth ? width * 2 + gapWidth : width - ); + return Math.max(1 / PXR, gapWidth ? width * 2 + gapWidth : width); }; let lineWidths = lineFeatures.map(getLineWidth); let height = Math.max(...lineWidths); @@ -686,8 +683,8 @@ export default class LegendControl { // Embed the canvas in an HTML image of the same size. let img = new Image( - (imageData.width * iconSize) / ShieldDraw.PXR, - (imageData.height * iconSize) / ShieldDraw.PXR + (imageData.width * iconSize) / PXR, + (imageData.height * iconSize) / PXR ); img.src = canvas.toDataURL("image/png"); img.className = "shield"; diff --git a/src/js/poi.js b/src/js/poi.js index 3f8c2d786..ff3bc6c7c 100644 --- a/src/js/poi.js +++ b/src/js/poi.js @@ -1,30 +1,29 @@ -import * as Gfx from "./screen_gfx.js"; +import { transposeImageData } from "@americana/maplibre-shield-generator"; -export const PXR = Gfx.getPixelRatio(); - -export function missingIconHandler(map, e) { +export function missingIconHandler(shieldRenderer, map, e) { try { - missingIconLoader(map, e); + missingIconLoader(shieldRenderer, map, e); } catch (err) { console.error(`Exception while loading image โ€˜${e?.id}โ€™:\n`, err); } } -export function missingIconLoader(map, e) { +export function missingIconLoader(shieldRenderer, map, e) { var sprite = e.id.split("\n")[1].split("=")[1]; var color = e.id.split("\n")[2].split("=")[1]; - var sourceSprite = map.style.imageManager.images[sprite]; + var sourceSprite = map.style.getImage(sprite); + var width = sourceSprite.data.width; var height = sourceSprite.data.height; - var ctx = Gfx.getGfxContext({ width, height }); - Gfx.copyImageData(ctx, sourceSprite, 0, false, color); + var ctx = shieldRenderer.createGraphics({ width, height }); + transposeImageData(ctx, sourceSprite, 0, false, color); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 console.warn("Didn't produce an icon for", JSON.stringify(e.id)); - ctx = Gfx.getGfxContext({ width: 1, height: 1 }); + ctx = shieldRenderer.createGraphics({ width: 1, height: 1 }); } const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); @@ -36,7 +35,7 @@ export function missingIconLoader(map, e) { data: imgData.data, }, { - pixelRatio: PXR, + pixelRatio: shieldRenderer.pixelRatio(), } ); } diff --git a/src/js/screen_gfx.js b/src/js/screen_gfx.js deleted file mode 100644 index 144a45027..000000000 --- a/src/js/screen_gfx.js +++ /dev/null @@ -1,135 +0,0 @@ -"use strict"; - -import rgba from "color-rgba"; - -const fontFamily = '"sans-serif-condensed", "Arial Narrow", sans-serif'; -export const shieldFont = (size) => `bold ${size}px ${fontFamily}`; -export const fontSizeThreshold = 12; - -var gfxFactory = getDocumentGfxContext; - -export function setGfxFactory(factory) { - gfxFactory = factory; -} - -export function getGfxContext(bounds) { - return gfxFactory(bounds); -} - -export function getDocumentGfxContext(bounds) { - var ctx = document.createElement("canvas").getContext("2d"); - var ctx = document - .createElement("canvas") - .getContext("2d", { willReadFrequently: true }); - ctx.imageSmoothingQuality = "high"; - ctx.textAlign = "center"; - ctx.textBaseline = "top"; - ctx.canvas.width = bounds.width; - ctx.canvas.height = bounds.height; - return ctx; -} - -/** - * Get pixel ratio MapLibre is using for icons based on devicePixelRatio (DPR). - * MapLibre uses 2x sprites whenever DPR > 1 and 1x sprites otherwise. - * So this function will always return 1 or 2 as appropriate based on DPR. - */ -export function getPixelRatio() { - return (typeof window !== "undefined" && window.devicePixelRatio) > 1 ? 2 : 1; -} - -// Replaces `sourceVal` with a blend of `lightenVal` and `darkenVal` proportional to the brightness; -// i.e. white becomes `darkenVal`, black becomes `lightenVal`, and anit-aliased pixels remain anit-aliased -export function blendedColorVal(sourceVal, lightenVal, darkenVal) { - return ( - 255 - - (sourceVal / 255) * (255 - darkenVal) - - (1 - sourceVal / 255) * (255 - lightenVal) - ); -} - -export function copyPixel(source, dest, sourceOffset, destOffset) { - //Red - dest[destOffset] = source[sourceOffset]; - //Green - dest[destOffset + 1] = source[sourceOffset + 1]; - //Blue - dest[destOffset + 2] = source[sourceOffset + 2]; - //Alpha - dest[destOffset + 3] = source[sourceOffset + 3]; -} - -export function copyAndRecolorPixel( - source, - dest, - sourceOffset, - destOffset, - colorLighten, - colorDarken -) { - //Red - dest[destOffset] = blendedColorVal( - source[sourceOffset], - colorLighten[0], - colorDarken[0] - ); - //Green - dest[destOffset + 1] = blendedColorVal( - source[sourceOffset + 1], - colorLighten[1], - colorDarken[1] - ); - //Blue - dest[destOffset + 2] = blendedColorVal( - source[sourceOffset + 2], - colorLighten[2], - colorDarken[2] - ); - //Alpha - dest[destOffset + 3] = source[sourceOffset + 3]; -} - -export function copyImageData( - ctx, - sourceImage, - yOffset, - verticalReflect, - colorLighten, - colorDarken -) { - let imgData = ctx.createImageData( - sourceImage.data.width, - sourceImage.data.height - ); - - let pixelCopyFn = - colorLighten || colorDarken ? copyAndRecolorPixel : copyPixel; - - let lighten = colorLighten ? rgba(colorLighten) : rgba("#000"); - let darken = colorDarken ? rgba(colorDarken) : rgba("#fff"); - - if (!verticalReflect) { - for (let i = 0; i < sourceImage.data.data.length; i += 4) { - pixelCopyFn(sourceImage.data.data, imgData.data, i, i, lighten, darken); - } - } else { - //4 bytes/px, copy in reverse vertical order. - for (let y = 0; y < sourceImage.data.height; y++) { - for (let x = 0; x < sourceImage.data.width; x++) { - let destRow = sourceImage.data.height - y - 1; - let destIdx = (destRow * sourceImage.data.width + x) * 4; - let srcIdx = (y * sourceImage.data.width + x) * 4; - pixelCopyFn( - sourceImage.data.data, - imgData.data, - srcIdx, - destIdx, - lighten, - darken - ); - } - } - } - - ctx.putImageData(imgData, 0, yOffset); -} diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 8e49f28ab..5a1140d83 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1,13 +1,6 @@ "use strict"; import * as Color from "../constants/color.js"; -import * as Gfx from "./screen_gfx.js"; - -//Height of modifier banners -export const bannerSizeH = 9 * Gfx.getPixelRatio(); -export const bannerPadding = 0.5 * Gfx.getPixelRatio(); - -export const shields = {}; /** * Draws a shield with an ellipse background @@ -21,7 +14,7 @@ export const shields = {}; function ovalShield(fillColor, strokeColor, textColor, rectWidth) { textColor = textColor ?? strokeColor; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "ellipse", params: { fillColor: fillColor, @@ -87,7 +80,7 @@ function roundedRectShield( textColor = textColor ?? strokeColor; radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "roundedRectangle", params: { fillColor: fillColor, @@ -129,7 +122,7 @@ function escutcheonDownShield( textColor = textColor ?? strokeColor; radius = radius ?? 0; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "escutcheon", params: { offset: offset, @@ -163,7 +156,7 @@ function escutcheonDownShield( function fishheadDownShield(fillColor, strokeColor, textColor, rectWidth) { textColor = textColor ?? strokeColor; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "fishhead", params: { fillColor: fillColor, @@ -204,7 +197,7 @@ function triangleDownShield( radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "triangle", params: { pointUp: false, @@ -249,7 +242,7 @@ function trapezoidDownShield( radius = radius ?? 0; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "trapezoid", params: { angle: angleInRadians, @@ -293,7 +286,7 @@ function trapezoidUpShield( textColor = textColor ?? strokeColor; radius = radius ?? 0; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "trapezoid", params: { shortSideUp: true, @@ -329,7 +322,7 @@ function diamondShield(fillColor, strokeColor, textColor, radius, rectWidth) { textColor = textColor ?? strokeColor; radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "diamond", params: { fillColor: fillColor, @@ -377,7 +370,7 @@ function pentagonUpShield( radius1 = radius1 ?? 2; radius2 = radius2 ?? 0; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "pentagon", params: { offset: offset, @@ -427,7 +420,7 @@ function homePlateDownShield( radius1 = radius1 ?? 2; radius2 = radius2 ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "pentagon", params: { pointUp: false, @@ -473,7 +466,7 @@ function hexagonVerticalShield( textColor = textColor ?? strokeColor; radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "hexagonVertical", params: { offset: offset, @@ -517,7 +510,7 @@ function hexagonHorizontalShield( textColor = textColor ?? strokeColor; radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "hexagonHorizontal", params: { angle: angleInRadians, @@ -563,7 +556,7 @@ function octagonVerticalShield( textColor = textColor ?? strokeColor; radius = radius ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "octagonVertical", params: { offset: offset, @@ -597,7 +590,7 @@ function octagonVerticalShield( function pillShield(fillColor, strokeColor, textColor, rectWidth) { textColor = textColor ?? strokeColor; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "roundedRectangle", params: { fillColor: fillColor, @@ -627,7 +620,7 @@ function pillShield(fillColor, strokeColor, textColor, rectWidth) { function paBeltShield(fillColor, strokeColor) { return { notext: true, - canvasDrawnBlank: { + shapeBlank: { drawFunc: "paBelt", params: { fillColor: fillColor, @@ -647,7 +640,7 @@ function paBeltShield(fillColor, strokeColor) { function bransonRouteShield(fillColor, strokeColor) { return { notext: true, - canvasDrawnBlank: { + shapeBlank: { drawFunc: "branson", params: { fillColor: fillColor, @@ -661,17 +654,19 @@ function bransonRouteShield(fillColor, strokeColor) { * Adds banner text above a shield * * @param {*} baseDef - Shield definition object - * @param {*} modifiers - Array of strings to be displayed above shield + * @param {*} banners - Array of strings to be displayed above shield * @returns a shield definition object */ -function banneredShield(baseDef, modifiers) { +function banneredShield(baseDef, banners) { return { - modifiers: modifiers, + banners: banners, ...baseDef, }; } export function loadShields() { + const shields = {}; + // Multi-use shields // Triangle shields @@ -4144,7 +4139,7 @@ export function loadShields() { }, }; - shields["US:KY:Parkway"].refsByWayName = { + shields["US:KY:Parkway"].refsByName = { // FIXME: This object contains both spelled-out and abbreviated road // names to accommodate both the abbreviated names from OpenMapTiles and // the spelled-out names from Planetiler. @@ -4164,7 +4159,7 @@ export function loadShields() { "Western Kentucky Pkwy": "WK", }; - shields["US:CT:Parkway"].overrideByWayName = { + shields["US:CT:Parkway"].overrideByName = { "Merritt Parkway": { spriteBlank: "shield_us_ct_parkway_merritt", }, @@ -4189,7 +4184,7 @@ export function loadShields() { "Blue Route": bransonRouteShield(Color.shields.blue, Color.shields.white), }; - shields["US:NY:Parkway"].refsByWayName = { + shields["US:NY:Parkway"].refsByName = { "Bear Mountain Parkway": "BMP", "Bronx and Pelham Parkway": "PP", "Bronx River Parkway": "BRP", @@ -4212,11 +4207,11 @@ export function loadShields() { "Purple Belt": paBeltShield(Color.shields.purple, Color.shields.white), }; - shields["US:TX:Fort_Bend:FBCTRA"].refsByWayName = { + shields["US:TX:Fort_Bend:FBCTRA"].refsByName = { "Fort Bend Parkway Toll Road": "FBP", "Fort Bend Westpark Tollway": "WPT", }; - shields["US:TX:Harris:HCTRA"].refsByWayName = { + shields["US:TX:Harris:HCTRA"].refsByName = { "East Sam Houston Tollway North": "SHT", "East Sam Houston Tollway South": "SHT", "North Sam Houston Tollway East": "SHT", @@ -4254,5 +4249,13 @@ export function loadShields() { }, }; - return shields; + return { + networks: shields, + options: { + bannerTextColor: Color.palette.black, + bannerTextHaloColor: Color.backgroundFill, + shieldFont: '"sans-serif-condensed", "Arial Narrow", sans-serif', + shieldSize: 20, + }, + }; } diff --git a/src/js/shield_format.ts b/src/js/shield_format.ts new file mode 100644 index 000000000..ae6ffdd32 --- /dev/null +++ b/src/js/shield_format.ts @@ -0,0 +1,29 @@ +import type { + StringPredicate, + RouteParser, +} from "@americana/maplibre-shield-generator"; + +export const shieldPredicate: StringPredicate = (imageID: string) => + imageID && imageID.startsWith("shield"); + +export const networkPredicate: StringPredicate = (network: string) => + // On recreational route relations, network=* indicates the network's scope, + // not the network itself. + // https://github.com/ZeLonewolf/openstreetmap-americana/issues/94 + !/^[lrni][chimpw]n$/.test(network); + +export const routeParser: RouteParser = { + parse: (id: string) => { + //Americana format is `${shield}\n${network}=${ref}\n${name}` + let id_parts: string[] = id.split("\n"); + let network_ref = id_parts[1].split("="); + + return { + network: network_ref[0], + ref: network_ref[1], + name: id_parts[2], + }; + }, + format: (network: string, ref: string, name: string) => + `shield\n${network}=${ref}\n${name}`, +}; diff --git a/src/shieldtest.js b/src/shieldtest.js index c80b5d6ff..083d5f0a2 100644 --- a/src/shieldtest.js +++ b/src/shieldtest.js @@ -1,10 +1,13 @@ "use strict"; -import * as Shield from "./js/shield.js"; -import * as gfx from "./js/screen_gfx.js"; import * as ShieldDef from "./js/shield_defs.js"; -import * as CustomShields from "./js/custom_shields.js"; import * as maplibregl from "maplibre-gl"; +import { ShieldRenderer } from "@americana/maplibre-shield-generator"; +import { + shieldPredicate, + networkPredicate, + routeParser, +} from "./js/shield_format.js"; var getUrl = window.location; var baseUrl = getUrl.protocol + "//" + getUrl.host + getUrl.pathname; @@ -21,12 +24,12 @@ export const map = (window.map = new maplibregl.Map({ }, })); -CustomShields.loadCustomShields(); -ShieldDef.loadShields(); +const shields = ShieldDef.loadShields(); -map.on("styleimagemissing", function (e) { - Shield.missingIconHandler(map, e); -}); +const shieldRenderer = new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); const once = (emitter, name, { signal } = {}) => new Promise((resolve, reject) => { @@ -251,36 +254,24 @@ let refs = [ "A26/A7", ]; -export function getShieldCanvas(shield_id) { - let ctx = Shield.generateShieldCtx(map, shield_id); +export function getShieldCanvas(network, ref, name) { + let ctx = shieldRenderer.getGraphicForRoute(network, ref, name); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 console.warn("Didn't produce a shield for", JSON.stringify(shield_id)); - ctx = gfx.getGfxContext({ width: 1, height: 1 }); + ctx = shieldRenderer.emptySprite(); } return ctx.canvas; } -function addShield(row, network, ref) { - let cell = row.insertCell(); - let shield_id = `shield\n${network}=${ref}`; - let shieldCanvas = getShieldCanvas(shield_id); +function getShieldImage(network, ref, name) { + let shieldCanvas = getShieldCanvas(network, ref, name); let img = document.createElement("img"); - img.src = shieldCanvas.toDataURL("image/png"); - img.width = shieldCanvas.width / PXR; - img.height = shieldCanvas.height / PXR; - cell.appendChild(img); -} - -function getShieldImage(network, ref) { - let shield_id = `shield\n${network}=${ref}`; - let shieldCanvas = getShieldCanvas(shield_id); - let img = document.createElement("img"); - img.srcset = `${shieldCanvas.toDataURL("image/png")} ${PXR}x`; + img.srcset = `${shieldCanvas.toDataURL("image/png")} ${pxr}x`; return img; } -const PXR = gfx.getPixelRatio(); +const pxr = shieldRenderer.pixelRatio(); const iterShields = function* () { for (const network of networks) { @@ -329,23 +320,55 @@ const iterShields = function* () { network: "US:NY:Thruway", refs: [""], }; + yield { + network: "US:KY:Parkway", + names: [ + "Audubon Parkway", + "Bluegrass Parkway", + "Cumberland Parkway", + "Hal Rogers Parkway", + "Mountain Parkway", + "Purchase Parkway", + "Western Kentucky Parkway", + ], + }; + yield { + network: "US:CT:Parkway", + names: ["Wilbur Cross Parkway", "Milford Parkway", "Merritt Parkway"], + }; }; const renderAllShields = async () => { const allShields = Array.from(iterShields()); const progress = document.querySelector("#progress-overlay progress"); - progress.max = allShields.flatMap((d) => d.refs).length; - const columns = Math.max(...allShields.flatMap((d) => d.refs.length)); + progress.max = allShields.flatMap((d) => mergeArrays(d.refs, d.names)).length; + const columns = Math.max( + ...allShields.flatMap((d) => mergeArrays(d.refs, d.names).length) + ); const table = document.querySelector("#shield-table").createTBody(); - for (const { network, refs } of allShields) { + for (const { network, refs, names } of allShields) { const tr = table.insertRow(); tr.insertCell().append(`${network}`); - for (const ref of refs) { - performance.mark(`start-${network}`); - tr.insertCell().append(getShieldImage(network, ref)); - progress.value += 1; - performance.mark(`stop-${network}`); - performance.measure(`${network}`, `start-${network}`, `stop-${network}`); + if (refs) { + for (const ref of refs) { + renderAndRecordPerformance( + tr, + performance, + progress, + () => getShieldImage(network, ref), + network + ); + } + } else if (names) { + for (const name of names) { + renderAndRecordPerformance( + tr, + performance, + progress, + () => getShieldImage(network, "", name), + network + ); + } } let perfEntries = performance.getEntriesByName(`${network}`); var perfDuration = 0; @@ -371,6 +394,31 @@ const renderAllShields = async () => { } }; +function renderAndRecordPerformance( + tr, + performance, + progress, + shieldFunc, + network +) { + performance.mark(`start-${network}`); + tr.insertCell().append(shieldFunc()); + progress.value += 1; + performance.mark(`stop-${network}`); + performance.measure(`${network}`, `start-${network}`, `stop-${network}`); +} + +function mergeArrays(arr1, arr2) { + let ret = []; + if (arr1) { + ret = ret.concat(arr1); + } + if (arr2) { + ret = ret.concat(arr2); + } + return ret; +} + await renderAllShields().finally(() => document.querySelector("#progress-overlay").remove() ); diff --git a/test-ts/shield_format/shield_format.spec.ts b/test-ts/shield_format/shield_format.spec.ts new file mode 100644 index 000000000..0c72201ef --- /dev/null +++ b/test-ts/shield_format/shield_format.spec.ts @@ -0,0 +1,24 @@ +import { expect } from "chai"; +import { shieldPredicate, routeParser } from "../../src/js/shield_format.js"; + +const image_id_I95 = "shield\nUS:I=95"; +const route_def_I95 = { + network: "US:I", + ref: "95", +}; + +describe("shield_format", function () { + describe("shieldPredicate", function () { + it("rejects a non-shield images IDs", function () { + expect(shieldPredicate(image_id_I95)).to.be.true; + expect(shieldPredicate("poi\nice_cream")).to.be.false; + }); + }); + describe("routeParser", function () { + it("extracts a route", function () { + let extractedDef = routeParser.parse(image_id_I95); + expect(extractedDef.network).to.be.equal(route_def_I95.network); + expect(extractedDef.ref).to.be.equal(route_def_I95.ref); + }); + }); +}); diff --git a/test/spec/shield.js b/test/spec/shield.js index 827d91ad0..2fb4b4bf2 100644 --- a/test/spec/shield.js +++ b/test/spec/shield.js @@ -1,64 +1,59 @@ "use strict"; -import chai, { expect } from "chai"; -import * as Shield from "../../src/js/shield.js"; +import { expect } from "chai"; +import { + routeParser, + shieldPredicate, + networkPredicate, +} from "../../src/js/shield_format"; +import { loadShields } from "../../src/js/shield_defs"; +import { + ShieldRenderer, + InMemorySpriteRepository, +} from "@americana/maplibre-shield-generator"; + +import { HeadlessGraphicsFactory } from "@americana/maplibre-shield-generator/src/headless_graphics"; + +const shields = loadShields(); +const mockRepo = new InMemorySpriteRepository(); + +const shieldRenderer = new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .graphicsFactory(new HeadlessGraphicsFactory()) + .renderOnRepository(mockRepo); + +const handler = shieldRenderer.getStyleImageMissingHandler(); + +handler({ id: "shield\nBAB=5" }); +handler({ id: "shield\nUS:RI=" }); +handler({ id: "shield\nUS:RI=ABC123" }); +handler({ id: "shield\nUS:RI=Equator" }); +handler({ id: "shield\nrwn=" }); +handler({ id: "foo" }); + +function isBlankSprite(id) { + return mockRepo.getSprite(id).width == 1; +} describe("shield", function () { describe("#isValidNetwork", function () { it("rejects a recreational network", function () { - expect(Shield.isValidNetwork("BAB")).to.be.true; - expect(Shield.isValidNetwork("rwn")).to.be.false; + expect(isBlankSprite("shield\nBAB=5")).to.be.false; + expect(isBlankSprite("shield\nrwn=")).to.be.true; + }); + it("rejects other missing image prefixes", function () { + expect(mockRepo.hasSprite("foo")).to.be.false; }); }); describe("#isValidRef", function () { - it("rejects a null ref", function () { - expect(Shield.isValidRef(null)).to.be.false; - }); it("rejects an empty ref", function () { - expect(Shield.isValidRef("")).to.be.false; + expect(isBlankSprite("shield\nUS:RI=")).to.be.true; }); it("rejects a long ref", function () { - expect(Shield.isValidRef("ABC123")).to.be.true; - expect(Shield.isValidRef("Equator")).to.be.false; - }); - }); - - describe("#romanizeRef", function () { - it("adds", function () { - expect(Shield.romanizeRef("0")).to.be.eql(""); - expect(Shield.romanizeRef("1")).to.be.eql("I"); - expect(Shield.romanizeRef("2")).to.be.eql("II"); - expect(Shield.romanizeRef("5")).to.be.eql("V"); - expect(Shield.romanizeRef("6")).to.be.eql("VI"); - expect(Shield.romanizeRef("10")).to.be.eql("X"); - expect(Shield.romanizeRef("11")).to.be.eql("XI"); - expect(Shield.romanizeRef("50")).to.be.eql("L"); - expect(Shield.romanizeRef("51")).to.be.eql("LI"); - expect(Shield.romanizeRef("60")).to.be.eql("LX"); - expect(Shield.romanizeRef("61")).to.be.eql("LXI"); - expect(Shield.romanizeRef("100")).to.be.eql("C"); - expect(Shield.romanizeRef("101")).to.be.eql("CI"); - expect(Shield.romanizeRef("111")).to.be.eql("CXI"); - expect(Shield.romanizeRef("555")).to.be.eql("DLV"); - expect(Shield.romanizeRef("5000")).to.be.eql("MMMMM"); - }); - it("subtracts", function () { - expect(Shield.romanizeRef("4")).to.be.eql("IV"); - expect(Shield.romanizeRef("9")).to.be.eql("IX"); - expect(Shield.romanizeRef("14")).to.be.eql("XIV"); - expect(Shield.romanizeRef("40")).to.be.eql("XL"); - expect(Shield.romanizeRef("49")).to.be.eql("XLIX"); - expect(Shield.romanizeRef("90")).to.be.eql("XC"); - expect(Shield.romanizeRef("99")).to.be.eql("XCIX"); - expect(Shield.romanizeRef("400")).to.be.eql("CD"); - expect(Shield.romanizeRef("499")).to.be.eql("CDXCIX"); - expect(Shield.romanizeRef("900")).to.be.eql("CM"); - expect(Shield.romanizeRef("999")).to.be.eql("CMXCIX"); - expect(Shield.romanizeRef("4000")).to.be.eql("MMMM"); - }); - it("preserves suffixes", function () { - expect(Shield.romanizeRef("2A")).to.be.eql("IIA"); - expect(Shield.romanizeRef("2I")).to.be.eql("III"); + expect(mockRepo.hasSprite("shield\nUS:RI=ABC123")).to.be.true; + expect(isBlankSprite("shield\nUS:RI=ABC123")).to.be.false; + expect(isBlankSprite("shield\nUS:RI=Equator")).to.be.true; }); }); }); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..95805817c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + }, + "include": ["src/**/*.ts", "shieldlib/src/headless_graphics.ts"] +} From f7bc95c9402c02c3271b1e6be9fa62bfe8ccafba Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 14 Mar 2023 16:20:18 -0400 Subject: [PATCH 010/444] Update main README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cdc2bca64..b551ae403 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ The repository is organized as follows: - **src/** - The map style. See [CONTRIBUTING.md](CONTRIBUTING.md). - **dev/** - Development tools used for style development. See [Style Developer Tools](dev/README.md) - **test/** - Automated unit tests. -- _Coming soon! Other customized parts of the tech stack._ +- **shieldlib/** - Maplibre [shield rendering library](shieldlib/README.md) ([npm entry](https://www.npmjs.com/package/@americana/maplibre-shield-generator?activeTab=readme)). Some general guidelines: From ac9bfe30eb1e8567e13d5d608e14cdba864ce6ce Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 17:04:20 -0400 Subject: [PATCH 011/444] Remove unneeded cd.. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a74f48775..08d720761 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "git+https://github.com/zelonewolf/openstreetmap-americana.git" }, "scripts": { - "build:shieldlib": "cd shieldlib && node scripts/build.js && cd ..", + "build:shieldlib": "cd shieldlib && node scripts/build.js", "build:code": "exec ts-node scripts/build", "build": "run-s clean-build sprites fonts build:shieldlib build:code taginfo status_map", "clean": "run-s clean:shieldlib clean:code clean-download clean-build", From a72f9234d4c5dea3c71b91bfbe3cba232b1ad14e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 17:16:04 -0400 Subject: [PATCH 012/444] Remove global shx install --- .github/workflows/test-build-mac.yml | 1 - .github/workflows/test-build-ubuntu.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/test-build-mac.yml b/.github/workflows/test-build-mac.yml index 512626b86..e25e06941 100644 --- a/.github/workflows/test-build-mac.yml +++ b/.github/workflows/test-build-mac.yml @@ -17,7 +17,6 @@ jobs: - name: Build Shield Library ๐Ÿ›ก๏ธ run: | cd shieldlib - npm install -g shx npm ci --include=dev npm run build - name: Install and Build ๐Ÿ”ง diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index 9d3c03f85..e52a87a94 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -17,7 +17,6 @@ jobs: - name: Build Shield Library ๐Ÿ›ก๏ธ run: | cd shieldlib - npm install -g shx npm ci --include=dev npm run build - name: Install and Build ๐Ÿ”ง From c8d8adf9042801b0a4df7d665d953d6837ffa132 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 17:24:17 -0400 Subject: [PATCH 013/444] Remove parcel from shieldlib --- shieldlib/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index fd73adb33..46cac3e27 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -21,7 +21,6 @@ "@types/color-rgba": "^2.1.0", "esbuild": "^0.17.10", "npm-run-all": "^4.1.5", - "parcel": "latest", "prettier": "^2.8.4", "shx": "^0.3.4", "ts-mocha": "^10.0.0", From c2fe3c11b0a19ce4daa1209dd7ecab04285ccd52 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 17:32:57 -0400 Subject: [PATCH 014/444] Consolidate test folders --- .mocharc.yml | 2 +- {test-ts => test}/shield_format/shield_format.spec.ts | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {test-ts => test}/shield_format/shield_format.spec.ts (100%) diff --git a/.mocharc.yml b/.mocharc.yml index da6b538f5..98314b919 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -3,7 +3,7 @@ extension: - ts spec: - test/**/*.js - - test-ts/**/*.spec.ts + - test/**/*.spec.ts require: ts-node/register node-option: - loader=ts-node/esm diff --git a/test-ts/shield_format/shield_format.spec.ts b/test/shield_format/shield_format.spec.ts similarity index 100% rename from test-ts/shield_format/shield_format.spec.ts rename to test/shield_format/shield_format.spec.ts From 20fbadd49eaf4d674d365a711664893eba0ea7bc Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 19:55:17 -0400 Subject: [PATCH 015/444] Implement workspaces --- package-lock.json | 9026 +++++++++++----------------------------- package.json | 3 + shieldlib/package.json | 3 + 3 files changed, 2494 insertions(+), 6538 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07e600d59..828b530fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "openstreetmap-americana", "version": "0.1.0", + "workspaces": [ + "shieldlib" + ], "dependencies": { "@americana/maplibre-shield-generator": "file:shieldlib", "color-rgba": "^2.4.0", @@ -51,97 +54,6 @@ "resolved": "shieldlib", "link": true }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@basemaps/sprites": { "version": "6.32.1", "dev": true, @@ -185,20 +97,6 @@ "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -208,25 +106,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", @@ -243,99 +122,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", - "dev": true - }, - "node_modules/@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "dev": true, - "dependencies": { - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", - "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", - "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", - "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", - "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", - "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", - "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", "license": "ISC", @@ -435,1787 +221,1128 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/@mischnic/json-sourcemap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", - "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "node_modules/@rushstack/ts-command-line": { + "version": "4.11.0", "dev": true, + "license": "MIT", "dependencies": { - "@lezer/common": "^0.15.7", - "@lezer/lr": "^0.15.4", - "json5": "^2.2.1" - }, - "engines": { - "node": ">=12.0.0" + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" } }, - "node_modules/@mischnic/json-sourcemap/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/@trysound/sax": { + "version": "0.2.0", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, + "license": "ISC", "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", - "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", - "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", - "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", - "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", - "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", - "cpu": [ - "x64" - ], + "node_modules/@types/argparse": { + "version": "1.0.38", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", - "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] + "node_modules/@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true }, - "node_modules/@parcel/bundler-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", - "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", - "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/graph": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "node_modules/@types/color-namer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/color-namer/-/color-namer-1.3.0.tgz", + "integrity": "sha512-iyuC9rR+3QYd+VuC8E9MvKM2fTForr9RcUa4YurqRJyXcDALYIt+GPsy1skrri2QcYxWVNYYyoznxe8Y42K4/g==", + "dev": true }, - "node_modules/@parcel/cache": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", - "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", - "dev": true, - "dependencies": { - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/utils": "2.8.3", - "lmdb": "2.5.2" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" - } + "node_modules/@types/color-rgba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.0.tgz", + "integrity": "sha512-tWcJLEiKdZ3ihJdThfLCe6Kw5vo0lgGcuucGkbtzcp1zifDA1E2Z96wxeSS/r+ytpHD15NCAWabX8GV911ywCA==", + "dev": true }, - "node_modules/@parcel/codeframe": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", - "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "node_modules/@types/geojson": { + "version": "7946.0.10", + "license": "MIT" }, - "node_modules/@parcel/compressor-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", - "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "dependencies": { - "@parcel/plugin": "2.8.3" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/config-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", - "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", - "dev": true, - "dependencies": { - "@parcel/bundler-default": "2.8.3", - "@parcel/compressor-raw": "2.8.3", - "@parcel/namer-default": "2.8.3", - "@parcel/optimizer-css": "2.8.3", - "@parcel/optimizer-htmlnano": "2.8.3", - "@parcel/optimizer-image": "2.8.3", - "@parcel/optimizer-svgo": "2.8.3", - "@parcel/optimizer-terser": "2.8.3", - "@parcel/packager-css": "2.8.3", - "@parcel/packager-html": "2.8.3", - "@parcel/packager-js": "2.8.3", - "@parcel/packager-raw": "2.8.3", - "@parcel/packager-svg": "2.8.3", - "@parcel/reporter-dev-server": "2.8.3", - "@parcel/resolver-default": "2.8.3", - "@parcel/runtime-browser-hmr": "2.8.3", - "@parcel/runtime-js": "2.8.3", - "@parcel/runtime-react-refresh": "2.8.3", - "@parcel/runtime-service-worker": "2.8.3", - "@parcel/transformer-babel": "2.8.3", - "@parcel/transformer-css": "2.8.3", - "@parcel/transformer-html": "2.8.3", - "@parcel/transformer-image": "2.8.3", - "@parcel/transformer-js": "2.8.3", - "@parcel/transformer-json": "2.8.3", - "@parcel/transformer-postcss": "2.8.3", - "@parcel/transformer-posthtml": "2.8.3", - "@parcel/transformer-raw": "2.8.3", - "@parcel/transformer-react-refresh-wrap": "2.8.3", - "@parcel/transformer-svg": "2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" - } - }, - "node_modules/@parcel/core": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", - "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", - "dev": true, - "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/graph": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "abortcontroller-polyfill": "^1.1.9", - "base-x": "^3.0.8", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "json5": "^2.2.0", - "msgpackr": "^1.5.4", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "optional": true + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" } }, - "node_modules/@parcel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.15.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", + "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, + "peer": true + }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.6", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/@parcel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/abbrev": { + "version": "1.1.1", "dev": true, - "bin": { - "semver": "bin/semver" - } + "license": "ISC" }, - "node_modules/@parcel/diagnostic": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", - "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, - "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "nullthrows": "^1.1.1" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.4.0" } }, - "node_modules/@parcel/events": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", - "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.4.0" } }, - "node_modules/@parcel/fs": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", - "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/fs-search": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/watcher": "^2.0.7", - "@parcel/workers": "2.8.3" + "debug": "4" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" + "node": ">= 6.0.0" } }, - "node_modules/@parcel/fs-search": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", - "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "node_modules/ansi-colors": { + "version": "4.1.1", "dev": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=6" } }, - "node_modules/@parcel/fs-search/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/@parcel/graph": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", - "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "nullthrows": "^1.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@parcel/hash": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", - "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "detect-libc": "^1.0.3", - "xxhash-wasm": "^0.4.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">= 8" } }, - "node_modules/@parcel/hash/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/aproba": { + "version": "2.0.0", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } + "license": "ISC" }, - "node_modules/@parcel/logger": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", - "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", + "node_modules/are-we-there-yet": { + "version": "2.0.0", "dev": true, + "license": "ISC", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=10" } }, - "node_modules/@parcel/markdown-ansi": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", - "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "sprintf-js": "~1.0.2" } }, - "node_modules/@parcel/namer-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", - "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1" - }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.10.0" } }, - "node_modules/@parcel/node-resolver-core": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", - "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "node_modules/assertion-error": { + "version": "1.1.0", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "*" } }, - "node_modules/@parcel/node-resolver-core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/async": { + "version": "1.5.2", "dev": true, - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/@parcel/optimizer-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", - "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", + "node_modules/balanced-match": { + "version": "1.0.2", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.16.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "license": "MIT" }, - "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", - "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", + "node_modules/base64-js": { + "version": "1.5.1", "dev": true, - "dependencies": { - "@parcel/plugin": "2.8.3", - "htmlnano": "^2.0.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "svgo": "^2.4.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8" } }, - "node_modules/@parcel/optimizer-image": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", - "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", + "node_modules/bl": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@parcel/optimizer-image/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } + "license": "ISC" }, - "node_modules/@parcel/optimizer-svgo": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", - "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", + "node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "svgo": "^2.4.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@parcel/optimizer-terser": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", - "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "node_modules/braces": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "terser": "^5.2.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8" } }, - "node_modules/@parcel/package-manager": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", - "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "node_modules/browser-stdout": { + "version": "1.3.1", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" - } + "license": "ISC" }, - "node_modules/@parcel/package-manager/node_modules/semver": { + "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/@parcel/packager-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", - "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@parcel/packager-html": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", - "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", + "node_modules/camel-case": { + "version": "1.2.2", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "sentence-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/@parcel/packager-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", - "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", + "node_modules/camelcase": { + "version": "6.3.0", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "globals": "^13.2.0", - "nullthrows": "^1.1.1" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@parcel/packager-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", - "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "node_modules/canvas": { + "version": "2.11.0", "dev": true, + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3" + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=6" } }, - "node_modules/@parcel/packager-svg": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", - "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", + "node_modules/canvas/node_modules/decompress-response": { + "version": "4.2.1", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "posthtml": "^0.16.4" + "mimic-response": "^2.0.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8" } }, - "node_modules/@parcel/plugin": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", - "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", + "node_modules/canvas/node_modules/mimic-response": { + "version": "2.1.0", "dev": true, - "dependencies": { - "@parcel/types": "2.8.3" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@parcel/reporter-cli": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", - "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", + "node_modules/canvas/node_modules/simple-get": { + "version": "3.1.1", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "chalk": "^4.1.0", - "term-size": "^2.2.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/@parcel/reporter-dev-server": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", - "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "node_modules/chai": { + "version": "4.3.7", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=4" } }, - "node_modules/@parcel/resolver-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", - "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/node-resolver-core": "2.8.3", - "@parcel/plugin": "2.8.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", - "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8" } }, - "node_modules/@parcel/runtime-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", - "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "node_modules/check-error": { + "version": "1.0.2", "dev": true, - "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "*" } }, - "node_modules/@parcel/runtime-react-refresh": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", - "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", + "node_modules/chokidar": { + "version": "3.5.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "react-error-overlay": "6.0.9", - "react-refresh": "^0.9.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "node": ">= 8.10.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@parcel/runtime-service-worker": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", - "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", + "node_modules/chownr": { + "version": "1.1.4", "dev": true, - "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "license": "ISC" }, - "node_modules/@parcel/source-map": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", - "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "node_modules/chroma-js": { + "version": "1.4.1", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", "dev": true, + "license": "ISC", "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": "^12.18.3 || >=14" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/@parcel/source-map/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/color": { + "version": "4.2.3", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">=0.10" + "node": ">=12.5.0" } }, - "node_modules/@parcel/transformer-babel": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", - "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", + "node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "json5": "^2.2.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=7.0.0" } }, - "node_modules/@parcel/transformer-babel/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/@parcel/transformer-babel/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/color-name": { + "version": "1.1.3", "dev": true, - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/@parcel/transformer-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", - "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", + "node_modules/color-namer": { + "version": "1.4.0", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.16.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "chroma-js": "^1.3.4", + "es6-weak-map": "^2.0.3" } }, - "node_modules/@parcel/transformer-html": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", - "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", - "dev": true, + "node_modules/color-parse": { + "version": "1.4.2", + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1", - "srcset": "4" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "color-name": "^1.0.0" } }, - "node_modules/@parcel/transformer-html/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/color-parse/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/@parcel/transformer-image": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", - "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", - "dev": true, + "node_modules/color-rgba": { + "version": "2.4.0", + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" + "color-parse": "^1.4.2", + "color-space": "^2.0.0" } }, - "node_modules/@parcel/transformer-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", - "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "node_modules/color-space": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "@swc/helpers": "^0.4.12", - "browserslist": "^4.6.6", - "detect-libc": "^1.0.3", - "nullthrows": "^1.1.1", - "regenerator-runtime": "^0.13.7", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/@parcel/transformer-js/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/color-string/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } + "license": "MIT" }, - "node_modules/@parcel/transformer-js/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/color-support": { + "version": "1.1.3", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "color-support": "bin.js" } }, - "node_modules/@parcel/transformer-json": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", - "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", + "node_modules/colors": { + "version": "1.2.5", "dev": true, - "dependencies": { - "@parcel/plugin": "2.8.3", - "json5": "^2.2.0" - }, + "license": "MIT", "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.1.90" } }, - "node_modules/@parcel/transformer-json/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/commander": { + "version": "10.0.0", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@parcel/transformer-postcss": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", - "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", + "node_modules/concat-map": { + "version": "0.0.1", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "clone": "^2.1.1", - "nullthrows": "^1.1.1", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "license": "MIT" }, - "node_modules/@parcel/transformer-postcss/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/console-control-strings": { + "version": "1.1.0", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "ISC" + }, + "node_modules/copy-paste-win32fix": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.4.8" } }, - "node_modules/@parcel/transformer-posthtml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", - "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "6.0.5", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=4.8" } }, - "node_modules/@parcel/transformer-posthtml/node_modules/semver": { + "node_modules/cross-spawn/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, - "node_modules/@parcel/transformer-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", - "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", + "node_modules/css-select": { + "version": "4.2.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@parcel/plugin": "2.8.3" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", - "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", + "node_modules/css-tree": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "react-refresh": "^0.9.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8.0.0" } }, - "node_modules/@parcel/transformer-svg": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", - "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", + "node_modules/css-what": { + "version": "5.1.0", "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 12.0.0", - "parcel": "^2.8.3" + "node": ">= 6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@parcel/transformer-svg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/csscolorparser": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/csso": { + "version": "4.2.0", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@parcel/types": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", - "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "node_modules/d": { + "version": "1.0.1", "dev": true, + "license": "ISC", "dependencies": { - "@parcel/cache": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/workers": "2.8.3", - "utility-types": "^3.10.0" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/@parcel/utils": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", - "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", + "node_modules/debug": { + "version": "4.3.4", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/codeframe": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/markdown-ansi": "2.8.3", - "@parcel/source-map": "^2.1.1", - "chalk": "^4.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@parcel/watcher": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", - "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", "dev": true, - "hasInstallScript": true, - "dependencies": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, + "license": "MIT" + }, + "node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/@parcel/workers": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", - "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", + "node_modules/decompress-response": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "chrome-trace-event": "^1.0.2", - "nullthrows": "^1.1.1" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.8.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.11.0", + "node_modules/deep-eql": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "node_modules/deep-extend": { + "version": "0.6.0", "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "license": "MIT", + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", + "node_modules/define-lazy-prop": { + "version": "2.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "node_modules/define-properties": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/@types/argparse": { - "version": "1.0.38", + "node_modules/delegates": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true + "node_modules/detect-libc": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } }, - "node_modules/@types/color-namer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/color-namer/-/color-namer-1.3.0.tgz", - "integrity": "sha512-iyuC9rR+3QYd+VuC8E9MvKM2fTForr9RcUa4YurqRJyXcDALYIt+GPsy1skrri2QcYxWVNYYyoznxe8Y42K4/g==", - "dev": true - }, - "node_modules/@types/color-rgba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.0.tgz", - "integrity": "sha512-tWcJLEiKdZ3ihJdThfLCe6Kw5vo0lgGcuucGkbtzcp1zifDA1E2Z96wxeSS/r+ytpHD15NCAWabX8GV911ywCA==", - "dev": true - }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/diff": { + "version": "5.0.0", "dev": true, - "optional": true - }, - "node_modules/@types/mapbox__point-geometry": { - "version": "0.1.2", - "license": "MIT" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/@types/mapbox__vector-tile": { - "version": "1.3.0", + "node_modules/dom-serializer": { + "version": "1.3.2", + "dev": true, "license": "MIT", "dependencies": { - "@types/geojson": "*", - "@types/mapbox__point-geometry": "*", - "@types/pbf": "*" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.15.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", - "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", "dev": true, - "peer": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/pbf": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.6", - "license": "MIT", - "engines": { - "node": ">=10.0.0" + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/abbrev": { - "version": "1.1.1", + "node_modules/domelementtype": { + "version": "2.2.0", "dev": true, - "license": "ISC" - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "node_modules/domhandler": { + "version": "4.3.0", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/agent-base": { - "version": "6.0.2", + "node_modules/domutils": { + "version": "2.8.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "debug": "4" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">= 6.0.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", + "node_modules/earcut": { + "version": "2.2.4", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/es-abstract": { + "version": "1.19.1", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/anymatch": { - "version": "3.1.3", + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", + "node_modules/es5-ext": { + "version": "0.10.62", "dev": true, + "hasInstallScript": true, "license": "ISC", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", + "node_modules/es6-iterator": { + "version": "2.0.3", "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/es6-symbol": { + "version": "3.1.3", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/assertion-error": { - "version": "1.1.0", + "node_modules/es6-weak-map": { + "version": "2.0.3", "dev": true, - "license": "MIT", - "engines": { - "node": "*" + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/esbuild": { + "version": "0.17.11", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/escalade": { + "version": "3.1.1", "dev": true, "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": ">=6" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, + "node_modules/events": { + "version": "3.3.0", "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.8.x" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "node_modules/expand-template": { + "version": "2.0.3", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, + "license": "(MIT OR WTFPL)", "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=6" } }, - "node_modules/buffer": { - "version": "5.7.1", + "node_modules/ext": { + "version": "1.7.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "type": "^2.7.2" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/file-type": { + "version": "3.9.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/camel-case": { - "version": "1.2.2", + "node_modules/fill-range": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "sentence-case": "^1.1.1", - "upper-case": "^1.1.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, @@ -2223,832 +1350,844 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001469", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", - "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", + "node_modules/flat": { + "version": "5.0.2", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } }, - "node_modules/canvas": { - "version": "2.11.0", + "node_modules/fonteditor-core": { + "version": "2.1.11", + "dependencies": { + "@xmldom/xmldom": "^0.8.3" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/canvas/node_modules/decompress-response": { - "version": "4.2.1", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "mimic-response": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/canvas/node_modules/mimic-response": { - "version": "2.1.0", + "node_modules/fs.realpath": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/canvas/node_modules/simple-get": { - "version": "3.1.1", + "node_modules/function-bind": { + "version": "1.1.1", "dev": true, - "license": "MIT", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "license": "MIT" }, - "node_modules/chai": { - "version": "4.3.7", + "node_modules/gauge": { + "version": "3.0.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/chalk": { - "version": "4.1.2", + "node_modules/geojson-validation": { + "version": "1.0.2", + "license": "LGPL-3", + "bin": { + "gjv": "bin/gjv" + } + }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "license": "ISC" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "*" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/get-intrinsic": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/check-error": { - "version": "1.0.2", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", "license": "MIT", "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chokidar": { - "version": "3.5.3", + "node_modules/get-symbol-description": { + "version": "1.0.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chownr": { - "version": "1.1.4", + "node_modules/github-from-package": { + "version": "0.0.0", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/chroma-js": { - "version": "1.4.1", - "dev": true + "node_modules/gl-matrix": { + "version": "3.4.3", + "license": "MIT" }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "node_modules/glob": { + "version": "9.2.1", "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, "engines": { - "node": ">=6.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cliui": { - "version": "7.0.4", + "node_modules/glob-parent": { + "version": "5.1.2", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, - "engines": { - "node": ">=0.8" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/color": { - "version": "4.2.3", + "node_modules/glob/node_modules/minimatch": { + "version": "7.4.2", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=12.5.0" + "node": ">=6" } }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/google-font-installer": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "async": "^1.5.2", + "colors": "^1.1.2", + "commander": "^2.9.0", + "copy-paste-win32fix": "^1.4.0", + "file-type": "^3.6.0", + "mv": "^2.1.1", + "pascal-case": "^1.1.2" }, - "engines": { - "node": ">=7.0.0" + "bin": { + "gfi": "cli.js" + }, + "optionalDependencies": { + "node-powershell": "^4.0.0" } }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.4", + "node_modules/google-font-installer/node_modules/commander": { + "version": "2.20.3", "dev": true, "license": "MIT" }, - "node_modules/color-name": { - "version": "1.1.3", + "node_modules/graceful-fs": { + "version": "4.2.10", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/color-namer": { - "version": "1.4.0", + "node_modules/has": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "chroma-js": "^1.3.4", - "es6-weak-map": "^2.0.3" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/color-parse": { - "version": "1.4.2", + "node_modules/has-bigints": { + "version": "1.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "color-name": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-parse/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-rgba": { - "version": "2.4.0", + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/color-space": { - "version": "2.0.0", - "license": "MIT" + "node_modules/has-symbols": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/color-string": { - "version": "1.9.1", + "node_modules/has-tostringtag": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-string/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colors": { - "version": "1.2.5", + "node_modules/has-unicode": { + "version": "2.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } + "license": "ISC" }, - "node_modules/commander": { - "version": "10.0.0", + "node_modules/he": { + "version": "1.2.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=14" + "bin": { + "he": "bin/he" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", + "node_modules/hosted-git-info": { + "version": "2.8.9", "dev": true, "license": "ISC" }, - "node_modules/copy-paste-win32fix": { - "version": "1.4.0", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "^0.4.8" - } - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "6.0.5", + "node_modules/iconv-lite": { + "version": "0.4.24", "dev": true, "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4.8" + "node": ">=0.10.0" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inflight": { + "version": "1.0.6", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver" + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/css-select": { - "version": "4.2.1", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } + "license": "ISC" }, - "node_modules/css-tree": { - "version": "1.1.3", + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" } }, - "node_modules/css-what": { - "version": "5.1.0", + "node_modules/interpret": { + "version": "1.4.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">= 0.10" } }, - "node_modules/csscolorparser": { - "version": "1.0.3", + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, "license": "MIT" }, - "node_modules/csso": { - "version": "4.2.0", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d": { - "version": "1.0.1", + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", + "node_modules/is-callable": { + "version": "1.2.4", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/decamelize": { - "version": "4.0.0", + "node_modules/is-core-module": { + "version": "2.9.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "has": "^1.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decompress-response": { - "version": "6.0.0", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-eql": { - "version": "4.1.2", + "node_modules/is-docker": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-extend": { - "version": "0.6.0", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.3", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, "license": "MIT", "dependencies": { - "object-keys": "^1.0.12" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.0.1", + "node_modules/is-negative-zero": { + "version": "2.0.2", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "5.0.0", + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=0.12.0" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", + "node_modules/is-number-object": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", + "node_modules/is-plain-obj": { + "version": "2.1.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domelementtype": { - "version": "2.2.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/domhandler": { - "version": "4.3.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 4" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domutils": { - "version": "2.8.0", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/earcut": { - "version": "2.2.4", + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", "license": "ISC" }, - "node_modules/electron-to-chromium": { - "version": "1.4.340", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.340.tgz", - "integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==", - "dev": true + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", "dev": true, "license": "MIT" }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/json-stringify-pretty-compact": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "optional": true, "dependencies": { - "once": "^1.4.0" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, + "node_modules/kdbush": { + "version": "3.0.0", + "license": "ISC" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/load-json-file": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/es-abstract": { - "version": "1.19.1", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es5-ext": { - "version": "0.10.62", + "node_modules/log-symbols": { + "version": "4.1.0", "dev": true, - "hasInstallScript": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", + "node_modules/loupe": { + "version": "2.3.6", "dev": true, "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "get-func-name": "^2.0.0" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", + "node_modules/lower-case": { + "version": "1.1.4", "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } + "license": "MIT" }, - "node_modules/es6-weak-map": { - "version": "2.0.3", + "node_modules/lru-cache": { + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/esbuild": { - "version": "0.17.11", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.11", - "@esbuild/android-arm64": "0.17.11", - "@esbuild/android-x64": "0.17.11", - "@esbuild/darwin-arm64": "0.17.11", - "@esbuild/darwin-x64": "0.17.11", - "@esbuild/freebsd-arm64": "0.17.11", - "@esbuild/freebsd-x64": "0.17.11", - "@esbuild/linux-arm": "0.17.11", - "@esbuild/linux-arm64": "0.17.11", - "@esbuild/linux-ia32": "0.17.11", - "@esbuild/linux-loong64": "0.17.11", - "@esbuild/linux-mips64el": "0.17.11", - "@esbuild/linux-ppc64": "0.17.11", - "@esbuild/linux-riscv64": "0.17.11", - "@esbuild/linux-s390x": "0.17.11", - "@esbuild/linux-x64": "0.17.11", - "@esbuild/netbsd-x64": "0.17.11", - "@esbuild/openbsd-x64": "0.17.11", - "@esbuild/sunos-x64": "0.17.11", - "@esbuild/win32-arm64": "0.17.11", - "@esbuild/win32-ia32": "0.17.11", - "@esbuild/win32-x64": "0.17.11" + "node": ">=10" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/make-dir": { + "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "dev": true, - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, - "node_modules/ext": { - "version": "1.7.0", - "dev": true, - "license": "ISC", + "node_modules/maplibre-gl": { + "version": "2.4.0", + "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { - "type": "^2.7.2" + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "dev": true, - "license": "ISC" - }, - "node_modules/file-type": { - "version": "3.9.0", + "node_modules/mdn-data": { + "version": "2.0.14", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "CC0-1.0" }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/memorystream": { + "version": "0.3.1", "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.10.0" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/mimic-response": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { "node": ">=10" }, @@ -3056,37 +2195,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", + "node_modules/minimatch": { + "version": "3.1.1", "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fonteditor-core": { - "version": "2.1.11", + "license": "ISC", "dependencies": { - "@xmldom/xmldom": "^0.8.3" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, + "node_modules/minimist": { + "version": "1.2.6", "license": "MIT" }, - "node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/minipass": { + "version": "4.2.4", "dev": true, "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { "node": ">= 8" } }, - "node_modules/fs-minipass/node_modules/minipass": { + "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", "dev": true, "license": "ISC", @@ -3097,86 +2241,64 @@ "node": ">=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge": { - "version": "3.0.2", + "node_modules/mkdirp": { + "version": "1.0.4", "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/geojson-validation": { - "version": "1.0.2", - "license": "LGPL-3", - "bin": { - "gjv": "bin/gjv" - } - }, - "node_modules/geojson-vt": { - "version": "3.2.1", - "license": "ISC" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/mkdirp-classic": { + "version": "0.5.3", "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "license": "MIT" }, - "node_modules/get-func-name": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", + "node_modules/mocha": { + "version": "10.1.0", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", "license": "MIT", "engines": { "node": ">=10" @@ -3185,59 +2307,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "license": "MIT" - }, - "node_modules/glob": { - "version": "9.2.1", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/glob/node_modules/brace-expansion": { + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -3245,482 +2356,387 @@ "balanced-match": "^1.0.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "7.4.2", + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix": { - "version": "3.0.0", + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/mv": { + "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" }, "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", "dev": true, + "license": "ISC", "dependencies": { - "type-fest": "^0.20.2" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/google-font-installer": { - "version": "1.2.0", + "node_modules/mv/node_modules/mkdirp": { + "version": "0.5.6", "dev": true, "license": "MIT", "dependencies": { - "async": "^1.5.2", - "colors": "^1.1.2", - "commander": "^2.9.0", - "copy-paste-win32fix": "^1.4.0", - "file-type": "^3.6.0", - "mv": "^2.1.1", - "pascal-case": "^1.1.2" + "minimist": "^1.2.6" }, "bin": { - "gfi": "cli.js" - }, - "optionalDependencies": { - "node-powershell": "^4.0.0" + "mkdirp": "bin/cmd.js" } }, - "node_modules/google-font-installer/node_modules/commander": { - "version": "2.20.3", + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } }, - "node_modules/graceful-fs": { - "version": "4.2.10", + "node_modules/nan": { + "version": "2.17.0", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/has": { - "version": "1.0.3", + "node_modules/nanoid": { + "version": "3.3.3", "dev": true, "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 0.4.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/has-bigints": { - "version": "1.0.1", + "node_modules/napi-build-utils": { + "version": "1.0.2", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/ncp": { + "version": "2.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "ncp": "bin/ncp" } }, - "node_modules/has-symbols": { - "version": "1.0.2", + "node_modules/next-tick": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.33.0", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/has-unicode": { - "version": "2.0.1", + "node_modules/node-addon-api": { + "version": "5.1.0", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/he": { - "version": "1.2.0", + "node_modules/node-fetch": { + "version": "2.6.9", "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/htmlnano": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.3.tgz", - "integrity": "sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A==", - "dev": true, "dependencies": { - "cosmiconfig": "^7.0.1", - "posthtml": "^0.16.5", - "timsort": "^0.3.0" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "cssnano": "^5.0.11", - "postcss": "^8.3.11", - "purgecss": "^5.0.0", - "relateurl": "^0.2.7", - "srcset": "4.0.0", - "svgo": "^2.8.0", - "terser": "^5.10.0", - "uncss": "^0.17.3" + "encoding": "^0.1.0" }, "peerDependenciesMeta": { - "cssnano": { - "optional": true - }, - "postcss": { - "optional": true - }, - "purgecss": { - "optional": true - }, - "relateurl": { - "optional": true - }, - "srcset": { - "optional": true - }, - "svgo": { - "optional": true - }, - "terser": { - "optional": true - }, - "uncss": { + "encoding": { "optional": true } } }, - "node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/node-powershell": { + "version": "4.0.0", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "chalk": "^2.4.1", + "shortid": "^2.2.14" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/node-powershell/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/node-powershell/node_modules/chalk": { + "version": "2.4.2", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": ">=4" } }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.3", + "node_modules/node-powershell/node_modules/color-convert": { + "version": "1.9.3", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" + "color-name": "1.1.3" } }, - "node_modules/interpret": { - "version": "1.4.0", + "node_modules/node-powershell/node_modules/has-flag": { + "version": "3.0.0", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 0.10" + "node": ">=4" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/node-powershell/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/nopt": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "binary-extensions": "^2.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/normalize-package-data": { + "version": "2.5.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/is-callable": { - "version": "1.2.4", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-core-module": { - "version": "2.9.0", + "node_modules/npm-run-all": { + "version": "4.1.5", "dev": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", - "dev": true + "node_modules/npmlog": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/nth-check": { + "version": "2.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/object-assign": { + "version": "4.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/is-number-object": { - "version": "1.0.6", + "node_modules/object-inspect": { + "version": "1.12.0", "dev": true, "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/object.assign": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -3729,46 +2745,68 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", + "node_modules/once": { + "version": "1.4.0", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/open": { + "version": "8.4.2", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/openmapsamples": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples.git#5014e9f74d7fd49b4e57bc2e8045d3e0b913f221", + "license": "LGPL-3.0-or-later", + "dependencies": { + "geojson-validation": "^1.0.2" + } + }, + "node_modules/openmapsamples-maplibre": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples-MapLibre.git#d0bb7b897c95bd0ef6adcd4e3a2ad409b9266c27", + "license": "LGPL-3.0-or-later", + "dependencies": { + "maplibre-gl": "^2.0", + "openmapsamples": "github:adamfranco/OpenMapSamples" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" }, @@ -3776,621 +2814,461 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/pascal-case": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "camel-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/js-yaml/node_modules/argparse": { + "node_modules/path-key": { "version": "2.0.1", "dev": true, - "license": "Python-2.0" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", + "node_modules/path-parse": { + "version": "1.0.7", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "node_modules/path-scurry": { + "version": "1.6.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/json-stringify-pretty-compact": { - "version": "2.0.0", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/pathval": { + "version": "1.1.1", "dev": true, - "optional": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "license": "BSD-3-Clause", "dependencies": { - "minimist": "^1.2.0" + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" }, "bin": { - "json5": "lib/cli.js" + "pbf": "bin/pbf" } }, - "node_modules/kdbush": { - "version": "3.0.0", + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, "license": "ISC" }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/lightningcss": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", - "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "node_modules/pidtree": { + "version": "0.3.1", "dev": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", - "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.10" } }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", - "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", - "cpu": [ - "x64" - ], + "node_modules/pify": { + "version": "3.0.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=4" } }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", - "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", - "cpu": [ - "arm" - ], + "node_modules/potpack": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/prebuild-install": { + "version": "7.1.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", - "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", - "cpu": [ - "arm64" - ], + "node_modules/prettier": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=10.13.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", - "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", - "cpu": [ - "arm64" - ], + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", - "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", - "cpu": [ - "x64" - ], + "node_modules/quickselect": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/randombytes": { + "version": "2.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", - "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", - "cpu": [ - "x64" - ], + "node_modules/rc": { + "version": "1.2.8", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "rc": "cli.js" } }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", - "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", - "cpu": [ - "x64" - ], + "node_modules/read-pkg": { + "version": "3.0.0", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=4" } }, - "node_modules/lightningcss/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=4" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/lmdb": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", - "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", + "node_modules/readable-stream": { + "version": "3.6.1", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "msgpackr": "^1.5.4", - "node-addon-api": "^4.3.0", - "node-gyp-build-optional-packages": "5.0.3", - "ordered-binary": "^1.2.4", - "weak-lru-cache": "^1.2.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "2.5.2", - "@lmdb/lmdb-darwin-x64": "2.5.2", - "@lmdb/lmdb-linux-arm": "2.5.2", - "@lmdb/lmdb-linux-arm64": "2.5.2", - "@lmdb/lmdb-linux-x64": "2.5.2", - "@lmdb/lmdb-win32-x64": "2.5.2" + "engines": { + "node": ">= 6" } }, - "node_modules/lmdb/node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=4" + "node": ">=8.10.0" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, - "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "resolve": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/resolve": { + "version": "1.22.0", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/loupe": { - "version": "2.3.6", - "dev": true, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", "license": "MIT", "dependencies": { - "get-func-name": "^2.0.0" + "protocol-buffers-schema": "^3.3.1" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/rimraf": { + "version": "3.0.2", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=10" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-dir": { - "version": "3.1.0", + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "semver": "^6.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", + "node_modules/rw": { + "version": "1.3.3", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "BSD-3-Clause" }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/maplibre-gl": { - "version": "2.4.0", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^2.0.1", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.5", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "@types/geojson": "^7946.0.10", - "@types/mapbox__point-geometry": "^0.1.2", - "@types/mapbox__vector-tile": "^1.3.0", - "@types/pbf": "^3.0.2", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.4.3", - "global-prefix": "^3.0.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.2", - "quickselect": "^2.0.0", - "supercluster": "^7.1.5", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.3" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", + "node_modules/safe-buffer": { + "version": "5.2.1", "dev": true, - "license": "CC0-1.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/memorystream": { - "version": "0.3.1", + "node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, - "engines": { - "node": ">= 0.10.0" - } + "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/semver": { + "version": "7.3.7", "dev": true, + "license": "ISC", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.6" + "node": ">=10" } }, - "node_modules/mimic-response": { - "version": "3.1.0", + "node_modules/sentence-case": { + "version": "1.1.3", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "lower-case": "^1.1.1" } }, - "node_modules/minimatch": { - "version": "3.1.1", + "node_modules/serialize-javascript": { + "version": "6.0.0", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "randombytes": "^2.1.0" } }, - "node_modules/minimist": { - "version": "1.2.6", - "license": "MIT" - }, - "node_modules/minipass": { - "version": "4.2.4", + "node_modules/set-blocking": { + "version": "2.0.0", "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/minizlib": { - "version": "2.1.2", + "node_modules/sharp": { + "version": "0.30.7", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.7", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">= 8" + "node": ">=12.13.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", + "node_modules/shebang-command": { + "version": "1.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/shebang-regex": { + "version": "1.0.0", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", + "node_modules/shell-quote": { + "version": "1.7.3", "dev": true, "license": "MIT" }, - "node_modules/mocha": { - "version": "10.1.0", + "node_modules/shelljs": { + "version": "0.8.5", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" + "shjs": "bin/shjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4401,3307 +3279,952 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/shortid": { + "version": "2.2.16", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "nanoid": "^2.1.0" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", + "node_modules/shortid/node_modules/nanoid": { + "version": "2.1.11", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } + "license": "MIT", + "optional": true }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/shx": { + "version": "0.3.4", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "minimist": "^1.2.3", + "shelljs": "^0.8.5" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/side-channel": { + "version": "1.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ms": { - "version": "2.1.3", + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/msgpackr": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", - "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", + "node_modules/simple-get": { + "version": "4.0.1", "dev": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/msgpackr-extract": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", - "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "node_modules/simple-swizzle": { + "version": "0.2.2", "dev": true, - "hasInstallScript": true, - "optional": true, + "license": "MIT", "dependencies": { - "node-gyp-build-optional-packages": "5.0.7" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + "is-arrayish": "^0.3.1" } }, - "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", - "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sort-asc": { + "version": "0.1.0", "dev": true, - "optional": true, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "license": "MIT" + "node_modules/sort-desc": { + "version": "0.1.1", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/mv": { - "version": "2.1.1", + "node_modules/sort-object": { + "version": "0.3.2", "dev": true, - "license": "MIT", "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "sort-asc": "^0.1.0", + "sort-desc": "^0.1.1" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", + "node_modules/source-map": { + "version": "0.6.1", "dev": true, - "license": "ISC", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", + "node_modules/spdx-correct": { + "version": "3.1.1", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/nan": { - "version": "2.17.0", + "node_modules/spdx-exceptions": { + "version": "2.3.0", "dev": true, - "license": "MIT" + "license": "CC-BY-3.0" }, - "node_modules/nanoid": { - "version": "3.3.3", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "dev": true, "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", "dev": true, "license": "MIT" }, - "node_modules/ncp": { - "version": "2.0.0", + "node_modules/string_decoder": { + "version": "1.1.1", "dev": true, "license": "MIT", - "bin": { - "ncp": "bin/ncp" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/next-tick": { - "version": "1.1.0", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/nice-try": { - "version": "1.0.5", + "node_modules/string-argv": { + "version": "0.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } }, - "node_modules/node-abi": { - "version": "3.33.0", + "node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.6.9", + "node_modules/string.prototype.padend": { + "version": "3.1.3", "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", - "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "node_modules/string.prototype.trimend": { + "version": "1.0.4", "dev": true, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-powershell": { - "version": "4.0.0", + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "chalk": "^2.4.1", - "shortid": "^2.2.14" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-powershell/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "color-convert": "^1.9.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/node-powershell/node_modules/chalk": { - "version": "2.4.2", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { "node": ">=4" } }, - "node_modules/node-powershell/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/node-powershell/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/strip-json-comments": { + "version": "2.0.1", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/node-powershell/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/supercluster": { + "version": "7.1.5", + "license": "ISC", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "kdbush": "^3.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", + "node_modules/supports-color": { + "version": "8.1.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", + "node_modules/svgo": { + "version": "2.8.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" + "svgo": "bin/svgo" }, "engines": { - "node": ">= 4" + "node": ">=10.13.0" } }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", + "node_modules/tar": { + "version": "6.1.13", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/tar-fs": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/tar-stream": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/npmlog": { - "version": "5.0.1", + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", "dev": true, "license": "ISC", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "node_modules/tinyqueue": { + "version": "2.0.3", + "license": "ISC" }, - "node_modules/object.assign": { - "version": "4.1.2", + "node_modules/to-regex-range": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0" } }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "node_modules/tokenfield": { + "version": "1.5.2", + "license": "BSD-3-Clause" }, - "node_modules/open": { - "version": "8.4.2", + "node_modules/tr46": { + "version": "0.0.3", "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/openmapsamples": { - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples.git#5014e9f74d7fd49b4e57bc2e8045d3e0b913f221", - "license": "LGPL-3.0-or-later", - "dependencies": { - "geojson-validation": "^1.0.2" - } - }, - "node_modules/openmapsamples-maplibre": { - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/adamfranco/OpenMapSamples-MapLibre.git#d0bb7b897c95bd0ef6adcd4e3a2ad409b9266c27", - "license": "LGPL-3.0-or-later", - "dependencies": { - "maplibre-gl": "^2.0", - "openmapsamples": "github:adamfranco/OpenMapSamples" - } - }, - "node_modules/ordered-binary": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", - "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", - "dev": true - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parcel": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", - "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", - "dev": true, - "dependencies": { - "@parcel/config-default": "2.8.3", - "@parcel/core": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/reporter-cli": "2.8.3", - "@parcel/reporter-dev-server": "2.8.3", - "@parcel/utils": "2.8.3", - "chalk": "^4.1.0", - "commander": "^7.0.0", - "get-port": "^4.2.0", - "v8-compile-cache": "^2.0.0" - }, - "bin": { - "parcel": "lib/bin.js" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/parcel/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pascal-case": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.6.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/pbf": { - "version": "3.2.1", - "license": "BSD-3-Clause", - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/posthtml": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", - "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", - "dev": true, - "dependencies": { - "posthtml-parser": "^0.11.0", - "posthtml-render": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/posthtml-parser": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", - "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", - "dev": true, - "dependencies": { - "htmlparser2": "^7.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/posthtml-render": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", - "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "dev": true, - "dependencies": { - "is-json": "^2.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/posthtml/node_modules/posthtml-parser": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", - "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "dev": true, - "dependencies": { - "htmlparser2": "^7.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/potpack": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/quickselect": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "3.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sentence-case": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.30.7", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "dev": true, - "license": "MIT" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/shortid": { - "version": "2.2.16", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "nanoid": "^2.1.0" - } - }, - "node_modules/shortid/node_modules/nanoid": { - "version": "2.1.11", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/shx": { - "version": "0.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sort-asc": { - "version": "0.1.0", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.1.1", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "0.3.2", - "dev": true, - "dependencies": { - "sort-asc": "^0.1.0", - "sort-desc": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.padend": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supercluster": { - "version": "7.1.5", - "license": "ISC", - "dependencies": { - "kdbush": "^3.0.0" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar": { - "version": "6.1.13", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", - "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tokenfield": { - "version": "1.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", - "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", - "dev": true, - "dependencies": { - "ts-node": "7.0.1" - }, - "bin": { - "ts-mocha": "bin/ts-mocha" - }, - "engines": { - "node": ">= 6.X.X" - }, - "optionalDependencies": { - "tsconfig-paths": "^3.5.0" - }, - "peerDependencies": { - "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" - } - }, - "node_modules/ts-mocha/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ts-mocha/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ts-mocha/node_modules/ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ts-mocha/node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "optional": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/upper-case": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "license": "MIT", - "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/xxhash-wasm": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", - "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "shieldlib": { - "name": "@americana/maplibre-shield-generator", - "version": "0.0.1-alpha.11", - "license": "CC0-1.0", - "dependencies": { - "color-rgba": "^2.4.0", - "maplibre-gl": "^2.4.0" - }, - "devDependencies": { - "@types/color-rgba": "^2.1.0", - "esbuild": "^0.17.10", - "npm-run-all": "^4.1.5", - "parcel": "latest", - "prettier": "^2.8.4", - "shx": "^0.3.4", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", - "typescript": "^4.9.5" - } - } - }, - "dependencies": { - "@americana/maplibre-shield-generator": { - "version": "file:shieldlib", - "requires": { - "@types/color-rgba": "^2.1.0", - "color-rgba": "^2.4.0", - "esbuild": "^0.17.10", - "maplibre-gl": "^2.4.0", - "npm-run-all": "^4.1.5", - "parcel": "latest", - "prettier": "^2.8.4", - "shx": "^0.3.4", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", - "typescript": "^4.9.5" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@basemaps/sprites": { - "version": "6.32.1", - "dev": true, - "requires": { - "@mapbox/shelf-pack": "^3.2.0", - "@rushstack/ts-command-line": "^4.3.13", - "sharp": "^0.30.7" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@esbuild/linux-x64": { - "version": "0.17.11", - "dev": true, - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", - "dev": true - }, - "@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "dev": true, - "requires": { - "@lezer/common": "^0.15.0" - } - }, - "@lmdb/lmdb-darwin-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", - "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", - "dev": true, - "optional": true - }, - "@lmdb/lmdb-darwin-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", - "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", - "dev": true, - "optional": true - }, - "@lmdb/lmdb-linux-arm": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", - "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", - "dev": true, - "optional": true - }, - "@lmdb/lmdb-linux-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", - "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", - "dev": true, - "optional": true - }, - "@lmdb/lmdb-linux-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", - "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", - "dev": true, - "optional": true - }, - "@lmdb/lmdb-win32-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", - "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", - "dev": true, - "optional": true - }, - "@mapbox/geojson-rewind": { - "version": "0.5.2", - "requires": { - "get-stream": "^6.0.1", - "minimist": "^1.2.6" - } - }, - "@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2" - }, - "@mapbox/mapbox-gl-supported": { - "version": "2.0.1" - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.10", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } - }, - "@mapbox/point-geometry": { - "version": "0.1.0" - }, - "@mapbox/shelf-pack": { - "version": "3.2.0", - "dev": true - }, - "@mapbox/tiny-sdf": { - "version": "2.0.5" - }, - "@mapbox/unitbezier": { - "version": "0.0.1" - }, - "@mapbox/vector-tile": { - "version": "1.3.1", - "requires": { - "@mapbox/point-geometry": "~0.1.0" - } - }, - "@mapbox/whoots-js": { - "version": "3.1.0" - }, - "@maplibre/maplibre-gl-style-spec": { - "version": "17.0.1", - "dev": true, - "requires": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/unitbezier": "^0.0.0", - "csscolorparser": "~1.0.2", - "json-stringify-pretty-compact": "^2.0.0", - "minimist": "^1.2.5", - "rw": "^1.3.3", - "sort-object": "^0.3.2" - }, - "dependencies": { - "@mapbox/unitbezier": { - "version": "0.0.0", - "dev": true - } - } - }, - "@mischnic/json-sourcemap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", - "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", - "dev": true, - "requires": { - "@lezer/common": "^0.15.7", - "@lezer/lr": "^0.15.4", - "json5": "^2.2.1" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - } - } - }, - "@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", - "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", - "dev": true, - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", - "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", - "dev": true, - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", - "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", - "dev": true, - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", - "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", - "dev": true, - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", - "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", - "dev": true, - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", - "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", + "node_modules/ts-mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", + "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", "dev": true, - "optional": true - }, - "@parcel/bundler-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", - "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/graph": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - } - }, - "@parcel/cache": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", - "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", - "dev": true, - "requires": { - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/utils": "2.8.3", - "lmdb": "2.5.2" - } - }, - "@parcel/codeframe": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", - "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", - "dev": true, - "requires": { - "chalk": "^4.1.0" - } - }, - "@parcel/compressor-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", - "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", - "dev": true, - "requires": { - "@parcel/plugin": "2.8.3" - } - }, - "@parcel/config-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", - "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", - "dev": true, - "requires": { - "@parcel/bundler-default": "2.8.3", - "@parcel/compressor-raw": "2.8.3", - "@parcel/namer-default": "2.8.3", - "@parcel/optimizer-css": "2.8.3", - "@parcel/optimizer-htmlnano": "2.8.3", - "@parcel/optimizer-image": "2.8.3", - "@parcel/optimizer-svgo": "2.8.3", - "@parcel/optimizer-terser": "2.8.3", - "@parcel/packager-css": "2.8.3", - "@parcel/packager-html": "2.8.3", - "@parcel/packager-js": "2.8.3", - "@parcel/packager-raw": "2.8.3", - "@parcel/packager-svg": "2.8.3", - "@parcel/reporter-dev-server": "2.8.3", - "@parcel/resolver-default": "2.8.3", - "@parcel/runtime-browser-hmr": "2.8.3", - "@parcel/runtime-js": "2.8.3", - "@parcel/runtime-react-refresh": "2.8.3", - "@parcel/runtime-service-worker": "2.8.3", - "@parcel/transformer-babel": "2.8.3", - "@parcel/transformer-css": "2.8.3", - "@parcel/transformer-html": "2.8.3", - "@parcel/transformer-image": "2.8.3", - "@parcel/transformer-js": "2.8.3", - "@parcel/transformer-json": "2.8.3", - "@parcel/transformer-postcss": "2.8.3", - "@parcel/transformer-posthtml": "2.8.3", - "@parcel/transformer-raw": "2.8.3", - "@parcel/transformer-react-refresh-wrap": "2.8.3", - "@parcel/transformer-svg": "2.8.3" - } - }, - "@parcel/core": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", - "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", - "dev": true, - "requires": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/graph": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "abortcontroller-polyfill": "^1.1.9", - "base-x": "^3.0.8", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "json5": "^2.2.0", - "msgpackr": "^1.5.4", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "dependencies": { + "ts-node": "7.0.1" + }, + "bin": { + "ts-mocha": "bin/ts-mocha" + }, + "engines": { + "node": ">= 6.X.X" + }, + "optionalDependencies": { + "tsconfig-paths": "^3.5.0" + }, + "peerDependencies": { + "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" } }, - "@parcel/diagnostic": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", - "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "node_modules/ts-mocha/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, - "requires": { - "@mischnic/json-sourcemap": "^0.1.0", - "nullthrows": "^1.1.1" + "engines": { + "node": ">=0.3.1" } }, - "@parcel/events": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", - "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", - "dev": true - }, - "@parcel/fs": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", - "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "node_modules/ts-mocha/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "requires": { - "@parcel/fs-search": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/watcher": "^2.0.7", - "@parcel/workers": "2.8.3" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "@parcel/fs-search": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", - "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "node_modules/ts-mocha/node_modules/ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", "dev": true, - "requires": { - "detect-libc": "^1.0.3" - }, "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true - } + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" } }, - "@parcel/graph": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", - "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "node_modules/ts-mocha/node_modules/yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", "dev": true, - "requires": { - "nullthrows": "^1.1.1" + "engines": { + "node": ">=4" } }, - "@parcel/hash": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", - "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "xxhash-wasm": "^0.4.2" - }, "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true } } }, - "@parcel/logger": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", - "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3" - } - }, - "@parcel/markdown-ansi": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", - "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "requires": { - "chalk": "^4.1.0" + "engines": { + "node": ">=0.3.1" } }, - "@parcel/namer-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", - "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1" + "optional": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "@parcel/node-resolver-core": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", - "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "node_modules/tunnel-agent": { + "version": "0.6.0", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, + "license": "Apache-2.0", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "@parcel/optimizer-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", - "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", + "node_modules/type": { + "version": "1.2.0", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.16.1", - "nullthrows": "^1.1.1" - } + "license": "ISC" }, - "@parcel/optimizer-htmlnano": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", - "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", + "node_modules/type-detect": { + "version": "4.0.8", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "htmlnano": "^2.0.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "svgo": "^2.4.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "@parcel/optimizer-image": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", - "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "detect-libc": "^1.0.3" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true - } + "engines": { + "node": ">=4.2.0" } }, - "@parcel/optimizer-svgo": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", - "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", + "node_modules/unbox-primitive": { + "version": "1.0.1", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "svgo": "^2.4.0" + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@parcel/optimizer-terser": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", - "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "node_modules/upper-case": { + "version": "1.1.3", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "terser": "^5.2.0" - } + "license": "MIT" }, - "@parcel/package-manager": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", - "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "node_modules/upper-case-first": { + "version": "1.1.2", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "semver": "^5.7.1" - }, + "license": "MIT", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "upper-case": "^1.1.1" } }, - "@parcel/packager-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", - "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", + "node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - } + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, - "@parcel/packager-html": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", - "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "@parcel/packager-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", - "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "globals": "^13.2.0", - "nullthrows": "^1.1.1" + "node_modules/vt-pbf": { + "version": "3.1.3", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" } }, - "@parcel/packager-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", - "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "node_modules/webidl-conversions": { + "version": "3.0.1", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3" - } + "license": "BSD-2-Clause" }, - "@parcel/packager-svg": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", - "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", + "node_modules/whatwg-url": { + "version": "5.0.0", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "posthtml": "^0.16.4" + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "@parcel/plugin": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", - "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", - "dev": true, - "requires": { - "@parcel/types": "2.8.3" + "node_modules/which": { + "version": "1.3.1", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "@parcel/reporter-cli": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", - "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "chalk": "^4.1.0", - "term-size": "^2.2.1" + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@parcel/reporter-dev-server": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", - "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "node_modules/wide-align": { + "version": "1.1.5", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3" + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "@parcel/resolver-default": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", - "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "node_modules/workerpool": { + "version": "6.2.1", "dev": true, - "requires": { - "@parcel/node-resolver-core": "2.8.3", - "@parcel/plugin": "2.8.3" - } + "license": "Apache-2.0" }, - "@parcel/runtime-browser-hmr": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", - "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "@parcel/runtime-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", - "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "node_modules/wrappy": { + "version": "1.0.2", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - } + "license": "ISC" }, - "@parcel/runtime-react-refresh": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", - "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", + "node_modules/y18n": { + "version": "5.0.8", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "react-error-overlay": "6.0.9", - "react-refresh": "^0.9.0" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "@parcel/runtime-service-worker": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", - "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", + "node_modules/yallist": { + "version": "4.0.0", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1" - } + "license": "ISC" }, - "@parcel/source-map": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", - "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "node_modules/yargs": { + "version": "16.2.0", "dev": true, - "requires": { - "detect-libc": "^1.0.3" - }, + "license": "MIT", "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true - } - } - }, - "@parcel/transformer-babel": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", - "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "json5": "^2.2.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "engines": { + "node": ">=10" } }, - "@parcel/transformer-css": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", - "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", + "node_modules/yargs-parser": { + "version": "20.2.4", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "browserslist": "^4.6.6", - "lightningcss": "^1.16.1", - "nullthrows": "^1.1.1" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "@parcel/transformer-html": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", - "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", + "node_modules/yargs-unparser": { + "version": "2.0.0", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1", - "srcset": "4" - }, + "license": "MIT", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "@parcel/transformer-image": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", - "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "nullthrows": "^1.1.1" + "engines": { + "node": ">=6" } }, - "@parcel/transformer-js": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", - "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.8.3", - "@parcel/workers": "2.8.3", - "@swc/helpers": "^0.4.12", - "browserslist": "^4.6.6", - "detect-libc": "^1.0.3", - "nullthrows": "^1.1.1", - "regenerator-runtime": "^0.13.7", - "semver": "^5.7.1" + "license": "MIT", + "engines": { + "node": ">=10" }, - "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@parcel/transformer-json": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", - "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", - "dev": true, - "requires": { - "@parcel/plugin": "2.8.3", - "json5": "^2.2.0" - }, + "shieldlib": { + "name": "@americana/maplibre-shield-generator", + "version": "0.0.1-alpha.11", + "license": "CC0-1.0", "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - } + "color-rgba": "^2.4.0", + "maplibre-gl": "^2.4.0" + }, + "devDependencies": { + "@types/color-rgba": "^2.1.0", + "esbuild": "^0.17.10", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" } - }, - "@parcel/transformer-postcss": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", - "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", - "dev": true, + } + }, + "dependencies": { + "@americana/maplibre-shield-generator": { + "version": "file:shieldlib", "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "clone": "^2.1.1", - "nullthrows": "^1.1.1", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@types/color-rgba": "^2.1.0", + "color-rgba": "^2.4.0", + "esbuild": "^0.17.10", + "maplibre-gl": "^2.4.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.4", + "shx": "^0.3.4", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" } }, - "@parcel/transformer-posthtml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", - "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", + "@basemaps/sprites": { + "version": "6.32.1", "dev": true, "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@mapbox/shelf-pack": "^3.2.0", + "@rushstack/ts-command-line": "^4.3.13", + "sharp": "^0.30.7" } }, - "@parcel/transformer-raw": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", - "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { - "@parcel/plugin": "2.8.3" + "@jridgewell/trace-mapping": "0.3.9" } }, - "@parcel/transformer-react-refresh-wrap": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", - "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", + "@esbuild/linux-x64": { + "version": "0.17.11", + "dev": true, + "optional": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "requires": { - "@parcel/plugin": "2.8.3", - "@parcel/utils": "2.8.3", - "react-refresh": "^0.9.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@parcel/transformer-svg": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", - "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", - "dev": true, + "@mapbox/geojson-rewind": { + "version": "0.5.2", "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/plugin": "2.8.3", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "get-stream": "^6.0.1", + "minimist": "^1.2.6" } }, - "@parcel/types": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", - "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2" + }, + "@mapbox/mapbox-gl-supported": { + "version": "2.0.1" + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", "dev": true, "requires": { - "@parcel/cache": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/source-map": "^2.1.1", - "@parcel/workers": "2.8.3", - "utility-types": "^3.10.0" + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" } }, - "@parcel/utils": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", - "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", - "dev": true, + "@mapbox/point-geometry": { + "version": "0.1.0" + }, + "@mapbox/shelf-pack": { + "version": "3.2.0", + "dev": true + }, + "@mapbox/tiny-sdf": { + "version": "2.0.5" + }, + "@mapbox/unitbezier": { + "version": "0.0.1" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", "requires": { - "@parcel/codeframe": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/hash": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/markdown-ansi": "2.8.3", - "@parcel/source-map": "^2.1.1", - "chalk": "^4.1.0" + "@mapbox/point-geometry": "~0.1.0" } }, - "@parcel/watcher": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", - "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "@mapbox/whoots-js": { + "version": "3.1.0" + }, + "@maplibre/maplibre-gl-style-spec": { + "version": "17.0.1", "dev": true, "requires": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.0", + "csscolorparser": "~1.0.2", + "json-stringify-pretty-compact": "^2.0.0", + "minimist": "^1.2.5", + "rw": "^1.3.3", + "sort-object": "^0.3.2" }, "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "@mapbox/unitbezier": { + "version": "0.0.0", "dev": true } } }, - "@parcel/workers": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", - "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/types": "2.8.3", - "@parcel/utils": "2.8.3", - "chrome-trace-event": "^1.0.2", - "nullthrows": "^1.1.1" - } - }, "@rushstack/ts-command-line": { "version": "4.11.0", "dev": true, @@ -7712,15 +4235,6 @@ "string-argv": "~0.3.1" } }, - "@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, "@trysound/sax": { "version": "0.2.0", "dev": true @@ -7805,12 +4319,6 @@ "dev": true, "peer": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "@types/pbf": { "version": "3.0.2" }, @@ -7821,12 +4329,6 @@ "version": "1.1.1", "dev": true }, - "abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", - "dev": true - }, "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -7912,15 +4414,6 @@ "version": "1.0.2", "dev": true }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, "base64-js": { "version": "1.5.1", "dev": true @@ -7961,18 +4454,6 @@ "version": "1.3.1", "dev": true }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, "buffer": { "version": "5.7.1", "dev": true, @@ -7995,12 +4476,6 @@ "get-intrinsic": "^1.0.2" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, "camel-case": { "version": "1.2.2", "dev": true, @@ -8013,12 +4488,6 @@ "version": "6.3.0", "dev": true }, - "caniuse-lite": { - "version": "1.0.30001469", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", - "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", - "dev": true - }, "canvas": { "version": "2.11.0", "dev": true, @@ -8106,12 +4575,6 @@ "version": "1.4.1", "dev": true }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, "cliui": { "version": "7.0.4", "dev": true, @@ -8121,12 +4584,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, "color": { "version": "4.2.3", "dev": true, @@ -8222,19 +4679,6 @@ "iconv-lite": "^0.4.8" } }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -8392,27 +4836,9 @@ "domhandler": "^4.2.0" } }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, "earcut": { "version": "2.2.4" }, - "electron-to-chromium": { - "version": "1.4.340", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.340.tgz", - "integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "dev": true @@ -8424,12 +4850,6 @@ "once": "^1.4.0" } }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true - }, "error-ex": { "version": "1.3.2", "dev": true, @@ -8659,12 +5079,6 @@ "has-symbols": "^1.0.1" } }, - "get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", - "dev": true - }, "get-stream": { "version": "6.0.1" }, @@ -8724,15 +5138,6 @@ "which": "^1.3.1" } }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, "google-font-installer": { "version": "1.2.0", "dev": true, @@ -8795,29 +5200,6 @@ "version": "2.8.9", "dev": true }, - "htmlnano": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.3.tgz", - "integrity": "sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.1", - "posthtml": "^0.16.5", - "timsort": "^0.3.0" - } - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, "https-proxy-agent": { "version": "5.0.1", "dev": true, @@ -8836,16 +5218,6 @@ "ieee754": { "version": "1.2.1" }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, "inflight": { "version": "1.0.6", "dev": true, @@ -8937,12 +5309,6 @@ "is-extglob": "^2.1.1" } }, - "is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", - "dev": true - }, "is-negative-zero": { "version": "2.0.2", "dev": true @@ -9009,12 +5375,6 @@ "isexe": { "version": "2.0.0" }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "dev": true, @@ -9032,12 +5392,6 @@ "version": "1.0.2", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-stringify-pretty-compact": { "version": "2.0.0", "dev": true @@ -9058,120 +5412,6 @@ "kind-of": { "version": "6.0.3" }, - "lightningcss": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", - "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" - }, - "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true - } - } - }, - "lightningcss-darwin-arm64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", - "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", - "dev": true, - "optional": true - }, - "lightningcss-darwin-x64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", - "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", - "dev": true, - "optional": true - }, - "lightningcss-linux-arm-gnueabihf": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", - "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", - "dev": true, - "optional": true - }, - "lightningcss-linux-arm64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", - "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", - "dev": true, - "optional": true - }, - "lightningcss-linux-arm64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", - "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", - "dev": true, - "optional": true - }, - "lightningcss-linux-x64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", - "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", - "dev": true, - "optional": true - }, - "lightningcss-linux-x64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", - "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", - "dev": true, - "optional": true - }, - "lightningcss-win32-x64-msvc": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", - "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", - "dev": true, - "optional": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lmdb": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", - "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", - "dev": true, - "requires": { - "@lmdb/lmdb-darwin-arm64": "2.5.2", - "@lmdb/lmdb-darwin-x64": "2.5.2", - "@lmdb/lmdb-linux-arm": "2.5.2", - "@lmdb/lmdb-linux-arm64": "2.5.2", - "@lmdb/lmdb-linux-x64": "2.5.2", - "@lmdb/lmdb-win32-x64": "2.5.2", - "msgpackr": "^1.5.4", - "node-addon-api": "^4.3.0", - "node-gyp-build-optional-packages": "5.0.3", - "ordered-binary": "^1.2.4", - "weak-lru-cache": "^1.2.2" - }, - "dependencies": { - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "dev": true - } - } - }, "load-json-file": { "version": "4.0.0", "dev": true, @@ -9281,16 +5521,6 @@ "version": "0.3.1", "dev": true }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, "mimic-response": { "version": "3.1.0", "dev": true @@ -9412,40 +5642,6 @@ "version": "2.1.3", "dev": true }, - "msgpackr": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", - "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", - "dev": true, - "requires": { - "msgpackr-extract": "^3.0.1" - } - }, - "msgpackr-extract": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", - "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", - "dev": true, - "optional": true, - "requires": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2", - "node-gyp-build-optional-packages": "5.0.7" - }, - "dependencies": { - "node-gyp-build-optional-packages": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", - "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", - "dev": true, - "optional": true - } - } - }, "murmurhash-js": { "version": "1.0.0" }, @@ -9527,18 +5723,6 @@ "whatwg-url": "^5.0.0" } }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true - }, - "node-gyp-build-optional-packages": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", - "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", - "dev": true - }, "node-powershell": { "version": "4.0.0", "dev": true, @@ -9589,12 +5773,6 @@ } } }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, "nopt": { "version": "5.0.0", "dev": true, @@ -9690,12 +5868,6 @@ "boolbase": "^1.0.0" } }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true - }, "object-assign": { "version": "4.1.1", "dev": true @@ -9749,12 +5921,6 @@ "openmapsamples": "github:adamfranco/OpenMapSamples" } }, - "ordered-binary": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", - "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", - "dev": true - }, "p-limit": { "version": "3.1.0", "dev": true, @@ -9769,57 +5935,6 @@ "p-limit": "^3.0.2" } }, - "parcel": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", - "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", - "dev": true, - "requires": { - "@parcel/config-default": "2.8.3", - "@parcel/core": "2.8.3", - "@parcel/diagnostic": "2.8.3", - "@parcel/events": "2.8.3", - "@parcel/fs": "2.8.3", - "@parcel/logger": "2.8.3", - "@parcel/package-manager": "2.8.3", - "@parcel/reporter-cli": "2.8.3", - "@parcel/reporter-dev-server": "2.8.3", - "@parcel/utils": "2.8.3", - "chalk": "^4.1.0", - "commander": "^7.0.0", - "get-port": "^4.2.0", - "v8-compile-cache": "^2.0.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "pascal-case": { "version": "1.1.2", "dev": true, @@ -9858,12 +5973,6 @@ } } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, "pathval": { "version": "1.1.1", "dev": true @@ -9891,51 +6000,6 @@ "version": "3.0.0", "dev": true }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "posthtml": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", - "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", - "dev": true, - "requires": { - "posthtml-parser": "^0.11.0", - "posthtml-render": "^3.0.0" - }, - "dependencies": { - "posthtml-parser": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", - "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "dev": true, - "requires": { - "htmlparser2": "^7.1.1" - } - } - } - }, - "posthtml-parser": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", - "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", - "dev": true, - "requires": { - "htmlparser2": "^7.1.1" - } - }, - "posthtml-render": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", - "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "dev": true, - "requires": { - "is-json": "^2.0.1" - } - }, "potpack": { "version": "1.0.2" }, @@ -9994,18 +6058,6 @@ "strip-json-comments": "~2.0.1" } }, - "react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", - "dev": true - }, - "react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "dev": true - }, "read-pkg": { "version": "3.0.0", "dev": true, @@ -10047,12 +6099,6 @@ "resolve": "^1.1.6" } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, "require-directory": { "version": "2.1.1", "dev": true @@ -10066,12 +6112,6 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, "resolve-protobuf-schema": { "version": "2.1.0", "requires": { @@ -10308,12 +6348,6 @@ "version": "1.0.3", "dev": true }, - "srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "dev": true - }, "stable": { "version": "0.1.8", "dev": true @@ -10459,38 +6493,6 @@ "readable-stream": "^3.1.1" } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "terser": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", - "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, "tinyqueue": { "version": "2.0.3" }, @@ -10599,12 +6601,6 @@ "strip-bom": "^3.0.0" } }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "dev": true, @@ -10620,12 +6616,6 @@ "version": "4.0.8", "dev": true }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -10642,16 +6632,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, "upper-case": { "version": "1.1.3", "dev": true @@ -10667,18 +6647,6 @@ "version": "1.0.2", "dev": true }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -10701,12 +6669,6 @@ "pbf": "^3.2.1" } }, - "weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true - }, "webidl-conversions": { "version": "3.0.1", "dev": true @@ -10760,12 +6722,6 @@ "version": "1.0.2", "dev": true }, - "xxhash-wasm": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", - "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", - "dev": true - }, "y18n": { "version": "5.0.8", "dev": true @@ -10774,12 +6730,6 @@ "version": "4.0.0", "dev": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, "yargs": { "version": "16.2.0", "dev": true, diff --git a/package.json b/package.json index 08d720761..616704c17 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ "type": "git", "url": "git+https://github.com/zelonewolf/openstreetmap-americana.git" }, + "workspaces": [ + "shieldlib" + ], "scripts": { "build:shieldlib": "cd shieldlib && node scripts/build.js", "build:code": "exec ts-node scripts/build", diff --git a/shieldlib/package.json b/shieldlib/package.json index 46cac3e27..87f894ae0 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -48,5 +48,8 @@ "dependencies": { "color-rgba": "^2.4.0", "maplibre-gl": "^2.4.0" + }, + "directories": { + "test": "test" } } From 5d3738151de95a3c109b9dd9cd3369edb4090864 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 21:01:14 -0400 Subject: [PATCH 016/444] Rounded rect shapes --- shieldlib/README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index abcb72542..d6fbc32d7 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -275,19 +275,19 @@ The supported text constraints are: If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to be specified with a drawing function, `drawFunc` and a `params` block the describes how the shape will be drawn. The draw functions are as follows: -| | `drawFunc` | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | -| ![](https://upload.wikimedia.org/wikipedia/commons/c/cf/Diamond_highway_shield_shape.svg) | `diamond` | -| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `ellipse` | -| ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Escutcheon_highway_shield_shape.svg) | `escutcheon` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Fishhead_highway_shield_shape.svg) | `fishhead` | -| ![](https://upload.wikimedia.org/wikipedia/commons/6/61/Hexagon_highway_shield_shape.svg) | `hexagonVertical` | -| ![](https://upload.wikimedia.org/wikipedia/commons/2/25/Horizontal_hexagon_shape.svg) | `hexagonHorizontal` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Octagon_shield_shape.svg) | `octagonVertical` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/ff/Pentagon_shield_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/b/b0/Black_and_white_home_plate_shape_as_used_in_highway_shields.svg) | `pentagon` | -| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `roundedRectangle` | -| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Black_and_white_downward_trapezoid_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/5/56/Black_and_white_upward_trapezoid_as_used_in_highway_shields.svg) | `trapezoid` | -| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Downward_triangle_highway_shield_shape.svg) | `triangle` | +| | `drawFunc` | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| ![](https://upload.wikimedia.org/wikipedia/commons/c/cf/Diamond_highway_shield_shape.svg) | `diamond` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `ellipse` | +| ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Escutcheon_highway_shield_shape.svg) | `escutcheon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Fishhead_highway_shield_shape.svg) | `fishhead` | +| ![](https://upload.wikimedia.org/wikipedia/commons/6/61/Hexagon_highway_shield_shape.svg) | `hexagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/2/25/Horizontal_hexagon_shape.svg) | `hexagonHorizontal` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Octagon_shield_shape.svg) | `octagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/ff/Pentagon_shield_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/b/b0/Black_and_white_home_plate_shape_as_used_in_highway_shields.svg) | `pentagon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/a/a1/Rounded_rectangle_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/1/17/Pill_shape.svg) | `roundedRectangle` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Black_and_white_downward_trapezoid_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/5/56/Black_and_white_upward_trapezoid_as_used_in_highway_shields.svg) | `trapezoid` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Downward_triangle_highway_shield_shape.svg) | `triangle` | The following `params` options can be specified: From 7866df34433d07898ed38e8a756707b86b627667 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 21:01:47 -0400 Subject: [PATCH 017/444] Version bump and publish --- shieldlib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index 87f894ae0..91a9ca0f7 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.11", + "version": "0.0.1-alpha.12", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From f82201bd18634d9fa9d1bdc09f9a12b40ae8b23b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 21:29:13 -0400 Subject: [PATCH 018/444] Update README and publish --- shieldlib/README.md | 3 ++- shieldlib/package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index d6fbc32d7..c6cc3aef2 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -291,8 +291,9 @@ If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to The following `params` options can be specified: -- `angle` - applies to several shape types, indicates the key angle in degrees. +- `angle` - indicates angle (in degrees) at which side edges deviate from vertical. Applies to `trapezoid`, `pentagon`, `hexagonHorizontal`, `octagonVertical`. - `fill` - specifies the internal fill color. +- `offset` - indicates height (in pixels) at which the bottom and/or top edges deviate from horizontal. Applies to `escutcheon`, `pentagon`, `hexagonVertical`, `octagonVertical`. - `outline` - specifies the outline color. - `outlineWidth` - specifies the width of the outline. - `pointUp` - applies to several shape types and specifies whether the pointy side is up. diff --git a/shieldlib/package.json b/shieldlib/package.json index 91a9ca0f7..27aac36fb 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.12", + "version": "0.0.1-alpha.14", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From 48a5ea9daedf644e498f26f61cc0f02ae73e4a25 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 21:40:45 -0400 Subject: [PATCH 019/444] Docs cleanup and bump version --- shieldlib/README.md | 26 +++++++++++++------------- shieldlib/package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index c6cc3aef2..7c14f1e78 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -275,19 +275,19 @@ The supported text constraints are: If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to be specified with a drawing function, `drawFunc` and a `params` block the describes how the shape will be drawn. The draw functions are as follows: -| | `drawFunc` | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | -| ![](https://upload.wikimedia.org/wikipedia/commons/c/cf/Diamond_highway_shield_shape.svg) | `diamond` | -| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `ellipse` | -| ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Escutcheon_highway_shield_shape.svg) | `escutcheon` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Fishhead_highway_shield_shape.svg) | `fishhead` | -| ![](https://upload.wikimedia.org/wikipedia/commons/6/61/Hexagon_highway_shield_shape.svg) | `hexagonVertical` | -| ![](https://upload.wikimedia.org/wikipedia/commons/2/25/Horizontal_hexagon_shape.svg) | `hexagonHorizontal` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Octagon_shield_shape.svg) | `octagonVertical` | -| ![](https://upload.wikimedia.org/wikipedia/commons/f/ff/Pentagon_shield_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/b/b0/Black_and_white_home_plate_shape_as_used_in_highway_shields.svg) | `pentagon` | -| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/a/a1/Rounded_rectangle_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/1/17/Pill_shape.svg) | `roundedRectangle` | -| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Black_and_white_downward_trapezoid_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/5/56/Black_and_white_upward_trapezoid_as_used_in_highway_shields.svg) | `trapezoid` | -| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Downward_triangle_highway_shield_shape.svg) | `triangle` | +| | `drawFunc` | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| ![](https://upload.wikimedia.org/wikipedia/commons/c/cf/Diamond_highway_shield_shape.svg) | `diamond` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg) | `ellipse` | +| ![](https://upload.wikimedia.org/wikipedia/commons/7/75/Escutcheon_highway_shield_shape.svg) | `escutcheon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Fishhead_highway_shield_shape.svg) | `fishhead` | +| ![](https://upload.wikimedia.org/wikipedia/commons/6/61/Hexagon_highway_shield_shape.svg) | `hexagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/2/25/Horizontal_hexagon_shape.svg) | `hexagonHorizontal` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/f8/Octagon_shield_shape.svg) | `octagonVertical` | +| ![](https://upload.wikimedia.org/wikipedia/commons/f/ff/Pentagon_shield_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/b/b0/Black_and_white_home_plate_shape_as_used_in_highway_shields.svg) | `pentagon` | +| ![](https://upload.wikimedia.org/wikipedia/commons/3/30/Black_and_white_circle_shape_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/archive/a/a1/20230326013519%21Rounded_rectangle_shape.svg)![](https://upload.wikimedia.org/wikipedia/commons/archive/1/17/20230326013156%21Pill_shape.svg) | `roundedRectangle` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Black_and_white_downward_trapezoid_as_used_in_highway_shields.svg)![](https://upload.wikimedia.org/wikipedia/commons/5/56/Black_and_white_upward_trapezoid_as_used_in_highway_shields.svg) | `trapezoid` | +| ![](https://upload.wikimedia.org/wikipedia/commons/a/ad/Downward_triangle_highway_shield_shape.svg) | `triangle` | The following `params` options can be specified: diff --git a/shieldlib/package.json b/shieldlib/package.json index 27aac36fb..429a808f8 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.14", + "version": "0.0.1-alpha.16", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From 589541e94c02cb9d5ba864f2deb111ad3ae9ff4c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 25 Mar 2023 23:04:52 -0400 Subject: [PATCH 020/444] Updated package-lock --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 828b530fc..0a31a2fa9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4077,7 +4077,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.1-alpha.11", + "version": "0.0.1-alpha.16", "license": "CC0-1.0", "dependencies": { "color-rgba": "^2.4.0", From 8c0aeb7cb0db19aa422f574ebd297f8b40c9661e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 26 Mar 2023 13:46:05 -0400 Subject: [PATCH 021/444] Fix and parameterize banner drawing --- shieldlib/README.md | 4 ++++ shieldlib/package.json | 2 +- shieldlib/src/shield.js | 18 +++++++++--------- shieldlib/src/shield_text.mjs | 36 ++++++++++++++++++++++++----------- shieldlib/src/types.ts | 2 ++ src/js/shield_defs.js | 2 ++ 6 files changed, 43 insertions(+), 21 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 7c14f1e78..ac5ffeb6f 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -81,6 +81,8 @@ The structure is as follows: ```json { "options": { + "bannerHeight": 9, + "bannerPadding": 1, "bannerTextColor": "black", "bannerTextHaloColor": "white", "shieldFont": "sans-serif-condensed, 'Arial Narrow', sans-serif", @@ -96,6 +98,8 @@ The structure is as follows: The options block contains global parameters that apply across all shield drawing: +- **`bannerHeight`**: height of each text banner +- **`bannerPadding`**: padding between each banner - **`bannerTextColor`**: color to draw text banners above the shield - **`bannerTextHaloColor`**: color to draw an outline around the text banner - **`shieldFont`**: font to use for shield text and banners diff --git a/shieldlib/package.json b/shieldlib/package.json index 429a808f8..fb3d9eaa5 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.16", + "version": "0.0.1-alpha.17", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index 0e8bc5d0a..d0ccaa296 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -4,9 +4,6 @@ import * as ShieldText from "./shield_text.mjs"; import * as ShieldDraw from "./shield_canvas_draw.mjs"; import * as Gfx from "./screen_gfx.js"; -//Height of modifier banners -export const bannerSizeH = 9; - function drawBannerPart(r, ctx, shieldDef, drawFunc) { if (shieldDef == null || typeof shieldDef.banners == "undefined") { return ctx; //Unadorned shield @@ -22,7 +19,9 @@ function drawBannerPart(r, ctx, shieldDef, drawFunc) { function compoundShieldSize(r, dimension, bannerCount) { return { width: dimension.width, - height: dimension.height + bannerCount * r.px(bannerSizeH), + height: + dimension.height + + bannerCount * r.px(r.options.bannerHeight + r.options.bannerPadding), }; } @@ -103,7 +102,7 @@ function getDrawFunc(shieldDef) { function drawShield(r, ctx, shieldDef, routeDef) { let bannerCount = getBannerCount(shieldDef); - let yOffset = bannerCount * r.px(bannerSizeH); + let yOffset = bannerCount * r.px(r.options.bannerHeight); //Shift canvas to draw shield below banner ctx.save(); @@ -125,7 +124,7 @@ function drawShieldText(r, ctx, shieldDef, routeDef) { var shieldBounds = null; var shieldArtwork = getRasterShieldBlank(r, shieldDef, routeDef); - let yOffset = bannerCount * r.px(bannerSizeH); + let yOffset = bannerCount * r.px(r.options.bannerHeight); if (shieldArtwork == null) { ctx.translate(0, yOffset); @@ -157,7 +156,7 @@ function drawShieldText(r, ctx, shieldDef, routeDef) { shieldBounds ); - textLayout.yBaseline += bannerCount * r.px(bannerSizeH); + textLayout.yBaseline += bannerCount * r.px(r.options.bannerHeight); if (typeof r.options.SHIELD_TEXT_HALO_COLOR_OVERRIDE !== "undefined") { ctx.strokeStyle = options.SHIELD_TEXT_HALO_COLOR_OVERRIDE; @@ -175,7 +174,8 @@ function drawShieldText(r, ctx, shieldDef, routeDef) { ctx.lineWidth = r.px(1); ctx.strokeRect( r.px(shieldDef.padding.left - 0.5), - bannerCount * r.px(bannerSizeH) + r.px(shieldDef.padding.top - 0.5), + bannerCount * r.px(r.options.bannerHeight) + + r.px(shieldDef.padding.top - 0.5), shieldBounds.width - r.px(shieldDef.padding.left + shieldDef.padding.right - 1), shieldBounds.height - @@ -345,7 +345,7 @@ export function generateShieldCtx(r, routeDef) { height = sourceSprite.data.height; } - let bannerHeight = bannerCount * r.px(bannerSizeH); + let bannerHeight = bannerCount * r.px(r.options.bannerHeight); height += bannerHeight; //Generate empty canvas sized to the graphic diff --git a/shieldlib/src/shield_text.mjs b/shieldlib/src/shield_text.mjs index 28616a824..ee8f7a1f0 100644 --- a/shieldlib/src/shield_text.mjs +++ b/shieldlib/src/shield_text.mjs @@ -1,7 +1,6 @@ "use strict"; import * as Gfx from "./screen_gfx.js"; -import * as Shield from "./shield.js"; const VerticalAlignment = { Middle: "middle", @@ -245,9 +244,17 @@ function configureShieldText(r, ctx, textLayout) { * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ export function drawBannerText(r, ctx, text, bannerIndex) { - var textLayout = layoutShieldTextFromDef(r, text, null, { + const bannerPadding = { + padding: { + top: r.options.bannerPadding, + bottom: 0, + left: 0, + right: 0, + }, + }; + var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { width: ctx.canvas.width, - height: Shield.bannerSizeH - Shield.bannerPadding, + height: r.options.bannerHeight - r.options.bannerPadding, }); ctx.fillStyle = r.options.bannerTextColor; @@ -260,8 +267,8 @@ export function drawBannerText(r, ctx, text, bannerIndex) { text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * Shield.bannerSizeH - - Shield.bannerPadding + bannerIndex * r.options.bannerHeight - + r.options.bannerPadding ); } @@ -274,13 +281,19 @@ export function drawBannerText(r, ctx, text, bannerIndex) { * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ export function drawBannerHaloText(r, ctx, text, bannerIndex) { - //FIX - var textLayout = layoutShieldTextFromDef(r, text, null, { + const bannerPadding = { + padding: { + top: r.options.bannerPadding, + bottom: 0, + left: 0, + right: 0, + }, + }; + var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { width: ctx.canvas.width, - height: Shield.bannerSizeH - Shield.bannerPadding, + height: r.options.bannerHeight - r.options.bannerPadding, }); - //TODO - pass backgroundFill as a parameter ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); ctx.textBaseline = "top"; @@ -292,9 +305,10 @@ export function drawBannerHaloText(r, ctx, text, bannerIndex) { text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * Shield.bannerSizeH - - Shield.bannerPadding + bannerIndex * r.options.bannerHeight - + r.options.bannerPadding ); + ctx.shadowColor = null; ctx.shadowBlur = null; } diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index cb5719dc2..170eef2bc 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -48,6 +48,8 @@ export interface ShieldDefinitions { export interface DebugOptions {} export interface ShieldOptions { + bannerHeight: number; + bannerPadding: number; bannerTextColor: string; bannerTextHaloColor: string; shieldFont: string; diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 21c72a0c6..6081bf470 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4256,6 +4256,8 @@ export function loadShields() { options: { bannerTextColor: Color.palette.black, bannerTextHaloColor: Color.backgroundFill, + bannerHeight: 9, + bannerPadding: 1, shieldFont: '"sans-serif-condensed", "Arial Narrow", sans-serif', shieldSize: 20, }, From 68fae03df25d8f6aa7a95d7ac73ba7af0623c6d5 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 08:02:51 -0400 Subject: [PATCH 022/444] Update shieldlib/README.md Co-authored-by: Michael <2701605+michaelblyons@users.noreply.github.com> --- shieldlib/README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index ac5ffeb6f..c4e866e9b 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -17,23 +17,23 @@ Rendering shields requires the following compoments: 1. The `ref` string, which defines a text sequence that should be drawn on top of the shield graphic 1. The `name` string, which defines a name, separate from the ref, that is used to determine which graphic to draw -```typescript -let routeParser = { - //format is `shield|${network}=${ref}|${name}` - parse: (id: string) => { - let id_parts = id.split("|"); - let network_ref = id_parts[1].split("="); - - return { - network: network_ref[0], - ref: network_ref[1], - name: id_parts[2], + ```typescript + let routeParser = { + //format is `shield|${network}=${ref}|${name}` + parse: (id: string) => { + let id_parts = id.split("|"); + let network_ref = id_parts[1].split("="); + + return { + network: network_ref[0], + ref: network_ref[1], + name: id_parts[2], + }; + }, + format: (network: string, ref: string, name: string) => + `shield|${network}=${ref}|${name}`, }; - }, - format: (network: string, ref: string, name: string) => - `shield|${network}=${ref}|${name}`, -}; -``` + ``` 4. **(Optional) Create predicates that define which shields will be handled**. For example, if all sprite IDs in your style that need a shield begin with the string `shield|`, this would look like: From b2dec923cffcedf73fbf1975380310852b76f7c4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 08:03:03 -0400 Subject: [PATCH 023/444] Update shieldlib/README.md Co-authored-by: Michael <2701605+michaelblyons@users.noreply.github.com> --- shieldlib/README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index c4e866e9b..4c90f8a37 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -53,19 +53,19 @@ let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); 6. **Hook up the shield generator to a maplibre-gl-js map**. Pass either the URL of the JSON shield definition or create an object in javascript code. There are two separate classes for each approach. -```typescript -new URLShieldRenderer("shields.json", routeParser) - .filterImageID(shieldPredicate) - .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map); -``` + ```typescript + new URLShieldRenderer("shields.json", routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); + ``` -```typescript -new ShieldRenderer(shields, routeParser) - .filterImageID(shieldPredicate) - .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map); -``` + ```typescript + new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); + ``` ## Shield Definition From d18f27965393e9d0da85367ffbcc2fb2e8d7d97d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 08:05:12 -0400 Subject: [PATCH 024/444] Prettier --- shieldlib/README.md | 61 +++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 4c90f8a37..dc23b4502 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -13,27 +13,28 @@ Rendering shields requires the following compoments: 2. **Expose shield information in a style layer**. Next, route information must be exposed in a maplibre expression using [image](https://maplibre.org/maplibre-gl-js-docs/style-spec/expressions/#types-image) in a structured string containing the route information. For example, you might encode Interstate 95 as an image named `shield|US:I=95`. Normally, the image expression is used to point to pre-designated sprites in a sprite sheet, but in this case, we're pointing to a sprite which doesn't exist called `shield|US:I=95`. This will trigger a `styleimagemissing` event which allows the shield renderer to create the required graphic on the fly. As an example of how to encode shield information, see OSM Americana's [`highway_shield`](https://github.com/ZeLonewolf/openstreetmap-americana/blob/main/src/layer/highway_shield.js) style layer. 3. **Define a parser that describes how route information is encoded**. There are three parts to a route definition: + 1. The `network` string, which defines a network with a common shield shape, graphic, and color 1. The `ref` string, which defines a text sequence that should be drawn on top of the shield graphic 1. The `name` string, which defines a name, separate from the ref, that is used to determine which graphic to draw - ```typescript - let routeParser = { - //format is `shield|${network}=${ref}|${name}` - parse: (id: string) => { - let id_parts = id.split("|"); - let network_ref = id_parts[1].split("="); - - return { - network: network_ref[0], - ref: network_ref[1], - name: id_parts[2], - }; - }, - format: (network: string, ref: string, name: string) => - `shield|${network}=${ref}|${name}`, - }; - ``` + ```typescript + let routeParser = { + //format is `shield|${network}=${ref}|${name}` + parse: (id: string) => { + let id_parts = id.split("|"); + let network_ref = id_parts[1].split("="); + + return { + network: network_ref[0], + ref: network_ref[1], + name: id_parts[2], + }; + }, + format: (network: string, ref: string, name: string) => + `shield|${network}=${ref}|${name}`, + }; + ``` 4. **(Optional) Create predicates that define which shields will be handled**. For example, if all sprite IDs in your style that need a shield begin with the string `shield|`, this would look like: @@ -53,19 +54,19 @@ let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); 6. **Hook up the shield generator to a maplibre-gl-js map**. Pass either the URL of the JSON shield definition or create an object in javascript code. There are two separate classes for each approach. - ```typescript - new URLShieldRenderer("shields.json", routeParser) - .filterImageID(shieldPredicate) - .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map); - ``` - - ```typescript - new ShieldRenderer(shields, routeParser) - .filterImageID(shieldPredicate) - .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map); - ``` + ```typescript + new URLShieldRenderer("shields.json", routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); + ``` + + ```typescript + new ShieldRenderer(shields, routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map); + ``` ## Shield Definition From 3384ae4771c13a9c56e928167102df293f35f3ba Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 09:13:57 -0400 Subject: [PATCH 025/444] Update shieldlib/README.md Co-authored-by: Michael <2701605+michaelblyons@users.noreply.github.com> --- shieldlib/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index dc23b4502..e065f6ab4 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -38,17 +38,17 @@ Rendering shields requires the following compoments: 4. **(Optional) Create predicates that define which shields will be handled**. For example, if all sprite IDs in your style that need a shield begin with the string `shield|`, this would look like: -```typescript -let shieldPredicate = (imageID: string) => imageID.startsWith("shield"); -``` + ```typescript + let shieldPredicate = (imageID: string) => imageID.startsWith("shield"); + ``` -This step can be skipped if all unhandled image IDs are shields. + This step can be skipped if all unhandled image IDs are shields. -Additionally, you can specify which networks will be handled. The example below ignores all nwn, lwn, ncn, etc network values: + Additionally, you can specify which networks will be handled. The example below ignores all `nwn`, `lwn`, `ncn`, etc. network values: -```typescript -let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); -``` + ```typescript + let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); + ``` 5. **Create shield definitions and artwork**. The shield definition is expressed as a JSON file along with a set of sprites containing any raster artwork used for the shields. It can be generated as an object or hosted as a JSON file accessible by URL. See the next section for how to create this definition. From 0dcae467101c5623b3092792907c430ddfbca4f4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 09:14:26 -0400 Subject: [PATCH 026/444] Prettier --- shieldlib/README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index e065f6ab4..a863e8f62 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -38,17 +38,18 @@ Rendering shields requires the following compoments: 4. **(Optional) Create predicates that define which shields will be handled**. For example, if all sprite IDs in your style that need a shield begin with the string `shield|`, this would look like: - ```typescript - let shieldPredicate = (imageID: string) => imageID.startsWith("shield"); - ``` + ```typescript + let shieldPredicate = (imageID: string) => imageID.startsWith("shield"); + ``` - This step can be skipped if all unhandled image IDs are shields. + This step can be skipped if all unhandled image IDs are shields. - Additionally, you can specify which networks will be handled. The example below ignores all `nwn`, `lwn`, `ncn`, etc. network values: + Additionally, you can specify which networks will be handled. The example below ignores all `nwn`, `lwn`, `ncn`, etc. network values: - ```typescript - let networkPredicate = (network: string) => !/^[lrni][chimpw]n$/.test(network); - ``` + ```typescript + let networkPredicate = (network: string) => + !/^[lrni][chimpw]n$/.test(network); + ``` 5. **Create shield definitions and artwork**. The shield definition is expressed as a JSON file along with a set of sprites containing any raster artwork used for the shields. It can be generated as an object or hosted as a JSON file accessible by URL. See the next section for how to create this definition. From d84cd5de744dc9aa366cd36af9ea5011e9545052 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 09:19:51 -0400 Subject: [PATCH 027/444] Add new constraints to README --- shieldlib/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shieldlib/README.md b/shieldlib/README.md index a863e8f62..bd41b6c26 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -272,10 +272,12 @@ Not all constraints are center-specified. For example, the `southHalfEllipse` co The supported text constraints are: +- `diamond` - `ellipse` - `rect` - `roundedRect` - `southHalfEllipse` +- `triangleDown` ### Defining drawn shield shapes From f4e6a39d6a6e2162e72b6b7eb9e387ec7411cd3c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 09:24:14 -0400 Subject: [PATCH 028/444] Fix homePlateUp --- src/js/shield_defs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index ab307ad0e..e0d282804 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -469,7 +469,7 @@ function homePlateUpShield( radius1 = radius1 ?? 2; radius2 = radius2 ?? 2; return { - canvasDrawnBlank: { + shapeBlank: { drawFunc: "pentagon", params: { pointUp: true, From 8027bc0851a7a2bb4e139685e6c024a165da0dc3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 10:57:59 -0400 Subject: [PATCH 029/444] Bump version --- shieldlib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index fb3d9eaa5..afe07a956 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.17", + "version": "0.0.1-alpha.18", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From 3437e114e07604ed355d9a874c3ed3c1b2795f18 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 11:02:59 -0400 Subject: [PATCH 030/444] Bump version --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 0a31a2fa9..4279ee3e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4077,7 +4077,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.1-alpha.16", + "version": "0.0.1-alpha.18", "license": "CC0-1.0", "dependencies": { "color-rgba": "^2.4.0", From ef3ca9acc60d075913f645d5c101bdaf657dcfe3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 4 Apr 2023 11:34:07 -0400 Subject: [PATCH 031/444] Remove redundant .gitignore entries --- .gitignore | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 11f9cd464..8448264f5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,6 @@ build .DS_Store config.js .parcel-cache -dist/ -dist-shieldjs/ -download/ -src/local.config.js -shieldlib/dist -shieldlib/node_modules -download/ +dist +download local.config.js From dab29652c9ff33da3787bf542b4832b9d8e7cbde Mon Sep 17 00:00:00 2001 From: "John A. Leuenhagen" Date: Tue, 9 May 2023 02:15:50 -0400 Subject: [PATCH 032/444] Use "NSP" as the ref for Niagara Scenic Parkway. Currently, the road is tagged as being part of the US:NY:Parkway network, due to the similarity between its shield and other green parkway shields. While there still are differences, including the first letter of each word not being emphasized, the shield should still probably be rendered the same way as others in the network. Should the road be retagged under its own network, this should be changed. --- src/js/shield_defs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 5dfc00c2c..6c64216ce 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4285,6 +4285,7 @@ export function loadShields() { "Hutchinson River Parkway": "HRP", "Korean War Veterans Parkway": "KWVP", "Mosholu Parkway": "MP", + "Niagara Scenic Parkway": "NSP", "Pelham Parkway": "PP", "Saw Mill River Parkway": "SMP", "Sprain Brook Parkway": "SBP", From 9ce977ba6df234a1353a63f6671ba1b260c9c17a Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Wed, 31 May 2023 21:55:36 -0700 Subject: [PATCH 033/444] Police icon Includes taginfo and poi.js additions --- icons/poi_police_shield.svg | 3 +++ scripts/taginfo_template.json | 8 ++++++++ src/layer/poi.js | 11 ++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 icons/poi_police_shield.svg diff --git a/icons/poi_police_shield.svg b/icons/poi_police_shield.svg new file mode 100644 index 000000000..d2507cf64 --- /dev/null +++ b/icons/poi_police_shield.svg @@ -0,0 +1,3 @@ + + + diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 6ce096d9b..088e144a0 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -455,6 +455,14 @@ "doc_url": "https://openmaptiles.org/schema/#poi", "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_health_cross.svg" }, + { + "key": "amenity", + "value": "police", + "object_types": ["node", "area"], + "description": "Police stations are marked by an icon representing a police badge.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_police_shield.svg" + }, { "key": "amenity", "value": "townhall", diff --git a/src/layer/poi.js b/src/layer/poi.js index 47437f3e2..9ccda2658 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -76,6 +76,14 @@ var iconDefs = { color: Color.poi.infrastructure, description: "Parking", }, + police: { + classes: { + police: ["police"], + }, + sprite: "poi_police_shield", + color: Color.poi.infrastructure, + description: "Police station", + }, railway_station: { classes: { railway: ["station", "halt", "subway"], @@ -170,7 +178,7 @@ export const poi = { Color.poi.transport, ["museum"], Color.poi.attraction, - ["hospital", "parking", "school", "townhall"], + ["hospital", "parking", "police", "school", "townhall"], Color.poi.infrastructure, Color.poi.infrastructure, ], @@ -189,6 +197,7 @@ export const poi = { "bus_stop", "hospital", "museum", + "police", ...getSubclasses(iconDefs.school), "townhall", "tram_stop", From 987c208de5459cf238f3b46ea7d8bfd35a22895c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 3 Jun 2023 20:59:59 -0400 Subject: [PATCH 034/444] Fix banner PXR --- shieldlib/src/shield_text.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shieldlib/src/shield_text.mjs b/shieldlib/src/shield_text.mjs index 650167092..fbbb47679 100644 --- a/shieldlib/src/shield_text.mjs +++ b/shieldlib/src/shield_text.mjs @@ -274,7 +274,7 @@ export function drawBannerText(r, ctx, text, bannerIndex) { }; var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { width: ctx.canvas.width, - height: r.options.bannerHeight - r.options.bannerPadding, + height: r.px(r.options.bannerHeight - r.options.bannerPadding), }); ctx.fillStyle = r.options.bannerTextColor; @@ -287,8 +287,8 @@ export function drawBannerText(r, ctx, text, bannerIndex) { text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * r.options.bannerHeight - - r.options.bannerPadding + bannerIndex * r.px(r.options.bannerHeight - + r.options.bannerPadding) ); } @@ -311,7 +311,7 @@ export function drawBannerHaloText(r, ctx, text, bannerIndex) { }; var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { width: ctx.canvas.width, - height: r.options.bannerHeight - r.options.bannerPadding, + height: r.px(r.options.bannerHeight - r.options.bannerPadding), }); ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; @@ -325,8 +325,8 @@ export function drawBannerHaloText(r, ctx, text, bannerIndex) { text, textLayout.xBaseline, textLayout.yBaseline + - bannerIndex * r.options.bannerHeight - - r.options.bannerPadding + bannerIndex * r.px(r.options.bannerHeight - + r.options.bannerPadding) ); ctx.shadowColor = null; From f7cbad2a905afc7ff951c9137269c82dc5c6834e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 3 Jun 2023 21:13:18 -0400 Subject: [PATCH 035/444] Consolidate banner drawing functions --- shieldlib/src/shield_text.mjs | 76 +++++++++++++++++------------------ 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/shieldlib/src/shield_text.mjs b/shieldlib/src/shield_text.mjs index fbbb47679..3eb6febaa 100644 --- a/shieldlib/src/shield_text.mjs +++ b/shieldlib/src/shield_text.mjs @@ -264,32 +264,7 @@ function configureShieldText(r, ctx, textLayout) { * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ export function drawBannerText(r, ctx, text, bannerIndex) { - const bannerPadding = { - padding: { - top: r.options.bannerPadding, - bottom: 0, - left: 0, - right: 0, - }, - }; - var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { - width: ctx.canvas.width, - height: r.px(r.options.bannerHeight - r.options.bannerPadding), - }); - - ctx.fillStyle = r.options.bannerTextColor; - - ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); - ctx.textBaseline = "top"; - ctx.textAlign = "center"; - - ctx.fillText( - text, - textLayout.xBaseline, - textLayout.yBaseline + - bannerIndex * r.px(r.options.bannerHeight - - r.options.bannerPadding) - ); + drawBannerTextComponent(r, ctx, text, bannerIndex, true); } /** @@ -301,6 +276,19 @@ export function drawBannerText(r, ctx, text, bannerIndex) { * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ export function drawBannerHaloText(r, ctx, text, bannerIndex) { + drawBannerTextComponent(r, ctx, text, bannerIndex, false); +} + +/** + * Banners are composed of two components: text on top, and a shadow beneath. + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + * @param {*} textComponent - if true, draw the text. If false, draw the halo + */ +function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { const bannerPadding = { padding: { top: r.options.bannerPadding, @@ -314,23 +302,33 @@ export function drawBannerHaloText(r, ctx, text, bannerIndex) { height: r.px(r.options.bannerHeight - r.options.bannerPadding), }); - ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); ctx.textBaseline = "top"; ctx.textAlign = "center"; - ctx.shadowBlur = 0; - ctx.lineWidth = r.px(2); - - ctx.strokeText( - text, - textLayout.xBaseline, - textLayout.yBaseline + - bannerIndex * r.px(r.options.bannerHeight - - r.options.bannerPadding) - ); - ctx.shadowColor = null; - ctx.shadowBlur = null; + if (textComponent) { + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; //HALO + ctx.fillText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + } else { + ctx.fillStyle = r.options.bannerTextColor; //TEXT + ctx.shadowBlur = 0; + ctx.lineWidth = r.px(2); + + ctx.strokeText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + + ctx.shadowColor = null; //HALO + ctx.shadowBlur = null; + } } export function calculateTextWidth(r, text, fontSize) { From 2f59656e8c9eb79cc98c4f438d09a8f2d4af981a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 4 Jun 2023 19:48:50 -0400 Subject: [PATCH 036/444] Fix transpose error in banner text draw --- shieldlib/src/shield_text.mjs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/shieldlib/src/shield_text.mjs b/shieldlib/src/shield_text.mjs index 3eb6febaa..964146c2d 100644 --- a/shieldlib/src/shield_text.mjs +++ b/shieldlib/src/shield_text.mjs @@ -307,7 +307,7 @@ function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { ctx.textAlign = "center"; if (textComponent) { - ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; //HALO + ctx.fillStyle = r.options.bannerTextColor; ctx.fillText( text, textLayout.xBaseline, @@ -315,10 +315,9 @@ function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) ); } else { - ctx.fillStyle = r.options.bannerTextColor; //TEXT + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; ctx.shadowBlur = 0; ctx.lineWidth = r.px(2); - ctx.strokeText( text, textLayout.xBaseline, @@ -326,7 +325,7 @@ function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) ); - ctx.shadowColor = null; //HALO + ctx.shadowColor = null; ctx.shadowBlur = null; } } From 3f5f068da65e1cd2d06f21ad46e85c4731a0ed23 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 4 Jun 2023 20:16:55 -0400 Subject: [PATCH 037/444] Switch to ourmap domain --- src/configs/config.aws.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configs/config.aws.js b/src/configs/config.aws.js index e92929f29..3a2b311c9 100644 --- a/src/configs/config.aws.js +++ b/src/configs/config.aws.js @@ -4,7 +4,7 @@ Planetiler tile server, hosted at AWS */ const OPENMAPTILES_URL = - "https://6ug7hetxl9.execute-api.us-east-2.amazonaws.com/data/v3.json"; + "https://tile.ourmap.us/data/v3.json"; /* The following two variables override the color of the bounding box and halo of From 942e59b9b7d5a7c6b66b9fdc9d42bc4fc9413583 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 4 Jun 2023 21:15:15 -0400 Subject: [PATCH 038/444] Format --- src/configs/config.aws.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/configs/config.aws.js b/src/configs/config.aws.js index 3a2b311c9..da8ec255b 100644 --- a/src/configs/config.aws.js +++ b/src/configs/config.aws.js @@ -3,8 +3,7 @@ /* Planetiler tile server, hosted at AWS */ -const OPENMAPTILES_URL = - "https://tile.ourmap.us/data/v3.json"; +const OPENMAPTILES_URL = "https://tile.ourmap.us/data/v3.json"; /* The following two variables override the color of the bounding box and halo of From 5f060f3dc7098cb252acc897a2e0451b852c3668 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 4 Jun 2023 21:45:51 -0400 Subject: [PATCH 039/444] Bump version --- shieldlib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index afe07a956..d8b08ceda 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.1-alpha.18", + "version": "0.0.2", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From 19ff8acf73675faacd952c10803e1d7e90c7e7e1 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 4 Jun 2023 22:05:36 -0400 Subject: [PATCH 040/444] Bump version --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 4279ee3e8..c8b4ec366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4077,7 +4077,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.1-alpha.18", + "version": "0.0.2", "license": "CC0-1.0", "dependencies": { "color-rgba": "^2.4.0", From 639706ebbb5cde248a88011d68ea73f0583136a9 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 5 Jun 2023 22:36:29 -0400 Subject: [PATCH 041/444] Fix build issues --- scripts/build.ts | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/scripts/build.ts b/scripts/build.ts index 8b64f162c..bbe6d03a4 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -75,20 +75,8 @@ const buildWith = async ( ]); }; -export const buildContext = ( - buildOptions: BuildOptions = {} -): Promise => buildWith("context", buildOptions); - export const build = ( buildOptions: BuildOptions = {} ): Promise => buildWith("build", buildOptions); -const mainModule = pathToFileURL(process.argv[1]).toString(); -const isMain = import.meta.url === mainModule; - -if (isMain) { - await build({ - // defaults to undefined, but force it to get optimized out - define: { "window.LIVE_RELOAD": "false" }, - }); -} +await build(); From 992e3096d82221240bd64903e0cebf3670ded223 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 5 Jun 2023 22:38:54 -0400 Subject: [PATCH 042/444] Fix build errors --- scripts/build.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/build.ts b/scripts/build.ts index bbe6d03a4..95823a3bb 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -75,6 +75,10 @@ const buildWith = async ( ]); }; +export const buildContext = ( + buildOptions: BuildOptions = {} +): Promise => buildWith("context", buildOptions); + export const build = ( buildOptions: BuildOptions = {} ): Promise => buildWith("build", buildOptions); From fedef287bce1b50ce2b896ea59cf83a223d98a1a Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Tue, 6 Jun 2023 12:48:48 -0700 Subject: [PATCH 043/444] Aerialway station in taginfo Adds aerialway=station to the project taginfo file --- scripts/taginfo_template.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 088e144a0..593ef945b 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -528,6 +528,14 @@ "doc_url": "https://openmaptiles.org/schema/#poi", "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_rail.svg" }, + { + "key": "aerialway", + "value": "station", + "object_types": ["node", "area"], + "description": "Aerialway stations are marked by an icon depicting an aerial tramway car.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_aerialway_circle.svg" + }, { "key": "railway", "value": "tram_stop", From 6c66866db631e712f72c14bccc7f2d893e35a0de Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 12:17:17 -0400 Subject: [PATCH 044/444] View PR preview --- .github/workflows/deploy-preview.yml | 32 ++++++++++++++++++++++++++++ .github/workflows/deploy.yml | 6 +----- 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/deploy-preview.yml diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml new file mode 100644 index 000000000..1e0a16608 --- /dev/null +++ b/.github/workflows/deploy-preview.yml @@ -0,0 +1,32 @@ +name: Deploy PR Preview +on: + pull_request: + branches: [main] +permissions: + contents: read + pages: write + id-token: write +concurrency: preview-${{ github.ref }} +jobs: + build-and-deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@v3 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + - name: Install and Build ๐Ÿ”ง + run: | + npm ci --include=dev + cp src/configs/config.aws.js src/config.js + npm run build + npm run style + - name: Deploy preview + uses: rossjrw/pr-preview-action@v1 + with: + source-dir: ./dist diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 070fe3877..be4438d6c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -9,6 +9,7 @@ permissions: contents: read pages: write id-token: write +concurrency: preview-${{ github.ref }} jobs: build-and-deploy: runs-on: ubuntu-latest @@ -22,11 +23,6 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18.x - - name: Build Shield Library ๐Ÿ›ก๏ธ - run: | - cd shieldlib - npm ci --include=dev - npm run build - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev From f9e9e782b975608906f8390a1fcd544cb5d2068f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 12:32:10 -0400 Subject: [PATCH 045/444] Fix deploy permissions --- .github/workflows/deploy-preview.yml | 2 +- .github/workflows/deploy.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 1e0a16608..77583a8c1 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -5,7 +5,7 @@ on: permissions: contents: read pages: write - id-token: write + pull-requests: write concurrency: preview-${{ github.ref }} jobs: build-and-deploy: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index be4438d6c..04a9fc55c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,7 +8,6 @@ on: permissions: contents: read pages: write - id-token: write concurrency: preview-${{ github.ref }} jobs: build-and-deploy: From 15a8a7d787b0ecc739d871c204f84affaf597381 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 12:39:43 -0400 Subject: [PATCH 046/444] Fix params and buid order --- .github/workflows/deploy-preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 77583a8c1..3f819dd5a 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -23,10 +23,10 @@ jobs: - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev - cp src/configs/config.aws.js src/config.js npm run build npm run style + cp src/configs/config.aws.js src/config.js - name: Deploy preview uses: rossjrw/pr-preview-action@v1 with: - source-dir: ./dist + source-dir: dist From 7de86345e513fd89e68fa901d3f67698e541f343 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 13:02:47 -0400 Subject: [PATCH 047/444] Make mine like the example --- .github/workflows/deploy-preview.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 3f819dd5a..9d4265c7c 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -2,17 +2,19 @@ name: Deploy PR Preview on: pull_request: branches: [main] + types: + - opened + - reopened + - synchronize + - closed permissions: contents: read pages: write pull-requests: write concurrency: preview-${{ github.ref }} jobs: - build-and-deploy: + deploy-preview: runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 @@ -29,4 +31,4 @@ jobs: - name: Deploy preview uses: rossjrw/pr-preview-action@v1 with: - source-dir: dist + source-dir: ./dist/ From f212c96ff6751cb3fcd1a552c408d8051bbe6139 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 18:41:53 -0400 Subject: [PATCH 048/444] Update FTP deploy --- .github/workflows/deploy-preview.yml | 11 ++++++++--- .github/workflows/deploy.yml | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 9d4265c7c..2b149ac47 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -11,6 +11,7 @@ permissions: contents: read pages: write pull-requests: write + id-token: write concurrency: preview-${{ github.ref }} jobs: deploy-preview: @@ -28,7 +29,11 @@ jobs: npm run build npm run style cp src/configs/config.aws.js src/config.js - - name: Deploy preview - uses: rossjrw/pr-preview-action@v1 + - name: Deploy via FTP + uses: genietim/ftp-action@releases/v4 with: - source-dir: ./dist/ + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + localDir: dist/ + remoteDir: pr/${{ steps.pr.outputs.pull_request_number }}/ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 04a9fc55c..2cadb66c1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,6 +8,7 @@ on: permissions: contents: read pages: write + id-token: write concurrency: preview-${{ github.ref }} jobs: build-and-deploy: From ec362ad9173325c173f6eec876c2cf1cc8e49897 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 18:43:15 -0400 Subject: [PATCH 049/444] Prettier --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2cadb66c1..be4438d6c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,7 +8,7 @@ on: permissions: contents: read pages: write - id-token: write + id-token: write concurrency: preview-${{ github.ref }} jobs: build-and-deploy: From e4dab3281c16913f9370417a12fbadac8f1c126d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 18:46:36 -0400 Subject: [PATCH 050/444] Fix package nomenclature --- .github/workflows/deploy-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 2b149ac47..ace267e00 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -30,7 +30,7 @@ jobs: npm run style cp src/configs/config.aws.js src/config.js - name: Deploy via FTP - uses: genietim/ftp-action@releases/v4 + uses: genietim/ftp-action@v4 with: host: ${{ secrets.FTP_SERVER }} user: ${{ secrets.FTP_USERNAME }} From 3aacd33da6dfd8bbf87abddf8194a1fff7b260fb Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 18:48:03 -0400 Subject: [PATCH 051/444] Fix version --- .github/workflows/deploy-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index ace267e00..0aef2184f 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -30,7 +30,7 @@ jobs: npm run style cp src/configs/config.aws.js src/config.js - name: Deploy via FTP - uses: genietim/ftp-action@v4 + uses: GenieTim/ftp-action@v4.0.1 with: host: ${{ secrets.FTP_SERVER }} user: ${{ secrets.FTP_USERNAME }} From 7a6a75c32b3c628826727a157b4cc61b675e26ee Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 18:59:00 -0400 Subject: [PATCH 052/444] Try different action --- .github/workflows/deploy-preview.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 0aef2184f..99d0efc48 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -30,10 +30,10 @@ jobs: npm run style cp src/configs/config.aws.js src/config.js - name: Deploy via FTP - uses: GenieTim/ftp-action@v4.0.1 + uses: SamKirkland/FTP-Deploy-Action@v4.3.4 with: - host: ${{ secrets.FTP_SERVER }} - user: ${{ secrets.FTP_USERNAME }} + server: ${{ secrets.FTP_SERVER }} + username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} - localDir: dist/ - remoteDir: pr/${{ steps.pr.outputs.pull_request_number }}/ + local-dir: dist/ + server-dir: pr/${{ steps.pr.outputs.pull_request_number }}/ From 27ae39e031d6118d4e0f0fc036a43e0631725095 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 19:09:34 -0400 Subject: [PATCH 053/444] Add PR number to path --- .github/workflows/deploy-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 99d0efc48..6ec7affb5 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -36,4 +36,4 @@ jobs: username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} local-dir: dist/ - server-dir: pr/${{ steps.pr.outputs.pull_request_number }}/ + server-dir: pr/${{ github.event.pull_request.number }}/ From 660aec1917690fb77436728d83daf69933d36ed0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 19:23:42 -0400 Subject: [PATCH 054/444] Cleanup FTP --- .github/workflows/deploy.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index be4438d6c..4da609a41 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,6 +11,16 @@ permissions: id-token: write concurrency: preview-${{ github.ref }} jobs: + cleanup-preview: + runs-on: ubuntu-latest + steps: + - name: ftp-delete-action + uses: StephanThierry/ftp-delete-action@v2.1 + with: + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + remoteDirectories: pr/${{ github.event.pull_request.number }}/ build-and-deploy: runs-on: ubuntu-latest environment: From 7efadab4da7e121fcb198a6ea97c3c18312643f5 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 19:39:53 -0400 Subject: [PATCH 055/444] Remove big unused fonts --- .github/workflows/deploy-preview.yml | 12 ++++++++++++ scripts/fonts.json | 8 +------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 6ec7affb5..b9c80b40f 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -37,3 +37,15 @@ jobs: password: ${{ secrets.FTP_PASSWORD }} local-dir: dist/ server-dir: pr/${{ github.event.pull_request.number }}/ + - name: Comment Pull Request + uses: thollander/actions-comment-pull-request@v2.3.1 + with: + message: | + PR Preview: + * [Map](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/) + * [Shield Test](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) + * [Sprites 1x](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) + * [Sprites 2x](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) + * [style.json](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) + * [taginfo.json](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) + comment_tag: pr_preview diff --git a/scripts/fonts.json b/scripts/fonts.json index a0e89ef2f..981a5c437 100644 --- a/scripts/fonts.json +++ b/scripts/fonts.json @@ -31,13 +31,7 @@ "Noto Sans Telugu": ["regular", "700"], "Noto Sans Thai": ["regular", "700"] }, - "bundle-font-stacks": { - "Noto Sans HK": ["regular", "700"], - "Noto Sans JP": ["regular", "700"], - "Noto Sans KR": ["regular", "700"], - "Noto Sans SC": ["regular", "700"], - "Noto Sans TC": ["regular", "700"] - }, + "bundle-font-stacks": {}, "glyph-ranges": { "arabic": [ [1536, 1791], From 04992d51bcaa62045f89364caaf521843c99a564 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 20:01:26 -0400 Subject: [PATCH 056/444] Update preview URL --- .github/workflows/deploy-preview.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index b9c80b40f..a0c93127f 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -6,7 +6,6 @@ on: - opened - reopened - synchronize - - closed permissions: contents: read pages: write @@ -29,6 +28,13 @@ jobs: npm run build npm run style cp src/configs/config.aws.js src/config.js + - name: ftp-delete-action + uses: StephanThierry/ftp-delete-action@v2.1 + with: + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + remoteDirectories: pr/${{ github.event.pull_request.number }}/ - name: Deploy via FTP uses: SamKirkland/FTP-Deploy-Action@v4.3.4 with: @@ -42,10 +48,10 @@ jobs: with: message: | PR Preview: - * [Map](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/) - * [Shield Test](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) - * [Sprites 1x](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) - * [Sprites 2x](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) - * [style.json](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) - * [taginfo.json](https://tile.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) + * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) + * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) + * [Sprites 1x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) + * [Sprites 2x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) + * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) + * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) comment_tag: pr_preview From cde05b700b0200923f64c39d44876c9675d9b458 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 20:04:23 -0400 Subject: [PATCH 057/444] Improve comment text --- .github/workflows/deploy-preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index a0c93127f..d08bc6864 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -50,8 +50,8 @@ jobs: PR Preview: * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) - * [Sprites 1x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) - * [Sprites 2x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) + * ![Sprites 1x][https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png] + * ![Sprites 2x][https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png] comment_tag: pr_preview From ec7440fc5f9eb61cffaa5820b11c7a6d8a7d97e3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 20:11:08 -0400 Subject: [PATCH 058/444] Improve CI labels --- .github/workflows/deploy-preview.yml | 2 +- .github/workflows/deploy.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index d08bc6864..28beb816a 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -28,7 +28,7 @@ jobs: npm run build npm run style cp src/configs/config.aws.js src/config.js - - name: ftp-delete-action + - name: Remove prior FTP preview uses: StephanThierry/ftp-delete-action@v2.1 with: host: ${{ secrets.FTP_SERVER }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4da609a41..98338e5a0 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -14,7 +14,7 @@ jobs: cleanup-preview: runs-on: ubuntu-latest steps: - - name: ftp-delete-action + - name: Remove prior FTP preview uses: StephanThierry/ftp-delete-action@v2.1 with: host: ${{ secrets.FTP_SERVER }} From 815ff8dce266351400755977b50d577cac44cd3a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 20:16:21 -0400 Subject: [PATCH 059/444] Clean folder --- .github/workflows/deploy-preview.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 28beb816a..5209ee807 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -43,6 +43,7 @@ jobs: password: ${{ secrets.FTP_PASSWORD }} local-dir: dist/ server-dir: pr/${{ github.event.pull_request.number }}/ + dangerous-clean-slate: true - name: Comment Pull Request uses: thollander/actions-comment-pull-request@v2.3.1 with: From 43b67da8b893a9bae43c649cef6a62c63e265354 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 22:27:19 -0400 Subject: [PATCH 060/444] Fix broken images --- .github/workflows/deploy-preview.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 5209ee807..c856569e4 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -53,6 +53,7 @@ jobs: * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) - * ![Sprites 1x][https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png] - * ![Sprites 2x][https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png] + Sprite Sheets: + ![Sprites 1x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) + ![Sprites 2x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) comment_tag: pr_preview From 0572953e2af1291b011c0874279692f2dcbc0e1e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 8 Jun 2023 22:44:52 -0400 Subject: [PATCH 061/444] Add line breaks --- .github/workflows/deploy-preview.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index c856569e4..11da911ff 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -53,7 +53,9 @@ jobs: * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) + Sprite Sheets: + ![Sprites 1x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) ![Sprites 2x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) comment_tag: pr_preview From e94d24ad276d933474748f90fde5eeb767b3d69b Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Sat, 10 Jun 2023 08:58:19 -0700 Subject: [PATCH 062/444] College mortarboard POI Adds mortarboard icon, POI.js entries, and taginfo update --- icons/poi_college.svg | 3 +++ scripts/taginfo_template.json | 8 ++++---- src/layer/poi.js | 13 ++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 icons/poi_college.svg diff --git a/icons/poi_college.svg b/icons/poi_college.svg new file mode 100644 index 000000000..f4aafa8ee --- /dev/null +++ b/icons/poi_college.svg @@ -0,0 +1,3 @@ + + + diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 088e144a0..b88dfe3b0 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -403,17 +403,17 @@ "key": "amenity", "value": "college", "object_types": ["node", "area"], - "description": "Schools are marked by an icon representing a schoolhouse with a triangular flag raised above it.", + "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_school.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" }, { "key": "amenity", "value": "university", "object_types": ["node", "area"], - "description": "Schools are marked by an icon representing a schoolhouse with a triangular flag raised above it.", + "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_school.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" }, { "key": "amenity", diff --git a/src/layer/poi.js b/src/layer/poi.js index 9ccda2658..4d0a7b8c0 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -103,12 +103,19 @@ var iconDefs = { school: { classes: { school: ["kindergarten", "school"], - college: ["college", "university"], }, sprite: "poi_school", color: Color.poi.infrastructure, description: "School", }, + college: { + classes: { + college: ["college", "university"], + }, + sprite: "poi_college", + color: Color.poi.infrastructure, + description: "College or university", + }, townhall: { classes: { town_hall: ["townhall"], @@ -178,7 +185,7 @@ export const poi = { Color.poi.transport, ["museum"], Color.poi.attraction, - ["hospital", "parking", "police", "school", "townhall"], + ["hospital", "parking", "police", "school", "college", "townhall"], Color.poi.infrastructure, Color.poi.infrastructure, ], @@ -191,7 +198,7 @@ export const poi = { ["get", "subclass"], ["station", "halt"], 12, - ["bus_station", "subway"], + ["bus_station", "subway", ...getSubclasses(iconDefs.college)], 14, [ "bus_stop", From f53ff0a8b80e1628115386776952e1328d7b38aa Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Sat, 10 Jun 2023 09:15:37 -0700 Subject: [PATCH 063/444] Add halo --- icons/poi_college.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icons/poi_college.svg b/icons/poi_college.svg index f4aafa8ee..3ff591076 100644 --- a/icons/poi_college.svg +++ b/icons/poi_college.svg @@ -1,3 +1,3 @@ - + From 87d28ce578737445f4fb397b9c16ac0f1d377379 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 10 Jun 2023 19:01:24 -0400 Subject: [PATCH 064/444] Fix legend hookup --- shieldlib/src/shield_renderer.ts | 19 +++++++ src/americana.js | 96 +++++++++++++++++--------------- src/js/legend_control.js | 9 ++- 3 files changed, 76 insertions(+), 48 deletions(-) diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 42b0452ac..1f421dc3a 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -61,6 +61,7 @@ class AbstractShieldRenderer { private _networkPredicate: StringPredicate = () => true; private _routeParser: RouteParser; private _renderContext: ShieldRenderingContext; + private _shieldDefCallbacks = []; constructor(routeParser: RouteParser) { this._routeParser = routeParser; @@ -71,6 +72,13 @@ class AbstractShieldRenderer { protected setShields(shieldSpec: ShieldSpecification) { this._renderContext.options = shieldSpec.options; this._renderContext.shieldDef = shieldSpec.networks; + this._shieldDefCallbacks.forEach((callback) => + callback(shieldSpec.networks) + ); + } + + public getShieldDefinitions(): ShieldDefinitions { + return this._renderContext.shieldDef; } public debugOptions(debugOptions: DebugOptions): AbstractShieldRenderer { @@ -103,6 +111,17 @@ class AbstractShieldRenderer { return this; } + public onShieldDefLoad( + callback: (shields: ShieldDefinitions) => void + ): AbstractShieldRenderer { + if (this._renderContext.shieldDef) { + callback(this._renderContext.shieldDef); + } else { + this._shieldDefCallbacks.push(callback); + } + return this; + } + public renderOnRepository(repo: SpriteRepository): AbstractShieldRenderer { if (!this._renderContext.spriteRepo) { this._renderContext.spriteRepo = repo; diff --git a/src/americana.js b/src/americana.js index cd52c7cc0..0bbff2f9f 100644 --- a/src/americana.js +++ b/src/americana.js @@ -68,10 +68,60 @@ if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; } +// Add our sample data. +let sampleControl = new SampleControl({ permalinks: true }); +OpenMapTilesSamples.forEach((sample, i) => { + sampleControl.addSample(sample); +}); + +let legendControl; + const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) .filterImageID(shieldPredicate) .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map); + .renderOnMaplibreGL(map) + .onShieldDefLoad((shields) => shieldDefLoad(shields)); + +function shieldDefLoad(shields) { + + legendControl = new LegendControl(shields); + legendControl.sections = LegendConfig.sections; + map.addControl(legendControl, "bottom-left"); + map.addControl(sampleControl, "bottom-left"); + + map.getCanvas().focus(); + + map.addControl(new maplibregl.AttributionControl(attributionConfig)); + map.addControl(languageLabel.label, "bottom-right"); + + map.addControl(new search.PhotonSearchControl(), "top-left"); + map.addControl(new maplibregl.NavigationControl(), "top-left"); + + window.addEventListener("languagechange", (event) => { + console.log(`Changed to ${navigator.languages}`); + hotReloadMap(); + updateLanguageLabel(); + }); + + window.addEventListener("hashchange", (event) => { + upgradeLegacyHash(); + let oldLanguage = Label.getLanguageFromURL(new URL(event.oldURL)); + let newLanguage = Label.getLanguageFromURL(new URL(event.newURL)); + if (oldLanguage !== newLanguage) { + console.log(`Changed to ${newLanguage}`); + hotReloadMap(); + updateLanguageLabel(); + } + }); + + updateLanguageLabel(); + + if (window.LIVE_RELOAD) { + new EventSource("/esbuild").addEventListener("change", () => + location.reload() + ); + } +} map.on("styleimagemissing", function (e) { switch (e.id.split("\n")[0]) { @@ -95,25 +145,6 @@ export function updateLanguageLabel() { legendControl.onLanguageChange(); } -let legendControl = new LegendControl(); -legendControl.sections = LegendConfig.sections; -window.addEventListener("languagechange", (event) => { - console.log(`Changed to ${navigator.languages}`); - hotReloadMap(); - updateLanguageLabel(); -}); - -window.addEventListener("hashchange", (event) => { - upgradeLegacyHash(); - let oldLanguage = Label.getLanguageFromURL(new URL(event.oldURL)); - let newLanguage = Label.getLanguageFromURL(new URL(event.newURL)); - if (oldLanguage !== newLanguage) { - console.log(`Changed to ${newLanguage}`); - hotReloadMap(); - updateLanguageLabel(); - } -}); - let attributionConfig = { customAttribution: "", }; @@ -124,32 +155,7 @@ if (config.ATTRIBUTION_TEXT != undefined) { }; } -map.addControl(new maplibregl.AttributionControl(attributionConfig)); -map.addControl(languageLabel.label, "bottom-right"); - if (config.ATTRIBUTION_LOGO != undefined) { document.getElementById("attribution-logo").innerHTML = config.ATTRIBUTION_LOGO; } - -map.addControl(new search.PhotonSearchControl(), "top-left"); -map.addControl(new maplibregl.NavigationControl(), "top-left"); - -map.addControl(legendControl, "bottom-left"); - -// Add our sample data. -let sampleControl = new SampleControl({ permalinks: true }); -OpenMapTilesSamples.forEach((sample, i) => { - sampleControl.addSample(sample); -}); -map.addControl(sampleControl, "bottom-left"); - -map.getCanvas().focus(); - -updateLanguageLabel(); - -if (window.LIVE_RELOAD) { - new EventSource("/esbuild").addEventListener("change", () => - location.reload() - ); -} diff --git a/src/js/legend_control.js b/src/js/legend_control.js index a380265bd..3ff1905a1 100644 --- a/src/js/legend_control.js +++ b/src/js/legend_control.js @@ -2,7 +2,6 @@ import { getDOMPixelRatio } from "@americana/maplibre-shield-generator"; import * as Label from "../constants/label.js"; -import * as ShieldDef from "./shield_defs.js"; import * as HighwayShieldLayers from "../layer/highway_shield.js"; @@ -20,6 +19,10 @@ function toSentenceCase(lowerCase, locale) { } export default class LegendControl { + constructor(shieldDefs) { + this._shieldDefs = shieldDefs; + } + onAdd(map) { this._map = map; @@ -467,7 +470,7 @@ export default class LegendControl { } let networkImages = imagesByNetwork[image.network]; - let shieldDef = ShieldDef.shields[image.network]; + let shieldDef = this._shieldDefs[image.network]; if (image.ref && shieldDef?.overrideByRef?.[image.ref]) { // Store a different image for each override in the shield definition. if (!networkImages.overridesByRef[image.ref]) { @@ -505,7 +508,7 @@ export default class LegendControl { // order as in the shield definitions, appending all the unrecognized // networks sorted in alphabetical order. let networks = [ - ...Object.keys(ShieldDef.shields), + ...Object.keys(this._shieldDefs), ...[...unrecognizedNetworks.values()].sort(), ]; let countries = new Set(); From 99ae210cfe55f60bd8bd446ef5114cbdc1a46663 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 10 Jun 2023 19:10:28 -0400 Subject: [PATCH 065/444] Prettier --- src/americana.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/americana.js b/src/americana.js index 0bbff2f9f..b4d7188b7 100644 --- a/src/americana.js +++ b/src/americana.js @@ -83,7 +83,6 @@ const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) .onShieldDefLoad((shields) => shieldDefLoad(shields)); function shieldDefLoad(shields) { - legendControl = new LegendControl(shields); legendControl.sections = LegendConfig.sections; map.addControl(legendControl, "bottom-left"); From 833ed4791dd5e5e0334ccde592966a914b8a9e29 Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:04:10 -0700 Subject: [PATCH 066/444] Update scripts/taginfo_template.json Typo in taginfo path Co-authored-by: Drew M Johnson --- scripts/taginfo_template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index b88dfe3b0..331ba342a 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -405,7 +405,7 @@ "object_types": ["node", "area"], "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_college.svg" }, { "key": "amenity", From f9e23abfae108f832e38296e4b2fd51a912bec59 Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:04:58 -0700 Subject: [PATCH 067/444] Update scripts/taginfo_template.json Co-authored-by: Drew M Johnson --- scripts/taginfo_template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 331ba342a..1165744b1 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -413,7 +413,7 @@ "object_types": ["node", "area"], "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_college.svg" }, { "key": "amenity", From ba5ae764606319b3519ba00b5e338b97e80cdf93 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 19:45:23 -0400 Subject: [PATCH 068/444] Add tile usage policy --- README.md | 4 ++++ TILE_USAGE.md | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 TILE_USAGE.md diff --git a/README.md b/README.md index b551ae403..41e0622c5 100644 --- a/README.md +++ b/README.md @@ -68,3 +68,7 @@ Americana displays custom route shields for routes in all U.S. states and territ Countries We are hoping that it will support more countries; you can [help us](https://github.com/ZeLonewolf/openstreetmap-americana/projects/1)! + +## Tile Server + +Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us). It is available for use by other hobbyist and community projects. See also the [tile server usage policy](TILE_USAGE.md). diff --git a/TILE_USAGE.md b/TILE_USAGE.md new file mode 100644 index 000000000..1cd437ab8 --- /dev/null +++ b/TILE_USAGE.md @@ -0,0 +1,41 @@ +# Tile Usage Policy + +Tile Usage Policy for OpenStreetMap Americana Community Vector Tile Server + +**Effective Date: June 12, 2023** + +Thank you for using the OpenStreetMap Americana [Community Vector Tile Server](https://tile.ourmap.us) (referred to as "the Server"). By accessing and using the tiles provided by the Server, you agree to comply with the following Tile Usage Policy: + +1. Purpose: + The Server aims to support hobbyists, small community groups, and individuals who require vector tiles for their projects or development of custom map styles. The Server is a community resource provided at no cost, but limitations may apply based on server capacity and financial constraints. + +2. Attribution: + When using tiles from the Server, you must provide proper attribution to OpenStreetMap and OpenMapTiles as required by their respective attribution policies. + +3. Personal and Non-Commercial Use: + The Server is primarily intended for personal, non-commercial use. You are welcome to use the tiles for personal or community projects, educational purposes, or non-profit initiatives that do not generate revenue. There are several [guides](https://www.openstreetmap.org/user/ZeLonewolf/diary/401697) available for commercial users that desire to run a vector tile server at low cost. + +4. Domain Whitelisting: + Tile usage from localhost and \*.github.io is permitted, which are common ways that most developers will access the tile server when starting a new project. If you wish to use the tiles under your own domain name, please contact the Americana team on [Slack](https://osmus.slack.com/archives/C01V02K52UX) (preferred) or [GitHub](https://github.com/ZeLonewolf/openstreetmap-americana) and provide your domain name(s) in order to add your domain to the CORS (Cross-Origin Resource Sharing) white list. This will allow you to fetch tiles directly from your domain. This whitelist is subject to the discretion and may be modified or removed at any time, however, permission is routinely given for community and hobby projects. + +5. Usage Limits: + To ensure fair usage and prevent abuse, the Server may enforce limits on tile requests for individual users or domains. If your usage exceeds reasonable levels or begins to strain the server's resources, the administrator reserves the right to restrict or terminate access to the Server. Users whose usage becomes excessive may be requested to set up their own tile server. + +6. Financial Considerations: + The Server is operated on a limited budget and funded out of pocket by the administrator. While it strives to be freely accessible, financial constraints may necessitate restrictions on usage. If the costs associated with providing tiles become prohibitive, the administrator may need to limit or suspend service temporarily or permanently. Users who can afford to host their own tile server are encouraged to do so. + +7. No Guarantees: + The Server is provided on an "as-is" basis, and no guarantees or warranties are offered regarding its availability, performance, or accuracy of the tiles. The administrator will make reasonable efforts to maintain the service, but interruptions or downtime may occur due to various factors beyond their control. + +8. Modifications and Termination: + The administrator reserves the right to modify or terminate the Server or this Tile Usage Policy at any time without prior notice. The administrator may also modify or update the CORS white list as needed. + +9. Compliance with OpenStreetMap Guidelines: + All users of the Server are expected to comply with the OpenStreetMap licensing terms, guidelines, and community norms. Additionally, the OpenStreetMap Americana project has adopted the OpenStreetMap US Code of Conduct, which applies where applicable. Any violation of these terms may result in the immediate termination of access to the Server. + +10. Feedback and Support: + The administrator appreciates feedback, bug reports, and suggestions to improve the Server via [Slack](https://osmus.slack.com/archives/C01V02K52UX) or [GitHub]. However, support resources may be limited. Users are encouraged to seek assistance from the OpenStreetMap community or other relevant forums for additional support. + +By using the tiles provided by the OpenStreetMap Americana Community Vector Tile Server, you acknowledge and agree to the terms outlined in this Tile Usage Policy. Failure to comply with these terms may result in the revocation of access to the Server. + +Please note that this Tile Usage Policy is subject to change at any time and for any reason. From 0338f949284b83c1571d8d903db69053e407a585 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 20:03:42 -0400 Subject: [PATCH 069/444] Prettier --- TILE_USAGE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TILE_USAGE.md b/TILE_USAGE.md index 1cd437ab8..e3b33944d 100644 --- a/TILE_USAGE.md +++ b/TILE_USAGE.md @@ -7,7 +7,7 @@ Tile Usage Policy for OpenStreetMap Americana Community Vector Tile Server Thank you for using the OpenStreetMap Americana [Community Vector Tile Server](https://tile.ourmap.us) (referred to as "the Server"). By accessing and using the tiles provided by the Server, you agree to comply with the following Tile Usage Policy: 1. Purpose: - The Server aims to support hobbyists, small community groups, and individuals who require vector tiles for their projects or development of custom map styles. The Server is a community resource provided at no cost, but limitations may apply based on server capacity and financial constraints. + The Server aims to support hobbyists, small community groups, and individuals who require vector tiles for their projects or development of custom map styles. The Server is a community resource provided at no cost, but limitations may apply based on server capacity and financial constraints. 2. Attribution: When using tiles from the Server, you must provide proper attribution to OpenStreetMap and OpenMapTiles as required by their respective attribution policies. From 729360878989f237f255464ed705ea5724a67b01 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 20:46:10 -0400 Subject: [PATCH 070/444] Update TILE_USAGE.md Co-authored-by: Ariel Kadouri --- TILE_USAGE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TILE_USAGE.md b/TILE_USAGE.md index e3b33944d..0891d7bab 100644 --- a/TILE_USAGE.md +++ b/TILE_USAGE.md @@ -10,7 +10,7 @@ Thank you for using the OpenStreetMap Americana [Community Vector Tile Server](h The Server aims to support hobbyists, small community groups, and individuals who require vector tiles for their projects or development of custom map styles. The Server is a community resource provided at no cost, but limitations may apply based on server capacity and financial constraints. 2. Attribution: - When using tiles from the Server, you must provide proper attribution to OpenStreetMap and OpenMapTiles as required by their respective attribution policies. + When using tiles from the Server, you must provide proper attribution to [OpenStreetMap](https://wiki.osmfoundation.org/wiki/Licence/Attribution_Guidelines#OpenStreetMap_Attribution_Guideline) and [OpenMapTiles](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md) as required by their respective attribution policies. 3. Personal and Non-Commercial Use: The Server is primarily intended for personal, non-commercial use. You are welcome to use the tiles for personal or community projects, educational purposes, or non-profit initiatives that do not generate revenue. There are several [guides](https://www.openstreetmap.org/user/ZeLonewolf/diary/401697) available for commercial users that desire to run a vector tile server at low cost. From ca102f17b3e71106eb86ea7f926152ff7f595c76 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 20:48:26 -0400 Subject: [PATCH 071/444] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 41e0622c5..94a7889d4 100644 --- a/README.md +++ b/README.md @@ -71,4 +71,4 @@ We are hoping that it will support more countries; you can [help us](https://git ## Tile Server -Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us). It is available for use by other hobbyist and community projects. See also the [tile server usage policy](TILE_USAGE.md). +Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us). It is available for use by other hobbyist and community projects. See also the [tile server usage policy](TILE_USAGE.md). The usage policy describes the allowable usage of the tiles, irrespective of use of the style or application being developed in this repository. From 2b3ae8761bd38e9d531914ef9932d74a8449ad8a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 20:51:15 -0400 Subject: [PATCH 072/444] Update TILE_USAGE.md --- TILE_USAGE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TILE_USAGE.md b/TILE_USAGE.md index 0891d7bab..6b818ca57 100644 --- a/TILE_USAGE.md +++ b/TILE_USAGE.md @@ -13,7 +13,7 @@ Thank you for using the OpenStreetMap Americana [Community Vector Tile Server](h When using tiles from the Server, you must provide proper attribution to [OpenStreetMap](https://wiki.osmfoundation.org/wiki/Licence/Attribution_Guidelines#OpenStreetMap_Attribution_Guideline) and [OpenMapTiles](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md) as required by their respective attribution policies. 3. Personal and Non-Commercial Use: - The Server is primarily intended for personal, non-commercial use. You are welcome to use the tiles for personal or community projects, educational purposes, or non-profit initiatives that do not generate revenue. There are several [guides](https://www.openstreetmap.org/user/ZeLonewolf/diary/401697) available for commercial users that desire to run a vector tile server at low cost. + The Server is primarily intended for personal, non-commercial use. You are welcome to use the tiles for personal or community projects, educational purposes, or non-profit initiatives that do not generate revenue. There are several [guides](https://www.openstreetmap.org/user/ZeLonewolf/diary/401697) available for commercial users that desire to run a vector tile server at low cost. Note that this policy only applies to the tile server usage. Anyone is free to use the OSM Americana on their own tile server, even for a commercial endeavor. 4. Domain Whitelisting: Tile usage from localhost and \*.github.io is permitted, which are common ways that most developers will access the tile server when starting a new project. If you wish to use the tiles under your own domain name, please contact the Americana team on [Slack](https://osmus.slack.com/archives/C01V02K52UX) (preferred) or [GitHub](https://github.com/ZeLonewolf/openstreetmap-americana) and provide your domain name(s) in order to add your domain to the CORS (Cross-Origin Resource Sharing) white list. This will allow you to fetch tiles directly from your domain. This whitelist is subject to the discretion and may be modified or removed at any time, however, permission is routinely given for community and hobby projects. From d57b3d1e43c7412231fa543afce522caeb4a8689 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 20:53:59 -0400 Subject: [PATCH 073/444] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94a7889d4..afb8600de 100644 --- a/README.md +++ b/README.md @@ -71,4 +71,4 @@ We are hoping that it will support more countries; you can [help us](https://git ## Tile Server -Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us). It is available for use by other hobbyist and community projects. See also the [tile server usage policy](TILE_USAGE.md). The usage policy describes the allowable usage of the tiles, irrespective of use of the style or application being developed in this repository. +While the source code in this repository remains dedicated to the public domain under a CC0 waiver, Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us) to run the live map. This server is available for use by other hobbyist and community projects with constraints. See the [tile server usage policy](TILE_USAGE.md) for more details. This usage policy describes the allowable usage of the tiles for other projects, separate from this style or the application being developed in this repository. From 705de0bcd361abdac363666272f8d54fa93ae63d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 21:11:44 -0400 Subject: [PATCH 074/444] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Minh Nguyแป…n --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index afb8600de..60dbaef55 100644 --- a/README.md +++ b/README.md @@ -71,4 +71,4 @@ We are hoping that it will support more countries; you can [help us](https://git ## Tile Server -While the source code in this repository remains dedicated to the public domain under a CC0 waiver, Americana's GitHub map uses a privately-donated community [tile server](https://tile.ourmap.us) to run the live map. This server is available for use by other hobbyist and community projects with constraints. See the [tile server usage policy](TILE_USAGE.md) for more details. This usage policy describes the allowable usage of the tiles for other projects, separate from this style or the application being developed in this repository. +Although the source code in this repository is dedicated to the public domain under a CC0 waiver, it is configured by default to load map tiles from a privately-donated community [tile server](https://tile.ourmap.us). This server is available for use by other hobbyist and community projects with constraints. See the [tile server usage policy](TILE_USAGE.md) for more details. This usage policy describes the allowable usage of the tiles for other projects, separate from this style or the application being developed in this repository. From eb1c75c8255120aab707a2b7adfd565de4edf181 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 12 Jun 2023 21:17:11 -0400 Subject: [PATCH 075/444] Link to options for running a tile server --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 741ba9918..fedb229cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -127,6 +127,10 @@ server which is beyond the scope of this guide. [20]: https://cloud.maptiler.com/maps/ [21]: https://openmaptiles.org/schema/ +### Running your own tile server + +For production usages, consider running your own tile server. Thanks to advances in technology, it is possible to run an OpenMapTiles tile server for a modest cost. See the diary entry [Host an OpenMapTiles Vector Tile Server on AWS for $19.75/month](https://www.openstreetmap.org/user/ZeLonewolf/diary/401697) for more details. + ## Running the Americana style ### In development... From 44731dca8da172335789de4d434460c51d6197ec Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 14 Jun 2023 14:31:05 -0400 Subject: [PATCH 076/444] Fix status map --- scripts/status_map.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/status_map.js b/scripts/status_map.js index 256bccc8f..ba50f5327 100644 --- a/scripts/status_map.js +++ b/scripts/status_map.js @@ -24,7 +24,7 @@ let worldSVG = fs.readFileSync(`${process.cwd()}/scripts/blank_map_world.svg`, { }); worldSVG = fillPaths( worldSVG, - Object.keys(shields) + Object.keys(shields.networks) .map((network) => network.match(/^(\w\w)(?::|$)|^omt-(\w\w)-/)) .filter((m) => m) .map((m) => m[1] || m[2]) From 8365fe2f5975ec0958243eae77e9a9d4e9e058f5 Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:52:06 -0700 Subject: [PATCH 077/444] Change name back to poi_mortarboard --- icons/{poi_college.svg => poi_mortarboard.svg} | 0 scripts/taginfo_template.json | 4 ++-- src/layer/poi.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename icons/{poi_college.svg => poi_mortarboard.svg} (100%) diff --git a/icons/poi_college.svg b/icons/poi_mortarboard.svg similarity index 100% rename from icons/poi_college.svg rename to icons/poi_mortarboard.svg diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 1165744b1..b88dfe3b0 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -405,7 +405,7 @@ "object_types": ["node", "area"], "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_college.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" }, { "key": "amenity", @@ -413,7 +413,7 @@ "object_types": ["node", "area"], "description": "Colleges are marked by an icon representing a mortarboard cap.", "doc_url": "https://openmaptiles.org/schema/#poi", - "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_college.svg" + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_mortarboard.svg" }, { "key": "amenity", diff --git a/src/layer/poi.js b/src/layer/poi.js index 4d0a7b8c0..178687bda 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -112,7 +112,7 @@ var iconDefs = { classes: { college: ["college", "university"], }, - sprite: "poi_college", + sprite: "poi_mortarboard", color: Color.poi.infrastructure, description: "College or university", }, From 2ed104fd2bc6a67c788cc06e02cea15e7e9c641d Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 17 Jun 2023 15:16:14 -0400 Subject: [PATCH 078/444] tweak oneway arrow icons --- icons/oneway_black.svg | 7 ++----- icons/oneway_white.svg | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/icons/oneway_black.svg b/icons/oneway_black.svg index 476bf8103..4166e3786 100644 --- a/icons/oneway_black.svg +++ b/icons/oneway_black.svg @@ -1,6 +1,3 @@ - - - - - + + diff --git a/icons/oneway_white.svg b/icons/oneway_white.svg index eb01344b3..d1a95a084 100644 --- a/icons/oneway_white.svg +++ b/icons/oneway_white.svg @@ -1,6 +1,3 @@ - - - - - + + From a0190df17c11e6c884d88a6cfcb3d4e43b299aab Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 17 Jun 2023 15:33:43 -0400 Subject: [PATCH 079/444] fix oneway arrow size on busways --- src/layer/oneway.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index c36666533..95dcfb14b 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -37,7 +37,7 @@ export const surface = { 1, "secondary", 0.8, - "tertiary", + ["tertiary", "busway"], 0.6, 0.3, ], From 26f6abf6034cc46d836d693475dfa446f61d1a3f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 15:47:12 -0400 Subject: [PATCH 080/444] Prior preview removal not needed --- .github/workflows/deploy-preview.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 11da911ff..508171b3c 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -28,13 +28,6 @@ jobs: npm run build npm run style cp src/configs/config.aws.js src/config.js - - name: Remove prior FTP preview - uses: StephanThierry/ftp-delete-action@v2.1 - with: - host: ${{ secrets.FTP_SERVER }} - user: ${{ secrets.FTP_USERNAME }} - password: ${{ secrets.FTP_PASSWORD }} - remoteDirectories: pr/${{ github.event.pull_request.number }}/ - name: Deploy via FTP uses: SamKirkland/FTP-Deploy-Action@v4.3.4 with: From f30f37224cfb5bb2e7db5bc15b5a6597caa298cd Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 17:07:19 -0400 Subject: [PATCH 081/444] Move from FTP to s3 --- .github/workflows/deploy-preview.yml | 18 ++++++++++-------- .github/workflows/deploy.yml | 11 +---------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 508171b3c..d81c88db4 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -28,15 +28,17 @@ jobs: npm run build npm run style cp src/configs/config.aws.js src/config.js - - name: Deploy via FTP - uses: SamKirkland/FTP-Deploy-Action@v4.3.4 + - name: Deploy via S3 + uses: jakejarvis/s3-sync-action@master with: - server: ${{ secrets.FTP_SERVER }} - username: ${{ secrets.FTP_USERNAME }} - password: ${{ secrets.FTP_PASSWORD }} - local-dir: dist/ - server-dir: pr/${{ github.event.pull_request.number }}/ - dangerous-clean-slate: true + args: --acl public-read --follow-symlinks --delete --exclude '.git/*' --exclude '.github/*' + env: + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + SOURCE_DIR: "./dist" + DEST_DIR: pr/${{ github.event.pull_request.number }}/ - name: Comment Pull Request uses: thollander/actions-comment-pull-request@v2.3.1 with: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 98338e5a0..d7afb87c9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,16 +11,7 @@ permissions: id-token: write concurrency: preview-${{ github.ref }} jobs: - cleanup-preview: - runs-on: ubuntu-latest - steps: - - name: Remove prior FTP preview - uses: StephanThierry/ftp-delete-action@v2.1 - with: - host: ${{ secrets.FTP_SERVER }} - user: ${{ secrets.FTP_USERNAME }} - password: ${{ secrets.FTP_PASSWORD }} - remoteDirectories: pr/${{ github.event.pull_request.number }}/ + # TODO remove old PRs from s3 bucket automatically build-and-deploy: runs-on: ubuntu-latest environment: From 00d7676c18962bdb6f7a7ad9b6a33fc6668e2b55 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 20:00:37 -0400 Subject: [PATCH 082/444] Remove trailing slash --- .github/workflows/deploy-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index d81c88db4..d898588be 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -38,7 +38,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: ${{ secrets.AWS_REGION }} SOURCE_DIR: "./dist" - DEST_DIR: pr/${{ github.event.pull_request.number }}/ + DEST_DIR: pr/${{ github.event.pull_request.number }} - name: Comment Pull Request uses: thollander/actions-comment-pull-request@v2.3.1 with: From 15be76d96c8fad16b5536076a82b6ee2d4242a8d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 20:18:06 -0400 Subject: [PATCH 083/444] Fix trailing slashes from URL --- src/americana.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/americana.js b/src/americana.js index b4d7188b7..bd64f0e32 100644 --- a/src/americana.js +++ b/src/americana.js @@ -26,7 +26,9 @@ import { export function buildStyle() { var getUrl = window.location; - var baseUrl = getUrl.protocol + "//" + getUrl.host + getUrl.pathname; + var baseUrl = (getUrl.protocol + "//" + getUrl.host + getUrl.pathname) + //Trim trailing slashes from URL + .replace(/\/+$/, ""); return Style.build( config.OPENMAPTILES_URL, `${baseUrl}/sprites/sprite`, From 111c77b90d905eb3dbda41e5224c39cef51196ac Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 21:00:20 -0400 Subject: [PATCH 084/444] Add shields.json generation --- .github/workflows/deploy-preview.yml | 1 + .github/workflows/deploy.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index d898588be..f38dcdb1b 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -27,6 +27,7 @@ jobs: npm ci --include=dev npm run build npm run style + npm run shields cp src/configs/config.aws.js src/config.js - name: Deploy via S3 uses: jakejarvis/s3-sync-action@master diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d7afb87c9..442069519 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -30,6 +30,7 @@ jobs: cp src/configs/config.aws.js src/config.js npm run build npm run style + npm run shields - name: Upload ๐Ÿ— uses: actions/upload-pages-artifact@v1 with: From 2ec120def7251aba36d958236b0ec7699993bf8e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 17 Jun 2023 21:00:53 -0400 Subject: [PATCH 085/444] Add shields.json to comment --- .github/workflows/deploy-preview.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index f38dcdb1b..d63c562da 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -48,6 +48,7 @@ jobs: * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) + * [shields.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shields.json) * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) Sprite Sheets: From 46ac8a9aa3c7726a200608b37488b9fe6db39321 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 18 Jun 2023 08:25:23 -0400 Subject: [PATCH 086/444] Migrate fonts to fontstack66 --- CONTRIBUTING.md | 4 + package.json | 7 +- scripts/FONTS.md | 8 - scripts/fonts.js | 168 ----------- scripts/fonts.json | 610 -------------------------------------- scripts/generate_style.js | 2 +- scripts/stats.js | 2 +- src/americana.js | 2 +- 8 files changed, 9 insertions(+), 794 deletions(-) delete mode 100644 scripts/FONTS.md delete mode 100644 scripts/fonts.js delete mode 100644 scripts/fonts.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 741ba9918..8f9e85dd9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -380,3 +380,7 @@ For consistency, POI icons use the following color palette: | Airport | Medium Purple C | Purple | 78 0 142 | #4e008e | | Transport | Pantone 234 C | Mauve | 162 0 103 | #a20067 | | Knockout | | Lt Grayish Orange | 249 245 240 | #f9f5f0 | + +## Fonts + +Fonts for style labels are packaged and defined in [fontstack66](https://github.com/osm-americana/fontstack66), Americana's font package. \ No newline at end of file diff --git a/package.json b/package.json index 616704c17..39f528311 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "scripts": { "build:shieldlib": "cd shieldlib && node scripts/build.js", "build:code": "exec ts-node scripts/build", - "build": "run-s clean-build sprites fonts build:shieldlib build:code taginfo status_map", + "build": "run-s clean-build sprites build:shieldlib build:code taginfo status_map", "clean": "run-s clean:shieldlib clean:code clean-download clean-build", "clean-download": "shx rm -rf download", "clean-build": "shx rm -rf dist build", @@ -23,14 +23,11 @@ "code_format": "run-s code_format:prettier code_format:svgo", "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", - "fonts:install_glyph_builder": "cargo install build_pbf_glyphs@1.3.0", - "fonts:build": "node scripts/fonts", - "fonts": "run-s fonts:install_glyph_builder fonts:build", "presprites": "shx rm -rf dist/sprites", "serve": "ts-node scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", "sprites": "node scripts/sprites.js", - "start": "run-s clean-build build:shieldlib sprites fonts shields serve", + "start": "run-s clean-build build:shieldlib sprites shields serve", "stats": "node scripts/stats.js", "style": "node scripts/generate_style.js -o dist/style.json", "status_map": "node scripts/status_map.js", diff --git a/scripts/FONTS.md b/scripts/FONTS.md deleted file mode 100644 index 7d577a345..000000000 --- a/scripts/FONTS.md +++ /dev/null @@ -1,8 +0,0 @@ -The Americana fontstack is built from [Google Fonts](https://fonts.google.com/). - -In order to add fontstack support, modify the `fonts.json` file as follows: - -1. Add font-family and variant information to the `font-families` section. The font-family is the name of the font as listed on Google Fonts, e.g. "Noto Sans". Use `gfi download ""` to get a full list of the variants. The variant is everything to the right of the dash in the filename, so if a file is named `NotoSans-700.ttf`, the variant is `700`, though it will be listed in Google as something like "Bold 700". The `gfi` command requires you to install the `google-font-installer` package into npm with `npm install -g google-font-installer`. -2. Define the range of characters that you want rendered in this font in the `glyph-ranges` section. Since this is JSON, you'll have to convert hex to decimal here. The named parameter is simply a name that is used in the rest of the file to refer to this range of characters. This is an _inclusive_ range so for example `[0, 255]` will include codepoint 0 and codepoint 255. -3. The `custom-font-stacks` section lists each font-stack and which font/glyph range combinations should be included in that fontstack. -4. The `bundle-font-stacks` section lists all font stacks which should be bundled in their original form. diff --git a/scripts/fonts.js b/scripts/fonts.js deleted file mode 100644 index 1b962d2d7..000000000 --- a/scripts/fonts.js +++ /dev/null @@ -1,168 +0,0 @@ -// read font file -import { Font } from "fonteditor-core"; -import fs from "fs"; -import { execSync } from "child_process"; -import { promisify } from "util"; -import { exec } from "child_process"; -import path from "path"; - -function createRangeArray(start, end) { - return Array.from({ length: end - start + 1 }, (_, i) => start + i); -} - -function countFilesMatchingRegex(folderPath, regexPattern) { - return fs.readdirSync(folderPath).filter((file) => regexPattern.test(file)) - .length; -} - -function fontRegex(fontName) { - return new RegExp( - `^${fontName.replace(/\s+/g, "")}-([1-9]00)?(regular|italic)?\\.[ot]tf$`, - "i" - ); -} - -function copyFolderContents(sourceFolder, destinationFolder) { - const files = fs.readdirSync(sourceFolder); - return Promise.all( - files.map((file) => - fs.promises.copyFile( - path.join(sourceFolder, file), - path.join(destinationFolder, file) - ) - ) - ); -} - -const downloadFolder = "download/font"; -const distFontFolder = "dist/fonts"; -const ttfFontFolder = "build/font/ttf"; -const bundleFontFolder = "download/font-bundle"; - -function loadGoogleFonts(fontSpec, destFolder) { - for (const fontFamily in fontSpec) { - if ( - fontSpec[fontFamily].length == - countFilesMatchingRegex(downloadFolder, fontRegex(fontFamily)) + - countFilesMatchingRegex(bundleFontFolder, fontRegex(fontFamily)) - ) { - console.log(`Already downloaded ${fontFamily}`); - continue; - } - - const variants = fontSpec[fontFamily].join(","); - - execSync( - //Requires google-font-installer - `npm exec -- gfi download "${fontFamily}" -v ${variants} -d ${destFolder}`, - (error, stdout, stderr) => { - if (error) { - console.log(`error: ${error.message}`); - return; - } - if (stderr) { - console.log(`stderr: ${stderr}`); - return; - } - console.log(`stdout: ${stdout}`); - } - ); - console.log(`Downloaded ${fontFamily}`); - } -} - -[downloadFolder, ttfFontFolder, distFontFolder, bundleFontFolder].forEach( - (folder) => fs.mkdirSync(folder, { recursive: true }) -); - -const fontDef = JSON.parse(fs.readFileSync("scripts/fonts.json")); -const fontRanges = fontDef["glyph-ranges"]; -const customFontStacks = fontDef["custom-font-stacks"]; -const bundleFontStacks = fontDef["bundle-font-stacks"]; -const fontFamilies = fontDef["font-families"]; - -loadGoogleFonts(fontFamilies, downloadFolder); - -//Just copy fonts that are used unmodified -loadGoogleFonts(bundleFontStacks, bundleFontFolder); - -copyFolderContents(bundleFontFolder, ttfFontFolder); - -for (const stack in customFontStacks) { - let font; - for (const stackPart in customFontStacks[stack]) { - let stackPartDef = customFontStacks[stack][stackPart]; - const inputFontBuffer = fs.readFileSync( - `${downloadFolder}/${stackPartDef.file}.ttf` - ); - - const ranges = stackPartDef.ranges; - for (const range in ranges) { - const namedRange = ranges[range]; - const numberedRanges = fontRanges[namedRange]; - for (const numberedRange in numberedRanges) { - const subsetRange = numberedRanges[numberedRange]; - const subsetGlyphArray = createRangeArray( - subsetRange[0], - subsetRange[1] - ); - const fontSegment = Font.create(inputFontBuffer, { - type: "ttf", - subset: subsetGlyphArray, - hinting: true, - compound2simple: true, - inflate: null, - combinePath: false, - }); - if (font === undefined) { - font = fontSegment; - font.data.name = { - copyright: "Repackaged from Google Fonts", - fontFamily: "Americana", - fullName: stack, - manufacturer: "OpenStreetMap Americana Team", - }; - } else { - font.merge(fontSegment); - } - } - } - } - - // write font file - const outputBuffer = font.write({ - // support ttf, woff, woff2, eot, svg - type: "ttf", - // save font hinting - hinting: true, - // deflate function for woff, eg. pako.deflate - deflate: null, - // for user to overwrite head.xMin, head.xMax, head.yMin, head.yMax, hhea etc. - support: { head: {}, hhea: {} }, - }); - - const ttfFile = `build/font/ttf/${stack}.ttf`; - fs.writeFileSync(ttfFile, outputBuffer); - console.log(`Built ${ttfFile}`); -} - -const pbfBuilderFilename = "~/.cargo/bin/build_pbf_glyphs"; - -async function buildPbf() { - try { - const { stdout, stderr } = await promisify(exec)( - `${pbfBuilderFilename} ${ttfFontFolder} ${distFontFolder}` - ); - console.log(`${stdout}`); - if (stderr) { - console.log(`PBF stderr: ${stderr}`); - } - } catch (error) { - console.log(`PBF build error: ${error.message}`); - process.exit(-1); - } -} - -buildPbf(); - -console.log("Generated PBF fontstack."); diff --git a/scripts/fonts.json b/scripts/fonts.json deleted file mode 100644 index a0e89ef2f..000000000 --- a/scripts/fonts.json +++ /dev/null @@ -1,610 +0,0 @@ -{ - "font-families": { - "Gothic A1": ["regular", "700"], - "M PLUS Rounded 1c": ["regular", "700"], - "Noto Sans": ["regular", "700", "italic", "700italic"], - "Noto Sans Arabic": ["regular", "700"], - "Noto Naskh Arabic": ["regular", "700"], - "Noto Sans Armenian": ["regular", "700"], - "Noto Sans Bengali": ["regular", "700"], - "Noto Sans Canadian Aboriginal": ["regular", "700"], - "Noto Sans Cherokee": ["regular", "700"], - "Noto Sans Devanagari": ["regular", "700"], - "Noto Sans Ethiopic": ["regular", "600"], - "Noto Sans Georgian": ["regular", "700"], - "Noto Sans Gujarati": ["regular", "700"], - "Noto Sans Gurmukhi": ["regular", "700"], - "Noto Sans Hebrew": ["regular", "700"], - "Noto Rashi Hebrew": ["regular", "700"], - "Noto Sans Kannada": ["regular", "700"], - "Noto Sans Khmer": ["regular", "700"], - "Noto Sans Lao": ["regular", "700"], - "Noto Sans Malayalam": ["regular", "700"], - "Noto Sans Myanmar": ["regular", "700"], - "Noto Sans Oriya": ["regular", "700"], - "Noto Sans Sinhala": ["regular", "700"], - "Noto Sans Symbols": ["regular", "700"], - "Noto Sans Tamil": ["regular", "700"], - "Noto Sans Thaana": ["regular", "700"], - "Noto Serif Tibetan": ["regular", "700"], - "Noto Sans Tifinagh": ["regular"], - "Noto Sans Telugu": ["regular", "700"], - "Noto Sans Thai": ["regular", "700"] - }, - "bundle-font-stacks": { - "Noto Sans HK": ["regular", "700"], - "Noto Sans JP": ["regular", "700"], - "Noto Sans KR": ["regular", "700"], - "Noto Sans SC": ["regular", "700"], - "Noto Sans TC": ["regular", "700"] - }, - "glyph-ranges": { - "arabic": [ - [1536, 1791], - [1872, 1919], - [2160, 2303], - [64336, 65023], - [65136, 65279], - [69216, 69247], - [69312, 69375], - [126064, 126143], - [126208, 126287], - [126464, 126719] - ], - "armenian": [ - [1328, 1423], - [64272, 64279] - ], - "bengali": [[2432, 2559]], - "bopomofo": [ - [12544, 12591], - [12704, 12735] - ], - "burmese": [[4096, 4255]], - "canadian_aboriginal": [ - [5120, 5487], - [6928, 6975], - [71216, 71231] - ], - "cherokee": [ - [5024, 5119], - [43888, 43967] - ], - "cyrillic": [ - [1024, 1327], - [7296, 7311], - [11744, 11775], - [42560, 42655], - [65070, 65071], - [122928, 123023] - ], - "devanagari": [[2304, 2431]], - "ethiopic": [ - [4608, 5017], - [11648, 11743], - [43776, 43823] - ], - "fullwidth": [[65280, 65519]], - "greek": [ - [880, 1023], - [7936, 8191], - [65856, 65999], - [119296, 119375] - ], - "georgian": [ - [4256, 4351], - [7312, 7359], - [11520, 11567] - ], - "gurmukhi": [[2560, 2687]], - "gujarati": [[2688, 2751]], - "han": [ - [11904, 12031], - [12032, 12245], - [12272, 12283], - [12284, 12287], - [12288, 12351] - ], - "hangul": [ - [4352, 4607], - [12592, 12687], - [43360, 43391], - [55216, 55295] - ], - "hebrew": [ - [1424, 1535], - [64280, 64335] - ], - "hiragana": [[12352, 12447]], - "kanbun": [[12688, 12703]], - "kannada": [[3200, 3327]], - "kanji": [[19968, 40959]], - "katakana": [ - [12448, 12543], - [12784, 12799] - ], - "khmer": [[6016, 6911]], - "latin": [ - [33, 879], - [7424, 7615], - [7680, 7935], - [8192, 8591], - [11360, 11391], - [42784, 43007], - [43824, 43887], - [64256, 64271], - [67456, 67519], - [122624, 122879] - ], - "lao": [[3712, 3839]], - "malayalam": [[3328, 3455]], - "oriya": [[2816, 2943]], - "sinhala": [[3456, 3583]], - "space": [[32, 32]], - "symbols": [[8592, 8703]], - "tamil": [[2944, 3071]], - "telugu": [[3072, 3199]], - "thaana": [[1920, 1983]], - "tibetan": [[3840, 4095]], - "tifinagh": [[11568, 11631]], - "thai": [[3584, 3711]] - }, - "custom-font-stacks": { - "Americana-Regular": [ - { - "file": "GothicA1-regular", - "ranges": ["space", "hangul"] - }, - { - "file": "MPlusRounded1C-regular", - "ranges": ["fullwidth", "hiragana", "kanbun", "katakana"] - }, - { - "file": "NotoSansArabic-regular", - "ranges": ["arabic"] - }, - { - "file": "NotoSansArmenian-regular", - "ranges": ["armenian"] - }, - { - "file": "NotoSansBengali-regular", - "ranges": ["bengali"] - }, - { - "file": "NotoSansCanadianAboriginal-regular", - "ranges": ["canadian_aboriginal"] - }, - { - "file": "NotoSansCherokee-regular", - "ranges": ["cherokee"] - }, - { - "file": "NotoSansDevanagari-regular", - "ranges": ["devanagari"] - }, - { - "file": "NotoSansEthiopic-regular", - "ranges": ["ethiopic"] - }, - { - "file": "NotoSansGeorgian-regular", - "ranges": ["georgian"] - }, - { - "file": "NotoSansGujarati-regular", - "ranges": ["gujarati"] - }, - { - "file": "NotoSansGurmukhi-regular", - "ranges": ["gurmukhi"] - }, - { - "file": "NotoSansHebrew-regular", - "ranges": ["hebrew"] - }, - { - "file": "NotoSansKannada-regular", - "ranges": ["kannada"] - }, - { - "file": "NotoSansKhmer-regular", - "ranges": ["khmer"] - }, - { - "file": "NotoSansLao-regular", - "ranges": ["lao"] - }, - { - "file": "NotoSansMalayalam-regular", - "ranges": ["malayalam"] - }, - { - "file": "NotoSansMyanmar-regular", - "ranges": ["burmese"] - }, - { - "file": "NotoSansOriya-regular", - "ranges": ["oriya"] - }, - { - "file": "NotoSansSinhala-regular", - "ranges": ["sinhala"] - }, - { - "file": "NotoSansSymbols-regular", - "ranges": ["symbols"] - }, - { - "file": "NotoSansTamil-regular", - "ranges": ["tamil"] - }, - { - "file": "NotoSansTelugu-regular", - "ranges": ["telugu"] - }, - { - "file": "NotoSansThaana-regular", - "ranges": ["thaana"] - }, - { - "file": "NotoSansThai-regular", - "ranges": ["thai"] - }, - { - "file": "NotoSerifTibetan-regular", - "ranges": ["tibetan"] - }, - { - "file": "NotoSansTifinagh-regular", - "ranges": ["tifinagh"] - }, - { - "file": "NotoSans-regular", - "ranges": ["cyrillic", "greek", "latin"] - } - ], - "Americana-Bold": [ - { - "file": "GothicA1-700", - "ranges": ["space", "hangul"] - }, - { - "file": "MPlusRounded1C-700", - "ranges": ["fullwidth", "hiragana", "kanbun", "katakana"] - }, - { - "file": "NotoSansArabic-700", - "ranges": ["arabic"] - }, - { - "file": "NotoSansArmenian-700", - "ranges": ["armenian"] - }, - { - "file": "NotoSansBengali-700", - "ranges": ["bengali"] - }, - { - "file": "NotoSansCanadianAboriginal-700", - "ranges": ["canadian_aboriginal"] - }, - { - "file": "NotoSansCherokee-700", - "ranges": ["cherokee"] - }, - { - "file": "NotoSansDevanagari-700", - "ranges": ["devanagari"] - }, - { - "file": "NotoSansEthiopic-600", - "ranges": ["ethiopic"] - }, - { - "file": "NotoSansGeorgian-700", - "ranges": ["georgian"] - }, - { - "file": "NotoSansGujarati-700", - "ranges": ["gujarati"] - }, - { - "file": "NotoSansGurmukhi-700", - "ranges": ["gurmukhi"] - }, - { - "file": "NotoSansKannada-700", - "ranges": ["kannada"] - }, - { - "file": "NotoSansHebrew-700", - "ranges": ["hebrew"] - }, - { - "file": "NotoSansKhmer-700", - "ranges": ["khmer"] - }, - { - "file": "NotoSansLao-700", - "ranges": ["lao"] - }, - { - "file": "NotoSansMalayalam-700", - "ranges": ["malayalam"] - }, - { - "file": "NotoSansMyanmar-700", - "ranges": ["burmese"] - }, - { - "file": "NotoSansOriya-700", - "ranges": ["oriya"] - }, - { - "file": "NotoSansSinhala-700", - "ranges": ["sinhala"] - }, - { - "file": "NotoSansSymbols-700", - "ranges": ["symbols"] - }, - { - "file": "NotoSansTamil-700", - "ranges": ["tamil"] - }, - { - "file": "NotoSansTelugu-700", - "ranges": ["telugu"] - }, - { - "file": "NotoSansThaana-700", - "ranges": ["thaana"] - }, - { - "file": "NotoSansThai-700", - "ranges": ["thai"] - }, - { - "file": "NotoSerifTibetan-700", - "ranges": ["tibetan"] - }, - { - "file": "NotoSansTifinagh-regular", - "ranges": ["tifinagh"] - }, - { - "file": "NotoSans-700", - "ranges": ["cyrillic", "greek", "latin"] - } - ], - "Americana-Italic": [ - { - "file": "GothicA1-regular", - "ranges": ["space", "hangul"] - }, - { - "file": "MPlusRounded1C-regular", - "ranges": ["fullwidth", "hiragana", "kanbun", "katakana"] - }, - { - "file": "NotoSansArabic-regular", - "ranges": ["arabic"] - }, - { - "file": "NotoSansArmenian-regular", - "ranges": ["armenian"] - }, - { - "file": "NotoSansBengali-regular", - "ranges": ["bengali"] - }, - { - "file": "NotoSansCanadianAboriginal-regular", - "ranges": ["canadian_aboriginal"] - }, - { - "file": "NotoSansCherokee-regular", - "ranges": ["cherokee"] - }, - { - "file": "NotoSansDevanagari-regular", - "ranges": ["devanagari"] - }, - { - "file": "NotoSansEthiopic-regular", - "ranges": ["ethiopic"] - }, - { - "file": "NotoSansGeorgian-regular", - "ranges": ["georgian"] - }, - { - "file": "NotoSansGujarati-regular", - "ranges": ["gujarati"] - }, - { - "file": "NotoSansGurmukhi-regular", - "ranges": ["gurmukhi"] - }, - { - "file": "NotoSansKannada-regular", - "ranges": ["kannada"] - }, - { - "file": "NotoSansKhmer-regular", - "ranges": ["khmer"] - }, - { - "file": "NotoSansLao-regular", - "ranges": ["lao"] - }, - { - "file": "NotoRashiHebrew-regular", - "ranges": ["hebrew"] - }, - { - "file": "NotoSansMalayalam-regular", - "ranges": ["malayalam"] - }, - { - "file": "NotoSansMyanmar-regular", - "ranges": ["burmese"] - }, - { - "file": "NotoSansOriya-regular", - "ranges": ["oriya"] - }, - { - "file": "NotoSansSinhala-regular", - "ranges": ["sinhala"] - }, - { - "file": "NotoSansSymbols-regular", - "ranges": ["symbols"] - }, - { - "file": "NotoSansTamil-regular", - "ranges": ["tamil"] - }, - { - "file": "NotoSansTelugu-regular", - "ranges": ["telugu"] - }, - { - "file": "NotoSansThaana-regular", - "ranges": ["thaana"] - }, - { - "file": "NotoSansThai-regular", - "ranges": ["thai"] - }, - { - "file": "NotoSerifTibetan-regular", - "ranges": ["tibetan"] - }, - { - "file": "NotoSansTifinagh-regular", - "ranges": ["tifinagh"] - }, - { - "file": "NotoSans-italic", - "ranges": ["cyrillic", "greek", "latin"] - } - ], - "Americana-Bold-Italic": [ - { - "file": "GothicA1-700", - "ranges": ["space", "hangul"] - }, - { - "file": "MPlusRounded1C-700", - "ranges": ["fullwidth", "hiragana", "kanbun", "katakana"] - }, - { - "file": "NotoSansArabic-700", - "ranges": ["arabic"] - }, - { - "file": "NotoSansArmenian-700", - "ranges": ["armenian"] - }, - { - "file": "NotoSansBengali-700", - "ranges": ["bengali"] - }, - { - "file": "NotoSansCanadianAboriginal-700", - "ranges": ["canadian_aboriginal"] - }, - { - "file": "NotoSansCherokee-700", - "ranges": ["cherokee"] - }, - { - "file": "NotoSansDevanagari-700", - "ranges": ["devanagari"] - }, - { - "file": "NotoSansEthiopic-600", - "ranges": ["ethiopic"] - }, - { - "file": "NotoSansGeorgian-700", - "ranges": ["georgian"] - }, - { - "file": "NotoSansGujarati-700", - "ranges": ["gujarati"] - }, - { - "file": "NotoSansGurmukhi-700", - "ranges": ["gurmukhi"] - }, - { - "file": "NotoSansKannada-700", - "ranges": ["kannada"] - }, - { - "file": "NotoSansKhmer-700", - "ranges": ["khmer"] - }, - { - "file": "NotoSansLao-700", - "ranges": ["lao"] - }, - { - "file": "NotoRashiHebrew-700", - "ranges": ["hebrew"] - }, - { - "file": "NotoSansMalayalam-700", - "ranges": ["malayalam"] - }, - { - "file": "NotoSansMyanmar-700", - "ranges": ["burmese"] - }, - { - "file": "NotoSansOriya-700", - "ranges": ["oriya"] - }, - { - "file": "NotoSansSinhala-700", - "ranges": ["sinhala"] - }, - { - "file": "NotoSansSymbols-700", - "ranges": ["symbols"] - }, - { - "file": "NotoSansTamil-700", - "ranges": ["tamil"] - }, - { - "file": "NotoSansTelugu-700", - "ranges": ["telugu"] - }, - { - "file": "NotoSansThaana-700", - "ranges": ["thaana"] - }, - { - "file": "NotoSansThai-700", - "ranges": ["thai"] - }, - { - "file": "NotoSerifTibetan-700", - "ranges": ["tibetan"] - }, - { - "file": "NotoSansTifinagh-regular", - "ranges": ["tifinagh"] - }, - { - "file": "NotoSans-700italic", - "ranges": ["cyrillic", "greek", "latin"] - } - ] - } -} diff --git a/scripts/generate_style.js b/scripts/generate_style.js index 4c37dac79..3f097415c 100644 --- a/scripts/generate_style.js +++ b/scripts/generate_style.js @@ -22,7 +22,7 @@ let opts = program.opts(); let style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", - "https://zelonewolf.github.io/openstreetmap-americana/fonts/{fontstack}/{range}.pbf", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", opts.locales ); diff --git a/scripts/stats.js b/scripts/stats.js index f337496a3..26662d65e 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -24,7 +24,7 @@ if (Object.keys(opts).length === 1) program.help(); let style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", - "https://zelonewolf.github.io/openstreetmap-americana/fonts/{fontstack}/{range}.pbf", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", opts.locales ); diff --git a/src/americana.js b/src/americana.js index cd52c7cc0..93eb1a251 100644 --- a/src/americana.js +++ b/src/americana.js @@ -30,7 +30,7 @@ export function buildStyle() { return Style.build( config.OPENMAPTILES_URL, `${baseUrl}/sprites/sprite`, - `${baseUrl}/fonts/{fontstack}/{range}.pbf`, + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", Label.getLocales() ); } From 7c067e8b427832ecb8b306151b82ff94d2807a2c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 18 Jun 2023 08:31:48 -0400 Subject: [PATCH 087/444] Remove Rust config --- .cargo/config.toml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 70f9eaeb2..000000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[registries.crates-io] -protocol = "sparse" From debef74b08f8ee2d60d23ddec8bae4da33e37ed3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 18 Jun 2023 11:37:09 -0400 Subject: [PATCH 088/444] Prettier --- CONTRIBUTING.md | 2 +- src/americana.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8f9e85dd9..83436d94a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -383,4 +383,4 @@ For consistency, POI icons use the following color palette: ## Fonts -Fonts for style labels are packaged and defined in [fontstack66](https://github.com/osm-americana/fontstack66), Americana's font package. \ No newline at end of file +Fonts for style labels are packaged and defined in [fontstack66](https://github.com/osm-americana/fontstack66), Americana's font package. diff --git a/src/americana.js b/src/americana.js index 93eb1a251..af2227949 100644 --- a/src/americana.js +++ b/src/americana.js @@ -30,7 +30,7 @@ export function buildStyle() { return Style.build( config.OPENMAPTILES_URL, `${baseUrl}/sprites/sprite`, - "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", Label.getLocales() ); } From 0568c400d0a46d6e42101085982b961efbe2406c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 18 Jun 2023 13:02:52 -0400 Subject: [PATCH 089/444] Add font override --- src/americana.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/americana.js b/src/americana.js index bd9b709c4..3d22e098d 100644 --- a/src/americana.js +++ b/src/americana.js @@ -32,7 +32,8 @@ export function buildStyle() { return Style.build( config.OPENMAPTILES_URL, `${baseUrl}/sprites/sprite`, - "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + config.FONT_URL ?? + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", Label.getLocales() ); } From e1c519e88731653691ef513f17ad158e5b048af1 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 18 Jun 2023 13:06:43 -0400 Subject: [PATCH 090/444] Add hook for FONT_URL --- src/configs/config.aws.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/configs/config.aws.js b/src/configs/config.aws.js index da8ec255b..9727e7f64 100644 --- a/src/configs/config.aws.js +++ b/src/configs/config.aws.js @@ -13,8 +13,15 @@ Both accept an HTML color name, hex code, or other CSS color value. const SHIELD_TEXT_BBOX_COLOR = null; const SHIELD_TEXT_HALO_COLOR_OVERRIDE = null; +/* +Uncomment the following line here and in the export block to change the location +of the font stack (normally, for development and test) +*/ +//const FONT_URL = font_stack_url + export default { OPENMAPTILES_URL, SHIELD_TEXT_BBOX_COLOR, SHIELD_TEXT_HALO_COLOR_OVERRIDE, + // FONT_URL, }; From 2f0983685c0addfda42ffb0b10a0f01732d5ddd2 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 19 Jun 2023 04:21:24 -0400 Subject: [PATCH 091/444] Fix github secrets --- .github/workflows/deploy-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index d63c562da..de9c0f2f7 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -1,6 +1,6 @@ name: Deploy PR Preview on: - pull_request: + pull_request_target: branches: [main] types: - opened From 06302b390a041217a05d07fdf01f18f356e301bc Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 19 Jun 2023 10:07:09 -0400 Subject: [PATCH 092/444] Add shield for US:NY:Truck Five of these on the map. Appears to be the only such bannered routes. --- src/js/shield_defs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index f398358cc..62dd82cab 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2371,6 +2371,7 @@ export function loadShields() { bottom: 5, }, }; + shields["US:NY:Truck"] = banneredShield(shields["US:NY"], ["TRK"]); shields["US:NY:Thruway"] = { noref: { spriteBlank: "shield_us_ny_thruway", From a3ca13c63182ebd3a4a3b45e6a11b142900810d4 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Mon, 19 Jun 2023 15:19:26 -0400 Subject: [PATCH 093/444] adjust oneway arrow size --- src/layer/oneway.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 95dcfb14b..48c9acf73 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -22,14 +22,7 @@ export const surface = { ["exponential", 1.2], ["zoom"], 15, - [ - ...highwaySelector, - ["motorway", "trunk", "primary"], - 0.5, - "secondary", - 0.3, - 0.2, - ], + [...highwaySelector, ["motorway", "trunk", "primary"], 0.5, 0.3], 19, [ ...highwaySelector, @@ -39,7 +32,7 @@ export const surface = { 0.8, ["tertiary", "busway"], 0.6, - 0.3, + 0.4, ], ], "icon-image": [ From 3dcbeb78d18188f3bbb677f72928c5e2d398f538 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Mon, 19 Jun 2023 16:03:15 -0400 Subject: [PATCH 094/444] resize oneway arrow --- icons/oneway_black.svg | 4 ++-- icons/oneway_white.svg | 4 ++-- src/layer/oneway.js | 2 -- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/icons/oneway_black.svg b/icons/oneway_black.svg index 4166e3786..825ab153d 100644 --- a/icons/oneway_black.svg +++ b/icons/oneway_black.svg @@ -1,3 +1,3 @@ - - + + diff --git a/icons/oneway_white.svg b/icons/oneway_white.svg index d1a95a084..70dc2aae4 100644 --- a/icons/oneway_white.svg +++ b/icons/oneway_white.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 48c9acf73..ffdba3004 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -30,9 +30,7 @@ export const surface = { 1, "secondary", 0.8, - ["tertiary", "busway"], 0.6, - 0.4, ], ], "icon-image": [ From 9259e2d63304689de7d000d2c27b1fc9927a23c0 Mon Sep 17 00:00:00 2001 From: Mike Barry Date: Mon, 19 Jun 2023 21:25:52 -0400 Subject: [PATCH 095/444] add style benchmark --- package-lock.json | 69 ++++++++++++++++++++++++++++++++++++++++---- package.json | 3 ++ scripts/benchmark.js | 52 +++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 scripts/benchmark.js diff --git a/package-lock.json b/package-lock.json index c8b4ec366..1a7620100 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,10 +23,12 @@ }, "devDependencies": { "@basemaps/sprites": "^6.32.1", + "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", + "benchmark": "^2.1.4", "canvas": "^2.11.0", "chai": "^4.3.7", "color-namer": "^1.4.0", @@ -38,6 +40,7 @@ "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", + "pbf": "^3.2.1", "prettier": "^2.3.2", "shx": "^0.3.4", "svgo": "^2.8.0", @@ -184,7 +187,8 @@ }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", - "license": "BSD-3-Clause", + "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" } @@ -304,7 +308,8 @@ }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -326,7 +331,8 @@ }, "node_modules/@types/pbf": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" }, "node_modules/@xmldom/xmldom": { "version": "0.8.6", @@ -491,6 +497,16 @@ ], "license": "MIT" }, + "node_modules/benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "dev": true, @@ -2074,6 +2090,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "dev": true, @@ -2885,7 +2907,8 @@ }, "node_modules/pbf": { "version": "3.2.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -2929,6 +2952,12 @@ "node": ">=4" } }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, "node_modules/potpack": { "version": "1.0.2", "license": "ISC" @@ -4199,6 +4228,8 @@ }, "@mapbox/vector-tile": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", "requires": { "@mapbox/point-geometry": "~0.1.0" } @@ -4300,6 +4331,8 @@ }, "@types/mapbox__vector-tile": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", "requires": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -4320,7 +4353,9 @@ "peer": true }, "@types/pbf": { - "version": "3.0.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" }, "@xmldom/xmldom": { "version": "0.8.6" @@ -4418,6 +4453,16 @@ "version": "1.5.1", "dev": true }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, "binary-extensions": { "version": "2.2.0", "dev": true @@ -5439,6 +5484,12 @@ "p-locate": "^5.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "dev": true, @@ -5979,6 +6030,8 @@ }, "pbf": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", "requires": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -6000,6 +6053,12 @@ "version": "3.0.0", "dev": true }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, "potpack": { "version": "1.0.2" }, diff --git a/package.json b/package.json index 616704c17..ccf35de2e 100644 --- a/package.json +++ b/package.json @@ -50,10 +50,12 @@ }, "devDependencies": { "@basemaps/sprites": "^6.32.1", + "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", + "benchmark": "^2.1.4", "canvas": "^2.11.0", "chai": "^4.3.7", "color-namer": "^1.4.0", @@ -65,6 +67,7 @@ "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", + "pbf": "^3.2.1", "prettier": "^2.3.2", "shx": "^0.3.4", "svgo": "^2.8.0", diff --git a/scripts/benchmark.js b/scripts/benchmark.js new file mode 100644 index 000000000..71c535457 --- /dev/null +++ b/scripts/benchmark.js @@ -0,0 +1,52 @@ +"use strict"; + +import Benchmark from "benchmark"; +import { expression } from "@maplibre/maplibre-gl-style-spec"; + +import { build } from "../src/layer/index.js"; +import { VectorTile } from "@mapbox/vector-tile"; +import Pbf from "pbf"; + +const layers = build(["en"]) + .filter((layer) => layer["source-layer"] === "transportation" && layer.filter) + .map((layer) => expression.createExpression(layer.filter).value.expression); +const tile = await ( + await fetch(`https://d1zqyi8v6vm8p9.cloudfront.net/planet/12/1207/1539.mvt`) +).arrayBuffer(); + +const transportation = new VectorTile(new Pbf(tile)).layers["transportation"]; +const features = []; + +for (let i = 0; i < transportation.length; i++) { + const feature = transportation.feature(i); + features.push({ + type: feature.type, + properties: feature.properties, + geometry: [], + }); +} + +let num = 0; +new Benchmark.Suite() + .add("evaluate expressions", () => { + let num = 0; + const context = { + properties: () => context.feature.properties, + geometryType: () => context.feature.type, + }; + for (const layer of layers) { + for (const feature of features) { + context.feature = feature; + if (layer.evaluate(context)) { + num++; + } + } + } + }) + .on("error", (event) => console.log(event.target.error)) + .on("cycle", (event) => { + const time = 1_000 / event.target.hz; + console.log(`${time.toPrecision(4)}ms ${event.target}`); + }) + .on("complete", () => console.log(`total ${num}`)) + .run(); From 31f80f5761df57f53d0059f4867917f1748eaacb Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 19 Jun 2023 21:28:05 -0400 Subject: [PATCH 096/444] Add JSON output and use source layer --- scripts/stats.js | 55 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/scripts/stats.js b/scripts/stats.js index 26662d65e..eaff052b5 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -10,6 +10,7 @@ program .option("-l, --layer ", "stats about one layer") .option("-loc, --locales ", "language codes", ["mul"]) .option("-pp, --pretty", "pretty-print JSON output") + .option("-j, --json", "output JSON") .option( "-pg, --print-group ", "print a list of the layers in a group" @@ -42,7 +43,7 @@ for (let i = 0; i < layers.length; i++) { let layer = layers[i]; layerMap.set(layer.id, layers[i]); let layerSize = JSON.stringify(layer).length; - let layerGroup = layer.id.split("_", 1)[0]; + let layerGroup = layer["source-layer"] || layer.source || layer.type; layerSizeStats.set(layer.id, JSON.stringify(layer).length); if (!layerGroupSizeStats.has(layerGroup)) { layerGroupSizeStats.set(layerGroup, layerSize); @@ -62,32 +63,58 @@ for (let i = 0; i < layers.length; i++) { } if (opts.layerCount) { - console.log(`${layerCount} layers`); + if (opts.json) { + process.stdout.write(JSON.stringify({ layerCount }) + '\n'); + } else { + console.log(`${layerCount} layers`); + } } if (opts.layerSize) { - console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); + if (opts.json) { + process.stdout.write(JSON.stringify({ layerSize }) + '\n'); + } else { + console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); + } } if (opts.allLayers) { - console.log(`${layerCount} layers, grouped as follows:`); - layerGroupSizeStats.forEach((v, k) => { - let layerCount = layerGroupCountStats.get(k); - let layerString = `${k}(${layerCount})`.padEnd(30, "."); - console.log( - `${layerString}${v.toLocaleString("en-US").padStart(10, ".")} bytes` - ); - }); + if (opts.json) { + let allLayers = { + layerCount, + layers: {}, + }; + layerGroupSizeStats.forEach((v, k) => { + let layerCount = layerGroupCountStats.get(k); + allLayers.layers[k] = layerCount; + }); + process.stdout.write(JSON.stringify(allLayers) + '\n'); + } else { + layerGroupSizeStats.forEach((v, k) => { + let layerCount = layerGroupCountStats.get(k); + let layerString = `${k}(${layerCount})`.padEnd(30, "."); + console.log( + `${layerString}${v.toLocaleString("en-US").padStart(10, ".")} bytes` + ); + }); + } } if (opts.printGroup) { - layerGroupMap.get(opts.printGroup).forEach((lyr) => console.log(lyr)); + let group = layerGroupMap.get(opts.printGroup); + if (opts.json) { + let layers = []; + group.forEach((lyr) => layers.push(lyr)); + process.stdout.write(JSON.stringify(layers) + '\n'); + } else { + group.forEach((lyr) => console.log(lyr)); + } } if (opts.printLayer) { if (opts.pretty) { - console.log(JSON.stringify(layerMap.get(opts.printLayer), null, 2)); + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer), null, 2) + '\n'); } else { - console.log(JSON.stringify(layerMap.get(opts.printLayer))); + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer)) + '\n'); } } From 461a8b49729c6ae009565313176cdb451b71533c Mon Sep 17 00:00:00 2001 From: Mike Barry Date: Mon, 19 Jun 2023 21:35:31 -0400 Subject: [PATCH 097/444] test a few areas --- scripts/benchmark.js | 49 ++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/scripts/benchmark.js b/scripts/benchmark.js index 71c535457..1bbe59dc2 100644 --- a/scripts/benchmark.js +++ b/scripts/benchmark.js @@ -10,25 +10,28 @@ import Pbf from "pbf"; const layers = build(["en"]) .filter((layer) => layer["source-layer"] === "transportation" && layer.filter) .map((layer) => expression.createExpression(layer.filter).value.expression); -const tile = await ( - await fetch(`https://d1zqyi8v6vm8p9.cloudfront.net/planet/12/1207/1539.mvt`) -).arrayBuffer(); - -const transportation = new VectorTile(new Pbf(tile)).layers["transportation"]; -const features = []; - -for (let i = 0; i < transportation.length; i++) { - const feature = transportation.feature(i); - features.push({ - type: feature.type, - properties: feature.properties, - geometry: [], - }); -} -let num = 0; -new Benchmark.Suite() - .add("evaluate expressions", () => { +const suite = new Benchmark.Suite(); + +async function addTest(name, z, x, y) { + const tile = await ( + await fetch( + `https://d1zqyi8v6vm8p9.cloudfront.net/planet/${z}/${x}/${y}.mvt` + ) + ).arrayBuffer(); + + const transportation = new VectorTile(new Pbf(tile)).layers["transportation"]; + const features = []; + + for (let i = 0; i < transportation.length; i++) { + const feature = transportation.feature(i); + features.push({ + type: feature.type, + properties: feature.properties, + geometry: [], + }); + } + suite.add(`evaluate expressions ${name}`, () => { let num = 0; const context = { properties: () => context.feature.properties, @@ -42,11 +45,17 @@ new Benchmark.Suite() } } } - }) + }); +} + +await addTest("nyc z12", 12, 1207, 1539); +await addTest("boston z12", 12, 1239, 1514); +await addTest("kansas z14", 14, 3707, 6302); + +suite .on("error", (event) => console.log(event.target.error)) .on("cycle", (event) => { const time = 1_000 / event.target.hz; console.log(`${time.toPrecision(4)}ms ${event.target}`); }) - .on("complete", () => console.log(`total ${num}`)) .run(); From da373dfd1c5a34b5e2cf4deba7d2d08fd4a08276 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 19 Jun 2023 21:39:40 -0400 Subject: [PATCH 098/444] Prettier --- scripts/stats.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/stats.js b/scripts/stats.js index eaff052b5..c5d7ef9bf 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -64,7 +64,7 @@ for (let i = 0; i < layers.length; i++) { if (opts.layerCount) { if (opts.json) { - process.stdout.write(JSON.stringify({ layerCount }) + '\n'); + process.stdout.write(JSON.stringify({ layerCount }) + "\n"); } else { console.log(`${layerCount} layers`); } @@ -72,7 +72,7 @@ if (opts.layerCount) { if (opts.layerSize) { if (opts.json) { - process.stdout.write(JSON.stringify({ layerSize }) + '\n'); + process.stdout.write(JSON.stringify({ layerSize }) + "\n"); } else { console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); } @@ -88,7 +88,7 @@ if (opts.allLayers) { let layerCount = layerGroupCountStats.get(k); allLayers.layers[k] = layerCount; }); - process.stdout.write(JSON.stringify(allLayers) + '\n'); + process.stdout.write(JSON.stringify(allLayers) + "\n"); } else { layerGroupSizeStats.forEach((v, k) => { let layerCount = layerGroupCountStats.get(k); @@ -105,7 +105,7 @@ if (opts.printGroup) { if (opts.json) { let layers = []; group.forEach((lyr) => layers.push(lyr)); - process.stdout.write(JSON.stringify(layers) + '\n'); + process.stdout.write(JSON.stringify(layers) + "\n"); } else { group.forEach((lyr) => console.log(lyr)); } @@ -113,8 +113,10 @@ if (opts.printGroup) { if (opts.printLayer) { if (opts.pretty) { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer), null, 2) + '\n'); + process.stdout.write( + JSON.stringify(layerMap.get(opts.printLayer), null, 2) + "\n" + ); } else { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer)) + '\n'); + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer)) + "\n"); } } From ea0fd5b2d696805764bb04129ea88e0b3fc5d7a6 Mon Sep 17 00:00:00 2001 From: Mike Barry Date: Mon, 19 Jun 2023 21:45:19 -0400 Subject: [PATCH 099/444] no strict --- scripts/benchmark.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/benchmark.js b/scripts/benchmark.js index 1bbe59dc2..abe4a0e96 100644 --- a/scripts/benchmark.js +++ b/scripts/benchmark.js @@ -1,5 +1,3 @@ -"use strict"; - import Benchmark from "benchmark"; import { expression } from "@maplibre/maplibre-gl-style-spec"; From 1b994fa2090230c86532b103f6f6f8bf992b1521 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Tue, 20 Jun 2023 12:20:39 -0400 Subject: [PATCH 100/444] remove bridge spacer label when oneway arrows are present --- src/layer/oneway.js | 6 +++--- src/layer/transportation_label.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index ffdba3004..47253b9c6 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -4,7 +4,7 @@ const highwaySelector = ["match", ["get", "class"]]; export const surface = { - id: "road_oneway", + id: "oneway_surface", filter: [ "all", ["==", ["get", "oneway"], 1], @@ -67,7 +67,7 @@ export const surface = { export const tunnel = { ...surface, - id: "tunnel_oneway", + id: "oneway_tunnel", filter: [ "all", ["==", ["get", "oneway"], 1], @@ -81,7 +81,7 @@ export const tunnel = { export const bridge = { ...surface, - id: "bridge_oneway", + id: "oneway_bridge", filter: [ "all", ["==", ["get", "oneway"], 1], diff --git a/src/layer/transportation_label.js b/src/layer/transportation_label.js index 5ea963582..1da367753 100644 --- a/src/layer/transportation_label.js +++ b/src/layer/transportation_label.js @@ -176,6 +176,7 @@ export const bridgeSpacer = { "all", ["==", ["get", "brunnel"], "bridge"], ["in", ["geometry-type"], ["literal", ["LineString"]]], + ["!=", ["get", "oneway"], 1], ], paint: { "icon-opacity": 0, From 17ea6e2458114b7d0b2630ae27ee8cfea63efbf0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 20:33:06 -0400 Subject: [PATCH 101/444] Convert to workflow_run trigger --- .github/workflows/build-preview.yml | 35 ++++++++++ ...{deploy-preview.yml => preview-upload.yml} | 0 .github/workflows/s3-upload.yml | 65 +++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 .github/workflows/build-preview.yml rename .github/workflows/{deploy-preview.yml => preview-upload.yml} (100%) create mode 100644 .github/workflows/s3-upload.yml diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml new file mode 100644 index 000000000..c0ce4736a --- /dev/null +++ b/.github/workflows/build-preview.yml @@ -0,0 +1,35 @@ +name: Build PR Preview +on: + pull_request_target: + branches: [main] + types: + - opened + - reopened + - synchronize +permissions: + contents: read + pages: write + pull-requests: write + id-token: write +concurrency: preview-${{ github.ref }} +jobs: + deploy-preview: + runs-on: ubuntu-latest + steps: + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@v3 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + - name: Save PR number + run: | + mkdir -p ./pr + echo ${{ github.event.number }} > ./pr/NR + - name: Install and Build ๐Ÿ”ง + run: | + npm ci --include=dev + npm run build + npm run style + npm run shields + cp src/configs/config.aws.js src/config.js diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/preview-upload.yml similarity index 100% rename from .github/workflows/deploy-preview.yml rename to .github/workflows/preview-upload.yml diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml new file mode 100644 index 000000000..c603665fc --- /dev/null +++ b/.github/workflows/s3-upload.yml @@ -0,0 +1,65 @@ +name: Upload PR Preview +on: + workflow_run: + workflows: ["Build PR Preview"] + types: + - completed +jobs: + deploy-preview: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + steps: + - name: 'Download artifact' + uses: actions/github-script@v3.1.0 + with: + script: | + var artifacts = await github.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: ${{github.event.workflow_run.id }}, + }); + var matchArtifact = artifacts.data.artifacts.filter((artifact) => { + return artifact.name == "pr" + })[0]; + var download = await github.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + var fs = require('fs'); + fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data)); + - run: unzip pr.zip + - name: Set PR variable + run: | + PR_NUM=$(cat pr/NR) + echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV + - name: Deploy via S3 + uses: jakejarvis/s3-sync-action@master + with: + args: --acl public-read --follow-symlinks --delete --exclude '.git/*' --exclude '.github/*' + env: + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + SOURCE_DIR: "./dist" + DEST_DIR: pr/${{ env.PR_NUM }} + - name: Comment Pull Request + uses: thollander/actions-comment-pull-request@v2.3.1 + with: + message: | + PR Preview: + * [Map](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/) + * [Shield Test](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shieldtest.html) + * [style.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/style.json) + * [shields.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shields.json) + * [taginfo.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/taginfo.json) + + Sprite Sheets: + + ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) + ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) + comment_tag: pr_preview From 41edcdacb6fa2eb162b648bf9d9c71d98f6c0afc Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 20:37:15 -0400 Subject: [PATCH 102/444] Change to pull_request, formatting --- .github/workflows/build-preview.yml | 2 +- .github/workflows/s3-upload.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index c0ce4736a..53093eef6 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -1,6 +1,6 @@ name: Build PR Preview on: - pull_request_target: + pull_request: branches: [main] types: - opened diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index c603665fc..65716c5a4 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -11,7 +11,7 @@ jobs: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - - name: 'Download artifact' + - name: "Download artifact" uses: actions/github-script@v3.1.0 with: script: | From f7d0558b3009de7c539687db0108469fb3cb69bd Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 20:40:08 -0400 Subject: [PATCH 103/444] Remove unused workflow --- .github/workflows/preview-upload.yml | 58 ---------------------------- 1 file changed, 58 deletions(-) delete mode 100644 .github/workflows/preview-upload.yml diff --git a/.github/workflows/preview-upload.yml b/.github/workflows/preview-upload.yml deleted file mode 100644 index de9c0f2f7..000000000 --- a/.github/workflows/preview-upload.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Deploy PR Preview -on: - pull_request_target: - branches: [main] - types: - - opened - - reopened - - synchronize -permissions: - contents: read - pages: write - pull-requests: write - id-token: write -concurrency: preview-${{ github.ref }} -jobs: - deploy-preview: - runs-on: ubuntu-latest - steps: - - name: Checkout ๐Ÿ›Ž๏ธ - uses: actions/checkout@v3 - - name: Use Node.js 18.x - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install and Build ๐Ÿ”ง - run: | - npm ci --include=dev - npm run build - npm run style - npm run shields - cp src/configs/config.aws.js src/config.js - - name: Deploy via S3 - uses: jakejarvis/s3-sync-action@master - with: - args: --acl public-read --follow-symlinks --delete --exclude '.git/*' --exclude '.github/*' - env: - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_REGION: ${{ secrets.AWS_REGION }} - SOURCE_DIR: "./dist" - DEST_DIR: pr/${{ github.event.pull_request.number }} - - name: Comment Pull Request - uses: thollander/actions-comment-pull-request@v2.3.1 - with: - message: | - PR Preview: - * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) - * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) - * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) - * [shields.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shields.json) - * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) - - Sprite Sheets: - - ![Sprites 1x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png) - ![Sprites 2x](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png) - comment_tag: pr_preview From c2ca8923df7e8276ddb03862865834415715e6b0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 20:43:30 -0400 Subject: [PATCH 104/444] Add logging --- .github/workflows/build-preview.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 53093eef6..be2aa13bf 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -26,6 +26,7 @@ jobs: run: | mkdir -p ./pr echo ${{ github.event.number }} > ./pr/NR + echo "Saved PR# ${{ github.event_number }} for upload" - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev From 978afb48260f42877783033b0afc2d05fff98135 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 20:46:38 -0400 Subject: [PATCH 105/444] Fix PR# variable name --- .github/workflows/build-preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index be2aa13bf..23ed3e01c 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -25,8 +25,8 @@ jobs: - name: Save PR number run: | mkdir -p ./pr - echo ${{ github.event.number }} > ./pr/NR - echo "Saved PR# ${{ github.event_number }} for upload" + echo ${{ github.event.pull_request.number }} > ./pr/NR + echo "Saved PR# ${{ github.event.pull_request.number }} for upload" - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev From c3b328cd774da72dca164609e08db6eaec8fc676 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 21:19:31 -0400 Subject: [PATCH 106/444] Update .github/workflows/build-preview.yml Co-authored-by: Ariel Kadouri --- .github/workflows/build-preview.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 23ed3e01c..7b7fc8946 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -6,6 +6,7 @@ on: - opened - reopened - synchronize + - workflow_dispatch permissions: contents: read pages: write From 6cade2690a57fc28f13f9ed3a802e6783ee85e98 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 21:40:41 -0400 Subject: [PATCH 107/444] WIP --- scripts/layer.js | 43 +++++++++++++++++++++++++++++++++++++++++++ scripts/stats.js | 21 ++++++++++++++------- 2 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 scripts/layer.js diff --git a/scripts/layer.js b/scripts/layer.js new file mode 100644 index 000000000..6df45ff1b --- /dev/null +++ b/scripts/layer.js @@ -0,0 +1,43 @@ +import * as Style from "../src/js/style.js"; +import config from "../src/config.js"; +import { Command } from "commander"; + +const program = new Command(); +program + .option("-loc, --locales ", "language codes", ["mul"]) + .option("-pp, --pretty", "pretty-print JSON output") + .option("-pl, --print-layer ", "print the JSON of a layer"); +program.parse(process.argv); + +let opts = program.opts(); + +if (Object.keys(opts).length === 1 || !opts.printLayer) { + program.help(); + process.exit(); +} + +let style = Style.build( + config.OPENMAPTILES_URL, + "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + opts.locales +); + +const layers = style.layers; +const layerMap = new Map(); + +for (let i = 0; i < layers.length; i++) { + let layer = layers[i]; + layerMap.set(layer.id, layers[i]); +} + +if(!layerMap.has(opts.printLayer)) { + console.log({}); + process.exit(); +} + +if (opts.pretty) { + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer), null, 2)); +} else { + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer))); +} diff --git a/scripts/stats.js b/scripts/stats.js index c5d7ef9bf..8544de880 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -31,7 +31,7 @@ let style = Style.build( const layers = style.layers; const layerCount = layers.length; -const layerSize = JSON.stringify(layers).length; +const styleSize = JSON.stringify(layers).length; const layerMap = new Map(); const layerGroupMap = new Map(); @@ -39,6 +39,13 @@ const layerSizeStats = new Map(); const layerGroupSizeStats = new Map(); const layerGroupCountStats = new Map(); +const stats = { + layerCount, + styleSize, + layer: {}, + layerGroup: {} +}; + for (let i = 0; i < layers.length; i++) { let layer = layers[i]; layerMap.set(layer.id, layers[i]); @@ -64,7 +71,7 @@ for (let i = 0; i < layers.length; i++) { if (opts.layerCount) { if (opts.json) { - process.stdout.write(JSON.stringify({ layerCount }) + "\n"); + process.stdout.write(JSON.stringify({ layerCount })); } else { console.log(`${layerCount} layers`); } @@ -72,7 +79,7 @@ if (opts.layerCount) { if (opts.layerSize) { if (opts.json) { - process.stdout.write(JSON.stringify({ layerSize }) + "\n"); + process.stdout.write(JSON.stringify({ layerSize })); } else { console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); } @@ -88,7 +95,7 @@ if (opts.allLayers) { let layerCount = layerGroupCountStats.get(k); allLayers.layers[k] = layerCount; }); - process.stdout.write(JSON.stringify(allLayers) + "\n"); + process.stdout.write(JSON.stringify(allLayers)); } else { layerGroupSizeStats.forEach((v, k) => { let layerCount = layerGroupCountStats.get(k); @@ -105,7 +112,7 @@ if (opts.printGroup) { if (opts.json) { let layers = []; group.forEach((lyr) => layers.push(lyr)); - process.stdout.write(JSON.stringify(layers) + "\n"); + process.stdout.write(JSON.stringify(layers)); } else { group.forEach((lyr) => console.log(lyr)); } @@ -114,9 +121,9 @@ if (opts.printGroup) { if (opts.printLayer) { if (opts.pretty) { process.stdout.write( - JSON.stringify(layerMap.get(opts.printLayer), null, 2) + "\n" + JSON.stringify(layerMap.get(opts.printLayer), null, 2) ); } else { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer)) + "\n"); + process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer))); } } From 8c789cec8ff0d9fda1ae50c00b6775ddbabb8a1e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 21:45:12 -0400 Subject: [PATCH 108/444] Fix syntax --- .github/workflows/build-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 7b7fc8946..ac7e8487d 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -6,7 +6,7 @@ on: - opened - reopened - synchronize - - workflow_dispatch + workflow_dispatch: permissions: contents: read pages: write From 0d8be679ec9e6eca751104da93dc88dce67dbbaf Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 22:03:32 -0400 Subject: [PATCH 109/444] Change workflow name --- .github/workflows/s3-upload.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 65716c5a4..437070754 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -1,4 +1,4 @@ -name: Upload PR Preview +name: Deploy PR Preview on: workflow_run: workflows: ["Build PR Preview"] From fc74abc5ac0f864bafefbfdc15874e892ec70356 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 22:04:25 -0400 Subject: [PATCH 110/444] Add workflow_dispatch --- .github/workflows/s3-upload.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 437070754..c39352856 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -4,6 +4,7 @@ on: workflows: ["Build PR Preview"] types: - completed + workflow_dispatch: jobs: deploy-preview: runs-on: ubuntu-latest From 303824ee293a3301c242b9bdb33bfc8c4cc59851 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 22:20:46 -0400 Subject: [PATCH 111/444] Fix workflow syntax --- .github/workflows/s3-upload.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index c39352856..ac733fb41 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -1,7 +1,7 @@ name: Deploy PR Preview on: workflow_run: - workflows: ["Build PR Preview"] + workflows: [Build PR Preview] types: - completed workflow_dispatch: From cd0b0284ed286a99540b5234a3f92549899f6bab Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 22:26:45 -0400 Subject: [PATCH 112/444] Fix spaces --- .github/workflows/s3-upload.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index ac733fb41..cf5040c06 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -19,7 +19,7 @@ jobs: var artifacts = await github.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, - run_id: ${{github.event.workflow_run.id }}, + run_id: ${{ github.event.workflow_run.id }}, }); var matchArtifact = artifacts.data.artifacts.filter((artifact) => { return artifact.name == "pr" @@ -31,7 +31,7 @@ jobs: archive_format: 'zip', }); var fs = require('fs'); - fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data)); + fs.writeFileSync('${{ github.workspace }}/pr.zip', Buffer.from(download.data)); - run: unzip pr.zip - name: Set PR variable run: | From 308fcdd1d068849debdeacacdc51827aedbed3ea Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 20 Jun 2023 22:29:40 -0400 Subject: [PATCH 113/444] Specify PR number --- .github/workflows/s3-upload.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index cf5040c06..911f47d1d 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -64,3 +64,4 @@ jobs: ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) comment_tag: pr_preview + pr_number: ${{ env.PR_NUM }} \ No newline at end of file From 38a7278c0b3fa56ad9ad71aab456cdca77baff9a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 21 Jun 2023 09:41:26 -0400 Subject: [PATCH 114/444] Update s3-upload.yml Update run_id variable --- .github/workflows/s3-upload.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 911f47d1d..53e5deb94 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -19,7 +19,7 @@ jobs: var artifacts = await github.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, - run_id: ${{ github.event.workflow_run.id }}, + run_id: context.payload.workflow_run.id, }); var matchArtifact = artifacts.data.artifacts.filter((artifact) => { return artifact.name == "pr" @@ -64,4 +64,4 @@ jobs: ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) comment_tag: pr_preview - pr_number: ${{ env.PR_NUM }} \ No newline at end of file + pr_number: ${{ env.PR_NUM }} From b864fe77e5e0cb814750f41b294a3deb78cb8ed0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 21 Jun 2023 19:02:20 -0400 Subject: [PATCH 115/444] Fix workflows to match current docs --- .github/workflows/build-preview.yml | 8 +++++++- .github/workflows/s3-upload.yml | 20 +++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ac7e8487d..ce3893c02 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -24,10 +24,16 @@ jobs: with: node-version: 18.x - name: Save PR number + env: + PR_NUMBER: ${{ github.event.pull_request.number }} run: | mkdir -p ./pr - echo ${{ github.event.pull_request.number }} > ./pr/NR + echo $PR_NUMBER > ./pr/pr_number echo "Saved PR# ${{ github.event.pull_request.number }} for upload" + - uses: actions/upload-artifact@v3 + with: + name: pr_number + path: pr/ - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 53e5deb94..2109dc395 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -13,29 +13,31 @@ jobs: github.event.workflow_run.conclusion == 'success' steps: - name: "Download artifact" - uses: actions/github-script@v3.1.0 + uses: actions/github-script@v6 with: script: | - var artifacts = await github.actions.listWorkflowRunArtifacts({ + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: context.payload.workflow_run.id, }); - var matchArtifact = artifacts.data.artifacts.filter((artifact) => { - return artifact.name == "pr" + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "pr_number" })[0]; - var download = await github.actions.downloadArtifact({ + let download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: 'zip', }); - var fs = require('fs'); - fs.writeFileSync('${{ github.workspace }}/pr.zip', Buffer.from(download.data)); - - run: unzip pr.zip + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data)); + + - name: "Unzip artifact" + run: unzip pr_number.zip - name: Set PR variable run: | - PR_NUM=$(cat pr/NR) + PR_NUM=$(cat pr/pr_number) echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV - name: Deploy via S3 uses: jakejarvis/s3-sync-action@master From c444404c796ed497b0ab7aea1316a66ea63039fb Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 21 Jun 2023 19:08:22 -0400 Subject: [PATCH 116/444] Add helpful log output --- .github/workflows/s3-upload.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 2109dc395..19a00fad3 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -37,7 +37,8 @@ jobs: run: unzip pr_number.zip - name: Set PR variable run: | - PR_NUM=$(cat pr/pr_number) + PR_NUM=$(cat pr_number) + echo "Initiatinig deployment for PR# $PR_NUM" echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV - name: Deploy via S3 uses: jakejarvis/s3-sync-action@master From 6a1a3f63b29b8b5879ceac800b7bcadddda3b59b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 21 Jun 2023 19:16:51 -0400 Subject: [PATCH 117/444] Add build to artifacts --- .github/workflows/build-preview.yml | 8 +++++++- .github/workflows/s3-upload.yml | 31 ++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ce3893c02..f42569976 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -30,7 +30,8 @@ jobs: mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number echo "Saved PR# ${{ github.event.pull_request.number }} for upload" - - uses: actions/upload-artifact@v3 + - name: Save PR# + uses: actions/upload-artifact@v3 with: name: pr_number path: pr/ @@ -41,3 +42,8 @@ jobs: npm run style npm run shields cp src/configs/config.aws.js src/config.js + - name: Upload Build artifact + uses: actions/upload-artifact@v3 + with: + name: americana + path: dist/ diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 19a00fad3..351cbc58e 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -12,7 +12,7 @@ jobs: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' steps: - - name: "Download artifact" + - name: "Download PR Number" uses: actions/github-script@v6 with: script: | @@ -32,13 +32,34 @@ jobs: }); let fs = require('fs'); fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data)); - - - name: "Unzip artifact" - run: unzip pr_number.zip + - name: "Download Build" + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "americana" + })[0]; + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/americana.zip`, Buffer.from(download.data)); + - name: "Unzip artifacts" + run: | + unzip pr_number.zip + unzip -d dist americana.zip - name: Set PR variable run: | PR_NUM=$(cat pr_number) - echo "Initiatinig deployment for PR# $PR_NUM" + echo "Configuring deployment for PR# $PR_NUM" echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV - name: Deploy via S3 uses: jakejarvis/s3-sync-action@master From 081fb046fc1c02b4463d23ee0b5137b18708c73f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 21 Jun 2023 21:42:21 -0400 Subject: [PATCH 118/444] Update stats scripts --- CONTRIBUTING.md | 6 +++ scripts/layer.js | 43 ----------------- scripts/stats.js | 118 +++++++++++++++-------------------------------- scripts/util.js | 62 +++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 123 deletions(-) delete mode 100644 scripts/layer.js create mode 100644 scripts/util.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ea878665e..34fbe7f5b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -194,6 +194,12 @@ There is a "stats" script that will generate various statistics about layer comp - `npm run stats -- -c` - total layer count - `npm run stats -- -h` - list all options +There is a "util" script that will extract layer style data: + +- `node scripts/util -pl ` - JSON contents of a specified layer +- `node scripts/util -pg ` - list of layers from a specified source +- `node scripts/util -h` - list all options + ## Layers 1. Layers should be named as followed: `_`, wher the "group" should match the file name that the layer is contained in. This naming convention is needed by the layer statistic script. diff --git a/scripts/layer.js b/scripts/layer.js deleted file mode 100644 index 6df45ff1b..000000000 --- a/scripts/layer.js +++ /dev/null @@ -1,43 +0,0 @@ -import * as Style from "../src/js/style.js"; -import config from "../src/config.js"; -import { Command } from "commander"; - -const program = new Command(); -program - .option("-loc, --locales ", "language codes", ["mul"]) - .option("-pp, --pretty", "pretty-print JSON output") - .option("-pl, --print-layer ", "print the JSON of a layer"); -program.parse(process.argv); - -let opts = program.opts(); - -if (Object.keys(opts).length === 1 || !opts.printLayer) { - program.help(); - process.exit(); -} - -let style = Style.build( - config.OPENMAPTILES_URL, - "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", - "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", - opts.locales -); - -const layers = style.layers; -const layerMap = new Map(); - -for (let i = 0; i < layers.length; i++) { - let layer = layers[i]; - layerMap.set(layer.id, layers[i]); -} - -if(!layerMap.has(opts.printLayer)) { - console.log({}); - process.exit(); -} - -if (opts.pretty) { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer), null, 2)); -} else { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer))); -} diff --git a/scripts/stats.js b/scripts/stats.js index 8544de880..f7258661a 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -7,123 +7,81 @@ program .option("-a, --all-layers", "summary layer stats") .option("-c, --layer-count", "count number of layers") .option("-s, --layer-size", "size of all layers") - .option("-l, --layer ", "stats about one layer") .option("-loc, --locales ", "language codes", ["mul"]) - .option("-pp, --pretty", "pretty-print JSON output") - .option("-j, --json", "output JSON") - .option( - "-pg, --print-group ", - "print a list of the layers in a group" - ) - .option("-pl, --print-layer ", "print the JSON of a layer"); + .option("-j, --all-json", "output all stats in JSON") + .option("-pp, --pretty", "pretty-print JSON output"); + program.parse(process.argv); let opts = program.opts(); if (Object.keys(opts).length === 1) program.help(); +let locales = opts.locales[0].split(","); + let style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", - opts.locales + locales ); const layers = style.layers; const layerCount = layers.length; + +if (opts.layerCount) { + console.log(layerCount); + process.exit(); +} + const styleSize = JSON.stringify(layers).length; +if (opts.layerSize) { + console.log(styleSize); + process.exit(); +} + const layerMap = new Map(); -const layerGroupMap = new Map(); -const layerSizeStats = new Map(); -const layerGroupSizeStats = new Map(); -const layerGroupCountStats = new Map(); const stats = { layerCount, styleSize, - layer: {}, - layerGroup: {} + layerGroup: {}, }; -for (let i = 0; i < layers.length; i++) { +for (let i = 0; i < layerCount; i++) { let layer = layers[i]; layerMap.set(layer.id, layers[i]); let layerSize = JSON.stringify(layer).length; let layerGroup = layer["source-layer"] || layer.source || layer.type; - layerSizeStats.set(layer.id, JSON.stringify(layer).length); - if (!layerGroupSizeStats.has(layerGroup)) { - layerGroupSizeStats.set(layerGroup, layerSize); - layerGroupCountStats.set(layerGroup, 1); - layerGroupMap.set(layerGroup, [layer.id]); - } else { - layerGroupSizeStats.set( - layerGroup, - layerGroupSizeStats.get(layerGroup) + layerSize - ); - layerGroupCountStats.set( - layerGroup, - layerGroupCountStats.get(layerGroup) + 1 - ); - layerGroupMap.get(layerGroup).push(layer.id); - } -} - -if (opts.layerCount) { - if (opts.json) { - process.stdout.write(JSON.stringify({ layerCount })); - } else { - console.log(`${layerCount} layers`); - } -} - -if (opts.layerSize) { - if (opts.json) { - process.stdout.write(JSON.stringify({ layerSize })); + if (stats.layerGroup[layerGroup]) { + stats.layerGroup[layerGroup].size += layerSize; + stats.layerGroup[layerGroup].count++; } else { - console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); - } -} - -if (opts.allLayers) { - if (opts.json) { - let allLayers = { - layerCount, - layers: {}, + stats.layerGroup[layerGroup] = { + size: layerSize, + count: 1, }; - layerGroupSizeStats.forEach((v, k) => { - let layerCount = layerGroupCountStats.get(k); - allLayers.layers[k] = layerCount; - }); - process.stdout.write(JSON.stringify(allLayers)); - } else { - layerGroupSizeStats.forEach((v, k) => { - let layerCount = layerGroupCountStats.get(k); - let layerString = `${k}(${layerCount})`.padEnd(30, "."); - console.log( - `${layerString}${v.toLocaleString("en-US").padStart(10, ".")} bytes` - ); - }); } } -if (opts.printGroup) { - let group = layerGroupMap.get(opts.printGroup); - if (opts.json) { - let layers = []; - group.forEach((lyr) => layers.push(lyr)); - process.stdout.write(JSON.stringify(layers)); +if (opts.allJson) { + if (opts.pretty) { + process.stdout.write(JSON.stringify(stats, null, 2)); } else { - group.forEach((lyr) => console.log(lyr)); + process.stdout.write(JSON.stringify(stats)); } + process.exit(); } -if (opts.printLayer) { - if (opts.pretty) { - process.stdout.write( - JSON.stringify(layerMap.get(opts.printLayer), null, 2) +if (opts.allLayers) { + for (const layerGroup in stats.layerGroup) { + let layerStats = stats.layerGroup[layerGroup]; + let layerString = `${layerGroup}(${layerStats.count})`.padEnd(30, "."); + console.log( + `${layerString}${layerStats.size + .toLocaleString("en-US") + .padStart(10, ".")} bytes` ); - } else { - process.stdout.write(JSON.stringify(layerMap.get(opts.printLayer))); } } diff --git a/scripts/util.js b/scripts/util.js new file mode 100644 index 000000000..7f291df37 --- /dev/null +++ b/scripts/util.js @@ -0,0 +1,62 @@ +import * as Style from "../src/js/style.js"; +import config from "../src/config.js"; +import { Command } from "commander"; + +const program = new Command(); +program + .option("-pp, --pretty", "pretty-print JSON output") + .option( + "-pg, --print-group ", + "print a list of the layers in a group" + ) + .option("-pl, --print-layer ", "print the JSON of a layer") + .option("-loc, --locales ", "language codes", ["mul"]); +program.parse(process.argv); + +let opts = program.opts(); + +if (Object.keys(opts).length === 1) program.help(); + +let locales = opts.locales[0].split(","); + +let style = Style.build( + config.OPENMAPTILES_URL, + "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + locales +); + +const layers = style.layers; +const layerMap = new Map(); +const layerGroupMap = new Map(); + +for (let i = 0; i < layers.length; i++) { + let layer = layers[i]; + layerMap.set(layer.id, layers[i]); + let layerGroup = layer["source-layer"] || layer.source || layer.type; + if (!layerGroupMap.has(layerGroup)) { + layerGroupMap.set(layerGroup, [layer.id]); + } else { + layerGroupMap.get(layerGroup).push(layer.id); + } +} + +let outputObj; + +if (opts.printGroup) { + let group = layerGroupMap.get(opts.printGroup); + let layers = []; + group.forEach((lyr) => layers.push(lyr)); + outputObj = layers; +} + +if (opts.printLayer) { + console.log(layerMap); + outputObj = layerMap.get(opts.printLayer) ?? {}; +} + +if (opts.pretty) { + process.stdout.write(JSON.stringify(outputObj, null, 2)); +} else { + process.stdout.write(JSON.stringify(outputObj)); +} From 39570bd89aa31b1fbc88bea376e7f954bf1c2890 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 19:25:58 -0400 Subject: [PATCH 119/444] Update scripts/util.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Minh Nguyแป…n --- scripts/util.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/util.js b/scripts/util.js index 7f291df37..2efd3fe14 100644 --- a/scripts/util.js +++ b/scripts/util.js @@ -55,8 +55,4 @@ if (opts.printLayer) { outputObj = layerMap.get(opts.printLayer) ?? {}; } -if (opts.pretty) { - process.stdout.write(JSON.stringify(outputObj, null, 2)); -} else { - process.stdout.write(JSON.stringify(outputObj)); -} +process.stdout.write(JSON.stringify(outputObj, null, opts.pretty ? 2 : null)); From 8f522eef97913113e540045bd4114e0341e9f2f4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 19:29:18 -0400 Subject: [PATCH 120/444] Rename to extract_layers --- CONTRIBUTING.md | 8 ++++---- scripts/{util.js => extract_layer.js} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename scripts/{util.js => extract_layer.js} (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 34fbe7f5b..51be9721a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -194,11 +194,11 @@ There is a "stats" script that will generate various statistics about layer comp - `npm run stats -- -c` - total layer count - `npm run stats -- -h` - list all options -There is a "util" script that will extract layer style data: +There is an "extract_layers" script that will extract layer style data: -- `node scripts/util -pl ` - JSON contents of a specified layer -- `node scripts/util -pg ` - list of layers from a specified source -- `node scripts/util -h` - list all options +- `node scripts/extract_layers -pl ` - JSON contents of a specified layer +- `node scripts/extract_layers -pg ` - list of layers from a specified source +- `node scripts/extract_layers -h` - list all options ## Layers diff --git a/scripts/util.js b/scripts/extract_layer.js similarity index 100% rename from scripts/util.js rename to scripts/extract_layer.js From 56379419b99c5e75190fd837bc9c4ef6da481d33 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 19:57:46 -0400 Subject: [PATCH 121/444] Mutex options --- scripts/extract_layer.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/scripts/extract_layer.js b/scripts/extract_layer.js index 2efd3fe14..729327282 100644 --- a/scripts/extract_layer.js +++ b/scripts/extract_layer.js @@ -1,13 +1,15 @@ import * as Style from "../src/js/style.js"; import config from "../src/config.js"; -import { Command } from "commander"; +import { Command, Option } from "commander"; const program = new Command(); program .option("-pp, --pretty", "pretty-print JSON output") - .option( - "-pg, --print-group ", - "print a list of the layers in a group" + .addOption( + new Option( + "-pg, --print-group ", + "print a list of the layers in a group" + ).conflicts("printLayer") ) .option("-pl, --print-layer ", "print the JSON of a layer") .option("-loc, --locales ", "language codes", ["mul"]); @@ -44,14 +46,10 @@ for (let i = 0; i < layers.length; i++) { let outputObj; if (opts.printGroup) { - let group = layerGroupMap.get(opts.printGroup); - let layers = []; - group.forEach((lyr) => layers.push(lyr)); - outputObj = layers; + outputObj = layerGroupMap.get(opts.printGroup); } if (opts.printLayer) { - console.log(layerMap); outputObj = layerMap.get(opts.printLayer) ?? {}; } From 67312c08a96cae2740d92ed7a197bafbb82a3f23 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:01:15 -0400 Subject: [PATCH 122/444] Update docs --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51be9721a..155b8088d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -202,7 +202,7 @@ There is an "extract_layers" script that will extract layer style data: ## Layers -1. Layers should be named as followed: `_`, wher the "group" should match the file name that the layer is contained in. This naming convention is needed by the layer statistic script. +1. Layers must be uniquely named. 2. For performance reasons, it is better to have fewer layers with filters than multiple, simpler layers. 3. Layers are drawn in the order specified in `layer/index.js` using the [Painter's Algorithm](https://en.wikipedia.org/wiki/Painter%27s_algorithm). From 90ca7947092e0d672ab224e87e0e90967e813000 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:30:21 -0400 Subject: [PATCH 123/444] Fix npm scripts --- CONTRIBUTING.md | 12 ++++++------ package.json | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 155b8088d..ed45bf9e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -190,15 +190,15 @@ When adding or changing style layer code, it can be helpful to assess the change There is a "stats" script that will generate various statistics about layer composition and complexity: -- `npm run stats -- -a -s` - overall size and breakdown of layers -- `npm run stats -- -c` - total layer count -- `npm run stats -- -h` - list all options +- `npm run -s stats -- -a -s` - overall size and breakdown of layers +- `npm run -s stats -- -c` - total layer count +- `npm run -s stats -- -h` - list all options There is an "extract_layers" script that will extract layer style data: -- `node scripts/extract_layers -pl ` - JSON contents of a specified layer -- `node scripts/extract_layers -pg ` - list of layers from a specified source -- `node scripts/extract_layers -h` - list all options +- `npm run -s extract_layers -pl ` - JSON contents of a specified layer +- `npm run -s extract_layers -pg ` - list of layers from a specified source +- `npm run -s extract_layers -h` - list all options ## Layers diff --git a/package.json b/package.json index d82733cd3..813895eec 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "code_format": "run-s code_format:prettier code_format:svgo", "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", + "extract_layer": "node scripts/extract_layer", "presprites": "shx rm -rf dist/sprites", "serve": "ts-node scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", From b230b564ac245e1f7f060b142cba48c7dc3b7e68 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:33:32 -0400 Subject: [PATCH 124/444] Change to const --- scripts/extract_layer.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/extract_layer.js b/scripts/extract_layer.js index 729327282..e6eb4cc3b 100644 --- a/scripts/extract_layer.js +++ b/scripts/extract_layer.js @@ -15,13 +15,13 @@ program .option("-loc, --locales ", "language codes", ["mul"]); program.parse(process.argv); -let opts = program.opts(); +const opts = program.opts(); if (Object.keys(opts).length === 1) program.help(); -let locales = opts.locales[0].split(","); +const locales = opts.locales[0].split(","); -let style = Style.build( +const style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", @@ -33,9 +33,9 @@ const layerMap = new Map(); const layerGroupMap = new Map(); for (let i = 0; i < layers.length; i++) { - let layer = layers[i]; + const layer = layers[i]; layerMap.set(layer.id, layers[i]); - let layerGroup = layer["source-layer"] || layer.source || layer.type; + const layerGroup = layer["source-layer"] || layer.source || layer.type; if (!layerGroupMap.has(layerGroup)) { layerGroupMap.set(layerGroup, [layer.id]); } else { From fc881fc46f983328f4c9cb2b8b1df78d317ca7f2 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:38:02 -0400 Subject: [PATCH 125/444] Code cleanup --- scripts/stats.js | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/scripts/stats.js b/scripts/stats.js index f7258661a..df58f2b46 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -13,13 +13,13 @@ program program.parse(process.argv); -let opts = program.opts(); +const opts = program.opts(); if (Object.keys(opts).length === 1) program.help(); -let locales = opts.locales[0].split(","); +const locales = opts.locales[0].split(","); -let style = Style.build( +const style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", @@ -50,10 +50,10 @@ const stats = { }; for (let i = 0; i < layerCount; i++) { - let layer = layers[i]; + const layer = layers[i]; layerMap.set(layer.id, layers[i]); - let layerSize = JSON.stringify(layer).length; - let layerGroup = layer["source-layer"] || layer.source || layer.type; + const layerSize = JSON.stringify(layer).length; + const layerGroup = layer["source-layer"] || layer.source || layer.type; if (stats.layerGroup[layerGroup]) { stats.layerGroup[layerGroup].size += layerSize; stats.layerGroup[layerGroup].count++; @@ -66,11 +66,7 @@ for (let i = 0; i < layerCount; i++) { } if (opts.allJson) { - if (opts.pretty) { - process.stdout.write(JSON.stringify(stats, null, 2)); - } else { - process.stdout.write(JSON.stringify(stats)); - } + process.stdout.write(JSON.stringify(stats, null, opts.pretty ? 2 : null)); process.exit(); } From b1813c0487ebd61ad0919f90bb386cb6b72a8bbd Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:44:09 -0400 Subject: [PATCH 126/444] Set mutex options --- scripts/stats.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/stats.js b/scripts/stats.js index df58f2b46..04b4fd8da 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -1,12 +1,23 @@ import * as Style from "../src/js/style.js"; import config from "../src/config.js"; -import { Command } from "commander"; +import { Command, Option } from "commander"; const program = new Command(); program - .option("-a, --all-layers", "summary layer stats") - .option("-c, --layer-count", "count number of layers") - .option("-s, --layer-size", "size of all layers") + .addOption( + new Option("-a, --all-layers", "summary layer stats") + .conflicts("layerCount") + .conflicts("layerSize") + .conflicts("allJson") + ) + .addOption( + new Option("-c, --layer-count", "count number of layers") + .conflicts("layerSize") + .conflicts("allJson") + ) + .addOption( + new Option("-s, --layer-size", "size of all layers").conflicts("allJson") + ) .option("-loc, --locales ", "language codes", ["mul"]) .option("-j, --all-json", "output all stats in JSON") .option("-pp, --pretty", "pretty-print JSON output"); From 0c9803f7b923035f0348d39236176803c1b46c49 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 20:46:17 -0400 Subject: [PATCH 127/444] Rename to layerCount --- scripts/stats.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/stats.js b/scripts/stats.js index 04b4fd8da..b75ef7f01 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -67,11 +67,11 @@ for (let i = 0; i < layerCount; i++) { const layerGroup = layer["source-layer"] || layer.source || layer.type; if (stats.layerGroup[layerGroup]) { stats.layerGroup[layerGroup].size += layerSize; - stats.layerGroup[layerGroup].count++; + stats.layerGroup[layerGroup].layerCount++; } else { stats.layerGroup[layerGroup] = { size: layerSize, - count: 1, + layerCount: 1, }; } } @@ -84,7 +84,7 @@ if (opts.allJson) { if (opts.allLayers) { for (const layerGroup in stats.layerGroup) { let layerStats = stats.layerGroup[layerGroup]; - let layerString = `${layerGroup}(${layerStats.count})`.padEnd(30, "."); + let layerString = `${layerGroup}(${layerStats.layerCount})`.padEnd(30, "."); console.log( `${layerString}${layerStats.size .toLocaleString("en-US") From 7bdcbc3eee0c504700a812ee7de0b869abe9feee Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 21:33:33 -0400 Subject: [PATCH 128/444] Refactor place icons --- icons/place_dot.svg | 3 ++ ...{star_state_capital.svg => place_star.svg} | 0 ...n_capital.svg => place_star_in_circle.svg} | 0 src/layer/place.js | 28 +++++++++---------- 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 icons/place_dot.svg rename icons/{star_state_capital.svg => place_star.svg} (100%) rename icons/{star_nation_capital.svg => place_star_in_circle.svg} (100%) diff --git a/icons/place_dot.svg b/icons/place_dot.svg new file mode 100644 index 000000000..e4c9b3e14 --- /dev/null +++ b/icons/place_dot.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/star_state_capital.svg b/icons/place_star.svg similarity index 100% rename from icons/star_state_capital.svg rename to icons/place_star.svg diff --git a/icons/star_nation_capital.svg b/icons/place_star_in_circle.svg similarity index 100% rename from icons/star_nation_capital.svg rename to icons/place_star_in_circle.svg diff --git a/src/layer/place.js b/src/layer/place.js index 5335bbfb2..e95deb15d 100644 --- a/src/layer/place.js +++ b/src/layer/place.js @@ -20,18 +20,6 @@ const cityLabelPaint = { "text-halo-blur": labelHaloBlur, }; -const cityIcon = [ - "match", - ["get", "capital"], - 2, - "star_nation_capital", - 3, - "star_state_capital", - 4, - "star_state_capital", - "dot_city", -]; - export const village = { id: "place_village", type: "symbol", @@ -63,7 +51,7 @@ export const village = { [12, 12], ], }, - "icon-image": cityIcon, + "icon-image": "place_city", "icon-size": { base: 1.0, stops: [ @@ -126,7 +114,7 @@ export const town = { [12, 18], ], }, - "icon-image": cityIcon, + "icon-image": "place_city", "icon-size": { base: 1.2, stops: [ @@ -185,7 +173,17 @@ export const city = { [11, 24], ], }, - "icon-image": cityIcon, + "icon-image": [ + "match", + ["get", "capital"], + 2, + "place_star_in_circle", + 3, + "place_star", + 4, + "place_star", + "place_dot", + ], "icon-size": { base: 1.2, stops: [ From a728705a1f2c96cf13925c4765c87241e7adf419 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 22 Jun 2023 21:44:46 -0400 Subject: [PATCH 129/444] Update CONTRIBUTING.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Minh Nguyแป…n --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ed45bf9e6..62a22b609 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -196,9 +196,9 @@ There is a "stats" script that will generate various statistics about layer comp There is an "extract_layers" script that will extract layer style data: -- `npm run -s extract_layers -pl ` - JSON contents of a specified layer -- `npm run -s extract_layers -pg ` - list of layers from a specified source -- `npm run -s extract_layers -h` - list all options +- `npm run -s extract_layer -pl ` - JSON contents of a specified layer +- `npm run -s extract_layer -pg ` - list of layers from a specified source +- `npm run -s extract_layer -h` - list all options ## Layers From b9551dbf3c199d854c68dc1f687f88c6481f4b90 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 23 Jun 2023 18:34:57 -0400 Subject: [PATCH 130/444] Add statistics check --- .github/workflows/build-preview.yml | 45 ++++- CONTRIBUTING.md | 14 +- icons/oneway.svg | 6 - icons/oneway_black.svg | 3 + icons/oneway_white.svg | 3 + package.json | 1 + scripts/extract_layer.js | 56 ++++++ scripts/stats.js | 121 ++++++------ scripts/stats_compare.js | 89 +++++++++ src/layer/index.js | 5 +- src/layer/oneway.js | 296 +++++----------------------- src/layer/transportation_label.js | 1 + test/test_stats_compare.sh | 51 +++++ 13 files changed, 371 insertions(+), 320 deletions(-) delete mode 100644 icons/oneway.svg create mode 100644 icons/oneway_black.svg create mode 100644 icons/oneway_white.svg create mode 100644 scripts/extract_layer.js create mode 100644 scripts/stats_compare.js create mode 100755 test/test_stats_compare.sh diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index f42569976..ce048cda7 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -12,12 +12,31 @@ permissions: pages: write pull-requests: write id-token: write + checks: write concurrency: preview-${{ github.ref }} jobs: deploy-preview: runs-on: ubuntu-latest steps: - - name: Checkout ๐Ÿ›Ž๏ธ + - name: Checkout Main Branch ๐Ÿ›Ž๏ธ + uses: actions/checkout@v3 + with: + ref: main + - name: Install and Build Main Branch ๐Ÿ”ง + run: | + npm ci --include=dev + npm run build + npm run style + npm run shields + cp src/configs/config.aws.js src/config.js + - name: Capture main branch usage statistics + id: main-stats + run: | + MAIN_STATS=$(node scripts/stats.js -j) + echo "MAIN_STATS<> $GITHUB_ENV + echo -e "$MAIN_STATS" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + - name: Checkout PR Branch ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 - name: Use Node.js 18.x uses: actions/setup-node@v3 @@ -42,6 +61,30 @@ jobs: npm run style npm run shields cp src/configs/config.aws.js src/config.js + - name: Capture PR branch usage statistics + id: pr-stats + run: | + PR_STATS=$(node scripts/stats.js -j) + echo "PR_STATS<> $GITHUB_ENV + echo -e "$PR_STATS" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + - name: Compare Stats + id: compare-stats + run: | + mkdir stats + echo '${{ env.MAIN_STATS }}' + echo '${{ env.PR_STATS }}' + node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > stats/stats-difference.md + - name: Print Stats to GitHub Checks + uses: LouisBrunner/checks-action@v1.6.1 + if: always() + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: Performance Metrics + conclusion: neutral + output: | + {"summary":"Style size changes introduced by this PR"} + output_text_description_file: stats/stats-difference.md - name: Upload Build artifact uses: actions/upload-artifact@v3 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ea878665e..62a22b609 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -190,13 +190,19 @@ When adding or changing style layer code, it can be helpful to assess the change There is a "stats" script that will generate various statistics about layer composition and complexity: -- `npm run stats -- -a -s` - overall size and breakdown of layers -- `npm run stats -- -c` - total layer count -- `npm run stats -- -h` - list all options +- `npm run -s stats -- -a -s` - overall size and breakdown of layers +- `npm run -s stats -- -c` - total layer count +- `npm run -s stats -- -h` - list all options + +There is an "extract_layers" script that will extract layer style data: + +- `npm run -s extract_layer -pl ` - JSON contents of a specified layer +- `npm run -s extract_layer -pg ` - list of layers from a specified source +- `npm run -s extract_layer -h` - list all options ## Layers -1. Layers should be named as followed: `_`, wher the "group" should match the file name that the layer is contained in. This naming convention is needed by the layer statistic script. +1. Layers must be uniquely named. 2. For performance reasons, it is better to have fewer layers with filters than multiple, simpler layers. 3. Layers are drawn in the order specified in `layer/index.js` using the [Painter's Algorithm](https://en.wikipedia.org/wiki/Painter%27s_algorithm). diff --git a/icons/oneway.svg b/icons/oneway.svg deleted file mode 100644 index 476bf8103..000000000 --- a/icons/oneway.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/icons/oneway_black.svg b/icons/oneway_black.svg new file mode 100644 index 000000000..825ab153d --- /dev/null +++ b/icons/oneway_black.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/oneway_white.svg b/icons/oneway_white.svg new file mode 100644 index 000000000..70dc2aae4 --- /dev/null +++ b/icons/oneway_white.svg @@ -0,0 +1,3 @@ + + + diff --git a/package.json b/package.json index d82733cd3..813895eec 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "code_format": "run-s code_format:prettier code_format:svgo", "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", + "extract_layer": "node scripts/extract_layer", "presprites": "shx rm -rf dist/sprites", "serve": "ts-node scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", diff --git a/scripts/extract_layer.js b/scripts/extract_layer.js new file mode 100644 index 000000000..e6eb4cc3b --- /dev/null +++ b/scripts/extract_layer.js @@ -0,0 +1,56 @@ +import * as Style from "../src/js/style.js"; +import config from "../src/config.js"; +import { Command, Option } from "commander"; + +const program = new Command(); +program + .option("-pp, --pretty", "pretty-print JSON output") + .addOption( + new Option( + "-pg, --print-group ", + "print a list of the layers in a group" + ).conflicts("printLayer") + ) + .option("-pl, --print-layer ", "print the JSON of a layer") + .option("-loc, --locales ", "language codes", ["mul"]); +program.parse(process.argv); + +const opts = program.opts(); + +if (Object.keys(opts).length === 1) program.help(); + +const locales = opts.locales[0].split(","); + +const style = Style.build( + config.OPENMAPTILES_URL, + "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + locales +); + +const layers = style.layers; +const layerMap = new Map(); +const layerGroupMap = new Map(); + +for (let i = 0; i < layers.length; i++) { + const layer = layers[i]; + layerMap.set(layer.id, layers[i]); + const layerGroup = layer["source-layer"] || layer.source || layer.type; + if (!layerGroupMap.has(layerGroup)) { + layerGroupMap.set(layerGroup, [layer.id]); + } else { + layerGroupMap.get(layerGroup).push(layer.id); + } +} + +let outputObj; + +if (opts.printGroup) { + outputObj = layerGroupMap.get(opts.printGroup); +} + +if (opts.printLayer) { + outputObj = layerMap.get(opts.printLayer) ?? {}; +} + +process.stdout.write(JSON.stringify(outputObj, null, opts.pretty ? 2 : null)); diff --git a/scripts/stats.js b/scripts/stats.js index 26662d65e..b75ef7f01 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -1,93 +1,94 @@ import * as Style from "../src/js/style.js"; import config from "../src/config.js"; -import { Command } from "commander"; +import { Command, Option } from "commander"; const program = new Command(); program - .option("-a, --all-layers", "summary layer stats") - .option("-c, --layer-count", "count number of layers") - .option("-s, --layer-size", "size of all layers") - .option("-l, --layer ", "stats about one layer") - .option("-loc, --locales ", "language codes", ["mul"]) - .option("-pp, --pretty", "pretty-print JSON output") - .option( - "-pg, --print-group ", - "print a list of the layers in a group" + .addOption( + new Option("-a, --all-layers", "summary layer stats") + .conflicts("layerCount") + .conflicts("layerSize") + .conflicts("allJson") + ) + .addOption( + new Option("-c, --layer-count", "count number of layers") + .conflicts("layerSize") + .conflicts("allJson") ) - .option("-pl, --print-layer ", "print the JSON of a layer"); + .addOption( + new Option("-s, --layer-size", "size of all layers").conflicts("allJson") + ) + .option("-loc, --locales ", "language codes", ["mul"]) + .option("-j, --all-json", "output all stats in JSON") + .option("-pp, --pretty", "pretty-print JSON output"); + program.parse(process.argv); -let opts = program.opts(); +const opts = program.opts(); if (Object.keys(opts).length === 1) program.help(); -let style = Style.build( +const locales = opts.locales[0].split(","); + +const style = Style.build( config.OPENMAPTILES_URL, "https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite", "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", - opts.locales + locales ); const layers = style.layers; const layerCount = layers.length; -const layerSize = JSON.stringify(layers).length; + +if (opts.layerCount) { + console.log(layerCount); + process.exit(); +} + +const styleSize = JSON.stringify(layers).length; + +if (opts.layerSize) { + console.log(styleSize); + process.exit(); +} const layerMap = new Map(); -const layerGroupMap = new Map(); -const layerSizeStats = new Map(); -const layerGroupSizeStats = new Map(); -const layerGroupCountStats = new Map(); -for (let i = 0; i < layers.length; i++) { - let layer = layers[i]; +const stats = { + layerCount, + styleSize, + layerGroup: {}, +}; + +for (let i = 0; i < layerCount; i++) { + const layer = layers[i]; layerMap.set(layer.id, layers[i]); - let layerSize = JSON.stringify(layer).length; - let layerGroup = layer.id.split("_", 1)[0]; - layerSizeStats.set(layer.id, JSON.stringify(layer).length); - if (!layerGroupSizeStats.has(layerGroup)) { - layerGroupSizeStats.set(layerGroup, layerSize); - layerGroupCountStats.set(layerGroup, 1); - layerGroupMap.set(layerGroup, [layer.id]); + const layerSize = JSON.stringify(layer).length; + const layerGroup = layer["source-layer"] || layer.source || layer.type; + if (stats.layerGroup[layerGroup]) { + stats.layerGroup[layerGroup].size += layerSize; + stats.layerGroup[layerGroup].layerCount++; } else { - layerGroupSizeStats.set( - layerGroup, - layerGroupSizeStats.get(layerGroup) + layerSize - ); - layerGroupCountStats.set( - layerGroup, - layerGroupCountStats.get(layerGroup) + 1 - ); - layerGroupMap.get(layerGroup).push(layer.id); + stats.layerGroup[layerGroup] = { + size: layerSize, + layerCount: 1, + }; } } -if (opts.layerCount) { - console.log(`${layerCount} layers`); -} - -if (opts.layerSize) { - console.log(`Total layer size ${layerSize.toLocaleString("en-US")} bytes`); +if (opts.allJson) { + process.stdout.write(JSON.stringify(stats, null, opts.pretty ? 2 : null)); + process.exit(); } if (opts.allLayers) { - console.log(`${layerCount} layers, grouped as follows:`); - layerGroupSizeStats.forEach((v, k) => { - let layerCount = layerGroupCountStats.get(k); - let layerString = `${k}(${layerCount})`.padEnd(30, "."); + for (const layerGroup in stats.layerGroup) { + let layerStats = stats.layerGroup[layerGroup]; + let layerString = `${layerGroup}(${layerStats.layerCount})`.padEnd(30, "."); console.log( - `${layerString}${v.toLocaleString("en-US").padStart(10, ".")} bytes` + `${layerString}${layerStats.size + .toLocaleString("en-US") + .padStart(10, ".")} bytes` ); - }); -} - -if (opts.printGroup) { - layerGroupMap.get(opts.printGroup).forEach((lyr) => console.log(lyr)); -} - -if (opts.printLayer) { - if (opts.pretty) { - console.log(JSON.stringify(layerMap.get(opts.printLayer), null, 2)); - } else { - console.log(JSON.stringify(layerMap.get(opts.printLayer))); } } diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js new file mode 100644 index 000000000..488ea9a6d --- /dev/null +++ b/scripts/stats_compare.js @@ -0,0 +1,89 @@ +function calculateDifference(object1, object2) { + const difference = {}; + + for (const key in object1) { + if (typeof object1[key] === "object") { + difference[key] = calculateDifference(object1[key], object2[key]); + } else if (typeof object1[key] === "number") { + difference[key] = object2[key] - object1[key]; + } + } + + return difference; +} + +const stats1 = JSON.parse(process.argv[2]); +const stats2 = JSON.parse(process.argv[3]); + +const difference = calculateDifference(stats1, stats2); + +const pctFormat = { + style: "percent", + minimumFractionDigits: 1, + maximumFractionDigits: 1, + signDisplay: "exceptZero", +}; + +const summaryChange = ` + +## Style size statistics + +| | main | this PR | change | % change | +|-----------|--------------:|-------------:|----------------:|----------------:| +| Layers | ${stats1.layerCount} | ${stats2.layerCount} | ${ + difference.layerCount +} | ${((100 * difference.layerCount) / stats1.layerCount).toLocaleString( + undefined, + pctFormat +)} | +| Size (b) | ${stats1.styleSize.toLocaleString( + "en" +)} | ${stats2.styleSize.toLocaleString( + "en" +)} | ${difference.styleSize.toLocaleString("en")} | ${( + (100 * difference.styleSize) / + stats1.styleSize +).toLocaleString(undefined, pctFormat)} + +`; + +let layerCountChange = ` + +## Layer count comparison + +| | main | this PR | change | % change | +|-----------|--------------:|-------------:|----------------:|----------------:| +`; + +for (const layer in difference.layerGroup) { + layerCountChange += `${layer} | ${stats1.layerGroup[layer].layerCount} | ${ + stats2.layerGroup[layer].layerCount + } | ${difference.layerGroup[layer].layerCount} | ${( + difference.layerGroup[layer].layerCount / + stats1.layerGroup[layer].layerCount + ).toLocaleString(undefined, pctFormat)} +`; +} + +let layerSizeChange = ` + +## Layer size comparison + +| | main | this PR | change | % change | +|-----------|--------------:|-------------:|----------------:|----------------:| +`; + +for (const layer in difference.layerGroup) { + layerSizeChange += `${layer} | ${stats1.layerGroup[layer].size.toLocaleString( + "en" + )} | ${stats2.layerGroup[layer].size.toLocaleString( + "en" + )} | ${difference.layerGroup[layer].size.toLocaleString("en")} | ${( + difference.layerGroup[layer].size / stats1.layerGroup[layer].size + ).toLocaleString(undefined, pctFormat)} +`; +} + +console.log(summaryChange); +console.log(layerCountChange); +console.log(layerSizeChange); diff --git a/src/layer/index.js b/src/layer/index.js index 0aa3d8ecd..95fada71d 100644 --- a/src/layer/index.js +++ b/src/layer/index.js @@ -78,7 +78,6 @@ export function build(locales) { lyrRoad.roadTunnel.fill(), lyrOneway.tunnel, - lyrOneway.tunnelLink, lyrFerry.ferry, @@ -136,8 +135,7 @@ export function build(locales) { lyrRail.railway.fill(), - lyrOneway.road, - lyrOneway.link, + lyrOneway.surface, lyrAerialway.dragLift ); @@ -197,7 +195,6 @@ export function build(locales) { lyrRail.railwayBridge.fill(), lyrOneway.bridge, - lyrOneway.bridgeLink, ]; layers.push(...lyrRail.getLayerSeparatedBridgeLayers(bridgeLayers)); diff --git a/src/layer/oneway.js b/src/layer/oneway.js index ea8438bf9..47253b9c6 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -1,285 +1,91 @@ "use strict"; -export const road = { - id: "road_oneway", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, +// Common expressions +const highwaySelector = ["match", ["get", "class"]]; + +export const surface = { + id: "oneway_surface", filter: [ "all", ["==", ["get", "oneway"], 1], - ["!", ["in", ["get", "brunnel"], ["literal", ["bridge", "tunnel"]]]], ["!=", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], - [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - ], + ["!", ["in", ["get", "brunnel"], ["literal", ["bridge", "tunnel"]]]], ], - layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, source: "openmaptiles", - minzoom: 15, "source-layer": "transportation", -}; - -export const tunnel = { - id: "tunnel_oneway", type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", ["get", "oneway"], 1], - ["==", ["get", "brunnel"], "tunnel"], - ["!=", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], - [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], - ], - }, - "icon-image": "oneway", - visibility: "visible", - //"icon-rotate": 90, - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", minzoom: 15, - "source-layer": "transportation", -}; -export const bridge = { - id: "bridge_oneway", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", ["get", "oneway"], 1], - ["==", ["get", "brunnel"], "bridge"], - ["!=", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], + layout: { + "icon-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 15, + [...highwaySelector, ["motorway", "trunk", "primary"], 0.5, 0.3], + 19, [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], + ...highwaySelector, + ["motorway", "trunk", "primary"], + 1, + "secondary", + 0.8, + 0.6, ], ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.5], - [19, 1], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", - minzoom: 15, - "source-layer": "transportation", -}; - -export const link = { - id: "road_oneway_link", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, - filter: [ - "all", - ["==", ["get", "oneway"], 1], - ["!", ["in", ["get", "brunnel"], ["literal", ["bridge", "tunnel"]]]], - ["==", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], + "icon-image": [ + "match", + ["get", "brunnel"], + "tunnel", + "oneway_black", [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], + "match", + ["get", "toll"], + 1, + "oneway_black", + [...highwaySelector, "motorway", "oneway_white", "oneway_black"], ], ], - ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", visibility: "visible", "icon-padding": 2, - "symbol-spacing": 75, + "symbol-spacing": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 15, + 75, + 19, + 300, + ], "symbol-placement": "line", "icon-rotation-alignment": "map", }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", -}; - -export const tunnelLink = { - id: "tunnel_oneway_link", - type: "symbol", paint: { "icon-opacity": 0.5, }, +}; + +export const tunnel = { + ...surface, + id: "oneway_tunnel", filter: [ "all", ["==", ["get", "oneway"], 1], + ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "tunnel"], - ["==", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], - [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - ], ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", - visibility: "visible", - //"icon-rotate": 90, - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", + paint: { + "icon-opacity": 0.2, }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", }; -export const bridgeLink = { - id: "bridge_oneway_link", - type: "symbol", - paint: { - "icon-opacity": 0.5, - }, +export const bridge = { + ...surface, + id: "oneway_bridge", filter: [ "all", ["==", ["get", "oneway"], 1], + ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "bridge"], - ["==", ["get", "ramp"], 1], - [ - "in", - ["get", "class"], - [ - "literal", - [ - "motorway", - // "trunk", - // "primary", - // "secondary", - // "tertiary", - // "minor", - // "service", - ], - ], - ], ], - layout: { - "icon-size": { - stops: [ - [15, 0.3], - [19, 0.8], - ], - }, - "icon-image": "oneway", - visibility: "visible", - "icon-padding": 2, - "symbol-spacing": 75, - "symbol-placement": "line", - "icon-rotation-alignment": "map", - }, - source: "openmaptiles", - minzoom: 16, - "source-layer": "transportation", }; diff --git a/src/layer/transportation_label.js b/src/layer/transportation_label.js index 5ea963582..1da367753 100644 --- a/src/layer/transportation_label.js +++ b/src/layer/transportation_label.js @@ -176,6 +176,7 @@ export const bridgeSpacer = { "all", ["==", ["get", "brunnel"], "bridge"], ["in", ["geometry-type"], ["literal", ["LineString"]]], + ["!=", ["get", "oneway"], 1], ], paint: { "icon-opacity": 0, diff --git a/test/test_stats_compare.sh b/test/test_stats_compare.sh new file mode 100755 index 000000000..bfea3b6de --- /dev/null +++ b/test/test_stats_compare.sh @@ -0,0 +1,51 @@ +#!/bin/sh +DATA1=$(cat <<-EOM +{ + "layerCount": 349, + "styleSize": 1005817, + "layerGroup": { + "background": { "size": 122, "count": 1 }, + "landuse": { "size": 309, "count": 1 }, + "park": { "size": 2365, "count": 3 }, + "aeroway": { "size": 2059, "count": 7 }, + "landcover": { "size": 361, "count": 2 }, + "boundary": { "size": 13691, "count": 9 }, + "water": { "size": 912, "count": 3 }, + "waterway": { "size": 3543, "count": 3 }, + "transportation": { "size": 920221, "count": 299 }, + "building": { "size": 292, "count": 1 }, + "transportation_name": { "size": 8838, "count": 3 }, + "poi": { "size": 10094, "count": 2 }, + "water_name": { "size": 4647, "count": 2 }, + "aerodrome_label": { "size": 5951, "count": 4 }, + "place": { "size": 32062, "count": 9 } + } +} +EOM +) +DATA2=$(cat <<-EOM +{ + "layerCount": 351, + "styleSize": 1004717, + "layerGroup": { + "background": { "size": 122, "count": 1 }, + "landuse": { "size": 309, "count": 1 }, + "park": { "size": 2365, "count": 3 }, + "aeroway": { "size": 2059, "count": 7 }, + "landcover": { "size": 361, "count": 2 }, + "boundary": { "size": 13991, "count": 9 }, + "water": { "size": 901, "count": 1 }, + "waterway": { "size": 3743, "count": 5 }, + "transportation": { "size": 920221, "count": 299 }, + "building": { "size": 292, "count": 1 }, + "transportation_name": { "size": 8838, "count": 3 }, + "poi": { "size": 10094, "count": 2 }, + "water_name": { "size": 4647, "count": 2 }, + "aerodrome_label": { "size": 5951, "count": 4 }, + "place": { "size": 32062, "count": 9 } + } +} +EOM +) + +node scripts/stats_compare.js "$DATA1" "$DATA2" From f7cf152a61a21abcf41d33fa557f21312ecd7c00 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 23 Jun 2023 18:43:46 -0400 Subject: [PATCH 131/444] Generate PR preview --- .github/workflows/build-preview.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ce048cda7..b4b00c59c 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -90,3 +90,27 @@ jobs: with: name: americana path: dist/ + - name: Generate Preview text + run: | + echo "## PR Preview: + * [Map](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/) + * [Shield Test](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shieldtest.html) + * [style.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/style.json) + * [shields.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shields.json) + * [taginfo.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/taginfo.json) + + ## Sprite Sheets: + + ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) + ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) + " > pr_preview.md + - name: Print Preview Links to GitHub Checks + uses: LouisBrunner/checks-action@v1.6.1 + if: always() + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: PR Preview + conclusion: neutral + output: | + {"summary":"Preview map changes introduced by this PR"} + output_text_description_file: pr_preview.md From c653d1eec0d7b64e729723b0d2277be9f257cc7b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 23 Jun 2023 18:49:00 -0400 Subject: [PATCH 132/444] Move preview to tab --- .github/workflows/build-preview.yml | 4 ++-- .github/workflows/s3-upload.yml | 17 ----------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index b4b00c59c..3d6784c57 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -101,8 +101,8 @@ jobs: ## Sprite Sheets: - ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) - ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) + * [Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) + * [Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) " > pr_preview.md - name: Print Preview Links to GitHub Checks uses: LouisBrunner/checks-action@v1.6.1 diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 351cbc58e..81dc0df57 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -72,20 +72,3 @@ jobs: AWS_REGION: ${{ secrets.AWS_REGION }} SOURCE_DIR: "./dist" DEST_DIR: pr/${{ env.PR_NUM }} - - name: Comment Pull Request - uses: thollander/actions-comment-pull-request@v2.3.1 - with: - message: | - PR Preview: - * [Map](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/) - * [Shield Test](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shieldtest.html) - * [style.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/style.json) - * [shields.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shields.json) - * [taginfo.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/taginfo.json) - - Sprite Sheets: - - ![Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) - ![Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) - comment_tag: pr_preview - pr_number: ${{ env.PR_NUM }} From c73f44619f2e2f737ddc4fd4fb66126906d2c5e0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 23 Jun 2023 18:50:34 -0400 Subject: [PATCH 133/444] Convert to img tags --- .github/workflows/build-preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 3d6784c57..ad6421f18 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -101,8 +101,8 @@ jobs: ## Sprite Sheets: - * [Sprites 1x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png) - * [Sprites 2x](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png) + + " > pr_preview.md - name: Print Preview Links to GitHub Checks uses: LouisBrunner/checks-action@v1.6.1 From 735ddc661413c1ad73edbee4d5bf34092be08e8a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 23 Jun 2023 19:00:34 -0400 Subject: [PATCH 134/444] Wait for image upload --- .github/workflows/build-preview.yml | 24 ------------ .github/workflows/pr-preview-check.yml | 53 ++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/pr-preview-check.yml diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ad6421f18..ce048cda7 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -90,27 +90,3 @@ jobs: with: name: americana path: dist/ - - name: Generate Preview text - run: | - echo "## PR Preview: - * [Map](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/) - * [Shield Test](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shieldtest.html) - * [style.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/style.json) - * [shields.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shields.json) - * [taginfo.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/taginfo.json) - - ## Sprite Sheets: - - - - " > pr_preview.md - - name: Print Preview Links to GitHub Checks - uses: LouisBrunner/checks-action@v1.6.1 - if: always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - name: PR Preview - conclusion: neutral - output: | - {"summary":"Preview map changes introduced by this PR"} - output_text_description_file: pr_preview.md diff --git a/.github/workflows/pr-preview-check.yml b/.github/workflows/pr-preview-check.yml new file mode 100644 index 000000000..4577db136 --- /dev/null +++ b/.github/workflows/pr-preview-check.yml @@ -0,0 +1,53 @@ +name: Generate PR Preview Check +on: + pull_request: + branches: [main] + types: + - opened + - reopened + - synchronize + workflow_dispatch: +permissions: + checks: write +jobs: + deploy-preview: + runs-on: ubuntu-latest + steps: + - name: Wait for PR Preview Upload (1x Sprite) + uses: cygnetdigital/wait_for_response@v2.0.0 + with: + url: "https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png" + responseCode: "200" + timeout: 120000 + interval: 500 + - name: Wait for PR Preview Upload (2x Sprite) + uses: cygnetdigital/wait_for_response@v2.0.0 + with: + url: "https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png" + responseCode: "200" + timeout: 120000 + interval: 500 + - name: Generate Preview text + run: | + echo "## PR Preview: + * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) + * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) + * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) + * [shields.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shields.json) + * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) + + ## Sprite Sheets: + + + + " > pr_preview.md + - name: Print Preview Links to GitHub Checks + uses: LouisBrunner/checks-action@v1.6.1 + if: always() + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: PR Preview + conclusion: neutral + output: | + {"summary":"Preview map changes introduced by this PR"} + output_text_description_file: pr_preview.md From 98c7b899ce8690400d34d96b84ad8f8d4be33f47 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:09:28 -0400 Subject: [PATCH 135/444] Don't autofocus the map within an iframe (re: #884) --- src/americana.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/americana.js b/src/americana.js index 3d22e098d..95855becc 100644 --- a/src/americana.js +++ b/src/americana.js @@ -91,7 +91,10 @@ function shieldDefLoad(shields) { map.addControl(legendControl, "bottom-left"); map.addControl(sampleControl, "bottom-left"); - map.getCanvas().focus(); + if (window.top === window.self) { + // if not embedded in an iframe, autofocus canvas to enable keyboard shortcuts + map.getCanvas().focus(); + } map.addControl(new maplibregl.AttributionControl(attributionConfig)); map.addControl(languageLabel.label, "bottom-right"); From 4b766e16e76c919b3234f5da7f5cbbacd59afe23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 23 Mar 2023 23:15:15 -0700 Subject: [PATCH 136/444] Added shield for John Hunt Morgan Heritage Trail in Ohio --- icons/shield_us_oh_jhmht.svg | 7 +++++++ src/js/shield_defs.js | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 icons/shield_us_oh_jhmht.svg diff --git a/icons/shield_us_oh_jhmht.svg b/icons/shield_us_oh_jhmht.svg new file mode 100644 index 000000000..73b99f5bf --- /dev/null +++ b/icons/shield_us_oh_jhmht.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 62dd82cab..e5f6a135f 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2673,6 +2673,10 @@ export function loadShields() { (shields[`US:OH:${countyAndTownship[0]}:${countyAndTownship[1]}`] = banneredShield(shields[`US:OH:${countyAndTownship[0]}`], ["TWP"])) ); + shields["US:OH:JHMHT"] = { + spriteBlank: ["shield_us_oh_jhmht"], + notext: true, + }; // Oklahoma shields["US:OK"] = { From db567c4ede61e51854684d78d3fe4e1256411c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Tue, 27 Jun 2023 08:53:00 -0700 Subject: [PATCH 137/444] Narrowed, abbreviated JHMHT shield --- icons/shield_us_oh_jhmht.svg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/icons/shield_us_oh_jhmht.svg b/icons/shield_us_oh_jhmht.svg index 73b99f5bf..8e1c1d498 100644 --- a/icons/shield_us_oh_jhmht.svg +++ b/icons/shield_us_oh_jhmht.svg @@ -1,7 +1,7 @@ - - - - - - + + + + + + From 07383876fc46b7facb913588dcce4496ed4c607a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Tue, 27 Jun 2023 09:53:12 -0700 Subject: [PATCH 138/444] Restored complete Ohio border on JHMHT shield --- icons/shield_us_oh_jhmht.svg | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/icons/shield_us_oh_jhmht.svg b/icons/shield_us_oh_jhmht.svg index 8e1c1d498..189b99d38 100644 --- a/icons/shield_us_oh_jhmht.svg +++ b/icons/shield_us_oh_jhmht.svg @@ -1,7 +1,6 @@ - - - + + From feabf84b0de121d3caf31ed1d768fb11149e4548 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 3 Jul 2023 09:45:27 -0400 Subject: [PATCH 139/444] Consolidate city icon styling --- icons/dot_city.svg | 3 --- icons/place_dot.svg | 4 +-- src/layer/place.js | 60 +++++++++++++++++---------------------------- 3 files changed, 25 insertions(+), 42 deletions(-) delete mode 100644 icons/dot_city.svg diff --git a/icons/dot_city.svg b/icons/dot_city.svg deleted file mode 100644 index d6677ac9b..000000000 --- a/icons/dot_city.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/icons/place_dot.svg b/icons/place_dot.svg index e4c9b3e14..d6677ac9b 100644 --- a/icons/place_dot.svg +++ b/icons/place_dot.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/layer/place.js b/src/layer/place.js index e95deb15d..a034b8d32 100644 --- a/src/layer/place.js +++ b/src/layer/place.js @@ -20,27 +20,29 @@ const cityLabelPaint = { "text-halo-blur": labelHaloBlur, }; +const minorLocationStepFilter = [ + "step", + ["zoom"], + ["<=", ["get", "rank"], 2], + 6, + ["<=", ["get", "rank"], 4], + 7, + ["<=", ["get", "rank"], 5], + 8, + ["<=", ["get", "rank"], 9], + 10, + [">=", ["get", "rank"], 1], +]; + +function filterPlace(type) { + return ["==", ["get", "class"], type]; +} + export const village = { id: "place_village", type: "symbol", paint: cityLabelPaint, - filter: [ - "all", - ["==", ["get", "class"], "village"], - [ - "step", - ["zoom"], - ["<=", ["get", "rank"], 2], - 6, - ["<=", ["get", "rank"], 4], - 7, - ["<=", ["get", "rank"], 5], - 8, - ["<=", ["get", "rank"], 9], - 10, - [">=", ["get", "rank"], 1], - ], - ], + filter: ["all", filterPlace("village"), minorLocationStepFilter], layout: { "text-font": ["Americana-Bold"], "text-size": { @@ -51,7 +53,7 @@ export const village = { [12, 12], ], }, - "icon-image": "place_city", + "icon-image": "place_dot", "icon-size": { base: 1.0, stops: [ @@ -87,23 +89,7 @@ export const town = { id: "place_town", type: "symbol", paint: cityLabelPaint, - filter: [ - "all", - ["==", ["get", "class"], "town"], - [ - "step", - ["zoom"], - ["<=", ["get", "rank"], 2], - 6, - ["<=", ["get", "rank"], 4], - 7, - ["<=", ["get", "rank"], 5], - 8, - ["<=", ["get", "rank"], 9], - 10, - [">=", ["get", "rank"], 1], - ], - ], + filter: ["all", filterPlace("town"), minorLocationStepFilter], layout: { "text-font": ["Americana-Bold"], "text-size": { @@ -114,7 +100,7 @@ export const town = { [12, 18], ], }, - "icon-image": "place_city", + "icon-image": "place_dot", "icon-size": { base: 1.2, stops: [ @@ -152,7 +138,7 @@ export const city = { paint: cityLabelPaint, filter: [ "all", - ["==", ["get", "class"], "city"], + filterPlace("city"), [ "step", ["zoom"], From bcfcc06a431024ec7e4f1a53ffd68e4873d47731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 3 Jul 2023 23:58:38 -0700 Subject: [PATCH 140/444] =?UTF-8?q?Added=20shield=20for=20Indiana=E2=80=99?= =?UTF-8?q?s=20John=20Hunt=20Morgan=20Heritage=20Trail=20(#891)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- icons/shield_us_in_jhmht.svg | 6 ++++++ src/js/shield_defs.js | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 icons/shield_us_in_jhmht.svg diff --git a/icons/shield_us_in_jhmht.svg b/icons/shield_us_in_jhmht.svg new file mode 100644 index 000000000..af9bc36e1 --- /dev/null +++ b/icons/shield_us_in_jhmht.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index e5f6a135f..1949d4580 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1710,6 +1710,10 @@ export function loadShields() { spriteBlank: "shield_us_in_toll", }, }; + shields["US:IN:JHMHT"] = { + spriteBlank: ["shield_us_in_jhmht"], + notext: true, + }; // Kansas shields["US:KS"] = { From c2fc6a8b720fb5310cbece0ca0cd411d01866c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sat, 8 Jul 2023 20:36:09 -0700 Subject: [PATCH 141/444] Desuperlatized the readme --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 60dbaef55..f30973377 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,18 @@ _A quintessentially American map style_ [๐Ÿ—บ View the map](https://zelonewolf.g The purpose of the Americana style is to: -- Promote collaboration and common purpose in the American mapping community +- Promote collaboration and common purpose in OpenStreetMapโ€™s American mapping community - Express the American experience through cartography, taking inspiration from the familiar features of North American paper maps - Challenge the status quo by showcasing innovation and invention -The Americana style is the first digital map to achieve concurrent, state-specific highway shields arranged along the path of road. Representative highway shield rendering is of considerable cartographic importance to the American community. We do this proudly in an open source project using vector tile technology. +Americana has pioneered several cartographic techniques of importance to Americans that we hope will someday become commonplace among OpenStreetMap-based map styles: + +- Nuanced line styles help you distinguish roads, raiload tracks, and waterways based on a variety of intuitive characteristics. +- Highway routes are identified by shields that resemble the signs on the road, with special support for roads that carry multiple routes concurrently. +- Place labels throughout the world appear in both your preferred language and the local language, reflecting linguistic diversity both in the U.S. and abroad. +- A dynamic legend communicates these design choices intuitively, regardless of the visual language youโ€™re accustomed to. + +We do this proudly in an open source project using vector tile technology. ## How to use From 0cb23e9ae64eb7cf2b950195f93b61fbf77f56b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sat, 8 Jul 2023 20:38:57 -0700 Subject: [PATCH 142/444] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f30973377..e66cfa097 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The purpose of the Americana style is to: - Express the American experience through cartography, taking inspiration from the familiar features of North American paper maps - Challenge the status quo by showcasing innovation and invention -Americana has pioneered several cartographic techniques of importance to Americans that we hope will someday become commonplace among OpenStreetMap-based map styles: +Americana has demonstrated or pioneered several cartographic techniques of importance to Americans that we hope will someday become commonplace among OpenStreetMap-based map styles: - Nuanced line styles help you distinguish roads, raiload tracks, and waterways based on a variety of intuitive characteristics. - Highway routes are identified by shields that resemble the signs on the road, with special support for roads that carry multiple routes concurrently. From 9e97c420de9f07ff08174135ae0f42424ad53969 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 9 Jul 2023 10:42:54 -0400 Subject: [PATCH 143/444] Remove old dev artifact --- test/test_stats_compare.sh | 51 -------------------------------------- 1 file changed, 51 deletions(-) delete mode 100755 test/test_stats_compare.sh diff --git a/test/test_stats_compare.sh b/test/test_stats_compare.sh deleted file mode 100755 index bfea3b6de..000000000 --- a/test/test_stats_compare.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -DATA1=$(cat <<-EOM -{ - "layerCount": 349, - "styleSize": 1005817, - "layerGroup": { - "background": { "size": 122, "count": 1 }, - "landuse": { "size": 309, "count": 1 }, - "park": { "size": 2365, "count": 3 }, - "aeroway": { "size": 2059, "count": 7 }, - "landcover": { "size": 361, "count": 2 }, - "boundary": { "size": 13691, "count": 9 }, - "water": { "size": 912, "count": 3 }, - "waterway": { "size": 3543, "count": 3 }, - "transportation": { "size": 920221, "count": 299 }, - "building": { "size": 292, "count": 1 }, - "transportation_name": { "size": 8838, "count": 3 }, - "poi": { "size": 10094, "count": 2 }, - "water_name": { "size": 4647, "count": 2 }, - "aerodrome_label": { "size": 5951, "count": 4 }, - "place": { "size": 32062, "count": 9 } - } -} -EOM -) -DATA2=$(cat <<-EOM -{ - "layerCount": 351, - "styleSize": 1004717, - "layerGroup": { - "background": { "size": 122, "count": 1 }, - "landuse": { "size": 309, "count": 1 }, - "park": { "size": 2365, "count": 3 }, - "aeroway": { "size": 2059, "count": 7 }, - "landcover": { "size": 361, "count": 2 }, - "boundary": { "size": 13991, "count": 9 }, - "water": { "size": 901, "count": 1 }, - "waterway": { "size": 3743, "count": 5 }, - "transportation": { "size": 920221, "count": 299 }, - "building": { "size": 292, "count": 1 }, - "transportation_name": { "size": 8838, "count": 3 }, - "poi": { "size": 10094, "count": 2 }, - "water_name": { "size": 4647, "count": 2 }, - "aerodrome_label": { "size": 5951, "count": 4 }, - "place": { "size": 32062, "count": 9 } - } -} -EOM -) - -node scripts/stats_compare.js "$DATA1" "$DATA2" From d23f63657808cc9ac05213263d5bec60ae6bb0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 10 Jul 2023 00:36:59 -0700 Subject: [PATCH 144/444] Relative image URLs --- CONTRIBUTING.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 62a22b609..bf92cf8bb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -230,10 +230,10 @@ In addition, the following style guidelines are recommended: In general, this style is not trying to exactly replicate highway shields as seen on signage. Instead, we are trying to extract the key stylistic elements so that the graphics are recognizable as simplifications of their real-world counterparts. Here are some examples of Americana's simplified shields for small-size readability: -| Network | Real-world Shield | Americana Representation | -| ---------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| NJ Turnpike | | | -| Washington State Route | | | +| Network | Real-world Shield | Americana Representation | +| ---------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| NJ Turnpike | | | +| Washington State Route | | | More complicated shields may be more challenging to simplify. Consider taking some inspiration from the [rebusurance](https://github.com/1ec5/rebusurance) project, which effectivly simplifies a number of complex state shield designs by stretching, compressing, omitting, or simplifying graphic elements. @@ -380,16 +380,16 @@ POIs are broken down into the following broad categories, in order to constrain For consistency, POI icons use the following color palette: -| Category | Scheme | Color | RGB | Hex triplet | -| ---------------------- | --------------- | --------------------------------------------------------------------------- | ----------- | ----------- | -| Geographic Place Names | N/A | Black | 0 0 0 | #000000 | -| Infrastructure | Pantone 294 | Blue | 0 63 135 | #003f87 | -| Consumer | UTexas Orange | Orange | 191 87 0 | #bf5700 | -| Outdoor | | TBD (green?) | | | -| Attraction | Pantone 469 | Brown | 105 63 35 | #693f23 | -| Airport | Medium Purple C | Purple | 78 0 142 | #4e008e | -| Transport | Pantone 234 C | Mauve | 162 0 103 | #a20067 | -| Knockout | | Lt Grayish Orange | 249 245 240 | #f9f5f0 | +| Category | Scheme | Color | RGB | Hex triplet | +| ---------------------- | --------------- | ----------------------------------------------------------------------- | ----------- | ----------- | +| Geographic Place Names | N/A | ${\color[RGB]{0, 0, 0 }\rule[-4px]{50px}{18px}}$ Black | 0 0 0 | #000000 | +| Infrastructure | Pantone 294 | ${\color[RGB]{0, 63, 135}\rule[-4px]{50px}{18px}}$ Blue | 0 63 135 | #003f87 | +| Consumer | UTexas Orange | ${\color[RGB]{191, 87, 0 }\rule[-4px]{50px}{18px}}$ Orange | 191 87 0 | #bf5700 | +| Outdoor | | TBD (green?) | | | +| Attraction | Pantone 469 | ${\color[RGB]{105, 63, 35 }\rule[-4px]{50px}{18px}}$ Brown | 105 63 35 | #693f23 | +| Airport | Medium Purple C | ${\color[RGB]{78, 0, 142}\rule[-4px]{50px}{18px}}$ Purple | 78 0 142 | #4e008e | +| Transport | Pantone 234 C | ${\color[RGB]{162, 0, 103}\rule[-4px]{50px}{18px}}$ Mauve | 162 0 103 | #a20067 | +| Knockout | | ${\color[RGB]{249, 245, 240}\rule[-4px]{50px}{18px}}$ Lt Grayish Orange | 249 245 240 | #f9f5f0 | ## Fonts From 1fa2d3910ecc19d77fefc7e8b8edbf7890c75059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 10 Jul 2023 00:36:02 -0700 Subject: [PATCH 145/444] Replaced swatch images with LaTeX --- CONTRIBUTING.md | 46 ++++++++++++++--------------- doc-img/background.svg | 3 -- doc-img/black.svg | 3 -- doc-img/pantone_116.svg | 3 -- doc-img/pantone_152.svg | 3 -- doc-img/pantone_187.svg | 3 -- doc-img/pantone_198.svg | 3 -- doc-img/pantone_234_c.svg | 41 ------------------------- doc-img/pantone_259.svg | 3 -- doc-img/pantone_294.svg | 3 -- doc-img/pantone_342.svg | 3 -- doc-img/pantone_382.svg | 3 -- doc-img/pantone_469.svg | 3 -- doc-img/pantone_medium_purple_c.svg | 3 -- doc-img/texas_orange.svg | 3 -- doc-img/white.svg | 3 -- 16 files changed, 23 insertions(+), 106 deletions(-) delete mode 100644 doc-img/background.svg delete mode 100644 doc-img/black.svg delete mode 100644 doc-img/pantone_116.svg delete mode 100644 doc-img/pantone_152.svg delete mode 100644 doc-img/pantone_187.svg delete mode 100644 doc-img/pantone_198.svg delete mode 100644 doc-img/pantone_234_c.svg delete mode 100644 doc-img/pantone_259.svg delete mode 100644 doc-img/pantone_294.svg delete mode 100644 doc-img/pantone_342.svg delete mode 100644 doc-img/pantone_382.svg delete mode 100644 doc-img/pantone_469.svg delete mode 100644 doc-img/pantone_medium_purple_c.svg delete mode 100644 doc-img/texas_orange.svg delete mode 100644 doc-img/white.svg diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf92cf8bb..34c1a23f0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -241,19 +241,19 @@ More complicated shields may be more challenging to simplify. Consider taking so For consistency, shields should use the following color palette: -| color | Pantone | RGB | Hex triplet | -| --------------------------------------------------------------------- | ------- | ----------- | ----------- | -| Blue | 294 | 0 63 135 | #003f87 | -| Brown | 469 | 105 63 35 | #693f23 | -| Green | 342 | 0 103 71 | #006747 | -| Orange | 152 | 243 143 0 | #f38f00 | -| Pink | 198 | 223 70 97 | #df4661 | -| Purple | 259 | 109 32 119 | #6d2077 | -| Red | 187 | 191 32 51 | #bf2033 | -| Yellow | 116 | 255 205 0 | #ffcd00 | -| Yellow-Green | 382 | 196 214 0 | #c4d600 | -| White | N/A | 255 255 255 | #ffffff | -| Black | N/A | 0 0 0 | #000000 | +| Color | Pantone | RGB | Hex triplet | +| ----------------------------------------------- | ------- | ----------- | ----------- | +| $`{\color{#003f87} \blacksquare}`$ Blue | 294 | 0 63 135 | #003f87 | +| $`{\color{#693f23} \blacksquare}`$ Brown | 469 | 105 63 35 | #693f23 | +| $`{\color{#006747} \blacksquare}`$ Green | 342 | 0 103 71 | #006747 | +| $`{\color{#f38f00} \blacksquare}`$ Orange | 152 | 243 143 0 | #f38f00 | +| $`{\color{#df4661} \blacksquare}`$ Pink | 198 | 223 70 97 | #df4661 | +| $`{\color{#6d2077} \blacksquare}`$ Purple | 259 | 109 32 119 | #6d2077 | +| $`{\color{#bf2033} \blacksquare}`$ Red | 187 | 191 32 51 | #bf2033 | +| $`{\color{#ffcd00} \blacksquare}`$ Yellow | 116 | 255 205 0 | #ffcd00 | +| $`{\color{#c4d600} \blacksquare}`$ Yellow-Green | 382 | 196 214 0 | #c4d600 | +| $`{\color{#ffffff} \blacksquare}`$ White | N/A | 255 255 255 | #ffffff | +| $`{\color{#000000} \blacksquare}`$ Black | N/A | 0 0 0 | #000000 | Base data from MUTCD Color Specifications, Federal Highway Administration @@ -380,16 +380,16 @@ POIs are broken down into the following broad categories, in order to constrain For consistency, POI icons use the following color palette: -| Category | Scheme | Color | RGB | Hex triplet | -| ---------------------- | --------------- | ----------------------------------------------------------------------- | ----------- | ----------- | -| Geographic Place Names | N/A | ${\color[RGB]{0, 0, 0 }\rule[-4px]{50px}{18px}}$ Black | 0 0 0 | #000000 | -| Infrastructure | Pantone 294 | ${\color[RGB]{0, 63, 135}\rule[-4px]{50px}{18px}}$ Blue | 0 63 135 | #003f87 | -| Consumer | UTexas Orange | ${\color[RGB]{191, 87, 0 }\rule[-4px]{50px}{18px}}$ Orange | 191 87 0 | #bf5700 | -| Outdoor | | TBD (green?) | | | -| Attraction | Pantone 469 | ${\color[RGB]{105, 63, 35 }\rule[-4px]{50px}{18px}}$ Brown | 105 63 35 | #693f23 | -| Airport | Medium Purple C | ${\color[RGB]{78, 0, 142}\rule[-4px]{50px}{18px}}$ Purple | 78 0 142 | #4e008e | -| Transport | Pantone 234 C | ${\color[RGB]{162, 0, 103}\rule[-4px]{50px}{18px}}$ Mauve | 162 0 103 | #a20067 | -| Knockout | | ${\color[RGB]{249, 245, 240}\rule[-4px]{50px}{18px}}$ Lt Grayish Orange | 249 245 240 | #f9f5f0 | +| Category | Scheme | Color | RGB | Hex triplet | +| ---------------------- | --------------- | ---------------------------------------------------- | ----------- | ----------- | +| Geographic Place Names | N/A | $`{\color{#000000} \blacksquare}`$ Black | 0 0 0 | #000000 | +| Infrastructure | Pantone 294 | $`{\color{#003f87} \blacksquare}`$ Blue | 0 63 135 | #003f87 | +| Consumer | UTexas Orange | $`{\color{#bf5700} \blacksquare}`$ Orange | 191 87 0 | #bf5700 | +| Outdoor | | TBD (green?) | | | +| Attraction | Pantone 469 | $`{\color{#693f23} \blacksquare}`$ Brown | 105 63 35 | #693f23 | +| Airport | Medium Purple C | $`{\color{#4e008e} \blacksquare}`$ Purple | 78 0 142 | #4e008e | +| Transport | Pantone 234 C | $`{\color{#a20067} \blacksquare}`$ Mauve | 162 0 103 | #a20067 | +| Knockout | | $`{\color{#f9f5f0} \blacksquare}`$ Lt Grayish Orange | 249 245 240 | #f9f5f0 | ## Fonts diff --git a/doc-img/background.svg b/doc-img/background.svg deleted file mode 100644 index d67350c0c..000000000 --- a/doc-img/background.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/black.svg b/doc-img/black.svg deleted file mode 100644 index e83333867..000000000 --- a/doc-img/black.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_116.svg b/doc-img/pantone_116.svg deleted file mode 100644 index f6c602ce3..000000000 --- a/doc-img/pantone_116.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_152.svg b/doc-img/pantone_152.svg deleted file mode 100644 index 3010d151f..000000000 --- a/doc-img/pantone_152.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_187.svg b/doc-img/pantone_187.svg deleted file mode 100644 index c0f76bd99..000000000 --- a/doc-img/pantone_187.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_198.svg b/doc-img/pantone_198.svg deleted file mode 100644 index c7d353832..000000000 --- a/doc-img/pantone_198.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_234_c.svg b/doc-img/pantone_234_c.svg deleted file mode 100644 index e9882380d..000000000 --- a/doc-img/pantone_234_c.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - diff --git a/doc-img/pantone_259.svg b/doc-img/pantone_259.svg deleted file mode 100644 index 7e9bcf563..000000000 --- a/doc-img/pantone_259.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_294.svg b/doc-img/pantone_294.svg deleted file mode 100644 index e6cdc57ec..000000000 --- a/doc-img/pantone_294.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_342.svg b/doc-img/pantone_342.svg deleted file mode 100644 index 69bcd9fba..000000000 --- a/doc-img/pantone_342.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_382.svg b/doc-img/pantone_382.svg deleted file mode 100644 index b7b2e29de..000000000 --- a/doc-img/pantone_382.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_469.svg b/doc-img/pantone_469.svg deleted file mode 100644 index d87075938..000000000 --- a/doc-img/pantone_469.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/pantone_medium_purple_c.svg b/doc-img/pantone_medium_purple_c.svg deleted file mode 100644 index 524589b04..000000000 --- a/doc-img/pantone_medium_purple_c.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/texas_orange.svg b/doc-img/texas_orange.svg deleted file mode 100644 index e4b96620b..000000000 --- a/doc-img/texas_orange.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/doc-img/white.svg b/doc-img/white.svg deleted file mode 100644 index c730ccb7c..000000000 --- a/doc-img/white.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From def25864d8d185eeeb24daf4b5124f25d8b78f78 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 19 Jul 2023 21:12:02 -0400 Subject: [PATCH 146/444] Improve compare function and add test cases --- scripts/object_compare.ts | 72 ++++++++++++++++++++++++ scripts/stats_compare.js | 14 +---- test/stats_compare/stats_compare.spec.ts | 41 ++++++++++++++ 3 files changed, 114 insertions(+), 13 deletions(-) create mode 100644 scripts/object_compare.ts create mode 100644 test/stats_compare/stats_compare.spec.ts diff --git a/scripts/object_compare.ts b/scripts/object_compare.ts new file mode 100644 index 000000000..16587681a --- /dev/null +++ b/scripts/object_compare.ts @@ -0,0 +1,72 @@ +/** + * Calculates the difference between two objects by comparing their properties. + * If a property value is an object, it recursively calls itself to calculate the difference. + * Positive numbers for a property means that property is greater in object2 than object1. + * @param {Object|null} object1 - The first object to compare. + * @param {Object|null} object2 - The second object to compare. + * @returns {Object} - An object containing the differences between object2 and object1. + */ +export function calculateDifference( + object1: object | null, + object2: object | null +): object { + // If one object exists and the other doesn't, return the difference + if (object1 === null && object2 !== null) { + return object2; + } else if (object2 === null && object1 !== null) { + return negate(object1); + } + + const difference = {}; + + // Iterate through each property in object1 + for (const key in object1) { + if (typeof object1[key] === "object" && typeof object2![key] === "object") { + // Recursively calculate the difference for nested objects + difference[key] = calculateDifference(object1[key], object2![key]); + } else if ( + typeof object1[key] === "number" && + typeof object2![key] === "number" + ) { + // Calculate the difference for numeric properties + difference[key] = object2![key] - object1[key]; + } else { + // If the property exists in object1 but not in object2, include it in the result + difference[key] = negate(object1![key]); + } + } + + // Include properties that exist in object2 but not in object1 + for (const key in object2!) { + if (!(key in object1!)) { + difference[key] = object2[key]; + } + } + + return difference; +} + +/** + * Negate all numeric properties of this object. + * @param {Object} object - The object to process. + */ +function negate(object: object) { + if (typeof object === "number") { + return -object; + } + + // Create a new object to store the result + const result = {}; + + for (const key in object) { + if (typeof object[key] === "object" && object[key] !== null) { + // If the property value is an object (and not null), recursively process it + result[key] = negate(object[key]); + } else if (typeof object[key] === "number") { + // If the property value is a number, multiply it by the multiplier + result[key] = -object[key]; + } + } + + return result; +} diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index 488ea9a6d..8a6bbb076 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -1,16 +1,4 @@ -function calculateDifference(object1, object2) { - const difference = {}; - - for (const key in object1) { - if (typeof object1[key] === "object") { - difference[key] = calculateDifference(object1[key], object2[key]); - } else if (typeof object1[key] === "number") { - difference[key] = object2[key] - object1[key]; - } - } - - return difference; -} +import { calculateDifference } from "./object_compare"; const stats1 = JSON.parse(process.argv[2]); const stats2 = JSON.parse(process.argv[3]); diff --git a/test/stats_compare/stats_compare.spec.ts b/test/stats_compare/stats_compare.spec.ts new file mode 100644 index 000000000..932801176 --- /dev/null +++ b/test/stats_compare/stats_compare.spec.ts @@ -0,0 +1,41 @@ +import { calculateDifference } from "../../scripts/object_compare"; +import { expect } from "chai"; + +const a = 3; +const b = 4; + +const simpleA = { a }; +const simpleB = { b }; + +const complexA = { foo: { a } }; +const complexB = { bar: { b } }; + +const simpleA0 = { a: 0 }; +const complexA0 = { foo: { a: 0 } }; + +const negSimpleA = { a: -a }; +const negComplexA = { foo: { a: -a } }; + +const diffSimpleAB = { a: -a, b }; +const diffComplexAB = { foo: { a: -a }, bar: { b } }; + +describe("stats_compare", function () { + it("tests stats equality", function () { + expect(calculateDifference(simpleA, simpleA)).to.deep.equal(simpleA0); + expect(calculateDifference(complexA, complexA)).to.deep.equal(complexA0); + }); + it("tests stats remove", function () { + expect(calculateDifference(simpleA, null)).to.deep.equal(negSimpleA); + expect(calculateDifference(complexA, null)).to.deep.equal(negComplexA); + }); + it("tests stats add", function () { + expect(calculateDifference(null, simpleA)).to.deep.equal(simpleA); + expect(calculateDifference(null, complexA)).to.deep.equal(complexA); + }); + it("tests stats diff", function () { + expect(calculateDifference(simpleA, simpleB)).to.deep.equal(diffSimpleAB); + expect(calculateDifference(complexA, complexB)).to.deep.equal( + diffComplexAB + ); + }); +}); From 51dc895d08fd1a577da9b5f55c1a883e10580b38 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 19 Jul 2023 21:59:35 -0400 Subject: [PATCH 147/444] Improve readability of stats generator --- .github/workflows/build-preview.yml | 2 +- scripts/stats_compare.js | 144 +++++++++++++++++++--------- 2 files changed, 102 insertions(+), 44 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ce048cda7..e0d0a56c7 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -74,7 +74,7 @@ jobs: mkdir stats echo '${{ env.MAIN_STATS }}' echo '${{ env.PR_STATS }}' - node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > stats/stats-difference.md + npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > stats/stats-difference.md - name: Print Stats to GitHub Checks uses: LouisBrunner/checks-action@v1.6.1 if: always() diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index 8a6bbb076..458eebe4b 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -5,6 +5,15 @@ const stats2 = JSON.parse(process.argv[3]); const difference = calculateDifference(stats1, stats2); +const diffHeaderRow = [ + "| | main | this PR | change | % change |", + "|-----------|--------------:|-------------:|----------------:|----------------:|", +]; + +/** + * Show comparison of overall aggregate statistics between this PR and previous + */ + const pctFormat = { style: "percent", minimumFractionDigits: 1, @@ -12,66 +21,115 @@ const pctFormat = { signDisplay: "exceptZero", }; +const layersRow = [ + "Layers", + stats1.layerCount, + stats2.layerCount, + difference.layerCount, + ((100 * difference.layerCount) / stats1.layerCount).toLocaleString( + "en", + pctFormat + ), +]; + +const sizeRow = [ + "Size (b)", + stats1.styleSize.toLocaleString("en"), + stats2.styleSize.toLocaleString("en"), + difference.styleSize.toLocaleString("en"), + ((100 * difference.styleSize) / stats1.styleSize).toLocaleString( + "en", + pctFormat + ), +]; + +const summaryChangeTable = [ + ...diffHeaderRow, + ...layersRow.map((row) => row.join(" | ")), + ...sizeRow.map((row) => row.join(" | ")), +].join("\n"); + const summaryChange = ` ## Style size statistics -| | main | this PR | change | % change | -|-----------|--------------:|-------------:|----------------:|----------------:| -| Layers | ${stats1.layerCount} | ${stats2.layerCount} | ${ - difference.layerCount -} | ${((100 * difference.layerCount) / stats1.layerCount).toLocaleString( - undefined, - pctFormat -)} | -| Size (b) | ${stats1.styleSize.toLocaleString( - "en" -)} | ${stats2.styleSize.toLocaleString( - "en" -)} | ${difference.styleSize.toLocaleString("en")} | ${( - (100 * difference.styleSize) / - stats1.styleSize -).toLocaleString(undefined, pctFormat)} - +${summaryChangeTable} `; -let layerCountChange = ` +console.log(summaryChange); -## Layer count comparison +/** + * Show comparison of the number of layers in each group before and after + */ -| | main | this PR | change | % change | -|-----------|--------------:|-------------:|----------------:|----------------:| -`; +const layerCountChangeRows = []; for (const layer in difference.layerGroup) { - layerCountChange += `${layer} | ${stats1.layerGroup[layer].layerCount} | ${ - stats2.layerGroup[layer].layerCount - } | ${difference.layerGroup[layer].layerCount} | ${( - difference.layerGroup[layer].layerCount / - stats1.layerGroup[layer].layerCount - ).toLocaleString(undefined, pctFormat)} -`; + const differenceLayerCount = difference.layerGroup[layer].layerCount; + const percentageChange = differenceLayerCount / stats1LayerCount; + + const row = [ + layer, + stats1.layerGroup[layer]?.layerCount || 0, + stats2.layerGroup[layer]?.layerCount || 0, + differenceLayerCount.toLocaleString("en"), + percentageChange.toLocaleString("en", pctFormat), + ]; + + layerCountChangeRows.push(row); } -let layerSizeChange = ` +layerCountChange += layerCountChangeRows.join("\n"); -## Layer size comparison +const layerCountChangeTable = [ + ...diffHeaderRow, + ...layerCountChangeRows.map((row) => row.join(" | ")), +].join("\n"); + +const layerCountChange = ` -| | main | this PR | change | % change | -|-----------|--------------:|-------------:|----------------:|----------------:| +## Layer count comparison + +${layerCountChangeTable} `; +console.log(layerCountChange); + +/** + * Show comparison of the aggregate size of layers in each group before and after + */ + +const layerSizeChangeRows = []; + for (const layer in difference.layerGroup) { - layerSizeChange += `${layer} | ${stats1.layerGroup[layer].size.toLocaleString( - "en" - )} | ${stats2.layerGroup[layer].size.toLocaleString( - "en" - )} | ${difference.layerGroup[layer].size.toLocaleString("en")} | ${( - difference.layerGroup[layer].size / stats1.layerGroup[layer].size - ).toLocaleString(undefined, pctFormat)} -`; + const stats1LayerSize = stats1.layerGroup[layer]?.size || 0; + const stats2LayerSize = stats2.layerGroup[layer]?.size || 0; + const differenceLayerSize = difference.layerGroup[layer].size; + + const percentageChange = + stats1LayerSize !== 0 ? differenceLayerSize / stats1LayerSize : 0; + + const row = [ + layer, + stats1LayerSize.toLocaleString("en"), + stats2LayerSize.toLocaleString("en"), + differenceLayerSize.toLocaleString("en"), + percentageChange.toLocaleString("en", pctFormat), + ]; + + layerSizeChangeRows.push(row); } -console.log(summaryChange); -console.log(layerCountChange); +const layerSizeChangeTable = [ + ...diffHeaderRow, + ...layerSizeChangeRows.map((row) => row.join(" | ")), +].join("\n"); + +const layerSizeChange = ` + +## Layer size comparison + +${layerSizeChangeTable} +`; + console.log(layerSizeChange); From 88525a48c567d7647b76711c838ea5586f697079 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 19 Jul 2023 22:04:24 -0400 Subject: [PATCH 148/444] Fix row join --- scripts/stats_compare.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index 458eebe4b..9e8d7a9aa 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -45,8 +45,8 @@ const sizeRow = [ const summaryChangeTable = [ ...diffHeaderRow, - ...layersRow.map((row) => row.join(" | ")), - ...sizeRow.map((row) => row.join(" | ")), + layersRow.join(" | "), + sizeRow.join(" | "), ].join("\n"); const summaryChange = ` From 7d2bb698827725a544da2b6f5e0cfe2f13a66143 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 19 Jul 2023 22:08:11 -0400 Subject: [PATCH 149/444] fix NPE bug --- scripts/stats_compare.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index 9e8d7a9aa..e7b1e8985 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -65,13 +65,15 @@ console.log(summaryChange); const layerCountChangeRows = []; for (const layer in difference.layerGroup) { + const stats1LayerCount = stats1.layerGroup[layer]?.layerCount || 0; + const stats2LayerCount = stats2.layerGroup[layer]?.layerCount || 0; const differenceLayerCount = difference.layerGroup[layer].layerCount; const percentageChange = differenceLayerCount / stats1LayerCount; const row = [ layer, - stats1.layerGroup[layer]?.layerCount || 0, - stats2.layerGroup[layer]?.layerCount || 0, + stats1LayerCount.toLocaleString("en"), + stats2LayerCount.toLocaleString("en"), differenceLayerCount.toLocaleString("en"), percentageChange.toLocaleString("en", pctFormat), ]; From 93b2b55dd929c255ef38ca5de28893516049f16c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 19 Jul 2023 22:11:20 -0400 Subject: [PATCH 150/444] Remove stray code --- scripts/stats_compare.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index e7b1e8985..df29d671f 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -81,8 +81,6 @@ for (const layer in difference.layerGroup) { layerCountChangeRows.push(row); } -layerCountChange += layerCountChangeRows.join("\n"); - const layerCountChangeTable = [ ...diffHeaderRow, ...layerCountChangeRows.map((row) => row.join(" | ")), From a1b9deef23cb73928cf6a952c410fb6b85270d35 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 20 Jul 2023 22:17:22 -0400 Subject: [PATCH 151/444] Refactor out table row creation and test --- scripts/object_compare.ts | 73 ++++++++++++++++++++++++ scripts/stats_compare.js | 37 +++++------- test/stats_compare/stats_compare.spec.ts | 54 ++++++++++++------ 3 files changed, 125 insertions(+), 39 deletions(-) diff --git a/scripts/object_compare.ts b/scripts/object_compare.ts index 16587681a..d93461cb4 100644 --- a/scripts/object_compare.ts +++ b/scripts/object_compare.ts @@ -70,3 +70,76 @@ function negate(object: object) { return result; } + +// "| | main | this PR | change | % change |", +export type ComparedStats = { + name: string; + beforeValue: number | null; + afterValue: number | null; + change: number; + pctChange: number | null; +}; + +export function statsComparisonRow( + name: string, + val1: number | null, + val2: number | null, + change: number +): ComparedStats { + let pctChange: number | null; + + if (val1 !== null) { + if (val2 !== null) { + pctChange = change / val1; + } else { + pctChange = -1; + } + } else { + pctChange = null; + } + + return { + name, + beforeValue: val1, + afterValue: val2, + change, + pctChange, + }; +} + +const pctFormat: Intl.NumberFormatOptions = { + style: "percent", + minimumFractionDigits: 1, + maximumFractionDigits: 1, + signDisplay: "exceptZero", +}; + +function naLocString(val: number | null) { + return val !== null ? val.toLocaleString("en") : "N/A"; +} + +/** + * produce a markdown row of statistics comparison + */ +export function mdStringValues(stats: ComparedStats): string[] { + const beforeValueStr = naLocString(stats.beforeValue); + const afterValueStr = naLocString(stats.afterValue); + const changeStr = naLocString(stats.change); + const pctChangeStr = + stats.pctChange !== null + ? stats.pctChange.toLocaleString("en", pctFormat) + : "N/A"; + + return [stats.name, beforeValueStr, afterValueStr, changeStr, pctChangeStr]; +} + +export function mdCompareRow( + name: string, + val1: number | null, + val2: number | null, + change: number +): string { + return mdStringValues(statsComparisonRow(name, val1, val2, change)).join( + " | " + ); +} diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index df29d671f..fd288794c 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -1,4 +1,9 @@ -import { calculateDifference } from "./object_compare"; +import { + calculateDifference, + mdCompareRow, + mdStringValues, + statsComparisonRow, +} from "./object_compare"; const stats1 = JSON.parse(process.argv[2]); const stats2 = JSON.parse(process.argv[3]); @@ -21,33 +26,21 @@ const pctFormat = { signDisplay: "exceptZero", }; -const layersRow = [ +const layersRow = mdCompareRow( "Layers", stats1.layerCount, stats2.layerCount, - difference.layerCount, - ((100 * difference.layerCount) / stats1.layerCount).toLocaleString( - "en", - pctFormat - ), -]; + difference.layerCount +); -const sizeRow = [ +const sizeRow = mdCompareRow( "Size (b)", - stats1.styleSize.toLocaleString("en"), - stats2.styleSize.toLocaleString("en"), - difference.styleSize.toLocaleString("en"), - ((100 * difference.styleSize) / stats1.styleSize).toLocaleString( - "en", - pctFormat - ), -]; + stats1.styleSize, + stats2.styleSize, + difference.styleSize +); -const summaryChangeTable = [ - ...diffHeaderRow, - layersRow.join(" | "), - sizeRow.join(" | "), -].join("\n"); +const summaryChangeTable = [...diffHeaderRow, layersRow, sizeRow].join("\n"); const summaryChange = ` diff --git a/test/stats_compare/stats_compare.spec.ts b/test/stats_compare/stats_compare.spec.ts index 932801176..4ef400e66 100644 --- a/test/stats_compare/stats_compare.spec.ts +++ b/test/stats_compare/stats_compare.spec.ts @@ -1,4 +1,7 @@ -import { calculateDifference } from "../../scripts/object_compare"; +import { + calculateDifference, + mdCompareRow, +} from "../../scripts/object_compare"; import { expect } from "chai"; const a = 3; @@ -19,23 +22,40 @@ const negComplexA = { foo: { a: -a } }; const diffSimpleAB = { a: -a, b }; const diffComplexAB = { foo: { a: -a }, bar: { b } }; +const aStr = a.toLocaleString("en"); + +const simpleAAmdRow = `a | ${aStr} | ${aStr} | 0 | 0.0%`; +const simpleAnullmdRow = `a | ${aStr} | N/A | ${-aStr} | -100.0%`; + describe("stats_compare", function () { - it("tests stats equality", function () { - expect(calculateDifference(simpleA, simpleA)).to.deep.equal(simpleA0); - expect(calculateDifference(complexA, complexA)).to.deep.equal(complexA0); - }); - it("tests stats remove", function () { - expect(calculateDifference(simpleA, null)).to.deep.equal(negSimpleA); - expect(calculateDifference(complexA, null)).to.deep.equal(negComplexA); - }); - it("tests stats add", function () { - expect(calculateDifference(null, simpleA)).to.deep.equal(simpleA); - expect(calculateDifference(null, complexA)).to.deep.equal(complexA); + describe("#calculateDifference", function () { + it("tests stats equality", function () { + expect(calculateDifference(simpleA, simpleA)).to.deep.equal(simpleA0); + expect(calculateDifference(complexA, complexA)).to.deep.equal(complexA0); + }); + it("tests stats remove", function () { + expect(calculateDifference(simpleA, null)).to.deep.equal(negSimpleA); + expect(calculateDifference(complexA, null)).to.deep.equal(negComplexA); + }); + it("tests stats add", function () { + expect(calculateDifference(null, simpleA)).to.deep.equal(simpleA); + expect(calculateDifference(null, complexA)).to.deep.equal(complexA); + }); + it("tests stats diff", function () { + expect(calculateDifference(simpleA, simpleB)).to.deep.equal(diffSimpleAB); + expect(calculateDifference(complexA, complexB)).to.deep.equal( + diffComplexAB + ); + }); }); - it("tests stats diff", function () { - expect(calculateDifference(simpleA, simpleB)).to.deep.equal(diffSimpleAB); - expect(calculateDifference(complexA, complexB)).to.deep.equal( - diffComplexAB - ); + describe("#mdCompareRow", function () { + it("tests md compare same", function () { + expect(mdCompareRow("a", simpleA.a, simpleA.a, simpleA0.a)).to.deep.equal( + simpleAAmdRow + ); + expect(mdCompareRow("a", simpleA.a, null, negSimpleA.a)).to.deep.equal( + simpleAnullmdRow + ); + }); }); }); From e69886b5c175c21f4e24900f351b84443f9d9d57 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 20 Jul 2023 22:28:39 -0400 Subject: [PATCH 152/444] Refactor --- scripts/stats_compare.js | 67 ++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index fd288794c..df4392089 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -1,9 +1,4 @@ -import { - calculateDifference, - mdCompareRow, - mdStringValues, - statsComparisonRow, -} from "./object_compare"; +import { calculateDifference, mdCompareRow } from "./object_compare"; const stats1 = JSON.parse(process.argv[2]); const stats2 = JSON.parse(process.argv[3]); @@ -58,26 +53,19 @@ console.log(summaryChange); const layerCountChangeRows = []; for (const layer in difference.layerGroup) { - const stats1LayerCount = stats1.layerGroup[layer]?.layerCount || 0; - const stats2LayerCount = stats2.layerGroup[layer]?.layerCount || 0; - const differenceLayerCount = difference.layerGroup[layer].layerCount; - const percentageChange = differenceLayerCount / stats1LayerCount; - - const row = [ - layer, - stats1LayerCount.toLocaleString("en"), - stats2LayerCount.toLocaleString("en"), - differenceLayerCount.toLocaleString("en"), - percentageChange.toLocaleString("en", pctFormat), - ]; - - layerCountChangeRows.push(row); + layerCountChangeRows.push( + mdCompareRow( + layer, + stats1.layerGroup[layer]?.layerCount, + stats2.layerGroup[layer]?.layerCount, + difference.layerGroup[layer]?.layerCount + ) + ); } -const layerCountChangeTable = [ - ...diffHeaderRow, - ...layerCountChangeRows.map((row) => row.join(" | ")), -].join("\n"); +const layerCountChangeTable = [...diffHeaderRow, ...layerCountChangeRows].join( + "\n" +); const layerCountChange = ` @@ -95,28 +83,19 @@ console.log(layerCountChange); const layerSizeChangeRows = []; for (const layer in difference.layerGroup) { - const stats1LayerSize = stats1.layerGroup[layer]?.size || 0; - const stats2LayerSize = stats2.layerGroup[layer]?.size || 0; - const differenceLayerSize = difference.layerGroup[layer].size; - - const percentageChange = - stats1LayerSize !== 0 ? differenceLayerSize / stats1LayerSize : 0; - - const row = [ - layer, - stats1LayerSize.toLocaleString("en"), - stats2LayerSize.toLocaleString("en"), - differenceLayerSize.toLocaleString("en"), - percentageChange.toLocaleString("en", pctFormat), - ]; - - layerSizeChangeRows.push(row); + layerSizeChangeRows.push( + mdCompareRow( + layer, + stats1.layerGroup[layer]?.size, + stats2.layerGroup[layer]?.size, + difference.layerGroup[layer]?.size + ) + ); } -const layerSizeChangeTable = [ - ...diffHeaderRow, - ...layerSizeChangeRows.map((row) => row.join(" | ")), -].join("\n"); +const layerSizeChangeTable = [...diffHeaderRow, ...layerSizeChangeRows].join( + "\n" +); const layerSizeChange = ` From d04da3fc3b20a45d453539b79108ed5312a05a6b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 21 Jul 2023 07:53:50 -0400 Subject: [PATCH 153/444] Consolidate table output --- scripts/stats_compare.js | 39 ++++++++++----------------------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index df4392089..99c5a0155 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -35,16 +35,7 @@ const sizeRow = mdCompareRow( difference.styleSize ); -const summaryChangeTable = [...diffHeaderRow, layersRow, sizeRow].join("\n"); - -const summaryChange = ` - -## Style size statistics - -${summaryChangeTable} -`; - -console.log(summaryChange); +printTable("Style size statistics", [layersRow, sizeRow]); /** * Show comparison of the number of layers in each group before and after @@ -63,18 +54,7 @@ for (const layer in difference.layerGroup) { ); } -const layerCountChangeTable = [...diffHeaderRow, ...layerCountChangeRows].join( - "\n" -); - -const layerCountChange = ` - -## Layer count comparison - -${layerCountChangeTable} -`; - -console.log(layerCountChange); +printTable("Layer count comparison", layerCountChangeRows); /** * Show comparison of the aggregate size of layers in each group before and after @@ -93,15 +73,16 @@ for (const layer in difference.layerGroup) { ); } -const layerSizeChangeTable = [...diffHeaderRow, ...layerSizeChangeRows].join( - "\n" -); +printTable("Layer size comparison", layerSizeChangeRows); -const layerSizeChange = ` +function printTable(headingText, rows) { + const table = [...diffHeaderRow, ...rows].join("\n"); + const text = ` -## Layer size comparison +## ${headingText} -${layerSizeChangeTable} +${table} `; -console.log(layerSizeChange); + console.log(text); +} From 9eee05032464dcba6aefc725d3ebaae814394b96 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 21 Jul 2023 07:57:00 -0400 Subject: [PATCH 154/444] Remove unused code --- scripts/stats_compare.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index 99c5a0155..45f70dad7 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -14,13 +14,6 @@ const diffHeaderRow = [ * Show comparison of overall aggregate statistics between this PR and previous */ -const pctFormat = { - style: "percent", - minimumFractionDigits: 1, - maximumFractionDigits: 1, - signDisplay: "exceptZero", -}; - const layersRow = mdCompareRow( "Layers", stats1.layerCount, From 62a31b7adfd1dce19215855717dee551760dbb55 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 22 Jul 2023 20:46:13 -0400 Subject: [PATCH 155/444] Downgrade ES --- shieldlib/tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shieldlib/tsconfig.json b/shieldlib/tsconfig.json index 1953dfae4..db5212aa2 100644 --- a/shieldlib/tsconfig.json +++ b/shieldlib/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "ESNext", - "module": "ESNext", + "target": "ES2019", + "module": "ES2020", "moduleResolution": "node", "esModuleInterop": true, "allowSyntheticDefaultImports": true From d193862509b2223d08fe26c768e7386fbbf267de Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 22 Jul 2023 20:48:21 -0400 Subject: [PATCH 156/444] Bump version --- shieldlib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index d8b08ceda..e23b2ee09 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.2", + "version": "0.0.3", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ From f419d65deec0e00b6c76502a49ad9cc1841a641b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 31 Jul 2023 19:24:28 -0400 Subject: [PATCH 157/444] Add version note --- .github/workflows/test-build-ubuntu.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index e52a87a94..1a3f03b37 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -10,6 +10,9 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 +# Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. +# See PR #905 and #908 for more details. +# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. - name: Use Node.js 18.x uses: actions/setup-node@v3 with: From b15bc42a7938cdb0daf271dc430bbbd690894896 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 31 Jul 2023 19:27:35 -0400 Subject: [PATCH 158/444] Force node v18.16.0 --- .github/workflows/test-build-ubuntu.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index 1a3f03b37..622494376 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -13,10 +13,10 @@ jobs: # Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. # See PR #905 and #908 for more details. # If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. - - name: Use Node.js 18.x + - name: Use Node.js 18.16.0 uses: actions/setup-node@v3 with: - node-version: 18.x + node-version: 18.16.0 - name: Build Shield Library ๐Ÿ›ก๏ธ run: | cd shieldlib From 8d65b3d2343b0790ae69a6abdbce5d4aa12194d4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 31 Jul 2023 21:47:04 -0400 Subject: [PATCH 159/444] Push all runners to 18.16.1 --- .github/workflows/build-preview.yml | 4 ++-- .github/workflows/deploy.yml | 4 ++-- .github/workflows/test-build-mac.yml | 7 +++++-- .github/workflows/test-build-ubuntu.yml | 6 +++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index f42569976..ae0bb9f69 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -19,10 +19,10 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 - - name: Use Node.js 18.x + - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: - node-version: 18.x + node-version: 18.16.1 #18.17.0 is buggy - name: Save PR number env: PR_NUMBER: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 442069519..13b362704 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,10 +20,10 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 - - name: Use Node.js 18.x + - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: - node-version: 18.x + node-version: 18.16.1 #18.17.0 is buggy - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev diff --git a/.github/workflows/test-build-mac.yml b/.github/workflows/test-build-mac.yml index e25e06941..dbb8781e2 100644 --- a/.github/workflows/test-build-mac.yml +++ b/.github/workflows/test-build-mac.yml @@ -10,10 +10,13 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 - - name: Use Node.js 18.x +# Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. +# See PR #905 and #908 for more details. +# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. + - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: - node-version: 18.x + node-version: 18.16.1 - name: Build Shield Library ๐Ÿ›ก๏ธ run: | cd shieldlib diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index 622494376..c0515a215 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -12,11 +12,11 @@ jobs: uses: actions/checkout@v3 # Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. # See PR #905 and #908 for more details. -# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. - - name: Use Node.js 18.16.0 +# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.1. + - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: - node-version: 18.16.0 + node-version: 18.16.1 - name: Build Shield Library ๐Ÿ›ก๏ธ run: | cd shieldlib From f19784ce4e812a11c0e58283cae9c35c64f80f74 Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Tue, 1 Aug 2023 22:30:28 -0700 Subject: [PATCH 160/444] worship icons, POI, and taginfo --- icons/poi_pow_buddhist.svg | 3 ++ icons/poi_pow_christian.svg | 5 +++ icons/poi_pow_generic.svg | 5 +++ icons/poi_pow_hindu.svg | 3 ++ icons/poi_pow_jewish.svg | 3 ++ icons/poi_pow_muslim.svg | 3 ++ icons/poi_pow_shinto.svg | 3 ++ icons/poi_pow_sikh.svg | 3 ++ icons/poi_pow_taoist.svg | 4 ++ scripts/taginfo_template.json | 73 ++++++++++++++++++++++++++++++ src/layer/poi.js | 84 ++++++++++++++++++++++++++++++++++- 11 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 icons/poi_pow_buddhist.svg create mode 100644 icons/poi_pow_christian.svg create mode 100644 icons/poi_pow_generic.svg create mode 100644 icons/poi_pow_hindu.svg create mode 100644 icons/poi_pow_jewish.svg create mode 100644 icons/poi_pow_muslim.svg create mode 100644 icons/poi_pow_shinto.svg create mode 100644 icons/poi_pow_sikh.svg create mode 100644 icons/poi_pow_taoist.svg diff --git a/icons/poi_pow_buddhist.svg b/icons/poi_pow_buddhist.svg new file mode 100644 index 000000000..1151b63f2 --- /dev/null +++ b/icons/poi_pow_buddhist.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_christian.svg b/icons/poi_pow_christian.svg new file mode 100644 index 000000000..e259dc2dc --- /dev/null +++ b/icons/poi_pow_christian.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/icons/poi_pow_generic.svg b/icons/poi_pow_generic.svg new file mode 100644 index 000000000..aa8709cde --- /dev/null +++ b/icons/poi_pow_generic.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/icons/poi_pow_hindu.svg b/icons/poi_pow_hindu.svg new file mode 100644 index 000000000..a804d367b --- /dev/null +++ b/icons/poi_pow_hindu.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_jewish.svg b/icons/poi_pow_jewish.svg new file mode 100644 index 000000000..fb3f75514 --- /dev/null +++ b/icons/poi_pow_jewish.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_muslim.svg b/icons/poi_pow_muslim.svg new file mode 100644 index 000000000..47a67d798 --- /dev/null +++ b/icons/poi_pow_muslim.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_shinto.svg b/icons/poi_pow_shinto.svg new file mode 100644 index 000000000..4e2bf49f7 --- /dev/null +++ b/icons/poi_pow_shinto.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_sikh.svg b/icons/poi_pow_sikh.svg new file mode 100644 index 000000000..2b8d3957d --- /dev/null +++ b/icons/poi_pow_sikh.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/poi_pow_taoist.svg b/icons/poi_pow_taoist.svg new file mode 100644 index 000000000..83b5b94fe --- /dev/null +++ b/icons/poi_pow_taoist.svg @@ -0,0 +1,4 @@ + + + + diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index 8a4d96aa4..d6055d37e 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -496,6 +496,14 @@ "doc_url": "https://openmaptiles.org/schema/#poi", "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_p.svg" }, + { + "key": "amenity", + "value": "place_of_worship", + "object_types": ["node", "area"], + "description": "Places of worship are marked by a square representing a building, topped with a finial representing the religion for common religions.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_generic.svg" + }, { "key": "amenity", "value": "bus_station", @@ -552,6 +560,71 @@ "doc_url": "https://openmaptiles.org/schema/#poi", "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_rail.svg" }, + { + "key": "religion", + "value": "buddhist", + "object_types": ["node", "area"], + "description": "Buddhist places of worship are marked by an icon representing a building topped by a dharmachakra.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_buddhist.svg" + }, + { + "key": "religion", + "value": "christian", + "object_types": ["node", "area"], + "description": "Christian places of worship are marked by an icon representing a building topped by a cross.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_christian.svg" + }, + { + "key": "religion", + "value": "hindu", + "object_types": ["node", "area"], + "description": "Hindu places of worship are marked by an icon representing a building topped by an om symbol.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_hindu.svg" + }, + { + "key": "religion", + "value": "jewish", + "object_types": ["node", "area"], + "description": "Jewish places of worship are marked by an icon representing a building topped by a star of David.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_jewish.svg" + }, + { + "key": "religion", + "value": "muslim", + "object_types": ["node", "area"], + "description": "Muslim places of worship are marked by an icon representing a building topped by a star and crescent.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_muslim.svg" + }, + { + "key": "religion", + "value": "sikh", + "object_types": ["node", "area"], + "description": "Sikh places of worship are marked by an icon representing a building topped by a khanda.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_sikh.svg" + }, + { + "key": "religion", + "value": "shinto", + "object_types": ["node", "area"], + "description": "Shinto places of worship are marked by an icon representing a building topped by a torii.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_shinto.svg" + }, + { + "key": "religion", + "value": "taoist", + "object_types": ["node", "area"], + "description": "Taoist places of worship are marked by an icon representing a building topped by a yin-yang symbol.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_taoist.svg" + }, + { "key": "highway", "value": "motorway", diff --git a/src/layer/poi.js b/src/layer/poi.js index 178687bda..399048589 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -84,6 +84,70 @@ var iconDefs = { color: Color.poi.infrastructure, description: "Police station", }, + pow_buddhist: { + classes: { + place_of_worship: ["buddhist"], + }, + sprite: "poi_pow_buddhist", + color: Color.poi.attraction, + description: "Buddhist place of worship", + }, + pow_christian: { + classes: { + place_of_worship: ["christian"], + }, + sprite: "poi_pow_christian", + color: Color.poi.attraction, + description: "Christian place of worship", + }, + pow_hindu: { + classes: { + place_of_worship: ["hindu"], + }, + sprite: "poi_pow_hindu", + color: Color.poi.attraction, + description: "Hindu place of worship", + }, + pow_jewish: { + classes: { + place_of_worship: ["jewish"], + }, + sprite: "poi_pow_jewish", + color: Color.poi.attraction, + description: "Jewish place of worship", + }, + pow_muslim: { + classes: { + place_of_worship: ["muslim"], + }, + sprite: "poi_pow_muslim", + color: Color.poi.attraction, + description: "Muslim place of worship", + }, + pow_sikh: { + classes: { + place_of_worship: ["sikh"], + }, + sprite: "poi_pow_sikh", + color: Color.poi.attraction, + description: "Sikh place of worship", + }, + pow_shinto: { + classes: { + place_of_worship: ["shinto"], + }, + sprite: "poi_pow_shinto", + color: Color.poi.attraction, + description: "Shinto place of worship", + }, + pow_taoist: { + classes: { + place_of_worship: ["taoist"], + }, + sprite: "poi_pow_taoist", + color: Color.poi.attraction, + description: "Taoist place of worship", + }, railway_station: { classes: { railway: ["station", "halt", "subway"], @@ -183,7 +247,17 @@ export const poi = { ...getSubclasses(iconDefs.railway_stop), ], Color.poi.transport, - ["museum"], + [ + "museum", + ...getSubclasses(iconDefs.pow_buddhist), + ...getSubclasses(iconDefs.pow_christian), + ...getSubclasses(iconDefs.pow_hindu), + ...getSubclasses(iconDefs.pow_jewish), + ...getSubclasses(iconDefs.pow_muslim), + ...getSubclasses(iconDefs.pow_sikh), + ...getSubclasses(iconDefs.pow_shinto), + ...getSubclasses(iconDefs.pow_taoist), + ], Color.poi.attraction, ["hospital", "parking", "police", "school", "college", "townhall"], Color.poi.infrastructure, @@ -205,6 +279,14 @@ export const poi = { "hospital", "museum", "police", + ...getSubclasses(iconDefs.pow_buddhist), + ...getSubclasses(iconDefs.pow_christian), + ...getSubclasses(iconDefs.pow_hindu), + ...getSubclasses(iconDefs.pow_jewish), + ...getSubclasses(iconDefs.pow_muslim), + ...getSubclasses(iconDefs.pow_sikh), + ...getSubclasses(iconDefs.pow_shinto), + ...getSubclasses(iconDefs.pow_taoist), ...getSubclasses(iconDefs.school), "townhall", "tram_stop", From f47e78f487a88667b09f114094fada4078a036d4 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 11:18:51 -0400 Subject: [PATCH 161/444] Add first six shields for Nova Scotia scenic drives --- icons/shield_ca_ns_s_et.svg | 24 ++++++++++++++++++++++++ icons/shield_ca_ns_s_fdlt.svg | 30 ++++++++++++++++++++++++++++++ icons/shield_ca_ns_s_lr.svg | 29 +++++++++++++++++++++++++++++ icons/shield_ca_ns_s_md.svg | 25 +++++++++++++++++++++++++ icons/shield_ca_ns_s_mt.svg | 31 +++++++++++++++++++++++++++++++ icons/shield_ca_ns_s_st.svg | 22 ++++++++++++++++++++++ src/js/shield_defs.js | 24 ++++++++++++++++++++++++ 7 files changed, 185 insertions(+) create mode 100644 icons/shield_ca_ns_s_et.svg create mode 100644 icons/shield_ca_ns_s_fdlt.svg create mode 100644 icons/shield_ca_ns_s_lr.svg create mode 100644 icons/shield_ca_ns_s_md.svg create mode 100644 icons/shield_ca_ns_s_mt.svg create mode 100644 icons/shield_ca_ns_s_st.svg diff --git a/icons/shield_ca_ns_s_et.svg b/icons/shield_ca_ns_s_et.svg new file mode 100644 index 000000000..d1298c67e --- /dev/null +++ b/icons/shield_ca_ns_s_et.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_fdlt.svg b/icons/shield_ca_ns_s_fdlt.svg new file mode 100644 index 000000000..d206bb49a --- /dev/null +++ b/icons/shield_ca_ns_s_fdlt.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_lr.svg b/icons/shield_ca_ns_s_lr.svg new file mode 100644 index 000000000..2d7dda103 --- /dev/null +++ b/icons/shield_ca_ns_s_lr.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_md.svg b/icons/shield_ca_ns_s_md.svg new file mode 100644 index 000000000..a29278b22 --- /dev/null +++ b/icons/shield_ca_ns_s_md.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_mt.svg b/icons/shield_ca_ns_s_mt.svg new file mode 100644 index 000000000..f02f86e2e --- /dev/null +++ b/icons/shield_ca_ns_s_mt.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_st.svg b/icons/shield_ca_ns_s_st.svg new file mode 100644 index 000000000..6a49ffde3 --- /dev/null +++ b/icons/shield_ca_ns_s_st.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 1949d4580..2e0c583fb 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -891,6 +891,9 @@ export function loadShields() { Color.shields.brown, Color.shields.white ); + shields["CA:NS:S"] = { + notext: true, + }; // Northwest Territories shields["CA:NT"] = { @@ -4201,6 +4204,27 @@ export function loadShields() { // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md + shields["CA:NS:S"].overrideByRef = { + ET: { + spriteBlank: "shield_ca_ns_s_et", + }, + FdLt: { + spriteBlank: "shield_ca_ns_s_fdlt", + }, + LR: { + spriteBlank: "shield_ca_ns_s_lr", + }, + MD: { + spriteBlank: "shield_ca_ns_s_md", + }, + MT: { + spriteBlank: "shield_ca_ns_s_mt", + }, + ST: { + spriteBlank: "shield_ca_ns_s_st", + }, + }; + shields["CA:ON:primary"].overrideByRef = { QEW: { textColor: Color.shields.blue, From 0d3a752d25f13d0477a31c69118a38c9f0e7c88a Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 16:37:39 -0400 Subject: [PATCH 162/444] Add shield for Cabot Trail and Bras d'Or Lakes Scenic Drive --- icons/shield_ca_ns_s_bdolsd.svg | 27 +++++++++++++++++++++++++++ icons/shield_ca_ns_s_ct.svg | 24 ++++++++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 57 insertions(+) create mode 100644 icons/shield_ca_ns_s_bdolsd.svg create mode 100644 icons/shield_ca_ns_s_ct.svg diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg new file mode 100644 index 000000000..77c3796ec --- /dev/null +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_ct.svg b/icons/shield_ca_ns_s_ct.svg new file mode 100644 index 000000000..7ac826b5f --- /dev/null +++ b/icons/shield_ca_ns_s_ct.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 2e0c583fb..ae69ff0a2 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4205,6 +4205,12 @@ export function loadShields() { // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md shields["CA:NS:S"].overrideByRef = { + BdOLSD: { + spriteBlank: "shield_ca_ns_s_bdolsd", + }, + CT: { + spriteBlank: "shield_ca_ns_s_ct", + }, ET: { spriteBlank: "shield_ca_ns_s_et", }, From 5cb46f730d719b0f52fc6c34136c853ac5a9f4d9 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 21:11:15 -0400 Subject: [PATCH 163/444] Add two more nova scotia scenic drive shields --- icons/shield_ca_ns_s_cet.svg | 29 +++++++++++++++++++++++++++++ icons/shield_ca_ns_s_gt.svg | 24 ++++++++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 59 insertions(+) create mode 100644 icons/shield_ca_ns_s_cet.svg create mode 100644 icons/shield_ca_ns_s_gt.svg diff --git a/icons/shield_ca_ns_s_cet.svg b/icons/shield_ca_ns_s_cet.svg new file mode 100644 index 000000000..716210c4f --- /dev/null +++ b/icons/shield_ca_ns_s_cet.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_gt.svg b/icons/shield_ca_ns_s_gt.svg new file mode 100644 index 000000000..65746f200 --- /dev/null +++ b/icons/shield_ca_ns_s_gt.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index ae69ff0a2..38c5469b3 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4208,6 +4208,9 @@ export function loadShields() { BdOLSD: { spriteBlank: "shield_ca_ns_s_bdolsd", }, + CeT: { + spriteBlank: "shield_ca_ns_s_cet", + }, CT: { spriteBlank: "shield_ca_ns_s_ct", }, @@ -4217,6 +4220,9 @@ export function loadShields() { FdLt: { spriteBlank: "shield_ca_ns_s_fdlt", }, + GT: { + spriteBlank: "shield_ca_ns_s_gt", + }, LR: { spriteBlank: "shield_ca_ns_s_lr", }, From d1fa63dc93b26950f7a1cbccd46f25c903d371b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Wed, 5 Jul 2023 11:40:36 -0700 Subject: [PATCH 164/444] Ohio River Scenic Byway shield --- icons/shield_us_orsb.svg | 7 +++++++ src/js/shield_defs.js | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 icons/shield_us_orsb.svg diff --git a/icons/shield_us_orsb.svg b/icons/shield_us_orsb.svg new file mode 100644 index 000000000..16a013b2a --- /dev/null +++ b/icons/shield_us_orsb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 1949d4580..fbebff4cf 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3281,6 +3281,10 @@ export function loadShields() { spriteBlank: "shield_us_lht", notext: true, }; + shields["US:ORSB"] = { + spriteBlank: ["shield_us_orsb"], + notext: true, + }; // SOUTH AMERICA From cf70fb81f147b7a9aa33f2217777a21378b2972d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Tue, 11 Jul 2023 13:37:13 -0700 Subject: [PATCH 165/444] Standardize some tints --- CONTRIBUTING.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 34c1a23f0..54879bc81 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -239,7 +239,7 @@ More complicated shields may be more challenging to simplify. Consider taking so ### Color Scheme -For consistency, shields should use the following color palette: +For consistency, most shields should use the following color palette, which is based on the national _Manual of Uniform Traffic Control Devices_:[^mutcd-color-specs] | Color | Pantone | RGB | Hex triplet | | ----------------------------------------------- | ------- | ----------- | ----------- | @@ -251,11 +251,21 @@ For consistency, shields should use the following color palette: | $`{\color{#6d2077} \blacksquare}`$ Purple | 259 | 109 32 119 | #6d2077 | | $`{\color{#bf2033} \blacksquare}`$ Red | 187 | 191 32 51 | #bf2033 | | $`{\color{#ffcd00} \blacksquare}`$ Yellow | 116 | 255 205 0 | #ffcd00 | -| $`{\color{#c4d600} \blacksquare}`$ Yellow-Green | 382 | 196 214 0 | #c4d600 | +| $`{\color{#c4d600} \blacksquare}`$ Yellow-green | 382 | 196 214 0 | #c4d600 | | $`{\color{#ffffff} \blacksquare}`$ White | N/A | 255 255 255 | #ffffff | | $`{\color{#000000} \blacksquare}`$ Black | N/A | 0 0 0 | #000000 | -Base data from MUTCD Color Specifications, Federal Highway Administration +[^mutcd-color-specs]: [MUTCD Color Specifications](https://mutcd.fhwa.dot.gov/kno-colorspec.htm), Federal Highway Administration + +The MUTCDโ€™s standard colors are designed for high-contrast backgrounds and legends. This is also advantageous on a map where shields need to stand out a variety of lines and fills. However, tourist and scenic route shield often depict natural scenes in a photorealistic style, requiring some tints that stand out against the usual background shades. These shields can take advantage of additional colors for contrast and recognizability, including:[^caltrans-sign-specs] + +| Color and example usage | Pantone | RGB | Hex triplet | +| ---------------------------------------------------------- | ------- | ----------- | ----------- | +| $`{\color{#ddcba4} \blacksquare}`$ Cream/tan (wood) | 468 | 221 203 164 | #ddcba4 | +| $`{\color{#9bcbeb} \blacksquare}`$ Light blue (sky, water) | 291 | 155 203 235 | #9bcbeb | +| $`{\color{#6cc24a} \blacksquare}`$ Light green (foliage) | 360 | 108 194 74 | #6cc24a | + +[^caltrans-sign-specs]: [California Sign Specification Drawings](https://dot.ca.gov/programs/safety-programs/sign-specs), California Department of Transportation See the [developer tools](dev/README.md) for an importable, Inkscape-compatible palette file. From e70fe3bc15588577d08150caf43075674d704c00 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:56:49 -0400 Subject: [PATCH 166/444] Convert nova scotia scenic route shields to 17x21 --- icons/shield_ca_ns_s_bdolsd.svg | 29 +++++++++++---------------- icons/shield_ca_ns_s_cet.svg | 32 +++++++++++------------------- icons/shield_ca_ns_s_ct.svg | 22 +++++++-------------- icons/shield_ca_ns_s_et.svg | 22 +++++++-------------- icons/shield_ca_ns_s_fdlt.svg | 35 ++++++++++++++------------------- icons/shield_ca_ns_s_gt.svg | 23 ++++++++-------------- icons/shield_ca_ns_s_lr.svg | 27 +++++++------------------ icons/shield_ca_ns_s_md.svg | 27 +++++++++++-------------- icons/shield_ca_ns_s_mt.svg | 32 ++++++++++-------------------- icons/shield_ca_ns_s_st.svg | 19 ++++++------------ 10 files changed, 94 insertions(+), 174 deletions(-) diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg index 77c3796ec..d27a52a11 100644 --- a/icons/shield_ca_ns_s_bdolsd.svg +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -1,27 +1,20 @@ - + - - + - - + + + + + + + + - + - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_cet.svg b/icons/shield_ca_ns_s_cet.svg index 716210c4f..f8523af35 100644 --- a/icons/shield_ca_ns_s_cet.svg +++ b/icons/shield_ca_ns_s_cet.svg @@ -1,29 +1,21 @@ - + - - + - - + + + + + + + + + - + - - - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_ct.svg b/icons/shield_ca_ns_s_ct.svg index 7ac826b5f..fa2c05e5b 100644 --- a/icons/shield_ca_ns_s_ct.svg +++ b/icons/shield_ca_ns_s_ct.svg @@ -1,24 +1,16 @@ - + - - + - - + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_et.svg b/icons/shield_ca_ns_s_et.svg index d1298c67e..23ec82fc3 100644 --- a/icons/shield_ca_ns_s_et.svg +++ b/icons/shield_ca_ns_s_et.svg @@ -1,24 +1,16 @@ - + - - + - - + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_fdlt.svg b/icons/shield_ca_ns_s_fdlt.svg index d206bb49a..8f057fcc1 100644 --- a/icons/shield_ca_ns_s_fdlt.svg +++ b/icons/shield_ca_ns_s_fdlt.svg @@ -1,30 +1,25 @@ - + - - + - - + + - + - - - - - - - - - - - - + + + + + + + + + + - - diff --git a/icons/shield_ca_ns_s_gt.svg b/icons/shield_ca_ns_s_gt.svg index 65746f200..b907a78cf 100644 --- a/icons/shield_ca_ns_s_gt.svg +++ b/icons/shield_ca_ns_s_gt.svg @@ -1,24 +1,17 @@ - + - - + - - + + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_lr.svg b/icons/shield_ca_ns_s_lr.svg index 2d7dda103..a478d5625 100644 --- a/icons/shield_ca_ns_s_lr.svg +++ b/icons/shield_ca_ns_s_lr.svg @@ -1,29 +1,16 @@ - + - - - + - - + + + + - + - - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_md.svg b/icons/shield_ca_ns_s_md.svg index a29278b22..5e35b59b6 100644 --- a/icons/shield_ca_ns_s_md.svg +++ b/icons/shield_ca_ns_s_md.svg @@ -1,25 +1,20 @@ - + - - + - - + + + + + + + + - - - - - - - - - - - + diff --git a/icons/shield_ca_ns_s_mt.svg b/icons/shield_ca_ns_s_mt.svg index f02f86e2e..2c36efcf6 100644 --- a/icons/shield_ca_ns_s_mt.svg +++ b/icons/shield_ca_ns_s_mt.svg @@ -1,31 +1,19 @@ - + - - - + - - - - + + + + + + - + - - - - - - - - - - - - - + diff --git a/icons/shield_ca_ns_s_st.svg b/icons/shield_ca_ns_s_st.svg index 6a49ffde3..46ee7ebe1 100644 --- a/icons/shield_ca_ns_s_st.svg +++ b/icons/shield_ca_ns_s_st.svg @@ -1,22 +1,15 @@ - + - - + - - - + + + - - - - - - - + From 0a8ae07eb5ccbe5da6b0d048a67b50d8e081cbc4 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 17:21:26 -0400 Subject: [PATCH 167/444] Add shields for Kejimkujik Scenic Drive and the Digby Necks and Islands Scenic Drive routes --- icons/shield_ca_ns_s_dnisd.svg | 12 ++++++++++++ icons/shield_ca_ns_s_ksd.svg | 19 +++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 37 insertions(+) create mode 100644 icons/shield_ca_ns_s_dnisd.svg create mode 100644 icons/shield_ca_ns_s_ksd.svg diff --git a/icons/shield_ca_ns_s_dnisd.svg b/icons/shield_ca_ns_s_dnisd.svg new file mode 100644 index 000000000..b46081a94 --- /dev/null +++ b/icons/shield_ca_ns_s_dnisd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_ksd.svg b/icons/shield_ca_ns_s_ksd.svg new file mode 100644 index 000000000..5270f0e63 --- /dev/null +++ b/icons/shield_ca_ns_s_ksd.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index e4569967e..f19797ca9 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4218,6 +4218,9 @@ export function loadShields() { CT: { spriteBlank: "shield_ca_ns_s_ct", }, + DNISD: { + spriteBlank: "shield_ca_ns_s_dnisd", + }, ET: { spriteBlank: "shield_ca_ns_s_et", }, @@ -4227,6 +4230,9 @@ export function loadShields() { GT: { spriteBlank: "shield_ca_ns_s_gt", }, + KSD: { + spriteBlank: "shield_ca_ns_s_ksd", + }, LR: { spriteBlank: "shield_ca_ns_s_lr", }, From bab0b012d91d9f77a570e7f480954735f13fe9ea Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 17:32:25 -0400 Subject: [PATCH 168/444] Fix eagle plumage --- icons/shield_ca_ns_s_bdolsd.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg index d27a52a11..fddb5e67c 100644 --- a/icons/shield_ca_ns_s_bdolsd.svg +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -7,7 +7,7 @@ - + From de941c5ca2aa017420a361c521c7eb0bcbcef5a9 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Sat, 12 Aug 2023 17:13:29 -0400 Subject: [PATCH 169/444] Update dependencies (#913) Update sprites parameter (https://github.com/linz/basemaps/pull/2736) --- package-lock.json | 5462 ++++++++++++++++---------------------------- package.json | 2 +- scripts/sprites.js | 4 +- 3 files changed, 1975 insertions(+), 3493 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a7620100..793f57612 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "openstreetmap-americana", "version": "0.1.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -22,7 +22,7 @@ "tokenfield": "^1.5.2" }, "devDependencies": { - "@basemaps/sprites": "^6.32.1", + "@basemaps/sprites": "^6.41.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@types/chai": "^4.3.4", @@ -58,12 +58,13 @@ "link": true }, "node_modules/@basemaps/sprites": { - "version": "6.32.1", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-6.41.0.tgz", + "integrity": "sha512-ktuEo8ulXffVPR/dJMYHGBHjdcolbng67j7J5y8rN+1A8gMV+MxVCJYKeJ7lip6nsmgRHb8/xUueyuIGlCxc/Q==", "dev": true, - "license": "MIT", "dependencies": { "@mapbox/shelf-pack": "^3.2.0", - "@rushstack/ts-command-line": "^4.3.13", + "cmd-ts": "^0.12.1", "sharp": "^0.30.7" }, "bin": { @@ -85,13 +86,254 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.11", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -100,19 +342,115 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -127,7 +465,8 @@ }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", - "license": "ISC", + "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", "minimist": "^1.2.6" @@ -138,18 +477,22 @@ }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", "engines": { "node": ">= 0.6" } }, "node_modules/@mapbox/mapbox-gl-supported": { "version": "2.0.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -167,23 +510,28 @@ }, "node_modules/@mapbox/point-geometry": { "version": "0.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" }, "node_modules/@mapbox/shelf-pack": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/shelf-pack/-/shelf-pack-3.2.0.tgz", + "integrity": "sha512-dyQxe6ukILV6qaEvxoKCIwhblgRjYp1ZGlClo4xvfbmxzFO5LYu7Tnrg2AZrRgN7VsSragsGcNjzUe9kCdKHYQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=6.0.0" } }, "node_modules/@mapbox/tiny-sdf": { - "version": "2.0.5", - "license": "BSD-2-Clause" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" }, "node_modules/@mapbox/unitbezier": { - "version": "0.0.1", - "license": "BSD-2-Clause" + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "dev": true }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", @@ -195,15 +543,17 @@ }, "node_modules/@mapbox/whoots-js": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", "engines": { "node": ">=6.0.0" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "17.0.1", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-17.1.0.tgz", + "integrity": "sha512-ie1GI7ceByOJ9u/xoqx9IMkFMo8FcvEzEQhx+GANviF7ARE4OhB8FBm17YYVPtMSRg3zE6J1Yxy3n97/d4HahA==", "dev": true, - "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.0", @@ -214,32 +564,16 @@ "sort-object": "^0.3.2" }, "bin": { - "gl-style-composite": "bin/gl-style-composite", - "gl-style-format": "bin/gl-style-format", - "gl-style-migrate": "bin/gl-style-migrate", - "gl-style-validate": "bin/gl-style-validate" - } - }, - "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "gl-style-format": "bin/gl-style-format.js", + "gl-style-migrate": "bin/gl-style-migrate.js", + "gl-style-validate": "bin/gl-style-validate.js" } }, "node_modules/@trysound/sax": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -263,20 +597,15 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "dev": true, - "license": "MIT" - }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "node_modules/@types/color-namer": { @@ -293,7 +622,8 @@ }, "node_modules/@types/geojson": { "version": "7946.0.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -304,7 +634,8 @@ }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.0", @@ -323,9 +654,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", - "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", + "version": "20.4.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.9.tgz", + "integrity": "sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==", "dev": true, "peer": true }, @@ -335,21 +666,23 @@ "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" }, "node_modules/@xmldom/xmldom": { - "version": "0.8.6", - "license": "MIT", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "engines": { "node": ">=10.0.0" } }, "node_modules/abbrev": { "version": "1.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -369,8 +702,9 @@ }, "node_modules/agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "4" }, @@ -380,24 +714,27 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -410,8 +747,9 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -422,13 +760,15 @@ }, "node_modules/aproba": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "node_modules/are-we-there-yet": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, - "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -444,11 +784,42 @@ "dev": true }, "node_modules/argparse": { - "version": "1.0.10", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, - "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { @@ -462,24 +833,41 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/async": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -494,8 +882,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/benchmark": { "version": "2.1.4", @@ -509,16 +896,18 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -527,22 +916,24 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -552,11 +943,14 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -572,7 +966,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -586,8 +979,9 @@ }, "node_modules/call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -598,8 +992,9 @@ }, "node_modules/camel-case": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", + "integrity": "sha512-rUug78lL8mqStaLehmH2F0LxMJ2TM9fnPFxb+gFkgyUjUM/1o2wKTQtalypHnkb2cFwH/DENBw7YEAOYLgSMxQ==", "dev": true, - "license": "MIT", "dependencies": { "sentence-case": "^1.1.1", "upper-case": "^1.1.1" @@ -607,8 +1002,9 @@ }, "node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -617,10 +1013,11 @@ } }, "node_modules/canvas": { - "version": "2.11.0", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", "nan": "^2.17.0", @@ -630,42 +1027,11 @@ "node": ">=6" } }, - "node_modules/canvas/node_modules/decompress-response": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/canvas/node_modules/mimic-response": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/canvas/node_modules/simple-get": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/chai": { "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -681,8 +1047,9 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -694,27 +1061,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -722,7 +1081,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -740,28 +1098,48 @@ } }, "node_modules/chownr": { - "version": "1.1.4", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "ISC" + "engines": { + "node": ">=10" + } }, "node_modules/chroma-js": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-1.4.1.tgz", + "integrity": "sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ==", "dev": true }, "node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, + "node_modules/cmd-ts": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/cmd-ts/-/cmd-ts-0.12.1.tgz", + "integrity": "sha512-k93f6LgFEzx7/vBy5qV+tu1VI8YuH0DZmwNXPvRaDR4Qp7Fl9+pUSylX/CKHrWoKqHMJjNOLb1NeYTvHOjQ2Kw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "didyoumean": "^1.2.2", + "strip-ansi": "^6.0.0" + } + }, "node_modules/color": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -772,8 +1150,9 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -781,20 +1160,16 @@ "node": ">=7.0.0" } }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-namer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/color-namer/-/color-namer-1.4.0.tgz", + "integrity": "sha512-3mQMY9MJyfdV2uhe+xjQWcKHtYnPtl5svGjt89V2WWT2MlaLAd7C02886Wq7H1MTjjIIEa/NJLYPNF/Lhxhq2A==", "dev": true, - "license": "MIT", "dependencies": { "chroma-js": "^1.3.4", "es6-weak-map": "^2.0.3" @@ -802,79 +1177,80 @@ }, "node_modules/color-parse": { "version": "1.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", "dependencies": { "color-name": "^1.0.0" } }, - "node_modules/color-parse/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, "node_modules/color-rgba": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", "dependencies": { "color-parse": "^1.4.2", "color-space": "^2.0.0" } }, "node_modules/color-space": { - "version": "2.0.0", - "license": "MIT" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", + "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==" }, "node_modules/color-string": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "node_modules/color-string/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colors": { - "version": "1.2.5", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/commander": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/copy-paste-win32fix": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/copy-paste-win32fix/-/copy-paste-win32fix-1.4.0.tgz", + "integrity": "sha512-covImiUCOAvAPzWHWwrcEJYOPZVdAvxp5PBbSdtlK1xt2O5IJsBOw+1cQTLhP2L4ph4syKfbDFzKRlNGyjbBSw==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "^0.4.8" } @@ -887,8 +1263,9 @@ }, "node_modules/cross-spawn": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -901,21 +1278,23 @@ } }, "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/css-select": { - "version": "4.2.1", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, @@ -925,8 +1304,9 @@ }, "node_modules/css-tree": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -936,9 +1316,10 @@ } }, "node_modules/css-what": { - "version": "5.1.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -948,12 +1329,14 @@ }, "node_modules/csscolorparser": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" }, "node_modules/csso": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -963,8 +1346,9 @@ }, "node_modules/d": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "license": "ISC", "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -972,8 +1356,9 @@ }, "node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -986,15 +1371,11 @@ } } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -1003,23 +1384,22 @@ } }, "node_modules/decompress-response": { - "version": "6.0.0", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "dev": true, - "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "mimic-response": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/deep-eql": { - "version": "4.1.2", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -1029,56 +1409,73 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { - "version": "1.1.3", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, - "license": "MIT", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/detect-libc": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/dom-serializer": { - "version": "1.3.2", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -1088,29 +1485,23 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/domelementtype": { - "version": "2.2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { - "version": "4.3.0", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -1123,8 +1514,9 @@ }, "node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -1136,54 +1528,87 @@ }, "node_modules/earcut": { "version": "2.2.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.19.1", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, - "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -1192,10 +1617,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -1210,9 +1650,10 @@ }, "node_modules/es5-ext": { "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "hasInstallScript": true, - "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -1224,8 +1665,9 @@ }, "node_modules/es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -1234,8 +1676,9 @@ }, "node_modules/es6-symbol": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "license": "ISC", "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" @@ -1243,8 +1686,9 @@ }, "node_modules/es6-weak-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "license": "ISC", "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -1253,10 +1697,11 @@ } }, "node_modules/esbuild": { - "version": "0.17.11", + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -1264,86 +1709,97 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.11", - "@esbuild/android-arm64": "0.17.11", - "@esbuild/android-x64": "0.17.11", - "@esbuild/darwin-arm64": "0.17.11", - "@esbuild/darwin-x64": "0.17.11", - "@esbuild/freebsd-arm64": "0.17.11", - "@esbuild/freebsd-x64": "0.17.11", - "@esbuild/linux-arm": "0.17.11", - "@esbuild/linux-arm64": "0.17.11", - "@esbuild/linux-ia32": "0.17.11", - "@esbuild/linux-loong64": "0.17.11", - "@esbuild/linux-mips64el": "0.17.11", - "@esbuild/linux-ppc64": "0.17.11", - "@esbuild/linux-riscv64": "0.17.11", - "@esbuild/linux-s390x": "0.17.11", - "@esbuild/linux-x64": "0.17.11", - "@esbuild/netbsd-x64": "0.17.11", - "@esbuild/openbsd-x64": "0.17.11", - "@esbuild/sunos-x64": "0.17.11", - "@esbuild/win32-arm64": "0.17.11", - "@esbuild/win32-ia32": "0.17.11", - "@esbuild/win32-x64": "0.17.11" + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, "node_modules/escalade": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/expand-template": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/ext": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "license": "ISC", "dependencies": { "type": "^2.7.2" } }, "node_modules/ext/node_modules/type": { "version": "2.7.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true }, "node_modules/file-type": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1353,8 +1809,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1368,27 +1825,41 @@ }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/fonteditor-core": { "version": "2.1.11", + "resolved": "https://registry.npmjs.org/fonteditor-core/-/fonteditor-core-2.1.11.tgz", + "integrity": "sha512-zgO5tHw5vzqYqkeb9jthIANbOOGwWqNWovINCMyIDLh9xmujsHPqloWJdk0PMbJHbZmiLG1F/kygfuWS8+TDfA==", "dependencies": { "@xmldom/xmldom": "^0.8.3" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -1398,8 +1869,9 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -1409,18 +1881,62 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "ISC" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, - "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -1438,39 +1954,45 @@ }, "node_modules/geojson-validation": { "version": "1.0.2", - "license": "LGPL-3", + "resolved": "https://registry.npmjs.org/geojson-validation/-/geojson-validation-1.0.2.tgz", + "integrity": "sha512-K5jrJ4wFvORn2pRKeg181LL0QPYuEKn2KHPvfH1m2QtFlAXFLKdseqt0XwBM3ELOY7kNM1fglRQ6ZwUQZ5S00A==", "bin": { "gjv": "bin/gjv" } }, "node_modules/geojson-vt": { "version": "3.2.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.1.1", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1478,7 +2000,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -1488,8 +2011,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -1503,20 +2027,23 @@ }, "node_modules/github-from-package": { "version": "0.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true }, "node_modules/gl-matrix": { "version": "3.4.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "node_modules/glob": { - "version": "9.2.1", + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", + "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" }, @@ -1529,8 +2056,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -1538,31 +2066,10 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "7.4.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-prefix": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -1572,10 +2079,26 @@ "node": ">=6" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/google-font-installer": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/google-font-installer/-/google-font-installer-1.2.0.tgz", + "integrity": "sha512-0tgwTRphnjiTEUflczlgJU0PVao1Y/oA0ZPYH3d4Twc7Uc8SL36mQyjzxY8KXaVUjID++XDFrGo3aJVNDodE3Q==", "dev": true, - "license": "MIT", "dependencies": { "async": "^1.5.2", "colors": "^1.1.2", @@ -1594,18 +2117,33 @@ }, "node_modules/google-font-installer/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT" + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -1614,36 +2152,64 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -1656,26 +2222,30 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -1686,8 +2256,9 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -1697,6 +2268,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -1710,13 +2283,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1724,19 +2297,22 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { - "version": "1.0.3", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -1746,21 +2322,38 @@ }, "node_modules/interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -1770,8 +2363,9 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -1781,8 +2375,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1795,9 +2390,10 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1806,9 +2402,10 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -1818,8 +2415,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1832,8 +2430,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -1846,24 +2445,27 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1873,8 +2475,9 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1884,16 +2487,18 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.6", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1906,16 +2511,18 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1928,17 +2535,22 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1951,8 +2563,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -1963,10 +2576,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -1976,8 +2605,9 @@ }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -1987,8 +2617,9 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -1996,14 +2627,22 @@ "node": ">=8" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2011,20 +2650,17 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/json-stringify-pretty-compact": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "dev": true }, "node_modules/json5": { "version": "1.0.2", @@ -2041,19 +2677,22 @@ }, "node_modules/kdbush": { "version": "3.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" }, "node_modules/kind-of": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, "node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -2064,22 +2703,11 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -2098,8 +2726,9 @@ }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -2113,32 +2742,33 @@ }, "node_modules/loupe": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.0" } }, "node_modules/lower-case": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true }, "node_modules/lru-cache": { - "version": "6.0.0", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "14 || >=16.14" } }, "node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -2150,9 +2780,10 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2165,8 +2796,9 @@ }, "node_modules/maplibre-gl": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -2194,56 +2826,75 @@ "vt-pbf": "^3.1.3" } }, + "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, "node_modules/mdn-data": { "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" } }, "node_modules/mimic-response": { - "version": "3.1.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { - "version": "3.1.1", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { - "version": "1.2.6", - "license": "MIT" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { - "version": "4.2.4", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -2254,8 +2905,9 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2264,25 +2916,28 @@ } }, "node_modules/mkdirp": { - "version": "1.0.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, "bin": { "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/mocha": { - "version": "10.1.0", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -2318,21 +2973,11 @@ "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2348,10 +2993,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2361,8 +3017,9 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2370,38 +3027,43 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/murmurhash-js": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" }, "node_modules/mv": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "dev": true, - "license": "MIT", "dependencies": { "mkdirp": "~0.5.1", "ncp": "~2.0.0", @@ -2411,10 +3073,21 @@ "node": ">=0.8.0" } }, + "node_modules/mv/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/mv/node_modules/glob": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "dev": true, - "license": "ISC", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -2426,21 +3099,23 @@ "node": "*" } }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/mv/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "brace-expansion": "^1.1.7" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": "*" } }, "node_modules/mv/node_modules/rimraf": { "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^6.0.1" }, @@ -2450,13 +3125,15 @@ }, "node_modules/nan": { "version": "2.17.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2466,31 +3143,36 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true }, "node_modules/ncp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "dev": true, - "license": "MIT", "bin": { "ncp": "bin/ncp" } }, "node_modules/next-tick": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/node-abi": { - "version": "3.33.0", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -2500,13 +3182,15 @@ }, "node_modules/node-addon-api": { "version": "5.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true }, "node_modules/node-fetch": { - "version": "2.6.9", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2524,8 +3208,9 @@ }, "node_modules/node-powershell": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/node-powershell/-/node-powershell-4.0.0.tgz", + "integrity": "sha512-WCZMLgwkjW9G/DZsZwyCEAXhMMzShLRUlnYS+EETRqRLSdUMbuO4xiQxIOeAutwQgvj75NvC58CorHFlx0olIA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "chalk": "^2.4.1", @@ -2534,8 +3219,9 @@ }, "node_modules/node-powershell/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "color-convert": "^1.9.0" @@ -2546,8 +3232,9 @@ }, "node_modules/node-powershell/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "ansi-styles": "^3.2.1", @@ -2560,17 +3247,36 @@ }, "node_modules/node-powershell/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "color-name": "1.1.3" } }, + "node_modules/node-powershell/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "optional": true + }, + "node_modules/node-powershell/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/node-powershell/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=4" @@ -2578,8 +3284,9 @@ }, "node_modules/node-powershell/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "has-flag": "^3.0.0" @@ -2590,8 +3297,9 @@ }, "node_modules/nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, - "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -2604,8 +3312,9 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -2614,25 +3323,28 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -2655,8 +3367,9 @@ }, "node_modules/npm-run-all/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2664,10 +3377,21 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2679,24 +3403,54 @@ }, "node_modules/npm-run-all/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/npm-run-all/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2706,8 +3460,9 @@ }, "node_modules/npmlog": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, - "license": "ISC", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -2716,9 +3471,10 @@ } }, "node_modules/nth-check": { - "version": "2.0.1", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -2728,36 +3484,40 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.12.0", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.2", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -2769,16 +3529,18 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/open": { "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -2810,8 +3572,9 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -2824,8 +3587,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -2836,10 +3600,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/pascal-case": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", + "integrity": "sha512-QWlbdQHdKWlcyTEuv/M0noJtlCa7qTmg5QFAqhx5X9xjAfCU1kXucL+rcOmd2HliESuRLIOz8521RAW/yhuQog==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^1.1.1", "upper-case-first": "^1.1.0" @@ -2847,60 +3625,79 @@ }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { - "version": "1.6.1", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "7.18.3", + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, - "license": "ISC", "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -2919,13 +3716,15 @@ }, "node_modules/picocolors": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2935,8 +3734,9 @@ }, "node_modules/pidtree": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -2946,8 +3746,9 @@ }, "node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -2960,12 +3761,14 @@ }, "node_modules/potpack": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" }, "node_modules/prebuild-install": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, - "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -2987,16 +3790,68 @@ "node": ">=10" } }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "node_modules/prebuild-install/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install/node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -3004,12 +3859,14 @@ }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3017,20 +3874,23 @@ }, "node_modules/quickselect": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3041,34 +3901,34 @@ "rc": "cli.js" } }, - "node_modules/read-pkg": { - "version": "3.0.0", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/read-pkg/node_modules/path-type": { + "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/readable-stream": { - "version": "3.6.1", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3080,8 +3940,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -3091,6 +3952,8 @@ }, "node_modules/rechoir": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -3099,20 +3962,39 @@ "node": ">= 0.10" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.0", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3125,15 +4007,17 @@ }, "node_modules/resolve-protobuf-schema": { "version": "2.1.0", - "license": "MIT", + "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" } }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -3144,10 +4028,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3163,13 +4058,46 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/rw": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, - "license": "BSD-3-Clause" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -3184,18 +4112,33 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/semver": { - "version": "7.3.7", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3206,32 +4149,48 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/sentence-case": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", + "integrity": "sha512-laa/UDTPXsrQnoN/Kc8ZO7gTeEjMsuPiDgUCk9N0iINRZvqAMCTXjGl8+tD27op1eF/JHbdUlEUmovDh6AX7sA==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^1.1.1" } }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/sharp": { "version": "0.30.7", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", + "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", "dev": true, "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.1", @@ -3249,10 +4208,63 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/sharp/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sharp/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sharp/node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -3262,21 +4274,27 @@ }, "node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/shell-quote": { - "version": "1.7.3", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/shelljs": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -3289,10 +4307,21 @@ "node": ">=4" } }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/shelljs/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3308,10 +4337,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/shortid": { "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "nanoid": "^2.1.0" @@ -3319,14 +4362,16 @@ }, "node_modules/shortid/node_modules/nanoid": { "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/shx": { "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.3", "shelljs": "^0.8.5" @@ -3340,8 +4385,9 @@ }, "node_modules/side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -3353,11 +4399,14 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -3372,48 +4421,38 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/simple-get": { - "version": "4.0.1", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", "dependencies": { - "decompress-response": "^6.0.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "node_modules/simple-swizzle": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true }, "node_modules/sort-asc": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", + "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3421,6 +4460,8 @@ }, "node_modules/sort-desc": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", + "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3428,6 +4469,8 @@ }, "node_modules/sort-object": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", + "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", "dev": true, "dependencies": { "sort-asc": "^0.1.0", @@ -3439,8 +4482,9 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3456,9 +4500,10 @@ } }, "node_modules/spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -3466,58 +4511,47 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true }, "node_modules/stable": { "version": "0.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true }, "node_modules/string_decoder": { - "version": "1.1.1", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" + "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3528,13 +4562,31 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.3", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -3544,24 +4596,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3569,8 +4625,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3580,45 +4637,50 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { - "version": "2.0.1", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supercluster": { "version": "7.1.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", "dependencies": { "kdbush": "^3.0.0" } }, "node_modules/supports-color": { - "version": "8.1.1", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3628,8 +4690,9 @@ }, "node_modules/svgo": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, - "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -3648,20 +4711,22 @@ }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/tar": { - "version": "6.1.13", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, - "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -3672,8 +4737,9 @@ }, "node_modules/tar-fs": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -3681,10 +4747,17 @@ "tar-stream": "^2.1.4" } }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -3696,22 +4769,37 @@ "node": ">=6" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { "node": ">=10" } }, "node_modules/tinyqueue": { "version": "2.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3721,12 +4809,14 @@ }, "node_modules/tokenfield": { "version": "1.5.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/tokenfield/-/tokenfield-1.5.2.tgz", + "integrity": "sha512-G1mSawKJLSf3RqcI00uojA5BD2WAo+gc3ZyU4ElHFY08RPaksnJPcyEV1PAGPgAVZmQTjFGQ2uLK6WVDJrgTLA==" }, "node_modules/tr46": { "version": "0.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/ts-mocha": { "version": "10.0.0", @@ -3758,18 +4848,6 @@ "node": ">=0.3.1" } }, - "node_modules/ts-mocha/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ts-mocha/node_modules/ts-node": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", @@ -3868,8 +4946,9 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -3879,17 +4958,84 @@ }, "node_modules/type": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -3904,13 +5050,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -3919,21 +5066,24 @@ }, "node_modules/upper-case": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true }, "node_modules/upper-case-first": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", "dev": true, - "license": "MIT", "dependencies": { "upper-case": "^1.1.1" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", @@ -3943,8 +5093,9 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -3952,7 +5103,8 @@ }, "node_modules/vt-pbf": { "version": "3.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", @@ -3961,13 +5113,15 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -3975,7 +5129,8 @@ }, "node_modules/which": { "version": "1.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, @@ -3985,8 +5140,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -3998,23 +5154,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/workerpool": { "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4029,26 +5207,30 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -4064,16 +5246,18 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -4095,8 +5279,9 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4106,7 +5291,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.2", + "version": "0.0.3", "license": "CC0-1.0", "dependencies": { "color-rgba": "^2.4.0", @@ -4123,2708 +5308,5 @@ "typescript": "^4.9.5" } } - }, - "dependencies": { - "@americana/maplibre-shield-generator": { - "version": "file:shieldlib", - "requires": { - "@types/color-rgba": "^2.1.0", - "color-rgba": "^2.4.0", - "esbuild": "^0.17.10", - "maplibre-gl": "^2.4.0", - "npm-run-all": "^4.1.5", - "prettier": "^2.8.4", - "shx": "^0.3.4", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", - "typescript": "^4.9.5" - } - }, - "@basemaps/sprites": { - "version": "6.32.1", - "dev": true, - "requires": { - "@mapbox/shelf-pack": "^3.2.0", - "@rushstack/ts-command-line": "^4.3.13", - "sharp": "^0.30.7" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@esbuild/linux-x64": { - "version": "0.17.11", - "dev": true, - "optional": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@mapbox/geojson-rewind": { - "version": "0.5.2", - "requires": { - "get-stream": "^6.0.1", - "minimist": "^1.2.6" - } - }, - "@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2" - }, - "@mapbox/mapbox-gl-supported": { - "version": "2.0.1" - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.10", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } - }, - "@mapbox/point-geometry": { - "version": "0.1.0" - }, - "@mapbox/shelf-pack": { - "version": "3.2.0", - "dev": true - }, - "@mapbox/tiny-sdf": { - "version": "2.0.5" - }, - "@mapbox/unitbezier": { - "version": "0.0.1" - }, - "@mapbox/vector-tile": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", - "requires": { - "@mapbox/point-geometry": "~0.1.0" - } - }, - "@mapbox/whoots-js": { - "version": "3.1.0" - }, - "@maplibre/maplibre-gl-style-spec": { - "version": "17.0.1", - "dev": true, - "requires": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/unitbezier": "^0.0.0", - "csscolorparser": "~1.0.2", - "json-stringify-pretty-compact": "^2.0.0", - "minimist": "^1.2.5", - "rw": "^1.3.3", - "sort-object": "^0.3.2" - }, - "dependencies": { - "@mapbox/unitbezier": { - "version": "0.0.0", - "dev": true - } - } - }, - "@rushstack/ts-command-line": { - "version": "4.11.0", - "dev": true, - "requires": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/argparse": { - "version": "1.0.38", - "dev": true - }, - "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "@types/color-namer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/color-namer/-/color-namer-1.3.0.tgz", - "integrity": "sha512-iyuC9rR+3QYd+VuC8E9MvKM2fTForr9RcUa4YurqRJyXcDALYIt+GPsy1skrri2QcYxWVNYYyoznxe8Y42K4/g==", - "dev": true - }, - "@types/color-rgba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.0.tgz", - "integrity": "sha512-tWcJLEiKdZ3ihJdThfLCe6Kw5vo0lgGcuucGkbtzcp1zifDA1E2Z96wxeSS/r+ytpHD15NCAWabX8GV911ywCA==", - "dev": true - }, - "@types/geojson": { - "version": "7946.0.10" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "optional": true - }, - "@types/mapbox__point-geometry": { - "version": "0.1.2" - }, - "@types/mapbox__vector-tile": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", - "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", - "requires": { - "@types/geojson": "*", - "@types/mapbox__point-geometry": "*", - "@types/pbf": "*" - } - }, - "@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "@types/node": { - "version": "18.15.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", - "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", - "dev": true, - "peer": true - }, - "@types/pbf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", - "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" - }, - "@xmldom/xmldom": { - "version": "0.8.6" - }, - "abbrev": { - "version": "1.1.1", - "dev": true - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-colors": { - "version": "4.1.1", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "dev": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "dev": true - }, - "async": { - "version": "1.5.2", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "dev": true - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4", - "platform": "^1.3.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bl": { - "version": "4.1.0", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boolbase": { - "version": "1.0.0", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "dev": true - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camel-case": { - "version": "1.2.2", - "dev": true, - "requires": { - "sentence-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "canvas": { - "version": "2.11.0", - "dev": true, - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "dependencies": { - "decompress-response": { - "version": "4.2.1", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "dev": true - }, - "simple-get": { - "version": "3.1.1", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } - } - }, - "chai": { - "version": "4.3.7", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "dev": true - }, - "chroma-js": { - "version": "1.4.1", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color": { - "version": "4.2.3", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - }, - "dependencies": { - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "color-namer": { - "version": "1.4.0", - "dev": true, - "requires": { - "chroma-js": "^1.3.4", - "es6-weak-map": "^2.0.3" - } - }, - "color-parse": { - "version": "1.4.2", - "requires": { - "color-name": "^1.0.0" - }, - "dependencies": { - "color-name": { - "version": "1.1.4" - } - } - }, - "color-rgba": { - "version": "2.4.0", - "requires": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" - } - }, - "color-space": { - "version": "2.0.0" - }, - "color-string": { - "version": "1.9.1", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - }, - "dependencies": { - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "color-support": { - "version": "1.1.3", - "dev": true - }, - "colors": { - "version": "1.2.5", - "dev": true - }, - "commander": { - "version": "10.0.0", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "dev": true - }, - "copy-paste-win32fix": { - "version": "1.4.0", - "dev": true, - "requires": { - "iconv-lite": "^0.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "css-select": { - "version": "4.2.1", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "5.1.0", - "dev": true - }, - "csscolorparser": { - "version": "1.0.3" - }, - "csso": { - "version": "4.2.0", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "d": { - "version": "1.0.1", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "decamelize": { - "version": "4.0.0", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "deep-eql": { - "version": "4.1.2", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delegates": { - "version": "1.0.0", - "dev": true - }, - "detect-libc": { - "version": "2.0.1", - "dev": true - }, - "diff": { - "version": "5.0.0", - "dev": true - }, - "dom-serializer": { - "version": "1.3.2", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "dev": true - } - } - }, - "domelementtype": { - "version": "2.2.0", - "dev": true - }, - "domhandler": { - "version": "4.3.0", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "earcut": { - "version": "2.2.4" - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "esbuild": { - "version": "0.17.11", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.11", - "@esbuild/android-arm64": "0.17.11", - "@esbuild/android-x64": "0.17.11", - "@esbuild/darwin-arm64": "0.17.11", - "@esbuild/darwin-x64": "0.17.11", - "@esbuild/freebsd-arm64": "0.17.11", - "@esbuild/freebsd-x64": "0.17.11", - "@esbuild/linux-arm": "0.17.11", - "@esbuild/linux-arm64": "0.17.11", - "@esbuild/linux-ia32": "0.17.11", - "@esbuild/linux-loong64": "0.17.11", - "@esbuild/linux-mips64el": "0.17.11", - "@esbuild/linux-ppc64": "0.17.11", - "@esbuild/linux-riscv64": "0.17.11", - "@esbuild/linux-s390x": "0.17.11", - "@esbuild/linux-x64": "0.17.11", - "@esbuild/netbsd-x64": "0.17.11", - "@esbuild/openbsd-x64": "0.17.11", - "@esbuild/sunos-x64": "0.17.11", - "@esbuild/win32-arm64": "0.17.11", - "@esbuild/win32-ia32": "0.17.11", - "@esbuild/win32-x64": "0.17.11" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "events": { - "version": "3.3.0" - }, - "expand-template": { - "version": "2.0.3", - "dev": true - }, - "ext": { - "version": "1.7.0", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "dev": true - } - } - }, - "file-type": { - "version": "3.9.0", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "dev": true - }, - "fonteditor-core": { - "version": "2.1.11", - "requires": { - "@xmldom/xmldom": "^0.8.3" - } - }, - "fs-constants": { - "version": "1.0.0", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "gauge": { - "version": "3.0.2", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "geojson-validation": { - "version": "1.0.2" - }, - "geojson-vt": { - "version": "3.2.1" - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "6.0.1" - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "dev": true - }, - "gl-matrix": { - "version": "3.4.3" - }, - "glob": { - "version": "9.2.1", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "7.4.2", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-prefix": { - "version": "3.0.0", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "google-font-installer": { - "version": "1.2.0", - "dev": true, - "requires": { - "async": "^1.5.2", - "colors": "^1.1.2", - "commander": "^2.9.0", - "copy-paste-win32fix": "^1.4.0", - "file-type": "^3.6.0", - "mv": "^2.1.1", - "node-powershell": "^4.0.0", - "pascal-case": "^1.1.2" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "dev": true - }, - "he": { - "version": "1.2.0", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1" - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "ini": { - "version": "1.3.8" - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-obj": { - "version": "2.1.0", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isexe": { - "version": "2.0.0" - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "dev": true - } - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "dev": true - }, - "json-stringify-pretty-compact": { - "version": "2.0.0", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kdbush": { - "version": "3.0.0" - }, - "kind-of": { - "version": "6.0.3" - }, - "load-json-file": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loupe": { - "version": "2.3.6", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "maplibre-gl": { - "version": "2.4.0", - "requires": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^2.0.1", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.5", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "@types/geojson": "^7946.0.10", - "@types/mapbox__point-geometry": "^0.1.2", - "@types/mapbox__vector-tile": "^1.3.0", - "@types/pbf": "^3.0.2", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.4.3", - "global-prefix": "^3.0.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.2", - "quickselect": "^2.0.0", - "supercluster": "^7.1.5", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.3" - } - }, - "mdn-data": { - "version": "2.0.14", - "dev": true - }, - "memorystream": { - "version": "0.3.1", - "dev": true - }, - "mimic-response": { - "version": "3.1.0", - "dev": true - }, - "minimatch": { - "version": "3.1.1", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6" - }, - "minipass": { - "version": "4.2.4", - "dev": true - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "dev": true - }, - "mocha": { - "version": "10.1.0", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "glob": { - "version": "7.2.0", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "minimatch": { - "version": "5.0.1", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "dev": true - }, - "murmurhash-js": { - "version": "1.0.0" - }, - "mv": { - "version": "2.1.1", - "dev": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.4.5", - "dev": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "nan": { - "version": "2.17.0", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true - }, - "node-abi": { - "version": "3.33.0", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "node-addon-api": { - "version": "5.1.0", - "dev": true - }, - "node-fetch": { - "version": "2.6.9", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-powershell": { - "version": "4.0.0", - "dev": true, - "optional": true, - "requires": { - "chalk": "^2.4.1", - "shortid": "^2.2.14" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "optional": true, - "requires": { - "color-name": "1.1.3" - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "5.0.0", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "npmlog": { - "version": "5.0.1", - "dev": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.0", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "open": { - "version": "8.4.2", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "openmapsamples": { - "version": "git+ssh://git@github.com/adamfranco/OpenMapSamples.git#5014e9f74d7fd49b4e57bc2e8045d3e0b913f221", - "from": "openmapsamples@github:adamfranco/OpenMapSamples", - "requires": { - "geojson-validation": "^1.0.2" - } - }, - "openmapsamples-maplibre": { - "version": "git+ssh://git@github.com/adamfranco/OpenMapSamples-MapLibre.git#d0bb7b897c95bd0ef6adcd4e3a2ad409b9266c27", - "from": "openmapsamples-maplibre@github:adamfranco/OpenMapSamples-MapLibre", - "requires": { - "maplibre-gl": "^2.0", - "openmapsamples": "github:adamfranco/OpenMapSamples" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pascal-case": { - "version": "1.1.2", - "dev": true, - "requires": { - "camel-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-scurry": { - "version": "1.6.1", - "dev": true, - "requires": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.1", - "dev": true - }, - "pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "requires": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - } - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "dev": true - }, - "pify": { - "version": "3.0.0", - "dev": true - }, - "platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "dev": true - }, - "potpack": { - "version": "1.0.2" - }, - "prebuild-install": { - "version": "7.1.1", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true - }, - "protocol-buffers-schema": { - "version": "3.6.0" - }, - "pump": { - "version": "3.0.0", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "quickselect": { - "version": "2.0.0" - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, - "readable-stream": { - "version": "3.6.1", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-protobuf-schema": { - "version": "2.1.0", - "requires": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "rw": { - "version": "1.3.3", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "sentence-case": { - "version": "1.1.3", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true - }, - "sharp": { - "version": "0.30.7", - "dev": true, - "requires": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - } - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "shortid": { - "version": "2.2.16", - "dev": true, - "optional": true, - "requires": { - "nanoid": "^2.1.0" - }, - "dependencies": { - "nanoid": { - "version": "2.1.11", - "dev": true, - "optional": true - } - } - }, - "shx": { - "version": "0.3.4", - "dev": true, - "requires": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - } - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "dev": true - }, - "simple-get": { - "version": "4.0.1", - "dev": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } - } - }, - "sort-asc": { - "version": "0.1.0", - "dev": true - }, - "sort-desc": { - "version": "0.1.1", - "dev": true - }, - "sort-object": { - "version": "0.3.2", - "dev": true, - "requires": { - "sort-asc": "^0.1.0", - "sort-desc": "^0.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "stable": { - "version": "0.1.8", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "string-argv": { - "version": "0.3.1", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.padend": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "dev": true - }, - "supercluster": { - "version": "7.1.5", - "requires": { - "kdbush": "^3.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true - } - } - }, - "tar": { - "version": "6.1.13", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.1.1", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "tinyqueue": { - "version": "2.0.3" - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tokenfield": { - "version": "1.5.2" - }, - "tr46": { - "version": "0.0.3", - "dev": true - }, - "ts-mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", - "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", - "dev": true, - "requires": { - "ts-node": "7.0.1", - "tsconfig-paths": "^3.5.0" - }, - "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", - "dev": true - } - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "optional": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type": { - "version": "1.2.0", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "upper-case": { - "version": "1.1.3", - "dev": true - }, - "upper-case-first": { - "version": "1.1.2", - "dev": true, - "requires": { - "upper-case": "^1.1.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vt-pbf": { - "version": "3.1.3", - "requires": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wide-align": { - "version": "1.1.5", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "workerpool": { - "version": "6.2.1", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - } } } diff --git a/package.json b/package.json index 813895eec..192a64e38 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "tokenfield": "^1.5.2" }, "devDependencies": { - "@basemaps/sprites": "^6.32.1", + "@basemaps/sprites": "^6.41.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@types/chai": "^4.3.4", diff --git a/scripts/sprites.js b/scripts/sprites.js index 6e509ec66..49b1e9c81 100644 --- a/scripts/sprites.js +++ b/scripts/sprites.js @@ -11,8 +11,8 @@ const sprites = await Promise.all( await glob("./icons/*.svg") ).map(async (spritePath) => { const id = path.parse(spritePath).name; - const svg = await fs.readFile(spritePath); - return { id, svg }; + const buffer = await fs.readFile(spritePath); + return { id, buffer }; }) ); From 30dfff4d9ee02361afc8187d3bfbba7dc9345f78 Mon Sep 17 00:00:00 2001 From: wmisener <58491489+wmisener@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:30:33 -0700 Subject: [PATCH 170/444] New Judaism symbol and switched to blue --- icons/poi_pow_jewish.svg | 2 +- src/layer/poi.js | 29 +++++++++++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/icons/poi_pow_jewish.svg b/icons/poi_pow_jewish.svg index fb3f75514..b563611df 100644 --- a/icons/poi_pow_jewish.svg +++ b/icons/poi_pow_jewish.svg @@ -1,3 +1,3 @@ - + diff --git a/src/layer/poi.js b/src/layer/poi.js index 399048589..9e1ae3866 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -89,7 +89,7 @@ var iconDefs = { place_of_worship: ["buddhist"], }, sprite: "poi_pow_buddhist", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Buddhist place of worship", }, pow_christian: { @@ -97,7 +97,7 @@ var iconDefs = { place_of_worship: ["christian"], }, sprite: "poi_pow_christian", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Christian place of worship", }, pow_hindu: { @@ -105,7 +105,7 @@ var iconDefs = { place_of_worship: ["hindu"], }, sprite: "poi_pow_hindu", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Hindu place of worship", }, pow_jewish: { @@ -113,7 +113,7 @@ var iconDefs = { place_of_worship: ["jewish"], }, sprite: "poi_pow_jewish", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Jewish place of worship", }, pow_muslim: { @@ -121,7 +121,7 @@ var iconDefs = { place_of_worship: ["muslim"], }, sprite: "poi_pow_muslim", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Muslim place of worship", }, pow_sikh: { @@ -129,7 +129,7 @@ var iconDefs = { place_of_worship: ["sikh"], }, sprite: "poi_pow_sikh", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Sikh place of worship", }, pow_shinto: { @@ -137,7 +137,7 @@ var iconDefs = { place_of_worship: ["shinto"], }, sprite: "poi_pow_shinto", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Shinto place of worship", }, pow_taoist: { @@ -145,7 +145,7 @@ var iconDefs = { place_of_worship: ["taoist"], }, sprite: "poi_pow_taoist", - color: Color.poi.attraction, + color: Color.poi.infrastructure, description: "Taoist place of worship", }, railway_station: { @@ -247,10 +247,17 @@ export const poi = { ...getSubclasses(iconDefs.railway_stop), ], Color.poi.transport, + ["museum"], + Color.poi.attraction, [ - "museum", - ...getSubclasses(iconDefs.pow_buddhist), + "hospital", + "parking", + "police", + "school", + "college", + "townhall", ...getSubclasses(iconDefs.pow_christian), + ...getSubclasses(iconDefs.pow_buddhist), ...getSubclasses(iconDefs.pow_hindu), ...getSubclasses(iconDefs.pow_jewish), ...getSubclasses(iconDefs.pow_muslim), @@ -258,8 +265,6 @@ export const poi = { ...getSubclasses(iconDefs.pow_shinto), ...getSubclasses(iconDefs.pow_taoist), ], - Color.poi.attraction, - ["hospital", "parking", "police", "school", "college", "townhall"], Color.poi.infrastructure, Color.poi.infrastructure, ], From b018421c414d176c402b79754e1a00b3cda6089d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 24 Aug 2023 19:06:10 -0400 Subject: [PATCH 171/444] Move standard helper functions to shieldlib --- shieldlib/src/index.d.ts | 3 +- shieldlib/src/index.ts | 1 + shieldlib/src/shield_helper.d.ts | 156 +++++++ shieldlib/src/shield_helper.ts | 700 +++++++++++++++++++++++++++++++ shieldlib/src/types.ts | 54 ++- src/js/shield_defs.js | 691 +----------------------------- 6 files changed, 926 insertions(+), 679 deletions(-) create mode 100644 shieldlib/src/shield_helper.d.ts create mode 100644 shieldlib/src/shield_helper.ts diff --git a/shieldlib/src/index.d.ts b/shieldlib/src/index.d.ts index 1fe27f46d..0b7805a33 100644 --- a/shieldlib/src/index.d.ts +++ b/shieldlib/src/index.d.ts @@ -1,6 +1,6 @@ export { Bounds, - GfxFactory, + GraphicsFactory, RouteDefinition, ShieldSpecification, SpriteRepository, @@ -12,3 +12,4 @@ export { InMemorySpriteRepository, } from "./shield_renderer"; export { getDOMPixelRatio } from "./document_graphics"; +export * from "./shield_helper"; diff --git a/shieldlib/src/index.ts b/shieldlib/src/index.ts index 9cd52f669..14bcb9ec1 100644 --- a/shieldlib/src/index.ts +++ b/shieldlib/src/index.ts @@ -15,3 +15,4 @@ export { } from "./shield_renderer"; export { getDOMPixelRatio } from "./document_graphics"; +export * from "./shield_helper"; diff --git a/shieldlib/src/shield_helper.d.ts b/shieldlib/src/shield_helper.d.ts new file mode 100644 index 000000000..64bc9f72e --- /dev/null +++ b/shieldlib/src/shield_helper.d.ts @@ -0,0 +1,156 @@ +import { ShieldDefinition, TextLayout } from "./types"; + +export declare function roundedRectTextConstraint(radius: number): TextLayout; +export declare function textConstraint(fxn: string): TextLayout; +export declare function ovalShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition; + +export declare function circleShield( + fillColor: string, + strokeColor: string, + textColor: string +): ShieldDefinition; + +export declare function roundedRectShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number, + radius: number +): ShieldDefinition; + +export declare function escutcheonDownShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function fishheadDownShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition; + +export declare function triangleDownShield( + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function trapezoidDownShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +); + +export declare function trapezoidUpShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function diamondShield( + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function pentagonUpShield( + offset: number, + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition; + +export declare function homePlateDownShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition; + +export declare function homePlateUpShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition; + +export declare function hexagonVerticalShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +/** + * Draws a shield with a horizontally-aligned hexagon background + * + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of hexagon background fill + * @param {*} strokeColor - Color of hexagon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of hexagon (defaults to 2) + * @param {*} rectWidth - Width of hexagon (defaults to variable-width) + * @returns a shield definition object + */ +export declare function hexagonHorizontalShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function octagonVerticalShield( + offset: number, + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition; + +export declare function pillShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition; + +export function banneredShield( + baseDef: ShieldDefinition, + banners: string[] +): ShieldDefinition; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts new file mode 100644 index 000000000..3a82b75ad --- /dev/null +++ b/shieldlib/src/shield_helper.ts @@ -0,0 +1,700 @@ +import { ShieldDefinition, TextLayout } from "./types"; + +export function roundedRectTextConstraint(radius: number): TextLayout { + return { + constraintFunc: "roundedRect", + options: { + radius: radius, + }, + }; +} + +export function textConstraint(fxn: string): TextLayout { + return { + constraintFunc: fxn, + }; +} + +/** + * Draws a shield with an ellipse background + * + * @param {*} fillColor - Color of ellipse background fill + * @param {*} strokeColor - Color of ellipse outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} rectWidth - Width of ellipse (defaults to variable-width) + * @returns a shield definition object + */ +export function ovalShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + return { + shapeBlank: { + drawFunc: "ellipse", + params: { + fillColor, + strokeColor, + rectWidth, + }, + }, + textLayout: textConstraint("ellipse"), + padding: { + left: 2, + right: 2, + top: 2, + bottom: 2, + }, + textColor, + }; +} + +/** + * Draws a shield with circle background (special case of ovalShield) + * + * @param {*} fillColor - Color of circle background fill + * @param {*} strokeColor - Color of circle outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @returns a shield definition object + */ +export function circleShield( + fillColor: string, + strokeColor: string, + textColor: string +): ShieldDefinition { + return ovalShield(fillColor, strokeColor, textColor, 20); +} + +/** + * Draws a shield with a rectangle background + * + * @param {*} fillColor - Color of rectangle background fill + * @param {*} strokeColor - Color of rectangle outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} rectWidth - Width of rectangle (defaults to variable-width) + * @param {*} radius - Corner radius of rectangle (defaults to 2) + * @returns a shield definition object + */ +export function roundedRectShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number, + radius: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + return { + shapeBlank: { + drawFunc: "roundedRectangle", + params: { + fillColor, + strokeColor, + rectWidth, + radius, + }, + }, + textLayout: roundedRectTextConstraint(radius), + padding: { + left: 3, + right: 3, + top: 3, + bottom: 3, + }, + textColor, + }; +} + +/** + * Draws a shield with an escutcheon background, pointed downward + * + * @param {*} offset - Height of curved portion + * @param {*} fillColor - Color of escutcheon background fill + * @param {*} strokeColor - Color of escutcheon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of escutcheon (defaults to 0) + * @param {*} rectWidth - Width of escutcheon (defaults to variable-width) + * @returns a shield definition object + */ +export function escutcheonDownShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius = radius ?? 0; + return { + shapeBlank: { + drawFunc: "escutcheon", + params: { + offset, + fillColor, + strokeColor, + rectWidth, + radius, + outlineWidth: 1, + }, + }, + textLayout: roundedRectTextConstraint(radius), + padding: { + left: 2, + right: 2, + top: 2, + bottom: 0 + offset / 2, + }, + textColor, + }; +} + +/** + * Draws a shield with a fishhead background, pointed downward + * + * @param {*} fillColor - Color of fishhead background fill + * @param {*} strokeColor - Color of fishhead outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} rectWidth - Width of fishhead (defaults to variable-width) + * @returns a shield definition object + */ +export function fishheadDownShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + return { + shapeBlank: { + drawFunc: "fishhead", + params: { + fillColor, + strokeColor, + rectWidth, + outlineWidth: 1, + }, + }, + textLayout: textConstraint("roundedRect"), + padding: { + left: 3, + right: 3, + top: 2, + bottom: 6, + }, + textColor, + }; +} + +/** + * Draws a shield with a triangle background, pointed downward + * + * @param {*} fillColor - Color of triangle background fill + * @param {*} strokeColor - Color of triangle outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of triangle (defaults to 2) + * @param {*} rectWidth - Width of triangle (defaults to variable-width) + * @returns a shield definition object + */ +export function triangleDownShield( + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + + return { + shapeBlank: { + drawFunc: "triangle", + params: { + pointUp: false, + fillColor, + strokeColor, + rectWidth, + radius, + }, + }, + textLayout: textConstraint("triangleDown"), + padding: { + left: 1, + right: 1, + top: 2, + bottom: 1, + }, + textColor, + }; +} + +/** + * Draws a shield with a trapezoid background, with the short side on bottom + * + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of trapezoid background fill + * @param {*} strokeColor - Color of trapezoid outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of trapezoid (defaults to 0) + * @param {*} rectWidth - Width of trapezoid (defaults to variable-width) + * @returns a shield definition object + */ +export function trapezoidDownShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + let angleInRadians = (angle * Math.PI) / 180; + textColor = textColor ?? strokeColor; + radius = radius ?? 0; + + return { + shapeBlank: { + drawFunc: "trapezoid", + params: { + angle: angleInRadians, + fillColor, + strokeColor, + rectWidth, + radius, + }, + }, + textLayout: roundedRectTextConstraint(radius), + padding: { + left: 2 + 10 * Math.tan(angleInRadians), + right: 2 + 10 * Math.tan(angleInRadians), + top: 2, + bottom: 4, + }, + textColor, + }; +} + +/** + * Draws a shield with a trapezoid background, with the short side on top + * + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of trapezoid background fill + * @param {*} strokeColor - Color of trapezoid outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of trapezoid (defaults to 0) + * @param {*} rectWidth - Width of trapezoid (defaults to variable-width) + * @returns a shield definition object + */ +export function trapezoidUpShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + let angleInRadians = (angle * Math.PI) / 180; + textColor = textColor ?? strokeColor; + radius = radius ?? 0; + return { + shapeBlank: { + drawFunc: "trapezoid", + params: { + shortSideUp: true, + angle: angleInRadians, + fillColor, + strokeColor, + rectWidth, + radius, + }, + }, + textLayout: roundedRectTextConstraint(radius), + padding: { + left: 2 + 10 * Math.tan(angleInRadians), + right: 2 + 10 * Math.tan(angleInRadians), + top: 4, + bottom: 2, + }, + textColor, + }; +} + +/** + * Draws a shield with a diamond background + * + * @param {*} fillColor - Color of diamond background fill + * @param {*} strokeColor - Color of diamond outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of diamond (defaults to 2) + * @param {*} rectWidth - Width of diamond (defaults to variable-width) + * @returns a shield definition object + */ +export function diamondShield( + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + return { + shapeBlank: { + drawFunc: "diamond", + params: { + fillColor, + strokeColor, + radius, + rectWidth, + }, + }, + textLayout: textConstraint("diamond"), + padding: { + left: 1, + right: 1, + top: 1, + bottom: 1, + }, + textColor, + }; +} + +/** + * Draws a shield with a pentagon background, pointed upward + * + * @param {*} offset - Height of diagonal edges + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of pentagon background fill + * @param {*} strokeColor - Color of pentagon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius1 - Corner radius of pointed side of pentagon (defaults to 2) + * @param {*} radius2 - Corner radius of flat side of pentagon (defaults to 0) + * @param {*} rectWidth - Width of pentagon (defaults to variable-width) + * @returns a shield definition object + */ +export function pentagonUpShield( + offset: number, + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition { + let angleInRadians = (angle * Math.PI) / 180; + textColor = textColor ?? strokeColor; + radius1 = radius1 ?? 2; + radius2 = radius2 ?? 0; + return { + shapeBlank: { + drawFunc: "pentagon", + params: { + offset: offset, + angle: angleInRadians, + fillColor: fillColor, + strokeColor: strokeColor, + radius1, + radius2, + rectWidth, + }, + }, + textLayout: { + constraintFunc: "rect", + }, + padding: { + left: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, + right: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, + top: 1 + offset / 2, + bottom: 3, + }, + textColor, + }; +} + +/** + * Draws a shield with a home plate background, pointed downward + * + * @param {*} offset - Height of diagonal edges + * @param {*} fillColor - Color of home plate background fill + * @param {*} strokeColor - Color of home plate outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius1 - Corner radius of pointed side of home plate (defaults to 2) + * @param {*} radius2 - Corner radius of flat side of home plate (defaults to 2) + * @param {*} rectWidth - Width of home plate (defaults to variable-width) + * @returns a shield definition object + */ +export function homePlateDownShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius1 = radius1 ?? 2; + radius2 = radius2 ?? 2; + return { + shapeBlank: { + drawFunc: "pentagon", + params: { + pointUp: false, + offset, + angle: 0, + fillColor, + strokeColor, + radius1, + radius2, + rectWidth, + }, + }, + textLayout: roundedRectTextConstraint(radius2), + padding: { + left: 2, + right: 2, + top: 2, + bottom: 1 + offset, + }, + textColor, + }; +} + +/** + * Draws a shield with a home plate background, pointed upward + * + * @param {*} offset - Height of diagonal edges + * @param {*} fillColor - Color of home plate background fill + * @param {*} strokeColor - Color of home plate outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius1 - Corner radius of pointed side of home plate (defaults to 2) + * @param {*} radius2 - Corner radius of flat side of home plate (defaults to 2) + * @param {*} rectWidth - Width of home plate (defaults to variable-width) + * @returns a shield definition object + */ +export function homePlateUpShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius1: number, + radius2: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius1 = radius1 ?? 2; + radius2 = radius2 ?? 2; + return { + shapeBlank: { + drawFunc: "pentagon", + params: { + pointUp: true, + offset: offset, + angle: 0, + fillColor, + strokeColor, + radius1, + radius2, + rectWidth, + }, + }, + textLayout: roundedRectTextConstraint(radius2), + padding: { + left: 2, + right: 2, + top: 1 + offset, + bottom: 2, + }, + textColor, + }; +} + +/** + * Draws a shield with a vertically-aligned hexagon background + * + * @param {*} offset - Height of diagonal edges + * @param {*} fillColor - Color of hexagon background fill + * @param {*} strokeColor - Color of hexagon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of hexagon (defaults to 2) + * @param {*} rectWidth - Width of hexagon (defaults to variable-width) + * @returns a shield definition object + */ +export function hexagonVerticalShield( + offset: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + return { + shapeBlank: { + drawFunc: "hexagonVertical", + params: { + offset, + fillColor, + strokeColor, + radius, + rectWidth, + }, + }, + textLayout: roundedRectTextConstraint(radius), + padding: { + left: 2, + right: 2, + top: 1 + offset, + bottom: 1 + offset, + }, + textColor, + }; +} + +/** + * Draws a shield with a horizontally-aligned hexagon background + * + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of hexagon background fill + * @param {*} strokeColor - Color of hexagon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of hexagon (defaults to 2) + * @param {*} rectWidth - Width of hexagon (defaults to variable-width) + * @returns a shield definition object + */ +export function hexagonHorizontalShield( + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + let angleInRadians = (angle * Math.PI) / 180; + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + return { + shapeBlank: { + drawFunc: "hexagonHorizontal", + params: { + angle: angleInRadians, + fillColor: fillColor, + strokeColor: strokeColor, + radius: radius, + rectWidth: rectWidth, + }, + }, + textLayout: textConstraint("ellipse"), + padding: { + left: 3, + right: 3, + top: 2, + bottom: 2, + }, + textColor, + }; +} + +/** + * Draws a shield with an octagon background + * + * @param {*} offset - Height of diagonal edges + * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} fillColor - Color of octagon background fill + * @param {*} strokeColor - Color of octagon outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} radius - Corner radius of octagon (defaults to 2) + * @param {*} rectWidth - Width of octagon (defaults to variable-width) + * @returns a shield definition object + */ +export function octagonVerticalShield( + offset: number, + angle: number, + fillColor: string, + strokeColor: string, + textColor: string, + radius: number, + rectWidth: number +): ShieldDefinition { + let angleInRadians = (angle * Math.PI) / 180; + textColor = textColor ?? strokeColor; + radius = radius ?? 2; + return { + shapeBlank: { + drawFunc: "octagonVertical", + params: { + offset, + angle: angleInRadians, + fillColor, + strokeColor, + radius, + rectWidth, + }, + }, + textLayout: textConstraint("ellipse"), + padding: { + left: 2, + right: 2, + top: 2, + bottom: 2, + }, + textColor, + }; +} + +/** + * Draws a shield with a pill-shaped background + * + * @param {*} fillColor - Color of pill background fill + * @param {*} strokeColor - Color of pill outline stroke + * @param {*} textColor - Color of text (defaults to strokeColor) + * @param {*} rectWidth - Width of pill (defaults to variable-width) + * @returns a shield definition object + */ +export function pillShield( + fillColor: string, + strokeColor: string, + textColor: string, + rectWidth: number +): ShieldDefinition { + textColor = textColor ?? strokeColor; + return { + shapeBlank: { + drawFunc: "roundedRectangle", + params: { + fillColor, + strokeColor, + rectWidth, + radius: 10, + }, + }, + textLayout: textConstraint("ellipse"), + padding: { + left: 2, + right: 2, + top: 2, + bottom: 2, + }, + textColor, + }; +} + +/** + * Adds banner text above a shield + * + * @param {*} baseDef - Shield definition object + * @param {*} banners - Array of strings to be displayed above shield + * @returns a shield definition object + */ +export function banneredShield( + baseDef: ShieldDefinition, + banners: string[] +): ShieldDefinition { + return { + banners, + ...baseDef, + }; +} diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 170eef2bc..9933ca9b5 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -7,14 +7,54 @@ export interface RouteDefinition { spriteID?: string; } -export interface ShieldDefinition { - spriteBlank: string[]; +//Enforce a requirement that one field OR another field must be specified, but not both. +type Exclusive = + | (T & { [P in keyof U]?: never }) + | (U & { [P in keyof T]?: never }); + +interface ShieldDefinitionBase { textColor: string; - padding: { - left: number; - right: number; - top: number; - bottom: number; + padding: BoxPadding; + textLayout: TextLayout; + banners?: string[]; +} + +export type ShieldDefinition = Exclusive< + { spriteBlank: string[] }, + { shapeBlank: ShapeDefinition } +> & + ShieldDefinitionBase; + +export interface ShapeDefinition { + drawFunc: string; + params: ShapeBlankParams; +} + +export interface BoxPadding { + left: number; + right: number; + top: number; + bottom: number; +} + +export interface ShapeBlankParams { + fillColor: string; + strokeColor: string; + rectWidth: number; + radius?: number; + radius1?: number; + radius2?: number; + offset?: number; + outlineWidth?: number; + pointUp?: boolean; + shortSideUp?: boolean; + angle?: number; +} + +export interface TextLayout { + constraintFunc: string; + options?: { + radius: number; }; } diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index fbebff4cf..7195a3bf1 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1,663 +1,26 @@ "use strict"; import * as Color from "../constants/color.js"; - -/** - * Draws a shield with an ellipse background - * - * @param {*} fillColor - Color of ellipse background fill - * @param {*} strokeColor - Color of ellipse outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} rectWidth - Width of ellipse (defaults to variable-width) - * @returns a shield definition object - */ -function ovalShield(fillColor, strokeColor, textColor, rectWidth) { - textColor = textColor ?? strokeColor; - return { - shapeBlank: { - drawFunc: "ellipse", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - }, - }, - textLayout: textConstraint("ellipse"), - padding: { - left: 2, - right: 2, - top: 2, - bottom: 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with circle background (special case of ovalShield) - * - * @param {*} fillColor - Color of circle background fill - * @param {*} strokeColor - Color of circle outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @returns a shield definition object - */ -function circleShield(fillColor, strokeColor, textColor) { - return ovalShield(fillColor, strokeColor, textColor, 20); -} - -function roundedRectTextConstraint(radius) { - return { - constraintFunc: "roundedRect", - options: { - radius: radius, - }, - }; -} - -function textConstraint(fxn) { - return { - constraintFunc: fxn, - }; -} - -/** - * Draws a shield with a rectangle background - * - * @param {*} fillColor - Color of rectangle background fill - * @param {*} strokeColor - Color of rectangle outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} rectWidth - Width of rectangle (defaults to variable-width) - * @param {*} radius - Corner radius of rectangle (defaults to 2) - * @returns a shield definition object - */ -function roundedRectShield( - fillColor, - strokeColor, - textColor, - rectWidth, - radius -) { - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - return { - shapeBlank: { - drawFunc: "roundedRectangle", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: radius, - }, - }, - textLayout: roundedRectTextConstraint(radius), - padding: { - left: 3, - right: 3, - top: 3, - bottom: 3, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with an escutcheon background, pointed downward - * - * @param {*} offset - Height of curved portion - * @param {*} fillColor - Color of escutcheon background fill - * @param {*} strokeColor - Color of escutcheon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of escutcheon (defaults to 0) - * @param {*} rectWidth - Width of escutcheon (defaults to variable-width) - * @returns a shield definition object - */ -function escutcheonDownShield( - offset, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - textColor = textColor ?? strokeColor; - radius = radius ?? 0; - return { - shapeBlank: { - drawFunc: "escutcheon", - params: { - offset: offset, - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: radius, - outlineWidth: 1, - }, - }, - textLayout: roundedRectTextConstraint(radius), - padding: { - left: 2, - right: 2, - top: 2, - bottom: 0 + offset / 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a fishhead background, pointed downward - * - * @param {*} fillColor - Color of fishhead background fill - * @param {*} strokeColor - Color of fishhead outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} rectWidth - Width of fishhead (defaults to variable-width) - * @returns a shield definition object - */ -function fishheadDownShield(fillColor, strokeColor, textColor, rectWidth) { - textColor = textColor ?? strokeColor; - return { - shapeBlank: { - drawFunc: "fishhead", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - outlineWidth: 1, - }, - }, - textLayout: textConstraint("roundedRect"), - padding: { - left: 3, - right: 3, - top: 2, - bottom: 6, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a triangle background, pointed downward - * - * @param {*} fillColor - Color of triangle background fill - * @param {*} strokeColor - Color of triangle outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of triangle (defaults to 2) - * @param {*} rectWidth - Width of triangle (defaults to variable-width) - * @returns a shield definition object - */ -function triangleDownShield( - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - - return { - shapeBlank: { - drawFunc: "triangle", - params: { - pointUp: false, - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: radius, - }, - }, - textLayout: textConstraint("triangleDown"), - padding: { - left: 1, - right: 1, - top: 2, - bottom: 1, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a trapezoid background, with the short side on bottom - * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of trapezoid background fill - * @param {*} strokeColor - Color of trapezoid outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of trapezoid (defaults to 0) - * @param {*} rectWidth - Width of trapezoid (defaults to variable-width) - * @returns a shield definition object - */ -function trapezoidDownShield( - angle, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - let angleInRadians = (angle * Math.PI) / 180; - textColor = textColor ?? strokeColor; - radius = radius ?? 0; - - return { - shapeBlank: { - drawFunc: "trapezoid", - params: { - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: radius, - }, - }, - textLayout: roundedRectTextConstraint(radius), - padding: { - left: 2 + 10 * Math.tan(angleInRadians), - right: 2 + 10 * Math.tan(angleInRadians), - top: 2, - bottom: 4, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a trapezoid background, with the short side on top - * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of trapezoid background fill - * @param {*} strokeColor - Color of trapezoid outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of trapezoid (defaults to 0) - * @param {*} rectWidth - Width of trapezoid (defaults to variable-width) - * @returns a shield definition object - */ -function trapezoidUpShield( - angle, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - let angleInRadians = (angle * Math.PI) / 180; - textColor = textColor ?? strokeColor; - radius = radius ?? 0; - return { - shapeBlank: { - drawFunc: "trapezoid", - params: { - shortSideUp: true, - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: radius, - }, - }, - textLayout: roundedRectTextConstraint(radius), - padding: { - left: 2 + 10 * Math.tan(angleInRadians), - right: 2 + 10 * Math.tan(angleInRadians), - top: 4, - bottom: 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a diamond background - * - * @param {*} fillColor - Color of diamond background fill - * @param {*} strokeColor - Color of diamond outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of diamond (defaults to 2) - * @param {*} rectWidth - Width of diamond (defaults to variable-width) - * @returns a shield definition object - */ -function diamondShield(fillColor, strokeColor, textColor, radius, rectWidth) { - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - return { - shapeBlank: { - drawFunc: "diamond", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - radius: radius, - rectWidth: rectWidth, - }, - }, - textLayout: textConstraint("diamond"), - padding: { - left: 1, - right: 1, - top: 1, - bottom: 1, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a pentagon background, pointed upward - * - * @param {*} offset - Height of diagonal edges - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of pentagon background fill - * @param {*} strokeColor - Color of pentagon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius1 - Corner radius of pointed side of pentagon (defaults to 2) - * @param {*} radius2 - Corner radius of flat side of pentagon (defaults to 0) - * @param {*} rectWidth - Width of pentagon (defaults to variable-width) - * @returns a shield definition object - */ -function pentagonUpShield( - offset, - angle, - fillColor, - strokeColor, - textColor, - radius1, - radius2, - rectWidth -) { - let angleInRadians = (angle * Math.PI) / 180; - textColor = textColor ?? strokeColor; - radius1 = radius1 ?? 2; - radius2 = radius2 ?? 0; - return { - shapeBlank: { - drawFunc: "pentagon", - params: { - offset: offset, - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - radius1: radius1, - radius2: radius2, - rectWidth: rectWidth, - }, - }, - textLayout: { - constraintFunc: "rect", - }, - padding: { - left: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, - right: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, - top: 1 + offset / 2, - bottom: 3, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a home plate background, pointed downward - * - * @param {*} offset - Height of diagonal edges - * @param {*} fillColor - Color of home plate background fill - * @param {*} strokeColor - Color of home plate outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius1 - Corner radius of pointed side of home plate (defaults to 2) - * @param {*} radius2 - Corner radius of flat side of home plate (defaults to 2) - * @param {*} rectWidth - Width of home plate (defaults to variable-width) - * @returns a shield definition object - */ -function homePlateDownShield( - offset, - fillColor, - strokeColor, - textColor, - radius1, - radius2, - rectWidth -) { - textColor = textColor ?? strokeColor; - radius1 = radius1 ?? 2; - radius2 = radius2 ?? 2; - return { - shapeBlank: { - drawFunc: "pentagon", - params: { - pointUp: false, - offset: offset, - angle: 0, - fillColor: fillColor, - strokeColor: strokeColor, - radius1: radius1, - radius2: radius2, - rectWidth: rectWidth, - }, - }, - textLayout: roundedRectTextConstraint(radius2), - padding: { - left: 2, - right: 2, - top: 2, - bottom: 1 + offset, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a home plate background, pointed upward - * - * @param {*} offset - Height of diagonal edges - * @param {*} fillColor - Color of home plate background fill - * @param {*} strokeColor - Color of home plate outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius1 - Corner radius of pointed side of home plate (defaults to 2) - * @param {*} radius2 - Corner radius of flat side of home plate (defaults to 2) - * @param {*} rectWidth - Width of home plate (defaults to variable-width) - * @returns a shield definition object - */ -function homePlateUpShield( - offset, - fillColor, - strokeColor, - textColor, - radius1, - radius2, - rectWidth -) { - textColor = textColor ?? strokeColor; - radius1 = radius1 ?? 2; - radius2 = radius2 ?? 2; - return { - shapeBlank: { - drawFunc: "pentagon", - params: { - pointUp: true, - offset: offset, - angle: 0, - fillColor: fillColor, - strokeColor: strokeColor, - radius1: radius1, - radius2: radius2, - rectWidth: rectWidth, - }, - }, - textLayout: roundedRectTextConstraint(radius2), - padding: { - left: 2, - right: 2, - top: 1 + offset, - bottom: 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a vertically-aligned hexagon background - * - * @param {*} offset - Height of diagonal edges - * @param {*} fillColor - Color of hexagon background fill - * @param {*} strokeColor - Color of hexagon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of hexagon (defaults to 2) - * @param {*} rectWidth - Width of hexagon (defaults to variable-width) - * @returns a shield definition object - */ -function hexagonVerticalShield( - offset, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - return { - shapeBlank: { - drawFunc: "hexagonVertical", - params: { - offset: offset, - fillColor: fillColor, - strokeColor: strokeColor, - radius: radius, - rectWidth: rectWidth, - }, - }, - textLayout: roundedRectTextConstraint(radius), - padding: { - left: 2, - right: 2, - top: 1 + offset, - bottom: 1 + offset, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a horizontally-aligned hexagon background - * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of hexagon background fill - * @param {*} strokeColor - Color of hexagon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of hexagon (defaults to 2) - * @param {*} rectWidth - Width of hexagon (defaults to variable-width) - * @returns a shield definition object - */ -function hexagonHorizontalShield( - angle, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - let angleInRadians = (angle * Math.PI) / 180; - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - return { - shapeBlank: { - drawFunc: "hexagonHorizontal", - params: { - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - radius: radius, - rectWidth: rectWidth, - }, - }, - textLayout: textConstraint("ellipse"), - padding: { - left: 3, - right: 3, - top: 2, - bottom: 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with an octagon background - * - * @param {*} offset - Height of diagonal edges - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of octagon background fill - * @param {*} strokeColor - Color of octagon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of octagon (defaults to 2) - * @param {*} rectWidth - Width of octagon (defaults to variable-width) - * @returns a shield definition object - */ -function octagonVerticalShield( - offset, - angle, - fillColor, - strokeColor, - textColor, - radius, - rectWidth -) { - let angleInRadians = (angle * Math.PI) / 180; - textColor = textColor ?? strokeColor; - radius = radius ?? 2; - return { - shapeBlank: { - drawFunc: "octagonVertical", - params: { - offset: offset, - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - radius: radius, - rectWidth: rectWidth, - }, - }, - textLayout: textConstraint("ellipse"), - padding: { - left: 2, - right: 2, - top: 2, - bottom: 2, - }, - textColor: textColor, - }; -} - -/** - * Draws a shield with a pill-shaped background - * - * @param {*} fillColor - Color of pill background fill - * @param {*} strokeColor - Color of pill outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} rectWidth - Width of pill (defaults to variable-width) - * @returns a shield definition object - */ -function pillShield(fillColor, strokeColor, textColor, rectWidth) { - textColor = textColor ?? strokeColor; - return { - shapeBlank: { - drawFunc: "roundedRectangle", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - rectWidth: rectWidth, - radius: 10, - }, - }, - textLayout: textConstraint("ellipse"), - padding: { - left: 2, - right: 2, - top: 2, - bottom: 2, - }, - textColor: textColor, - }; -} +import { + textConstraint, + homePlateDownShield, + octagonVerticalShield, + hexagonHorizontalShield, + hexagonVerticalShield, + homePlateUpShield, + ovalShield, + circleShield, + roundedRectShield, + pillShield, + trapezoidUpShield, + trapezoidDownShield, + pentagonUpShield, + diamondShield, + triangleDownShield, + escutcheonDownShield, + fishheadDownShield, + banneredShield, +} from "@americana/maplibre-shield-generator"; /** * Draws a circle icon inside a black-outlined white square shield @@ -699,20 +62,6 @@ function bransonRouteShield(fillColor, strokeColor) { }; } -/** - * Adds banner text above a shield - * - * @param {*} baseDef - Shield definition object - * @param {*} banners - Array of strings to be displayed above shield - * @returns a shield definition object - */ -function banneredShield(baseDef, banners) { - return { - banners: banners, - ...baseDef, - }; -} - export function loadShields() { const shields = {}; From b16bc0a26fa68a45bc5597e4d3168e48aa3efc85 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 24 Aug 2023 19:14:28 -0400 Subject: [PATCH 172/444] Migrate special case helpers --- shieldlib/src/shield_helper.ts | 47 ++++++++++++++++++++++++++++++++++ shieldlib/src/types.ts | 9 ++++--- src/js/shield_defs.js | 42 ++---------------------------- 3 files changed, 54 insertions(+), 44 deletions(-) diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 3a82b75ad..d27b33754 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -1,3 +1,4 @@ +import { Color } from "color-namer"; import { ShieldDefinition, TextLayout } from "./types"; export function roundedRectTextConstraint(radius: number): TextLayout { @@ -698,3 +699,49 @@ export function banneredShield( ...baseDef, }; } + +/** + * Draws a circle icon inside a black-outlined white square shield + * + * @param {*} fillColor - Color of circle icon background fill + * @param {*} strokeColor - Color of circle icon outline + * @returns a shield definition object + */ +export function paBeltShield( + fillColor: string, + strokeColor: string +): ShieldDefinition { + return { + notext: true, + shapeBlank: { + drawFunc: "paBelt", + params: { + fillColor, + strokeColor, + }, + }, + }; +} + +/** + * Draws a rectangle icon inside a white-outlined green square shield + * + * @param {*} fillColor - Color of rectangle icon background fill + * @param {*} strokeColor - Color of rectangle icon outline + * @returns a shield definition object + */ +export function bransonRouteShield( + fillColor: string, + strokeColor: string +): ShieldDefinition { + return { + notext: true, + shapeBlank: { + drawFunc: "branson", + params: { + fillColor, + strokeColor, + }, + }, + }; +} diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 9933ca9b5..946d4a4f3 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -13,10 +13,11 @@ type Exclusive = | (U & { [P in keyof T]?: never }); interface ShieldDefinitionBase { - textColor: string; - padding: BoxPadding; - textLayout: TextLayout; + textColor?: string; + padding?: BoxPadding; + textLayout?: TextLayout; banners?: string[]; + notext?: boolean; } export type ShieldDefinition = Exclusive< @@ -40,7 +41,7 @@ export interface BoxPadding { export interface ShapeBlankParams { fillColor: string; strokeColor: string; - rectWidth: number; + rectWidth?: number; radius?: number; radius1?: number; radius2?: number; diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 7195a3bf1..57dd47212 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -20,48 +20,10 @@ import { escutcheonDownShield, fishheadDownShield, banneredShield, + paBeltShield, + bransonRouteShield, } from "@americana/maplibre-shield-generator"; -/** - * Draws a circle icon inside a black-outlined white square shield - * - * @param {*} fillColor - Color of circle icon background fill - * @param {*} strokeColor - Color of circle icon outline - * @returns a shield definition object - */ -function paBeltShield(fillColor, strokeColor) { - return { - notext: true, - shapeBlank: { - drawFunc: "paBelt", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - }, - }, - }; -} - -/** - * Draws a rectangle icon inside a white-outlined green square shield - * - * @param {*} fillColor - Color of rectangle icon background fill - * @param {*} strokeColor - Color of rectangle icon outline - * @returns a shield definition object - */ -function bransonRouteShield(fillColor, strokeColor) { - return { - notext: true, - shapeBlank: { - drawFunc: "branson", - params: { - fillColor: fillColor, - strokeColor: strokeColor, - }, - }, - }; -} - export function loadShields() { const shields = {}; From 6aa8c2d68821e86cd116a9fd688133a62515dc75 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 24 Aug 2023 19:44:25 -0400 Subject: [PATCH 173/444] Add documentation --- .gitignore | 1 + package-lock.json | 91 ++++++++++++++++++++++++++++++++++++++++++ shieldlib/package.json | 2 + 3 files changed, 94 insertions(+) diff --git a/.gitignore b/.gitignore index 8448264f5..3c0c0b15a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ config.js dist download local.config.js +shieldlib/docs diff --git a/package-lock.json b/package-lock.json index 793f57612..1a692fc82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -730,6 +730,12 @@ "node": ">=8" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2675,6 +2681,12 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", @@ -2764,6 +2776,12 @@ "node": "14 || >=16.14" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -2831,6 +2849,18 @@ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -4349,6 +4379,18 @@ "node": "*" } }, + "node_modules/shiki": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, "node_modules/shortid": { "version": "2.2.16", "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", @@ -5036,6 +5078,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -5101,6 +5179,18 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, "node_modules/vt-pbf": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", @@ -5305,6 +5395,7 @@ "shx": "^0.3.4", "ts-mocha": "^10.0.0", "ts-node": "^10.9.1", + "typedoc": "^0.24.8", "typescript": "^4.9.5" } } diff --git a/shieldlib/package.json b/shieldlib/package.json index e23b2ee09..5c60f21a9 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -25,12 +25,14 @@ "shx": "^0.3.4", "ts-mocha": "^10.0.0", "ts-node": "^10.9.1", + "typedoc": "^0.24.8", "typescript": "^4.9.5" }, "scripts": { "code_format": "run-s code_format:prettier", "code_format:prettier": "prettier --write --list-different .", "clean": "shx rm -rf dist", + "docs": "npx typedoc src/index.ts", "test": "npm exec -- ts-mocha", "build:code": "node scripts/build.js", "build": "run-s clean build:code", From 05f5f7c5fca87ad287ce4906ca6759089e1da454 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 24 Aug 2023 20:01:08 -0400 Subject: [PATCH 174/444] Fix publish --- shieldlib/README.md | 4 ++++ shieldlib/package.json | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index bd41b6c26..c14eaa47d 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -313,3 +313,7 @@ The following `params` options can be specified: ### Custom shield graphics In addition to the stock drawing functions, a custom draw function can be specified. `paDot` and `branson` are included as examples of this, for rendering the [Allegheny County belt system](https://en.wikipedia.org/wiki/Allegheny_County_belt_system) and the Branson, Missouri colored route system. See the file `src/custom_shields.mjs` for an example of how this is done. + +## Documentation + +See [TypeDoc generated documentation](./docs/index.html) for detailed API information. diff --git a/shieldlib/package.json b/shieldlib/package.json index 5c60f21a9..34c40ab84 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -53,5 +53,10 @@ }, "directories": { "test": "test" - } + }, + "files": [ + "dist/", + "docs/", + "README.md" + ] } From a0a918a6c902eb86b29fb2aee5c1efab4fd02fc6 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Thu, 31 Aug 2023 15:41:16 -0400 Subject: [PATCH 175/444] =?UTF-8?q?Don't=20typecheck=20ts-node=20scripts/?= =?UTF-8?q?=E2=80=A6=20(#917)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Running the TypeScript compiler with typechecking consumes a fair amount of memory and CPU, which is fairly inconvenient for interactive scripting use. Either a build step should be added that compiles the scripts, or typechecking should be disabled for extra speed. Besides, only _some_ typechecking is happening. Really, a test step should be added which runs tsc on every .ts file, not just the ones we happen to run. Alternatives considered: - Use the swc compiler, which ts-node can use with a flag. Fine, it's slightly faster, but we don't really need even more native dependencies. - Use esbuild, which ts-node can only use if we write a small plugin. Extra work and seems to be slightly slower than tsc in this particular invocation. - Use tsx, which can run .ts files via esbuild. Works, but it's different from ts-node and so requires editing all the script command lines. --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 95805817c..cff1f31d9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ }, "ts-node": { "esm": true, - "experimentalSpecifierResolution": "node" + "experimentalSpecifierResolution": "node", + "transpileOnly": true }, "include": ["src/**/*.ts", "shieldlib/src/headless_graphics.ts"] } From 3b7e6349489981ad32db8f4a2857578d8e0c6ac7 Mon Sep 17 00:00:00 2001 From: AntiCompositeNumber Date: Sat, 2 Sep 2023 14:35:49 -0400 Subject: [PATCH 176/444] Add shields for US:NH:Turnpike Uses the design by quincylvania in https://github.com/ZeLonewolf/openstreetmap-americana/issues/343#issuecomment-1416529985 Closes #343 --- CONTRIBUTING.md | 1 + icons/shield_us_nh_turnpike.svg | 7 +++++++ src/js/shield_defs.js | 14 ++++++++++++++ src/layer/highway_shield.js | 1 + src/shieldtest.js | 4 ++++ 5 files changed, 27 insertions(+) create mode 100644 icons/shield_us_nh_turnpike.svg diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54879bc81..5415fba27 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -341,6 +341,7 @@ This style strives to draw representative highway shields wherever they are tagg - **Kentucky Parkways**. Kentucky signs a network of state highways which use a common shield styling, but with full-text names of the parkways on the shields. In addition, these routes are locally known by initialisms. Because these parkways are clearly a common network due to their common shield symbology, special code is needed to convert parkway names to their locally-expected initialisms. Because the initialisms are not present on shields, it would not be appropriate to encode this data in the `ref` tag. - **New York Parkways**. The State of New York signs a network of highways which use a common shield styling, but with full-text names of the parkways on the shields. The first letter of each word in a parkway's name is capitalized and in a larger font, making initialisms easily recognizable. Because these parkways are clearly a common network due to their common shield symbology, special code is needed to convert parkway names to their initialisms. Because the initialisms are present on shields, but only as part of the full name, it would not be appropriate to encode this data in the `ref` tag. - **Connecticut Parkways**. Connecticut has several state-designated parkways that share the `network=US:CT:Parkway` tag but have no parkway-specific `ref` tags. The Merritt Parkway is the only of these to be signed with a route shield. Special code is needed to differentiate the Merritt from the state's other parkways. + - **New Hampshire Turnpikes**. New Hampshire has three named turnpikes without unique `ref=` values. One turnpike is unsigned, while the other two use a shield with the full name of the turnpike and a color for each turnpike. - Shields for route networks where each individual route is identified by a color, rather than a number or letter. Such cases include: - **Allegheny County, PA Belt Routes**. Shields for this system use colors, with a colored circle and the words " BELT". These shields are drawn as squares with colored circles, with the `ref` values correctly corresponding to the text on the shield. Because of the common design (white shield with colored circle), these shields are properly part of a common route network. Special code is needed to convert the textual ref values to the colors displayed in the shield. - **Branson, MO color-coded routes**. Shields for this system use colors, with a colored rectangle and the words " ROUTE". These shields are drawn as squares with colored rectangles, with the `ref` values correctly corresponding to the text on the shield. Because of the common design (green shield with colored rectangle), these shields are properly part of a common route network. Special code is needed to convert the textual ref values to the colors displayed in the shield. diff --git a/icons/shield_us_nh_turnpike.svg b/icons/shield_us_nh_turnpike.svg new file mode 100644 index 000000000..a612af8c1 --- /dev/null +++ b/icons/shield_us_nh_turnpike.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index fbebff4cf..d62d22ade 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2235,6 +2235,9 @@ export function loadShields() { }, }; shields["US:NH:Bypass"] = banneredShield(shields["US:NH"], ["BYP"]); + shields["US:NH:Turnpike"] = { + notext: true, + }; // New Jersey shields["US:NJ"] = ovalShield(Color.shields.white, Color.shields.black); @@ -4285,6 +4288,17 @@ export function loadShields() { "Blue Route": bransonRouteShield(Color.shields.blue, Color.shields.white), }; + shields["US:NH:Turnpike"].overrideByName = { + "Everett Turnpike": { + spriteBlank: "shield_us_nh_turnpike", + colorLighten: "#006747", + }, + "Spaulding Turnpike": { + spriteBlank: "shield_us_nh_turnpike", + colorLighten: "#003F87", + }, + }; + shields["US:NY:Parkway"].refsByName = { "Bear Mountain Parkway": "BMP", "Bronx and Pelham Parkway": "PP", diff --git a/src/layer/highway_shield.js b/src/layer/highway_shield.js index c431f9446..319a37224 100644 --- a/src/layer/highway_shield.js +++ b/src/layer/highway_shield.js @@ -3,6 +3,7 @@ export const namedRouteNetworks = [ "US:CT:Parkway", "US:KY:Parkway", + "US:NH:Turnpike", "US:NY:Parkway", "US:TX:Fort_Bend:FBCTRA", "US:TX:Harris:HCTRA", diff --git a/src/shieldtest.js b/src/shieldtest.js index 74657102b..dd0ea7334 100644 --- a/src/shieldtest.js +++ b/src/shieldtest.js @@ -339,6 +339,10 @@ const iterShields = function* () { network: "US:CT:Parkway", names: ["Wilbur Cross Parkway", "Milford Parkway", "Merritt Parkway"], }; + yield { + network: "US:NH:Turnpike", + names: ["Blue Star Turnpike", "Everett Turnpike", "Spaulding Turnpike"], + }; }; const renderAllShields = async () => { From 50ca7c527b281d6884f72805efb8493b063bf204 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 07:57:54 +0200 Subject: [PATCH 177/444] Remove built docs on clean --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 192a64e38..e12dcf631 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "clean": "run-s clean:shieldlib clean:code clean-download clean-build", "clean-download": "shx rm -rf download", "clean-build": "shx rm -rf dist build", - "clean:shieldlib": "cd shieldlib && shx rm -rf dist", + "clean:shieldlib": "cd shieldlib && shx rm -rf dist docs", "clean:code": "shx rm -rf dist", "config": "shx cp src/configs/config.maptiler.js src/config.js", "code_format": "run-s code_format:prettier code_format:svgo", From e0406b26d3a30d4b59184dc07b9e4915c0c418a0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:00:39 +0200 Subject: [PATCH 178/444] Remove built docs on clean --- shieldlib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/package.json b/shieldlib/package.json index 34c40ab84..817af0ed6 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -31,7 +31,7 @@ "scripts": { "code_format": "run-s code_format:prettier", "code_format:prettier": "prettier --write --list-different .", - "clean": "shx rm -rf dist", + "clean": "shx rm -rf dist docs", "docs": "npx typedoc src/index.ts", "test": "npm exec -- ts-mocha", "build:code": "node scripts/build.js", From d8c0f320a2cffff5258aa5c28f45ccf227b32079 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:17:09 +0200 Subject: [PATCH 179/444] Deploy docs --- .github/workflows/deploy.yml | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 13b362704..5c1885188 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,12 +25,15 @@ jobs: with: node-version: 18.16.1 #18.17.0 is buggy - name: Install and Build ๐Ÿ”ง + # TODO: when we move shieldlib to its own repo, move shieldlib docs CI also run: | npm ci --include=dev cp src/configs/config.aws.js src/config.js npm run build npm run style npm run shields + mkdir -p dist/shield-docs + cp -r shieldlib/docs/* dist/shield-docs - name: Upload ๐Ÿ— uses: actions/upload-pages-artifact@v1 with: diff --git a/package.json b/package.json index e12dcf631..dfa558db8 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "shieldlib" ], "scripts": { - "build:shieldlib": "cd shieldlib && node scripts/build.js", + "build:shieldlib": "cd shieldlib && node scripts/build.js && npm run docs", "build:code": "exec ts-node scripts/build", "build": "run-s clean-build sprites build:shieldlib build:code taginfo status_map", "clean": "run-s clean:shieldlib clean:code clean-download clean-build", From 782f383217f442d24937fd74bb934761a8e84347 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:20:06 +0200 Subject: [PATCH 180/444] Bump version, fix path, add docs to build --- shieldlib/README.md | 2 +- shieldlib/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index c14eaa47d..c1f4e6379 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -316,4 +316,4 @@ In addition to the stock drawing functions, a custom draw function can be specif ## Documentation -See [TypeDoc generated documentation](./docs/index.html) for detailed API information. +See [TypeDoc generated documentation](https://zelonewolf.github.io/openstreetmap-americana/shield-docs/index.html) for detailed API information. diff --git a/shieldlib/package.json b/shieldlib/package.json index 817af0ed6..d1b76554f 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -1,7 +1,7 @@ { "name": "@americana/maplibre-shield-generator", "description": "Generate highway shields for maplibre-gl-js maps", - "version": "0.0.3", + "version": "0.0.4", "author": "OpenStreetMap Americana Contributors", "type": "module", "keywords": [ @@ -35,7 +35,7 @@ "docs": "npx typedoc src/index.ts", "test": "npm exec -- ts-mocha", "build:code": "node scripts/build.js", - "build": "run-s clean build:code", + "build": "run-s clean build:code docs", "preversion": "npm version --no-git-tag-version --preid alpha", "publish-alpha": "npm publish --access=public --tag alpha" }, From db9b7c1acea96e9950291d6b3b7f81c36dc2dbad Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:25:24 +0200 Subject: [PATCH 181/444] Remove unused import --- shieldlib/src/shield_helper.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index d27b33754..4d4c0b87c 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -1,4 +1,3 @@ -import { Color } from "color-namer"; import { ShieldDefinition, TextLayout } from "./types"; export function roundedRectTextConstraint(radius: number): TextLayout { From 56ffbb117173e022d797337e85ccbb7082fce472 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:27:35 +0200 Subject: [PATCH 182/444] Add canvas dependency to shield library --- package-lock.json | 3 ++- shieldlib/package.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1a692fc82..dbab6f75c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5381,7 +5381,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.3", + "version": "0.0.4", "license": "CC0-1.0", "dependencies": { "color-rgba": "^2.4.0", @@ -5389,6 +5389,7 @@ }, "devDependencies": { "@types/color-rgba": "^2.1.0", + "canvas": "^2.11.2", "esbuild": "^0.17.10", "npm-run-all": "^4.1.5", "prettier": "^2.8.4", diff --git a/shieldlib/package.json b/shieldlib/package.json index d1b76554f..112a26433 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -19,6 +19,7 @@ "source": "src/index.ts", "devDependencies": { "@types/color-rgba": "^2.1.0", + "canvas": "^2.11.2", "esbuild": "^0.17.10", "npm-run-all": "^4.1.5", "prettier": "^2.8.4", From a76f747483d3b2b9a9d73942695edc162a3656d5 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 08:35:54 +0200 Subject: [PATCH 183/444] Add docs to preview --- .github/workflows/build-preview.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ae0bb9f69..e3426441d 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -36,12 +36,15 @@ jobs: name: pr_number path: pr/ - name: Install and Build ๐Ÿ”ง + # TODO: when we move shieldlib to its own repo, move shieldlib docs CI also run: | npm ci --include=dev npm run build npm run style npm run shields cp src/configs/config.aws.js src/config.js + mkdir -p dist/shield-docs + cp -r shieldlib/docs/* dist/shield-docs - name: Upload Build artifact uses: actions/upload-artifact@v3 with: From fbbfa1203bae911b1622f7c6b9cb006e73bdefb9 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 17:55:58 +0200 Subject: [PATCH 184/444] Documentation fixes --- shieldlib/src/index.d.ts | 9 +--- shieldlib/src/index.ts | 8 +-- shieldlib/src/shield.d.ts | 3 +- shieldlib/src/shield_helper.ts | 2 +- shieldlib/src/shield_renderer.d.ts | 2 +- shieldlib/src/shield_renderer.ts | 6 +-- shieldlib/src/types.d.ts | 1 - shieldlib/src/types.ts | 80 +++++++++++++++++++++++++----- 8 files changed, 77 insertions(+), 34 deletions(-) diff --git a/shieldlib/src/index.d.ts b/shieldlib/src/index.d.ts index 0b7805a33..46116e4fa 100644 --- a/shieldlib/src/index.d.ts +++ b/shieldlib/src/index.d.ts @@ -1,15 +1,10 @@ -export { - Bounds, - GraphicsFactory, - RouteDefinition, - ShieldSpecification, - SpriteRepository, -} from "./types"; +export * from "./types"; export { transposeImageData } from "./screen_gfx"; export { URLShieldRenderer, ShieldRenderer, InMemorySpriteRepository, + AbstractShieldRenderer, } from "./shield_renderer"; export { getDOMPixelRatio } from "./document_graphics"; export * from "./shield_helper"; diff --git a/shieldlib/src/index.ts b/shieldlib/src/index.ts index 14bcb9ec1..f6218eef4 100644 --- a/shieldlib/src/index.ts +++ b/shieldlib/src/index.ts @@ -1,10 +1,4 @@ -export { - Bounds, - GraphicsFactory, - RouteDefinition, - ShieldSpecification, - SpriteRepository, -} from "./types"; +export * from "./types"; export { transposeImageData } from "./screen_gfx"; diff --git a/shieldlib/src/shield.d.ts b/shieldlib/src/shield.d.ts index 77589c812..fb44bf80b 100644 --- a/shieldlib/src/shield.d.ts +++ b/shieldlib/src/shield.d.ts @@ -14,7 +14,8 @@ export function storeNoShield( export function missingIconLoader( renderContext: ShieldRenderingContext, - routeDef: RouteDefinition + routeDef: RouteDefinition, + spriteID: string ): void; export function romanizeRef(ref: string): string; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 4d4c0b87c..8d1967dfe 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -723,7 +723,7 @@ export function paBeltShield( } /** - * Draws a rectangle icon inside a white-outlined green square shield + * Draws a Branson, Missouri route shield * * @param {*} fillColor - Color of rectangle icon background fill * @param {*} strokeColor - Color of rectangle icon outline diff --git a/shieldlib/src/shield_renderer.d.ts b/shieldlib/src/shield_renderer.d.ts index 7b3fd26a9..a4b0ddbf6 100644 --- a/shieldlib/src/shield_renderer.d.ts +++ b/shieldlib/src/shield_renderer.d.ts @@ -21,7 +21,7 @@ export declare class ShieldRenderingContext { px(pixels: number): number; shieldSize(): number; } -declare class AbstractShieldRenderer { +export declare class AbstractShieldRenderer { private _shieldPredicate; private _networkPredicate; private _routeParser; diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 1f421dc3a..09bc488eb 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -56,7 +56,7 @@ class MaplibreGLSpriteRepository implements SpriteRepository { } } -class AbstractShieldRenderer { +export class AbstractShieldRenderer { private _shieldPredicate: StringPredicate = () => true; private _networkPredicate: StringPredicate = () => true; private _routeParser: RouteParser; @@ -140,10 +140,9 @@ class AbstractShieldRenderer { storeNoShield(this._renderContext, e.id); return; } - routeDef.spriteID = e.id; //Original ID so we can store the sprite this._renderContext.debugOptions = this.debugOptions; if (routeDef) { - missingIconLoader(this._renderContext, routeDef); + missingIconLoader(this._renderContext, routeDef, e.id); } } catch (err) { console.error(`Exception while loading image โ€˜${e?.id}โ€™:\n`, err); @@ -156,7 +155,6 @@ class AbstractShieldRenderer { network, ref, name, - spriteID: this._routeParser.format(network, ref, name), }); } diff --git a/shieldlib/src/types.d.ts b/shieldlib/src/types.d.ts index eb2a19e7d..363863df1 100644 --- a/shieldlib/src/types.d.ts +++ b/shieldlib/src/types.d.ts @@ -3,7 +3,6 @@ export interface RouteDefinition { network: string; ref: string; name: string; - spriteID?: string; } export interface ShieldDefinition { spriteBlank: string[]; diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 946d4a4f3..508f07a25 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -1,18 +1,36 @@ import { StyleImage } from "maplibre-gl"; +/** + * Defines the set of routes that a shield applies to + */ export interface RouteDefinition { + /** + * Only match routes with this network value + */ network: string; - ref: string; - name: string; - spriteID?: string; + + /** + * If set, only match routes with this ref value + */ + ref?: string; + + /** + * If set, only match routes with this name value + */ + name?: string; } -//Enforce a requirement that one field OR another field must be specified, but not both. -type Exclusive = +/** + * Enforce a requirement that one field OR another field must be specified, but not both. + */ +export type Exclusive = | (T & { [P in keyof U]?: never }) | (U & { [P in keyof T]?: never }); -interface ShieldDefinitionBase { +/** + * Parameters that apply to all types of shield definitions + */ +export interface ShieldDefinitionBase { textColor?: string; padding?: BoxPadding; textLayout?: TextLayout; @@ -20,17 +38,26 @@ interface ShieldDefinitionBase { notext?: boolean; } +/** + * Define how the renderer should draw the shield for a particular route + */ export type ShieldDefinition = Exclusive< { spriteBlank: string[] }, { shapeBlank: ShapeDefinition } > & ShieldDefinitionBase; +/** + * Define a shield which is created by drawing a shape, optionally with text on top + */ export interface ShapeDefinition { drawFunc: string; params: ShapeBlankParams; } +/** + * Rectangular padding values + */ export interface BoxPadding { left: number; right: number; @@ -38,6 +65,9 @@ export interface BoxPadding { bottom: number; } +/** + * Parameters for drawing shield shapes + */ export interface ShapeBlankParams { fillColor: string; strokeColor: string; @@ -52,6 +82,9 @@ export interface ShapeBlankParams { angle?: number; } +/** + * Parameters for laying out text on a shield background + */ export interface TextLayout { constraintFunc: string; options?: { @@ -59,27 +92,43 @@ export interface TextLayout { }; } +/** + * A predicate which determines whether to draw a shield for a particular sprite ID. + * This allows the library to consume a subset of sprite IDs passed in from maplibre + * while allowing other code to handle other sprite IDs. + */ export type StringPredicate = (spriteID: string) => boolean; -// RouteParser unpacks a route definition from a sprite image string. +/** + * RouteParser unpacks a route definition from a sprite image string. + */ export interface RouteParser { parse(spriteID: string): RouteDefinition; format(network: string, ref: string, name: string): string; } -// SpriteProducer returns a sprite graphic based on an ID. +/** + * Retrieve a sprite graphic based on an ID. + */ export interface SpriteProducer { getSprite(spriteID: string): StyleImage; } -// SpriteConsumer stores a sprite graphic based on an ID. +/** + * Store a sprite graphic based on an ID. + */ export interface SpriteConsumer { putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; } +/** + * Respository that can store and retrieve sprite graphics. + */ export type SpriteRepository = SpriteProducer & SpriteConsumer; -// ShieldDefinitions maps routes to visual appearances +/** + * A map of shield definitions that associates a network name to its rendering + */ export interface ShieldDefinitions { shield: { [key: string]: ShieldDefinition; @@ -88,6 +137,9 @@ export interface ShieldDefinitions { export interface DebugOptions {} +/** + * Global options for shield rendering + */ export interface ShieldOptions { bannerHeight: number; bannerPadding: number; @@ -97,18 +149,22 @@ export interface ShieldOptions { shieldSize: number; } +/** + * A user-supplied specification for rendering shields + */ export interface ShieldSpecification { networks: ShieldDefinitions; options: ShieldOptions; } +/** + * Rectangular bounds, in scaled pixels + */ export type Bounds = { width: number; height: number; }; -// export type GfxFactory = (bounds: Bounds) => CanvasRenderingContext2D; - export interface GraphicsFactory { createGraphics(bounds: Bounds): CanvasRenderingContext2D; /** From be48fd0fe21e3d96adc13d45f2bb51dbff09308e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 4 Sep 2023 22:36:07 +0200 Subject: [PATCH 185/444] Fix failing test case --- shieldlib/src/shield.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index d0ccaa296..7255caf2d 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -186,14 +186,14 @@ function drawShieldText(r, ctx, shieldDef, routeDef) { return ctx; } -export function missingIconLoader(r, routeDef) { +export function missingIconLoader(r, routeDef, spriteID) { let ctx = generateShieldCtx(r, routeDef); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 console.warn("Didn't produce a shield for", JSON.stringify(routeDef)); ctx = r.gfxFactory.createGraphics({ width: 1, height: 1 }); } - storeSprite(r, routeDef.spriteID, ctx); + storeSprite(r, spriteID, ctx); } function storeSprite(r, id, ctx) { From 0a0c9fa53cb6eea478529c985520ccd6ffe3e1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Wed, 6 Sep 2023 23:33:27 -0700 Subject: [PATCH 186/444] Added Asotin County road shield --- src/js/shield_defs.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index d62d22ade..ef9d929a1 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3122,6 +3122,11 @@ export function loadShields() { shields["US:WA:Business"] = banneredShield(shields["US:WA"], ["BUS"]); shields["US:WA:Alternate"] = banneredShield(shields["US:WA"], ["ALT"]); + shields["US:WA:Asotin"] = roundedRectShield( + Color.shields.green, + Color.shields.white + ); + // Wisconsin shields["US:WI"] = { spriteBlank: ["shield_us_wi_2", "shield_us_wi_3"], From 0016b5a660a69f7904a136381637592d124ba80e Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:50:52 -0400 Subject: [PATCH 187/444] Fix ref case (re: #912) --- src/js/shield_defs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 85bb761e6..4f02d56bb 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4227,7 +4227,7 @@ export function loadShields() { ET: { spriteBlank: "shield_ca_ns_s_et", }, - FdLt: { + FdLT: { spriteBlank: "shield_ca_ns_s_fdlt", }, GT: { From b552a92b582f7772aea40a71b60bcdacd166d5f9 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 9 Sep 2023 07:12:39 -0400 Subject: [PATCH 188/444] Document shield_renderer.ts --- shieldlib/src/index.ts | 1 + shieldlib/src/shield_renderer.ts | 69 +++++++++++++++++++- shieldlib/src/types.ts | 108 +++++++++++++++---------------- 3 files changed, 118 insertions(+), 60 deletions(-) diff --git a/shieldlib/src/index.ts b/shieldlib/src/index.ts index f6218eef4..97b3a5991 100644 --- a/shieldlib/src/index.ts +++ b/shieldlib/src/index.ts @@ -6,6 +6,7 @@ export { URLShieldRenderer, ShieldRenderer, InMemorySpriteRepository, + AbstractShieldRenderer, } from "./shield_renderer"; export { getDOMPixelRatio } from "./document_graphics"; diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 09bc488eb..33846b9fe 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -56,19 +56,23 @@ class MaplibreGLSpriteRepository implements SpriteRepository { } } +/** Base class for shield renderers. Shield renderers use a builder pattern to configure its options. */ export class AbstractShieldRenderer { private _shieldPredicate: StringPredicate = () => true; private _networkPredicate: StringPredicate = () => true; private _routeParser: RouteParser; + /** @hidden */ private _renderContext: ShieldRenderingContext; private _shieldDefCallbacks = []; + /** Create a shield renderer */ constructor(routeParser: RouteParser) { this._routeParser = routeParser; this._renderContext = new ShieldRenderingContext(); this._renderContext.gfxFactory = new DOMGraphicsFactory(); } + /** Specify which shields to draw and with what graphics */ protected setShields(shieldSpec: ShieldSpecification) { this._renderContext.options = shieldSpec.options; this._renderContext.shieldDef = shieldSpec.networks; @@ -77,15 +81,18 @@ export class AbstractShieldRenderer { ); } + /** Get the shield definitions */ public getShieldDefinitions(): ShieldDefinitions { return this._renderContext.shieldDef; } + /** Set debugging options */ public debugOptions(debugOptions: DebugOptions): AbstractShieldRenderer { this._renderContext.debugOptions = debugOptions; return this; } + /** Set which unhandled sprite IDs this renderer handles */ public filterImageID( shieldPredicate: StringPredicate ): AbstractShieldRenderer { @@ -93,6 +100,7 @@ export class AbstractShieldRenderer { return this; } + /** Set which network values this renderer handles */ public filterNetwork( networkPredicate: StringPredicate ): AbstractShieldRenderer { @@ -100,17 +108,20 @@ export class AbstractShieldRenderer { return this; } + /** Set which graphics context to draw shields to */ public graphicsFactory(gfxFactory: GraphicsFactory): AbstractShieldRenderer { this._renderContext.gfxFactory = gfxFactory; return this; } + /** Set which MaplibreGL map to handle shields for */ public renderOnMaplibreGL(map: Map): AbstractShieldRenderer { this.renderOnRepository(new MaplibreGLSpriteRepository(map)); map.on("styleimagemissing", this.getStyleImageMissingHandler()); return this; } + /** Set a callback that fires when shield definitions are loaded */ public onShieldDefLoad( callback: (shields: ShieldDefinitions) => void ): AbstractShieldRenderer { @@ -122,6 +133,7 @@ export class AbstractShieldRenderer { return this; } + /** Set the storage location for existing and generated sprite images */ public renderOnRepository(repo: SpriteRepository): AbstractShieldRenderer { if (!this._renderContext.spriteRepo) { this._renderContext.spriteRepo = repo; @@ -129,6 +141,11 @@ export class AbstractShieldRenderer { return this; } + /** + * Get the handler function for styleimagemissing event calls + * + * See [MapStyleImageMissingEvent](https://maplibre.org/maplibre-gl-js/docs/API/types/maplibregl.MapStyleImageMissingEvent/) for more details. + **/ public getStyleImageMissingHandler() { return (e: MapStyleImageMissingEvent) => { try { @@ -140,7 +157,6 @@ export class AbstractShieldRenderer { storeNoShield(this._renderContext, e.id); return; } - this._renderContext.debugOptions = this.debugOptions; if (routeDef) { missingIconLoader(this._renderContext, routeDef, e.id); } @@ -150,6 +166,7 @@ export class AbstractShieldRenderer { }; } + /** Get the graphic for a specified route */ public getGraphicForRoute(network: string, ref: string, name: string) { return generateShieldCtx(this._renderContext, { network, @@ -158,19 +175,47 @@ export class AbstractShieldRenderer { }); } + /** Get a blank route shield sprite in the default size */ public emptySprite(): CanvasRenderingContext2D { return this._renderContext.emptySprite(); } + /** Get a blank route shield graphics context in a specified size */ public createGraphics(bounds: Bounds) { return this._renderContext.gfxFactory.createGraphics(bounds); } + /** Get the current pixel ration (1x/2x) */ public pixelRatio(): number { return this._renderContext.px(1); } } +/** + * A shield renderer configured from a JSON specification + * + * @example + * + * const shields = { + * "US:I": { + * textColor: Color.shields.white, + * spriteBlank: ["shield_us_interstate_2", "shield_us_interstate_3"], + * textLayout: textConstraint("southHalfEllipse"), + * padding: { + * left: 4, + * right: 4, + * top: 6, + * bottom: 5, + * }, + * } + * }; + * + * const shieldRenderer = new ShieldRenderer(shields, routeParser) + * .filterImageID(shieldPredicate) + * .filterNetwork(networkPredicate) + * .renderOnMaplibreGL(map) + * .onShieldDefLoad((shields) => afterShieldRendererLoads(shields)); //Post config + */ export class ShieldRenderer extends AbstractShieldRenderer { constructor(shieldSpec: ShieldSpecification, routeParser: RouteParser) { super(routeParser); @@ -178,13 +223,30 @@ export class ShieldRenderer extends AbstractShieldRenderer { } } +/** + * A shield renderer configured from a URL containing a JSON specification + * + * @example + * + * const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) + * .filterImageID(shieldPredicate) + * .filterNetwork(networkPredicate) + * .renderOnMaplibreGL(map) + * .onShieldDefLoad((shields) => afterShieldRendererLoads(shields)); //Post config + **/ export class URLShieldRenderer extends AbstractShieldRenderer { - constructor(shieldsURL: URL, routeParser: RouteParser) { + constructor( + /** URL containing the JSON shield definition */ + shieldsURL: URL, + /** Function that extracts route identification from a sprite string */ + routeParser: RouteParser + ) { super(routeParser); this.setShieldURL(shieldsURL); } - public async setShieldURL(shieldsURL: URL) { + /** Set the URL containing the shield specification */ + private async setShieldURL(shieldsURL: URL) { await fetch(shieldsURL) .then((res) => res.json()) .then((json) => super.setShields(json)) @@ -192,6 +254,7 @@ export class URLShieldRenderer extends AbstractShieldRenderer { } } +/** @hidden Used for testing */ export class InMemorySpriteRepository implements SpriteRepository { sprites = {}; public getSprite(spriteID: string): StyleImage { diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 508f07a25..19314de5c 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -1,90 +1,88 @@ import { StyleImage } from "maplibre-gl"; -/** - * Defines the set of routes that a shield applies to - */ +/** Defines the set of routes that a shield applies to */ export interface RouteDefinition { - /** - * Only match routes with this network value - */ + /** Only match routes with this network value */ network: string; - - /** - * If set, only match routes with this ref value - */ + /** If set, only match routes with this ref value */ ref?: string; - - /** - * If set, only match routes with this name value - */ + /** If set, only match routes with this name value */ name?: string; } -/** - * Enforce a requirement that one field OR another field must be specified, but not both. - */ +/** Enforce a requirement that one field OR another field must be specified, but not both */ export type Exclusive = | (T & { [P in keyof U]?: never }) | (U & { [P in keyof T]?: never }); -/** - * Parameters that apply to all types of shield definitions - */ +/** Parameters that apply to all types of shield definitions */ export interface ShieldDefinitionBase { + /** Color of text drawn on a shield */ textColor?: string; + /** Padding around shield text */ padding?: BoxPadding; + /** Algorithm for expanding text to fill a shield background */ textLayout?: TextLayout; + /** Banners to be drawn above a shield */ banners?: string[]; + /** If true, no next should be drawn on this shield */ notext?: boolean; } -/** - * Define how the renderer should draw the shield for a particular route - */ +/** Define how the renderer should draw the shield for a particular route */ export type ShieldDefinition = Exclusive< { spriteBlank: string[] }, { shapeBlank: ShapeDefinition } > & ShieldDefinitionBase; -/** - * Define a shield which is created by drawing a shape, optionally with text on top - */ +/** Define a shield which is created by drawing a shape, optionally with text on top */ export interface ShapeDefinition { + /** Which shape to draw */ drawFunc: string; + /** Parameters for drawing the shape */ params: ShapeBlankParams; } -/** - * Rectangular padding values - */ +/** Rectangular padding values */ export interface BoxPadding { + /** Minimum padding to the left of the text */ left: number; + /** Minimum padding to the right of the text */ right: number; + /** Minimum padding above the text */ top: number; + /** Minimum padding below the text */ bottom: number; } -/** - * Parameters for drawing shield shapes - */ +/** Parameters for drawing shield shapes */ export interface ShapeBlankParams { + /** Fill color of the shape */ fillColor: string; + /** Stroke (border) color */ strokeColor: string; + /** Width of the shape */ rectWidth?: number; + /** Radius of the shape's corners */ radius?: number; + /** Radius of the shapes's first corner. This is used for shapes that can specify multiple raidus values */ radius1?: number; + /** Radius of the shapes's second corner. This is used for shapes that can specify multiple raidus values */ radius2?: number; + /** Height of diagonal edges */ offset?: number; + /** Width of the shape's outline */ outlineWidth?: number; + /** Specify whether the pointy end of the shape is on top */ pointUp?: boolean; + /** Specify whether the short side of the shape is on top */ shortSideUp?: boolean; + /** Specify the angle of the defining vertex of the shape */ angle?: number; } -/** - * Parameters for laying out text on a shield background - */ +/** Parameters for laying out text on a shield background */ export interface TextLayout { constraintFunc: string; options?: { @@ -99,59 +97,55 @@ export interface TextLayout { */ export type StringPredicate = (spriteID: string) => boolean; -/** - * RouteParser unpacks a route definition from a sprite image string. - */ +/** RouteParser unpacks a route definition from a sprite image string */ export interface RouteParser { parse(spriteID: string): RouteDefinition; format(network: string, ref: string, name: string): string; } -/** - * Retrieve a sprite graphic based on an ID. - */ +/** Retrieve a sprite graphic based on an ID */ export interface SpriteProducer { getSprite(spriteID: string): StyleImage; } -/** - * Store a sprite graphic based on an ID. - */ +/** Store a sprite graphic based on an ID */ export interface SpriteConsumer { putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; } -/** - * Respository that can store and retrieve sprite graphics. - */ +/** Respository that can store and retrieve sprite graphics */ export type SpriteRepository = SpriteProducer & SpriteConsumer; -/** - * A map of shield definitions that associates a network name to its rendering - */ +/** Map of shield definitions that associates a network name to its rendering */ export interface ShieldDefinitions { shield: { [key: string]: ShieldDefinition; }; } -export interface DebugOptions {} +/** Additional debugging-only options */ +export interface DebugOptions { + /** If set, draw a colored box around shield text constraint */ + shieldTextBboxColor?: string; +} -/** - * Global options for shield rendering - */ +/** Global options for shield rendering */ export interface ShieldOptions { + /** Height of each specified banner above the shield */ bannerHeight: number; + /** Padding between each banner */ bannerPadding: number; + /** Color of text on the banner */ bannerTextColor: string; + /** Color of halo on text on the banner */ bannerTextHaloColor: string; + /** Browser font for banner text */ shieldFont: string; + /** Default shield size in pixels at 1x */ shieldSize: number; } -/** - * A user-supplied specification for rendering shields - */ +/** A user-supplied specification for rendering shields */ export interface ShieldSpecification { networks: ShieldDefinitions; options: ShieldOptions; From bfc27cd6fb755bdc830519aba5320f5db8e350e3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 9 Sep 2023 08:09:45 -0400 Subject: [PATCH 189/444] Add documentation --- shieldlib/src/shield_helper.ts | 11 +++++++ shieldlib/src/types.ts | 55 ++++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 8d1967dfe..92acabf39 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -1,5 +1,11 @@ import { ShieldDefinition, TextLayout } from "./types"; +/** + * Constrain the text to a rounded rectangle + * + * @param radius 1x pixel radius of the constraint corners + * @returns a constraint definition + */ export function roundedRectTextConstraint(radius: number): TextLayout { return { constraintFunc: "roundedRect", @@ -9,6 +15,11 @@ export function roundedRectTextConstraint(radius: number): TextLayout { }; } +/** + * Constrain the text to a specified constraint type + * + * @returns a constraint definition + */ export function textConstraint(fxn: string): TextLayout { return { constraintFunc: fxn, diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 19314de5c..1966b0935 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -29,7 +29,23 @@ export interface ShieldDefinitionBase { notext?: boolean; } -/** Define how the renderer should draw the shield for a particular route */ +/** + * Define how the renderer should draw the shield for various routes + * + * @example + * const shieldsDefinition = { + * "US:I": { + * textColor: Color.shields.white, + * spriteBlank: ["shield_us_interstate_2", "shield_us_interstate_3"], + * textLayout: textConstraint("southHalfEllipse"), + * padding: { + * left: 4, + * right: 4, + * top: 6, + * bottom: 5, + * } + * }; + */ export type ShieldDefinition = Exclusive< { spriteBlank: string[] }, { shapeBlank: ShapeDefinition } @@ -145,15 +161,44 @@ export interface ShieldOptions { shieldSize: number; } -/** A user-supplied specification for rendering shields */ +/** + * A user-supplied specification for rendering shields + * + * @example + * + * const shieldsSpecification = { + * shields: { + * "US:I": { + * textColor: Color.shields.white, + * spriteBlank: ["shield_us_interstate_2", "shield_us_interstate_3"], + * textLayout: textConstraint("southHalfEllipse"), + * padding: { + * left: 4, + * right: 4, + * top: 6, + * bottom: 5, + * }, + * } + * }, + * options: { + * bannerTextColor: "#000", + * bannerTextHaloColor: "#FFF", + * bannerHeight: 9, + * bannerPadding: 1, + * shieldFont: '"sans-serif-condensed", "Arial Narrow", sans-serif', + * shieldSize: 20, + * } + * }; + * + */ export interface ShieldSpecification { + /** Shield definitions */ networks: ShieldDefinitions; + /** Shield options */ options: ShieldOptions; } -/** - * Rectangular bounds, in scaled pixels - */ +/** Rectangular bounds, in scaled pixels */ export type Bounds = { width: number; height: number; From 6510713cee33669c1dfb0693e1886362f26c8c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sun, 17 Sep 2023 01:51:17 -0700 Subject: [PATCH 190/444] Add vintage U.S. Route shield for historic routes (#922) * Added vintage U.S. Route shield for historic routes * Added banner to Historic U.S. Route shield * Generalize badge shield with crossbar --- icons/shield_badge_crossbar_2.svg | 4 ++++ icons/shield_badge_crossbar_3.svg | 4 ++++ src/js/shield_defs.js | 24 +++++++++++++++++++----- 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 icons/shield_badge_crossbar_2.svg create mode 100644 icons/shield_badge_crossbar_3.svg diff --git a/icons/shield_badge_crossbar_2.svg b/icons/shield_badge_crossbar_2.svg new file mode 100644 index 000000000..be80b8769 --- /dev/null +++ b/icons/shield_badge_crossbar_2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/shield_badge_crossbar_3.svg b/icons/shield_badge_crossbar_3.svg new file mode 100644 index 000000000..5cdda03ce --- /dev/null +++ b/icons/shield_badge_crossbar_3.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index ef9d929a1..e4534a85b 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -767,6 +767,17 @@ export function loadShields() { }, }; + let badgeShieldCrossbar = { + spriteBlank: ["shield_badge_crossbar_2", "shield_badge_crossbar_3"], + textColor: Color.shields.black, + padding: { + left: 1, + right: 1, + top: 6, + bottom: 4, + }, + }; + // Default shields["default"] = { @@ -1181,11 +1192,14 @@ export function loadShields() { "BUS", ]); - shields["US:US:Historic"] = { - ...badgeShield, - textColor: Color.shields.brown, - colorLighten: Color.shields.brown, - }; + shields["US:US:Historic"] = banneredShield( + { + ...badgeShieldCrossbar, + textColor: Color.shields.brown, + colorLighten: Color.shields.brown, + }, + ["HIST"] + ); // Federal Agencies shields["US:BIA"] = { From e0519596901655838f2e72a5ed57628069295a63 Mon Sep 17 00:00:00 2001 From: Daniel Schep Date: Sun, 17 Sep 2023 12:42:35 -0400 Subject: [PATCH 191/444] Don't render one-way arrows on highway features that aren't rendered --- src/layer/oneway.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/layer/oneway.js b/src/layer/oneway.js index 47253b9c6..e8f50eb06 100644 --- a/src/layer/oneway.js +++ b/src/layer/oneway.js @@ -10,6 +10,7 @@ export const surface = { ["==", ["get", "oneway"], 1], ["!=", ["get", "ramp"], 1], ["!", ["in", ["get", "brunnel"], ["literal", ["bridge", "tunnel"]]]], + ["!", ["in", ["get", "class"], ["literal", ["path", "track"]]]], ], source: "openmaptiles", "source-layer": "transportation", @@ -73,6 +74,7 @@ export const tunnel = { ["==", ["get", "oneway"], 1], ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "tunnel"], + ["!", ["in", ["get", "class"], ["literal", ["path", "track"]]]], ], paint: { "icon-opacity": 0.2, @@ -87,5 +89,6 @@ export const bridge = { ["==", ["get", "oneway"], 1], ["!=", ["get", "ramp"], 1], ["==", ["get", "brunnel"], "bridge"], + ["!", ["in", ["get", "class"], ["literal", ["path", "track"]]]], ], }; From 5f37d051a3ea3e4f7a5e24b9e38c4d2d570517b3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 23 Sep 2023 17:24:11 -0400 Subject: [PATCH 192/444] Consolidate preview checks --- .github/workflows/pr-preview-check.yml | 53 -------------------------- .github/workflows/s3-upload.yml | 41 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 53 deletions(-) delete mode 100644 .github/workflows/pr-preview-check.yml diff --git a/.github/workflows/pr-preview-check.yml b/.github/workflows/pr-preview-check.yml deleted file mode 100644 index 4577db136..000000000 --- a/.github/workflows/pr-preview-check.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Generate PR Preview Check -on: - pull_request: - branches: [main] - types: - - opened - - reopened - - synchronize - workflow_dispatch: -permissions: - checks: write -jobs: - deploy-preview: - runs-on: ubuntu-latest - steps: - - name: Wait for PR Preview Upload (1x Sprite) - uses: cygnetdigital/wait_for_response@v2.0.0 - with: - url: "https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite.png" - responseCode: "200" - timeout: 120000 - interval: 500 - - name: Wait for PR Preview Upload (2x Sprite) - uses: cygnetdigital/wait_for_response@v2.0.0 - with: - url: "https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/sprites/sprite@2x.png" - responseCode: "200" - timeout: 120000 - interval: 500 - - name: Generate Preview text - run: | - echo "## PR Preview: - * [Map](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/) - * [Shield Test](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shieldtest.html) - * [style.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/style.json) - * [shields.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/shields.json) - * [taginfo.json](https://preview.ourmap.us/pr/${{ github.event.pull_request.number }}/taginfo.json) - - ## Sprite Sheets: - - - - " > pr_preview.md - - name: Print Preview Links to GitHub Checks - uses: LouisBrunner/checks-action@v1.6.1 - if: always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - name: PR Preview - conclusion: neutral - output: | - {"summary":"Preview map changes introduced by this PR"} - output_text_description_file: pr_preview.md diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 81dc0df57..4760c7757 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -72,3 +72,44 @@ jobs: AWS_REGION: ${{ secrets.AWS_REGION }} SOURCE_DIR: "./dist" DEST_DIR: pr/${{ env.PR_NUM }} + set-preview-in-checks-tab: + runs-on: ubuntu-latest + steps: + - name: Wait for PR Preview Upload (1x Sprite) + uses: cygnetdigital/wait_for_response@v2.0.0 + with: + url: "https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png" + responseCode: "200" + timeout: 120000 + interval: 500 + - name: Wait for PR Preview Upload (2x Sprite) + uses: cygnetdigital/wait_for_response@v2.0.0 + with: + url: "https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite@2x.png" + responseCode: "200" + timeout: 120000 + interval: 500 + - name: Generate Preview text + run: | + echo "## PR Preview: + * [Map](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/) + * [Shield Test](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shieldtest.html) + * [style.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/style.json) + * [shields.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/shields.json) + * [taginfo.json](https://preview.ourmap.us/pr/${{ env.PR_NUM }}/taginfo.json) + + ## Sprite Sheets: + + + + " > pr_preview.md + - name: Print Preview Links to GitHub Checks + uses: LouisBrunner/checks-action@v1.6.1 + if: always() + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: PR Preview + conclusion: neutral + output: | + {"summary":"Preview map changes introduced by this PR"} + output_text_description_file: pr_preview.md From 643b1b0b47ccc4a478bb28bf5faad1152c325373 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 23 Sep 2023 17:40:57 -0400 Subject: [PATCH 193/444] Combine jobs --- .github/workflows/s3-upload.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 4760c7757..3809880ba 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -72,9 +72,6 @@ jobs: AWS_REGION: ${{ secrets.AWS_REGION }} SOURCE_DIR: "./dist" DEST_DIR: pr/${{ env.PR_NUM }} - set-preview-in-checks-tab: - runs-on: ubuntu-latest - steps: - name: Wait for PR Preview Upload (1x Sprite) uses: cygnetdigital/wait_for_response@v2.0.0 with: From 6308d5ffeac5ac7d8e1496948074c46e0771f270 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 23 Sep 2023 23:09:22 -0400 Subject: [PATCH 194/444] Add PR SHA --- .github/workflows/build-preview.yml | 4 +++- .github/workflows/s3-upload.yml | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 0a422a302..d7f3e1a2b 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -45,10 +45,12 @@ jobs: - name: Save PR number env: PR_NUMBER: ${{ github.event.pull_request.number }} + PR_SHA: ${{ github.sha }} run: | mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number - echo "Saved PR# ${{ github.event.pull_request.number }} for upload" + echo $PR_SHA > ./pr/pr_sha + echo "Saved PR# ${{ github.event.pull_request.number }}, SHA# ${{ github.sha }} for upload" - name: Save PR# uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 3809880ba..0397eb904 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -59,8 +59,10 @@ jobs: - name: Set PR variable run: | PR_NUM=$(cat pr_number) + PR_SHA=$(cat pr_sha) echo "Configuring deployment for PR# $PR_NUM" echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV + echo "PR_SHA=$PR_SHA" >> $GITHUB_ENV - name: Deploy via S3 uses: jakejarvis/s3-sync-action@master with: @@ -104,6 +106,7 @@ jobs: uses: LouisBrunner/checks-action@v1.6.1 if: always() with: + sha: ${{ env.PR_SHA }} token: ${{ secrets.GITHUB_TOKEN }} name: PR Preview conclusion: neutral From 92690467d51bd6b2c64003f5a31981ba99b1c507 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 23 Sep 2023 23:37:39 -0400 Subject: [PATCH 195/444] Add error handling --- .github/workflows/s3-upload.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index 0397eb904..df7a3319d 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -58,9 +58,17 @@ jobs: unzip -d dist americana.zip - name: Set PR variable run: | + if [ ! -f pr_number ] || [ ! -f pr_sha ]; then + echo "Required files pr_number or pr_sha do not exist. Exiting." + exit 1 + fi PR_NUM=$(cat pr_number) PR_SHA=$(cat pr_sha) - echo "Configuring deployment for PR# $PR_NUM" + if [ -z "$PR_NUM" ] || [ -z "$PR_SHA" ]; then + echo "PR_NUM or PR_SHA is empty. Exiting." + exit 1 + fi + echo "Configuring deployment for PR# $PR_NUM commit $PR_SHA" echo "PR_NUM=$PR_NUM" >> $GITHUB_ENV echo "PR_SHA=$PR_SHA" >> $GITHUB_ENV - name: Deploy via S3 From 549d0d535b01a4fbf58f246e79df01729bf78070 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 18:25:08 -0400 Subject: [PATCH 196/444] Use GitHub App to post check --- .github/workflows/build-preview.yml | 33 ++++++++++++++--------------- .github/workflows/s3-upload.yml | 14 ++++++++---- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index d7f3e1a2b..dbb1e3c03 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -42,20 +42,6 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18.16.1 #18.17.0 is buggy - - name: Save PR number - env: - PR_NUMBER: ${{ github.event.pull_request.number }} - PR_SHA: ${{ github.sha }} - run: | - mkdir -p ./pr - echo $PR_NUMBER > ./pr/pr_number - echo $PR_SHA > ./pr/pr_sha - echo "Saved PR# ${{ github.event.pull_request.number }}, SHA# ${{ github.sha }} for upload" - - name: Save PR# - uses: actions/upload-artifact@v3 - with: - name: pr_number - path: pr/ - name: Install and Build ๐Ÿ”ง run: | npm ci --include=dev @@ -73,10 +59,10 @@ jobs: - name: Compare Stats id: compare-stats run: | - mkdir stats + mkdir -p pr echo '${{ env.MAIN_STATS }}' echo '${{ env.PR_STATS }}' - npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > stats/stats-difference.md + npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > pr/stats-difference.md - name: Print Stats to GitHub Checks uses: LouisBrunner/checks-action@v1.6.1 if: always() @@ -86,9 +72,22 @@ jobs: conclusion: neutral output: | {"summary":"Style size changes introduced by this PR"} - output_text_description_file: stats/stats-difference.md + output_text_description_file: pr/stats/stats-difference.md - name: Upload Build artifact uses: actions/upload-artifact@v3 with: name: americana path: dist/ + - name: Save PR artifacts + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + PR_SHA: ${{ github.sha }} + run: | + echo $PR_NUMBER > pr/pr_number + echo $PR_SHA > pr/pr_sha + echo "Saved PR# ${{ github.event.pull_request.number }}, SHA# ${{ github.sha }} for upload" + - name: Upload PR artifacts + uses: actions/upload-artifact@v3 + with: + name: pr_ci_artifacts + path: pr/ diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index df7a3319d..beb8ac6b9 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -22,7 +22,7 @@ jobs: run_id: context.payload.workflow_run.id, }); let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "pr_number" + return artifact.name == "pr_ci_artifacts" })[0]; let download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, @@ -31,7 +31,7 @@ jobs: archive_format: 'zip', }); let fs = require('fs'); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data)); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_ci_artifacts.zip`, Buffer.from(download.data)); - name: "Download Build" uses: actions/github-script@v6 with: @@ -54,7 +54,7 @@ jobs: fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/americana.zip`, Buffer.from(download.data)); - name: "Unzip artifacts" run: | - unzip pr_number.zip + unzip pr_ci_artifacts.zip unzip -d dist americana.zip - name: Set PR variable run: | @@ -110,12 +110,18 @@ jobs: " > pr_preview.md + - uses: tibdex/github-app-token@v1 + # See https://josh-ops.com/posts/using-github-checks-api/ + id: get_installation_token + with: + app_id: 396440 #osm-americana checks app + private_key: ${{ secrets.CHECKS_WRITER_SECRET }} - name: Print Preview Links to GitHub Checks uses: LouisBrunner/checks-action@v1.6.1 if: always() with: sha: ${{ env.PR_SHA }} - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ steps.get_installation_token.outputs.token }} name: PR Preview conclusion: neutral output: | From 4ea86141562a0a885641dc74baca85a9fc6a2677 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 18:28:43 -0400 Subject: [PATCH 197/444] Fix stats path --- .github/workflows/build-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index dbb1e3c03..9a534f2e2 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -72,7 +72,7 @@ jobs: conclusion: neutral output: | {"summary":"Style size changes introduced by this PR"} - output_text_description_file: pr/stats/stats-difference.md + output_text_description_file: pr/stats-difference.md - name: Upload Build artifact uses: actions/upload-artifact@v3 with: From d13946677421045f9396de3231b841933185cee8 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 19:06:12 -0400 Subject: [PATCH 198/444] Add triggering SHA --- .github/workflows/build-preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 9a534f2e2..01deab3ba 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -81,11 +81,11 @@ jobs: - name: Save PR artifacts env: PR_NUMBER: ${{ github.event.pull_request.number }} - PR_SHA: ${{ github.sha }} + PR_SHA: ${{ github.event.pull_request.head.sha }} run: | echo $PR_NUMBER > pr/pr_number echo $PR_SHA > pr/pr_sha - echo "Saved PR# ${{ github.event.pull_request.number }}, SHA# ${{ github.sha }} for upload" + echo "Saved PR# ${{ github.event.pull_request.number }}, SHA# ${{ github.event.pull_request.head.sha }} for upload" - name: Upload PR artifacts uses: actions/upload-artifact@v3 with: From 1a9a384df1479edb8e5f55b0c4a307f63c15dbe6 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 19:38:02 -0400 Subject: [PATCH 199/444] Improve checks --- .github/workflows/s3-upload.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/s3-upload.yml index beb8ac6b9..61685317b 100644 --- a/.github/workflows/s3-upload.yml +++ b/.github/workflows/s3-upload.yml @@ -111,8 +111,7 @@ jobs: " > pr_preview.md - uses: tibdex/github-app-token@v1 - # See https://josh-ops.com/posts/using-github-checks-api/ - id: get_installation_token + id: checks_token with: app_id: 396440 #osm-americana checks app private_key: ${{ secrets.CHECKS_WRITER_SECRET }} @@ -121,9 +120,12 @@ jobs: if: always() with: sha: ${{ env.PR_SHA }} - token: ${{ steps.get_installation_token.outputs.token }} + token: ${{ steps.checks_token.outputs.token }} name: PR Preview + details_url: https://preview.ourmap.us/pr/${{ env.PR_NUM }}/ conclusion: neutral output: | - {"summary":"Preview map changes introduced by this PR"} + {"summary":"Preview map changes introduced by this PR", "title":"View live map and artifacts"} + images: | + [{"image_url":"https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png", "caption":"Sprite Sheet"}] output_text_description_file: pr_preview.md From efeeb00e3e1a2ab5b2c964a88de17a20ca74fb2d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 19:41:06 -0400 Subject: [PATCH 200/444] Rename checks workflow --- .github/workflows/{s3-upload.yml => deploy-pr-checks.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{s3-upload.yml => deploy-pr-checks.yml} (100%) diff --git a/.github/workflows/s3-upload.yml b/.github/workflows/deploy-pr-checks.yml similarity index 100% rename from .github/workflows/s3-upload.yml rename to .github/workflows/deploy-pr-checks.yml From 8eeeec18f49ba02b849520413b16655a84545ae5 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 19:49:47 -0400 Subject: [PATCH 201/444] Add missing alt parameter --- .github/workflows/deploy-pr-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-pr-checks.yml b/.github/workflows/deploy-pr-checks.yml index 61685317b..1c2d27bae 100644 --- a/.github/workflows/deploy-pr-checks.yml +++ b/.github/workflows/deploy-pr-checks.yml @@ -127,5 +127,5 @@ jobs: output: | {"summary":"Preview map changes introduced by this PR", "title":"View live map and artifacts"} images: | - [{"image_url":"https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png", "caption":"Sprite Sheet"}] + [{"image_url":"https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png", "caption":"Sprite Sheet", "alt":"1x Sprite Sheet"}] output_text_description_file: pr_preview.md From e8f5637cd989cdd6bc82f3111853a230a3eb3fcd Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 20:07:15 -0400 Subject: [PATCH 202/444] Move performance checks to privileged runner --- .github/workflows/build-preview.yml | 10 ---------- .github/workflows/deploy-pr-checks.yml | 13 +++++++++++-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 01deab3ba..487752e32 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -63,16 +63,6 @@ jobs: echo '${{ env.MAIN_STATS }}' echo '${{ env.PR_STATS }}' npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > pr/stats-difference.md - - name: Print Stats to GitHub Checks - uses: LouisBrunner/checks-action@v1.6.1 - if: always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - name: Performance Metrics - conclusion: neutral - output: | - {"summary":"Style size changes introduced by this PR"} - output_text_description_file: pr/stats-difference.md - name: Upload Build artifact uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/deploy-pr-checks.yml b/.github/workflows/deploy-pr-checks.yml index 1c2d27bae..57babd8e2 100644 --- a/.github/workflows/deploy-pr-checks.yml +++ b/.github/workflows/deploy-pr-checks.yml @@ -126,6 +126,15 @@ jobs: conclusion: neutral output: | {"summary":"Preview map changes introduced by this PR", "title":"View live map and artifacts"} - images: | - [{"image_url":"https://preview.ourmap.us/pr/${{ env.PR_NUM }}/sprites/sprite.png", "caption":"Sprite Sheet", "alt":"1x Sprite Sheet"}] output_text_description_file: pr_preview.md + - name: Print Stats to GitHub Checks + uses: LouisBrunner/checks-action@v1.6.1 + if: always() + with: + sha: ${{ env.PR_SHA }} + token: ${{ steps.checks_token.outputs.token }} + name: Style Performance + conclusion: neutral + output: | + {"summary":"Style size changes introduced by this PR", "title":"View metrics on style size changes"} + output_text_description_file: stats-difference.md From 1f10c0ea3f678b09088878239edc249eaab09435 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 26 Sep 2023 20:09:28 -0400 Subject: [PATCH 203/444] Re-order CI --- .github/workflows/build-preview.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 487752e32..d1ffd9423 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -49,6 +49,11 @@ jobs: npm run style npm run shields cp src/configs/config.aws.js src/config.js + - name: Upload Build artifact + uses: actions/upload-artifact@v3 + with: + name: americana + path: dist/ - name: Capture PR branch usage statistics id: pr-stats run: | @@ -63,11 +68,6 @@ jobs: echo '${{ env.MAIN_STATS }}' echo '${{ env.PR_STATS }}' npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > pr/stats-difference.md - - name: Upload Build artifact - uses: actions/upload-artifact@v3 - with: - name: americana - path: dist/ - name: Save PR artifacts env: PR_NUMBER: ${{ github.event.pull_request.number }} From fc2ff41f97a0a8f1fca6ab9e13c1ede2c50e244a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 20:07:26 -0400 Subject: [PATCH 204/444] Update shieldlib/src/types.ts Co-authored-by: Clay Smalley --- shieldlib/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 1966b0935..4450705da 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -94,7 +94,7 @@ export interface ShapeBlankParams { pointUp?: boolean; /** Specify whether the short side of the shape is on top */ shortSideUp?: boolean; - /** Specify the angle of the defining vertex of the shape */ + /** Specify the angle at which the sides of the shape deviate from vertical. Higher number means pointier sides */ angle?: number; } From a275df328a346f3da93450ceeea4c9bc4cd36c7e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 20:07:44 -0400 Subject: [PATCH 205/444] Update shieldlib/src/types.ts Co-authored-by: Clay Smalley --- shieldlib/src/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 4450705da..637538f55 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -82,9 +82,9 @@ export interface ShapeBlankParams { rectWidth?: number; /** Radius of the shape's corners */ radius?: number; - /** Radius of the shapes's first corner. This is used for shapes that can specify multiple raidus values */ + /** Radius of the shape's first corner. This is used for shapes that can specify multiple radius values */ radius1?: number; - /** Radius of the shapes's second corner. This is used for shapes that can specify multiple raidus values */ + /** Radius of the shape's second corner. This is used for shapes that can specify multiple radius values */ radius2?: number; /** Height of diagonal edges */ offset?: number; From b3e5800b993b005d1f0ab4596c1662037933cd0b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 20:07:56 -0400 Subject: [PATCH 206/444] Update shieldlib/src/types.ts Co-authored-by: Clay Smalley --- shieldlib/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 637538f55..e9d244721 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -86,7 +86,7 @@ export interface ShapeBlankParams { radius1?: number; /** Radius of the shape's second corner. This is used for shapes that can specify multiple radius values */ radius2?: number; - /** Height of diagonal edges */ + /** Distance from top or bottom edge to vertices. Higher number means pointier top and/or bottom */ offset?: number; /** Width of the shape's outline */ outlineWidth?: number; From 5ddb252410b0f9c14d10bcdf3788bd647b9340a3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 21:31:21 -0400 Subject: [PATCH 207/444] Convert shield_canvas_draw to typescript --- shieldlib/src/custom_shields.mjs | 2 +- shieldlib/src/shield.js | 2 +- ..._canvas_draw.mjs => shield_canvas_draw.ts} | 107 +++++++++++++++--- shieldlib/src/shield_renderer.d.ts | 7 ++ shieldlib/src/shield_renderer.ts | 8 ++ 5 files changed, 107 insertions(+), 19 deletions(-) rename shieldlib/src/{shield_canvas_draw.mjs => shield_canvas_draw.ts} (90%) diff --git a/shieldlib/src/custom_shields.mjs b/shieldlib/src/custom_shields.mjs index c390e60a6..939091488 100644 --- a/shieldlib/src/custom_shields.mjs +++ b/shieldlib/src/custom_shields.mjs @@ -1,6 +1,6 @@ "use strict"; -import * as ShieldDraw from "./shield_canvas_draw.mjs"; +import * as ShieldDraw from "./shield_canvas_draw"; // Special case for Allegheny, PA Belt System export function paBelt(r, ctx, params) { diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index 7255caf2d..6594d4a95 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -1,7 +1,7 @@ "use strict"; import * as ShieldText from "./shield_text.mjs"; -import * as ShieldDraw from "./shield_canvas_draw.mjs"; +import * as ShieldDraw from "./shield_canvas_draw"; import * as Gfx from "./screen_gfx.js"; function drawBannerPart(r, ctx, shieldDef, drawFunc) { diff --git a/shieldlib/src/shield_canvas_draw.mjs b/shieldlib/src/shield_canvas_draw.ts similarity index 90% rename from shieldlib/src/shield_canvas_draw.mjs rename to shieldlib/src/shield_canvas_draw.ts index 5b8236d6c..0147e79fb 100644 --- a/shieldlib/src/shield_canvas_draw.mjs +++ b/shieldlib/src/shield_canvas_draw.ts @@ -6,12 +6,19 @@ import * as ShieldText from "./shield_text.mjs"; import { loadCustomShields } from "./custom_shields.mjs"; +import { ShapeDrawFunction, ShieldRenderingContext } from "./shield_renderer"; +import { ShapeBlankParams } from "./types"; const minGenericShieldWidth = 20; const maxGenericShieldWidth = 34; const genericShieldFontSize = 18; -export function computeWidth(r, params, ref, shape) { +export function computeWidth( + r: ShieldRenderingContext, + params: ShapeBlankParams, + ref: string, + shape?: string +) { if (fixedWidthDefinitions[shape] !== undefined) { return r.px(fixedWidthDefinitions[shape]); } @@ -53,7 +60,12 @@ export function computeWidth(r, params, ref, shape) { } } -function ellipse(r, ctx, params, ref) { +function ellipse( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -71,6 +83,7 @@ function ellipse(r, ctx, params, ref) { radiusX, radiusY, 0, + 0, 2 * Math.PI, false ); @@ -84,7 +97,7 @@ function ellipse(r, ctx, params, ref) { return width; } -export function blank(r, ref) { +export function blank(r: ShieldRenderingContext, ref: string) { var shieldWidth = ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + r.px(2); @@ -98,7 +111,12 @@ export function blank(r, ref) { }); } -export function roundedRectangle(r, ctx, params, ref) { +export function roundedRectangle( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -140,7 +158,12 @@ export function roundedRectangle(r, ctx, params, ref) { return width; } -function escutcheon(r, ctx, params, ref) { +function escutcheon( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let offset = params.offset == undefined ? 0 : params.offset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -192,7 +215,12 @@ function escutcheon(r, ctx, params, ref) { return width; } -function fishhead(r, ctx, params, ref) { +function fishhead( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -244,7 +272,12 @@ function fishhead(r, ctx, params, ref) { } } -function triangle(r, ctx, params, ref) { +function triangle( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -305,7 +338,12 @@ function triangle(r, ctx, params, ref) { return width; } -function trapezoid(r, ctx, params, ref) { +function trapezoid( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let shortSideUp = params.shortSideUp == undefined ? false : params.shortSideUp; let angle = params.angle == undefined ? 0 : params.angle; @@ -362,7 +400,12 @@ function trapezoid(r, ctx, params, ref) { return width; } -function diamond(r, ctx, params, ref) { +function diamond( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -426,7 +469,12 @@ function diamond(r, ctx, params, ref) { return width; } -function pentagon(r, ctx, params, ref) { +function pentagon( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let pointUp = params.pointUp == undefined ? true : params.pointUp; let offset = params.offset == undefined ? 0 : params.offset; let angle = params.angle == undefined ? 0 : params.angle; @@ -494,7 +542,12 @@ function pentagon(r, ctx, params, ref) { return width; } -function hexagonVertical(r, ctx, params, ref) { +function hexagonVertical( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let offset = params.offset == undefined ? 0 : params.offset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -543,7 +596,12 @@ function hexagonVertical(r, ctx, params, ref) { return width; } -function hexagonHorizontal(r, ctx, params, ref) { +function hexagonHorizontal( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let angle = params.angle == undefined ? 0 : params.angle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -604,7 +662,12 @@ function hexagonHorizontal(r, ctx, params, ref) { return width; } -function octagonVertical(r, ctx, params, ref) { +function octagonVertical( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { let offset = params.offset == undefined ? 0 : params.offset; let angle = params.angle == undefined ? 0 : params.angle; let fill = params.fillColor == undefined ? "white" : params.fillColor; @@ -684,7 +747,7 @@ function octagonVertical(r, ctx, params, ref) { return width; } -export function shapeHeight(r, name) { +export function shapeHeight(r: ShieldRenderingContext, name: string) { switch (name) { case "diamond": return r.shieldSize() + r.px(4); @@ -693,8 +756,14 @@ export function shapeHeight(r, name) { } } -export function draw(r, name, ctx, options, ref) { - return drawFunctions[name](r, ctx, options, ref); +export function draw( + r: ShieldRenderingContext, + name: string, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) { + return drawFunctions[name](r, ctx, params, ref); } //Register draw functions @@ -710,7 +779,11 @@ const fixedWidthDefinitions = {}; * @param {*} fxn callback to the implementing function. Takes two parameters, ref and options * @param {*} fixedWidth if set, indicates that this function draws to a fixed width */ -export function registerDrawFunction(name, fxn, fixedWidth) { +export function registerDrawFunction( + name: string, + fxn: ShapeDrawFunction, + fixedWidth?: boolean +) { drawFunctions[name] = fxn; if (fixedWidth !== undefined) { fixedWidthDefinitions[name] = fixedWidth; diff --git a/shieldlib/src/shield_renderer.d.ts b/shieldlib/src/shield_renderer.d.ts index a4b0ddbf6..fc9d9ac19 100644 --- a/shieldlib/src/shield_renderer.d.ts +++ b/shieldlib/src/shield_renderer.d.ts @@ -4,6 +4,7 @@ import { DebugOptions, GraphicsFactory, RouteParser, + ShapeBlankParams, ShieldDefinitions, ShieldOptions, ShieldSpecification, @@ -21,6 +22,12 @@ export declare class ShieldRenderingContext { px(pixels: number): number; shieldSize(): number; } +export declare type ShapeDrawFunction = ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) => void; export declare class AbstractShieldRenderer { private _shieldPredicate; private _networkPredicate; diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 33846b9fe..570dc3aa6 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -5,6 +5,7 @@ import { GraphicsFactory, RouteDefinition, RouteParser, + ShapeBlankParams, ShieldDefinitions, ShieldOptions, ShieldSpecification, @@ -43,6 +44,13 @@ export class ShieldRenderingContext { } } +export type ShapeDrawFunction = ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref: string +) => void; + class MaplibreGLSpriteRepository implements SpriteRepository { map: Map; constructor(map: Map) { From c33f257d46d3f911b89cf2e42574bdc90b067d8f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 21:51:46 -0400 Subject: [PATCH 208/444] Rename sideAngle and yOffset --- shieldlib/src/shield_canvas_draw.ts | 20 +++--- shieldlib/src/shield_helper.ts | 96 ++++++++++++++--------------- shieldlib/src/types.ts | 4 +- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 0147e79fb..1d094477c 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -24,7 +24,7 @@ export function computeWidth( } let rectWidth = params.rectWidth == undefined ? null : params.rectWidth; - let angle = params.angle == undefined ? 0 : params.angle; + let angle = params.sideAngle == undefined ? 0 : params.sideAngle; let tangent = Math.tan(angle); if (rectWidth == null) { @@ -36,7 +36,7 @@ export function computeWidth( //Shape-specific width adjustments switch (shape) { case "pentagon": - let offset = params.offset == undefined ? 0 : params.offset; + let offset = params.yOffset == undefined ? 0 : params.yOffset; shieldWidth += ((r.shieldSize() - r.px(offset)) * tangent) / 2; break; case "trapezoid": @@ -164,7 +164,7 @@ function escutcheon( params: ShapeBlankParams, ref: string ) { - let offset = params.offset == undefined ? 0 : params.offset; + let offset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -346,7 +346,7 @@ function trapezoid( ) { let shortSideUp = params.shortSideUp == undefined ? false : params.shortSideUp; - let angle = params.angle == undefined ? 0 : params.angle; + let angle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -476,8 +476,8 @@ function pentagon( ref: string ) { let pointUp = params.pointUp == undefined ? true : params.pointUp; - let offset = params.offset == undefined ? 0 : params.offset; - let angle = params.angle == undefined ? 0 : params.angle; + let offset = params.yOffset == undefined ? 0 : params.yOffset; + let angle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius1 = params.radius1 == undefined ? 0 : params.radius1; @@ -548,7 +548,7 @@ function hexagonVertical( params: ShapeBlankParams, ref: string ) { - let offset = params.offset == undefined ? 0 : params.offset; + let offset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -602,7 +602,7 @@ function hexagonHorizontal( params: ShapeBlankParams, ref: string ) { - let angle = params.angle == undefined ? 0 : params.angle; + let angle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -668,8 +668,8 @@ function octagonVertical( params: ShapeBlankParams, ref: string ) { - let offset = params.offset == undefined ? 0 : params.offset; - let angle = params.angle == undefined ? 0 : params.angle; + let offset = params.yOffset == undefined ? 0 : params.yOffset; + let angle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 92acabf39..d8e6aebe0 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -121,7 +121,7 @@ export function roundedRectShield( /** * Draws a shield with an escutcheon background, pointed downward * - * @param {*} offset - Height of curved portion + * @param {*} yOffset - Height of curved portion * @param {*} fillColor - Color of escutcheon background fill * @param {*} strokeColor - Color of escutcheon outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -130,7 +130,7 @@ export function roundedRectShield( * @returns a shield definition object */ export function escutcheonDownShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -143,7 +143,7 @@ export function escutcheonDownShield( shapeBlank: { drawFunc: "escutcheon", params: { - offset, + yOffset, fillColor, strokeColor, rectWidth, @@ -156,7 +156,7 @@ export function escutcheonDownShield( left: 2, right: 2, top: 2, - bottom: 0 + offset / 2, + bottom: 0 + yOffset / 2, }, textColor, }; @@ -244,7 +244,7 @@ export function triangleDownShield( /** * Draws a shield with a trapezoid background, with the short side on bottom * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} sideAngle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of trapezoid background fill * @param {*} strokeColor - Color of trapezoid outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -253,14 +253,14 @@ export function triangleDownShield( * @returns a shield definition object */ export function trapezoidDownShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, radius: number, rectWidth: number ): ShieldDefinition { - let angleInRadians = (angle * Math.PI) / 180; + let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 0; @@ -268,7 +268,7 @@ export function trapezoidDownShield( shapeBlank: { drawFunc: "trapezoid", params: { - angle: angleInRadians, + sideAngle: angleInRadians, fillColor, strokeColor, rectWidth, @@ -289,7 +289,7 @@ export function trapezoidDownShield( /** * Draws a shield with a trapezoid background, with the short side on top * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} sideAngle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of trapezoid background fill * @param {*} strokeColor - Color of trapezoid outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -298,14 +298,14 @@ export function trapezoidDownShield( * @returns a shield definition object */ export function trapezoidUpShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, radius: number, rectWidth: number ): ShieldDefinition { - let angleInRadians = (angle * Math.PI) / 180; + let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 0; return { @@ -313,7 +313,7 @@ export function trapezoidUpShield( drawFunc: "trapezoid", params: { shortSideUp: true, - angle: angleInRadians, + sideAngle: angleInRadians, fillColor, strokeColor, rectWidth, @@ -374,8 +374,8 @@ export function diamondShield( /** * Draws a shield with a pentagon background, pointed upward * - * @param {*} offset - Height of diagonal edges - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} yOffset - Height of diagonal edges + * @param {*} sideAngle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of pentagon background fill * @param {*} strokeColor - Color of pentagon outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -385,8 +385,8 @@ export function diamondShield( * @returns a shield definition object */ export function pentagonUpShield( - offset: number, - angle: number, + yOffset: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, @@ -394,7 +394,7 @@ export function pentagonUpShield( radius2: number, rectWidth: number ): ShieldDefinition { - let angleInRadians = (angle * Math.PI) / 180; + let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius1 = radius1 ?? 2; radius2 = radius2 ?? 0; @@ -402,10 +402,10 @@ export function pentagonUpShield( shapeBlank: { drawFunc: "pentagon", params: { - offset: offset, - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, + yOffset, + sideAngle: angleInRadians, + fillColor, + strokeColor, radius1, radius2, rectWidth, @@ -415,9 +415,9 @@ export function pentagonUpShield( constraintFunc: "rect", }, padding: { - left: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, - right: 2 + ((20 - offset) * Math.tan(angleInRadians)) / 2, - top: 1 + offset / 2, + left: 2 + ((20 - yOffset) * Math.tan(angleInRadians)) / 2, + right: 2 + ((20 - yOffset) * Math.tan(angleInRadians)) / 2, + top: 1 + yOffset / 2, bottom: 3, }, textColor, @@ -427,7 +427,7 @@ export function pentagonUpShield( /** * Draws a shield with a home plate background, pointed downward * - * @param {*} offset - Height of diagonal edges + * @param {*} yOffset - Height of diagonal edges * @param {*} fillColor - Color of home plate background fill * @param {*} strokeColor - Color of home plate outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -437,7 +437,7 @@ export function pentagonUpShield( * @returns a shield definition object */ export function homePlateDownShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -453,8 +453,8 @@ export function homePlateDownShield( drawFunc: "pentagon", params: { pointUp: false, - offset, - angle: 0, + yOffset, + sideAngle: 0, fillColor, strokeColor, radius1, @@ -467,7 +467,7 @@ export function homePlateDownShield( left: 2, right: 2, top: 2, - bottom: 1 + offset, + bottom: 1 + yOffset, }, textColor, }; @@ -476,7 +476,7 @@ export function homePlateDownShield( /** * Draws a shield with a home plate background, pointed upward * - * @param {*} offset - Height of diagonal edges + * @param {*} yOffset - Height of diagonal edges * @param {*} fillColor - Color of home plate background fill * @param {*} strokeColor - Color of home plate outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -486,7 +486,7 @@ export function homePlateDownShield( * @returns a shield definition object */ export function homePlateUpShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -502,8 +502,8 @@ export function homePlateUpShield( drawFunc: "pentagon", params: { pointUp: true, - offset: offset, - angle: 0, + yOffset, + sideAngle: 0, fillColor, strokeColor, radius1, @@ -515,7 +515,7 @@ export function homePlateUpShield( padding: { left: 2, right: 2, - top: 1 + offset, + top: 1 + yOffset, bottom: 2, }, textColor, @@ -525,7 +525,7 @@ export function homePlateUpShield( /** * Draws a shield with a vertically-aligned hexagon background * - * @param {*} offset - Height of diagonal edges + * @param {*} yOffset - Height of diagonal edges * @param {*} fillColor - Color of hexagon background fill * @param {*} strokeColor - Color of hexagon outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -534,7 +534,7 @@ export function homePlateUpShield( * @returns a shield definition object */ export function hexagonVerticalShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -547,7 +547,7 @@ export function hexagonVerticalShield( shapeBlank: { drawFunc: "hexagonVertical", params: { - offset, + yOffset, fillColor, strokeColor, radius, @@ -558,8 +558,8 @@ export function hexagonVerticalShield( padding: { left: 2, right: 2, - top: 1 + offset, - bottom: 1 + offset, + top: 1 + yOffset, + bottom: 1 + yOffset, }, textColor, }; @@ -591,11 +591,11 @@ export function hexagonHorizontalShield( shapeBlank: { drawFunc: "hexagonHorizontal", params: { - angle: angleInRadians, - fillColor: fillColor, - strokeColor: strokeColor, - radius: radius, - rectWidth: rectWidth, + sideAngle: angleInRadians, + fillColor, + strokeColor, + radius, + rectWidth, }, }, textLayout: textConstraint("ellipse"), @@ -612,7 +612,7 @@ export function hexagonHorizontalShield( /** * Draws a shield with an octagon background * - * @param {*} offset - Height of diagonal edges + * @param {*} yOffset - Height of diagonal edges * @param {*} angle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of octagon background fill * @param {*} strokeColor - Color of octagon outline stroke @@ -622,7 +622,7 @@ export function hexagonHorizontalShield( * @returns a shield definition object */ export function octagonVerticalShield( - offset: number, + yOffset: number, angle: number, fillColor: string, strokeColor: string, @@ -637,8 +637,8 @@ export function octagonVerticalShield( shapeBlank: { drawFunc: "octagonVertical", params: { - offset, - angle: angleInRadians, + yOffset, + sideAngle: angleInRadians, fillColor, strokeColor, radius, diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index e9d244721..5912be5de 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -87,7 +87,7 @@ export interface ShapeBlankParams { /** Radius of the shape's second corner. This is used for shapes that can specify multiple radius values */ radius2?: number; /** Distance from top or bottom edge to vertices. Higher number means pointier top and/or bottom */ - offset?: number; + yOffset?: number; /** Width of the shape's outline */ outlineWidth?: number; /** Specify whether the pointy end of the shape is on top */ @@ -95,7 +95,7 @@ export interface ShapeBlankParams { /** Specify whether the short side of the shape is on top */ shortSideUp?: boolean; /** Specify the angle at which the sides of the shape deviate from vertical. Higher number means pointier sides */ - angle?: number; + sideAngle?: number; } /** Parameters for laying out text on a shield background */ From e41b15155deddd71a667df50e7ee2608ec910ef3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 27 Sep 2023 22:14:33 -0400 Subject: [PATCH 209/444] Convert custom shields to typescript --- .../src/{custom_shields.mjs => custom_shields.ts} | 14 ++++++++++++-- shieldlib/src/shield_canvas_draw.ts | 6 +++--- 2 files changed, 15 insertions(+), 5 deletions(-) rename shieldlib/src/{custom_shields.mjs => custom_shields.ts} (81%) diff --git a/shieldlib/src/custom_shields.mjs b/shieldlib/src/custom_shields.ts similarity index 81% rename from shieldlib/src/custom_shields.mjs rename to shieldlib/src/custom_shields.ts index 939091488..8eccf845b 100644 --- a/shieldlib/src/custom_shields.mjs +++ b/shieldlib/src/custom_shields.ts @@ -1,9 +1,15 @@ "use strict"; import * as ShieldDraw from "./shield_canvas_draw"; +import { ShieldRenderingContext } from "./shield_renderer"; +import { ShapeBlankParams } from "./types"; // Special case for Allegheny, PA Belt System -export function paBelt(r, ctx, params) { +export function paBelt( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams +) { ShieldDraw.roundedRectangle(r, ctx, { fillColor: "white", strokeColor: "black", @@ -36,7 +42,11 @@ export function paBelt(r, ctx, params) { } // Special case for Branson color-coded routes -export function bransonRoute(r, ctx, params) { +export function bransonRoute( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams +) { ShieldDraw.roundedRectangle(r, ctx, { fillColor: "#006747", strokeColor: "white", diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 1d094477c..11057815c 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -5,7 +5,7 @@ */ import * as ShieldText from "./shield_text.mjs"; -import { loadCustomShields } from "./custom_shields.mjs"; +import { loadCustomShields } from "./custom_shields"; import { ShapeDrawFunction, ShieldRenderingContext } from "./shield_renderer"; import { ShapeBlankParams } from "./types"; @@ -115,7 +115,7 @@ export function roundedRectangle( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, params: ShapeBlankParams, - ref: string + ref?: string ) { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -782,7 +782,7 @@ const fixedWidthDefinitions = {}; export function registerDrawFunction( name: string, fxn: ShapeDrawFunction, - fixedWidth?: boolean + fixedWidth?: number ) { drawFunctions[name] = fxn; if (fixedWidth !== undefined) { From e344acc57d0277f28acd745f15b9c7cc8b133a77 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 28 Sep 2023 22:45:06 -0400 Subject: [PATCH 210/444] Convert shield_text to typescript --- shieldlib/src/custom_shields.ts | 8 +- shieldlib/src/screen_gfx.ts | 2 +- shieldlib/src/shield.js | 2 +- shieldlib/src/shield_canvas_draw.ts | 17 +- shieldlib/src/shield_renderer.ts | 4 +- .../src/{shield_text.mjs => shield_text.ts} | 193 ++++++++++++++---- shieldlib/src/types.ts | 12 +- 7 files changed, 180 insertions(+), 58 deletions(-) rename shieldlib/src/{shield_text.mjs => shield_text.ts} (71%) diff --git a/shieldlib/src/custom_shields.ts b/shieldlib/src/custom_shields.ts index 8eccf845b..dcf7da765 100644 --- a/shieldlib/src/custom_shields.ts +++ b/shieldlib/src/custom_shields.ts @@ -9,7 +9,7 @@ export function paBelt( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, params: ShapeBlankParams -) { +): number { ShieldDraw.roundedRectangle(r, ctx, { fillColor: "white", strokeColor: "black", @@ -38,7 +38,7 @@ export function paBelt( ctx.lineWidth = lineWidth; ctx.stroke(); - return ctx; + return 20; } // Special case for Branson color-coded routes @@ -46,7 +46,7 @@ export function bransonRoute( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, params: ShapeBlankParams -) { +): number { ShieldDraw.roundedRectangle(r, ctx, { fillColor: "#006747", strokeColor: "white", @@ -73,7 +73,7 @@ export function bransonRoute( ctx.lineWidth = lineWidth; ctx.stroke(); - return ctx; + return 20; } export function loadCustomShields() { diff --git a/shieldlib/src/screen_gfx.ts b/shieldlib/src/screen_gfx.ts index 225b43420..e3fe2b55c 100644 --- a/shieldlib/src/screen_gfx.ts +++ b/shieldlib/src/screen_gfx.ts @@ -3,7 +3,7 @@ import { StyleImage } from "maplibre-gl"; import rgba from "color-rgba"; const defaultFontFamily = '"sans-serif-condensed", "Arial Narrow", sans-serif'; -export const shieldFont = (size: string, fontFamily: string) => +export const shieldFont = (size: number, fontFamily: string) => `bold ${size}px ${fontFamily || defaultFontFamily}`; export const fontSizeThreshold = 12; diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index 6594d4a95..6a17c72c8 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -1,6 +1,6 @@ "use strict"; -import * as ShieldText from "./shield_text.mjs"; +import * as ShieldText from "./shield_text.js"; import * as ShieldDraw from "./shield_canvas_draw"; import * as Gfx from "./screen_gfx.js"; diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 11057815c..db542f585 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -4,7 +4,7 @@ * Shield blanks which are drawn rather built from raster shield blanks */ -import * as ShieldText from "./shield_text.mjs"; +import * as ShieldText from "./shield_text.js"; import { loadCustomShields } from "./custom_shields"; import { ShapeDrawFunction, ShieldRenderingContext } from "./shield_renderer"; import { ShapeBlankParams } from "./types"; @@ -18,7 +18,7 @@ export function computeWidth( params: ShapeBlankParams, ref: string, shape?: string -) { +): number { if (fixedWidthDefinitions[shape] !== undefined) { return r.px(fixedWidthDefinitions[shape]); } @@ -65,7 +65,7 @@ function ellipse( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -97,7 +97,10 @@ function ellipse( return width; } -export function blank(r: ShieldRenderingContext, ref: string) { +export function blank( + r: ShieldRenderingContext, + ref: string +): CanvasRenderingContext2D { var shieldWidth = ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + r.px(2); @@ -116,7 +119,7 @@ export function roundedRectangle( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref?: string -) { +): number { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -220,7 +223,7 @@ function fishhead( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -270,6 +273,8 @@ function fishhead( ctx.strokeStyle = outline; ctx.stroke(); } + + return width; } function triangle( diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 570dc3aa6..9194feb32 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -48,8 +48,8 @@ export type ShapeDrawFunction = ( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, params: ShapeBlankParams, - ref: string -) => void; + ref?: string +) => number; class MaplibreGLSpriteRepository implements SpriteRepository { map: Map; diff --git a/shieldlib/src/shield_text.mjs b/shieldlib/src/shield_text.ts similarity index 71% rename from shieldlib/src/shield_text.mjs rename to shieldlib/src/shield_text.ts index 964146c2d..a7cd5ca86 100644 --- a/shieldlib/src/shield_text.mjs +++ b/shieldlib/src/shield_text.ts @@ -1,14 +1,57 @@ "use strict"; import * as Gfx from "./screen_gfx.js"; +import { ShieldRenderingContext } from "./shield_renderer.js"; +import { + BoxPadding, + ShieldDefinition, + TextLayout, + TextLayoutParameters, +} from "./types.js"; const VerticalAlignment = { Middle: "middle", Top: "top", Bottom: "bottom", +} as const; + +type VerticalAlignmentType = + (typeof VerticalAlignment)[keyof typeof VerticalAlignment]; + +interface Dimension { + width: number; + height: number; +} + +type TextLayoutScaler = ( + availSize: Dimension, + textSize: Dimension, + options: TextLayoutParameters +) => TextTransform; + +interface TextTransform { + scale: number; + valign: VerticalAlignmentType; +} + +interface TextPlacement { + xBaseline: number; + yBaseline: number; + fontPx: number; +} + +let noPadding: BoxPadding = { + top: 0, + bottom: 0, + left: 0, + right: 0, }; -function ellipseScale(spaceBounds, textBounds) { +let bannerLayout: TextLayout = { + constraintFunc: "rectangle", +}; + +function ellipseScale(spaceBounds: Dimension, textBounds: Dimension): number { //Math derived from https://mathworld.wolfram.com/Ellipse-LineIntersection.html var a = spaceBounds.width; var b = spaceBounds.height; @@ -19,14 +62,20 @@ function ellipseScale(spaceBounds, textBounds) { return (a * b) / Math.sqrt(a * a * y0 * y0 + b * b * x0 * x0); } -function ellipseTextConstraint(spaceBounds, textBounds) { +function ellipseTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { return { scale: ellipseScale(spaceBounds, textBounds), valign: VerticalAlignment.Middle, }; } -function southHalfEllipseTextConstraint(spaceBounds, textBounds) { +function southHalfEllipseTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { return { scale: ellipseScale(spaceBounds, { //Turn ellipse 90 degrees @@ -37,7 +86,10 @@ function southHalfEllipseTextConstraint(spaceBounds, textBounds) { }; } -function rectTextConstraint(spaceBounds, textBounds) { +function rectTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { var scaleHeight = spaceBounds.height / textBounds.height; var scaleWidth = spaceBounds.width / textBounds.width; @@ -47,7 +99,11 @@ function rectTextConstraint(spaceBounds, textBounds) { }; } -function roundedRectTextConstraint(spaceBounds, textBounds, options) { +function roundedRectTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension, + options +): TextTransform { //Shrink space bounds so that corners hit the arcs let constraintRadius = 2; if (options !== undefined && options.radius !== undefined) { @@ -63,7 +119,10 @@ function roundedRectTextConstraint(spaceBounds, textBounds, options) { ); } -function diamondTextConstraint(spaceBounds, textBounds) { +function diamondTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { let a = spaceBounds.width; let b = spaceBounds.height; @@ -76,7 +135,10 @@ function diamondTextConstraint(spaceBounds, textBounds) { }; } -function triangleDownTextConstraint(spaceBounds, textBounds) { +function triangleDownTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { return { scale: diamondTextConstraint(spaceBounds, textBounds).scale, valign: VerticalAlignment.Top, @@ -96,13 +158,13 @@ function triangleDownTextConstraint(spaceBounds, textBounds) { * @returns JOSN object containing (X,Y) draw position and font size */ function layoutShieldText( - r, - text, - padding, - bounds, - textLayoutDef, - maxFontSize -) { + r: ShieldRenderingContext, + text: string, + padding: BoxPadding, + bounds: Dimension, + textLayoutDef: TextLayout, + maxFontSize: number = 14 +): TextPlacement { var padTop = r.px(padding.top) || 0; var padBot = r.px(padding.bottom) || 0; var padLeft = r.px(padding.left) || 0; @@ -147,7 +209,7 @@ function layoutShieldText( metrics = ctx.measureText(text); textHeight = metrics.actualBoundingBoxDescent; - var yBaseline; + let yBaseline: number; switch (textConstraint.valign) { case VerticalAlignment.Top: @@ -163,19 +225,26 @@ function layoutShieldText( } return { - xBaseline: xBaseline, - yBaseline: yBaseline, + xBaseline, + yBaseline, fontPx: fontSize, }; } -const defaultDefForLayout = { +const defaultDefForLayout: ShieldDefinition = { padding: { top: 0, bottom: 0, left: 0, right: 0, }, + shapeBlank: { + drawFunc: "rectangle", + params: { + fillColor: "white", + strokeColor: "black", + }, + }, }; /** @@ -188,13 +257,18 @@ const defaultDefForLayout = { * @param {*} bounds - size of the overall graphics area * @returns JOSN object containing (X,Y) draw position and font size */ -export function layoutShieldTextFromDef(r, text, def, bounds) { +export function layoutShieldTextFromDef( + r: ShieldRenderingContext, + text: string, + def: ShieldDefinition, + bounds: Dimension +): TextPlacement { //FIX if (def == null) { def = defaultDefForLayout; } - var padding = def.padding || {}; + var padding = def.padding || noPadding; var textLayoutDef = { constraintFunc: "rect", @@ -221,7 +295,12 @@ export function layoutShieldTextFromDef(r, text, def, bounds) { * @param {*} text - text to draw * @param {*} textLayout - location to draw text */ -export function renderShieldText(r, ctx, text, textLayout) { +export function renderShieldText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + textLayout: TextPlacement +): void { //Text color is set by fillStyle configureShieldText(r, ctx, textLayout); @@ -236,11 +315,16 @@ export function renderShieldText(r, ctx, text, textLayout) { * @param {*} text - text to draw * @param {*} textLayout - location to draw text */ -export function drawShieldHaloText(r, ctx, text, textLayout) { +export function drawShieldHaloText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + textLayout: TextPlacement +): void { //Stroke color is set by strokeStyle configureShieldText(r, ctx, textLayout); - ctx.shadowColor = ctx.strokeStyle; + ctx.shadowColor = ctx.strokeStyle.toString(); ctx.shadowBlur = 0; ctx.lineWidth = r.px(2); @@ -249,7 +333,11 @@ export function drawShieldHaloText(r, ctx, text, textLayout) { ctx.shadowBlur = null; } -function configureShieldText(r, ctx, textLayout) { +function configureShieldText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + textLayout: TextPlacement +): void { ctx.textAlign = "center"; ctx.textBaseline = "top"; ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); @@ -263,7 +351,12 @@ function configureShieldText(r, ctx, textLayout) { * @param {*} text - text to draw * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ -export function drawBannerText(r, ctx, text, bannerIndex) { +export function drawBannerText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { drawBannerTextComponent(r, ctx, text, bannerIndex, true); } @@ -275,7 +368,12 @@ export function drawBannerText(r, ctx, text, bannerIndex) { * @param {*} text - text to draw * @param {*} bannerIndex - plate position to draw, 0=top, incrementing */ -export function drawBannerHaloText(r, ctx, text, bannerIndex) { +export function drawBannerHaloText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { drawBannerTextComponent(r, ctx, text, bannerIndex, false); } @@ -288,19 +386,32 @@ export function drawBannerHaloText(r, ctx, text, bannerIndex) { * @param {*} bannerIndex - plate position to draw, 0=top, incrementing * @param {*} textComponent - if true, draw the text. If false, draw the halo */ -function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { +function drawBannerTextComponent( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number, + textComponent: boolean +): void { const bannerPadding = { - padding: { - top: r.options.bannerPadding, - bottom: 0, - left: 0, - right: 0, - }, + top: r.options.bannerPadding, + bottom: 0, + left: 0, + right: 0, }; - var textLayout = layoutShieldTextFromDef(r, text, bannerPadding, { + + let bannerBounds: Dimension = { width: ctx.canvas.width, height: r.px(r.options.bannerHeight - r.options.bannerPadding), - }); + }; + + let textLayout: TextPlacement = layoutShieldText( + r, + text, + bannerPadding, + bannerBounds, + bannerLayout + ); ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); ctx.textBaseline = "top"; @@ -330,16 +441,16 @@ function drawBannerTextComponent(r, ctx, text, bannerIndex, textComponent) { } } -export function calculateTextWidth(r, text, fontSize) { +export function calculateTextWidth( + r: ShieldRenderingContext, + text: string, + fontSize: number +): number { var ctx = r.emptySprite(); //dummy canvas ctx.font = Gfx.shieldFont(fontSize, r.options.shieldFont); return Math.ceil(ctx.measureText(text).width); } -export function drawText(name, options, ref) { - return drawTextFunctions[name](options, ref); -} - //Register text draw functions const drawTextFunctions = {}; @@ -349,7 +460,7 @@ const drawTextFunctions = {}; * @param {*} name name of the function as referenced by the shield definition * @param {*} fxn callback to the implementing function. Takes two parameters, ref and options */ -function registerDrawTextFunction(name, fxn) { +function registerDrawTextFunction(name: string, fxn: TextLayoutScaler): void { drawTextFunctions[name] = fxn; } diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 5912be5de..f3ea868b5 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -27,6 +27,8 @@ export interface ShieldDefinitionBase { banners?: string[]; /** If true, no next should be drawn on this shield */ notext?: boolean; + /** Specifies the maximum font size of text on this shield */ + maxFontSize?: number; } /** @@ -98,12 +100,16 @@ export interface ShapeBlankParams { sideAngle?: number; } +/** Parameters for laying out text on a shield */ +export interface TextLayoutParameters { + /** Specify a corner radius to further constrain placement on rectangular shapes */ + radius: number; +} + /** Parameters for laying out text on a shield background */ export interface TextLayout { constraintFunc: string; - options?: { - radius: number; - }; + options?: TextLayoutParameters; } /** From 8978a4d968ad4c17eede92a8d5549ba0eb17ad6d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 2 Oct 2023 22:37:26 -0400 Subject: [PATCH 211/444] Propagate new naming convention --- shieldlib/README.md | 8 +- shieldlib/src/screen_gfx.ts | 2 +- shieldlib/src/shield_canvas_draw.ts | 60 ++-- shieldlib/src/shield_helper.d.ts | 35 +- shieldlib/src/shield_helper.ts | 6 +- shieldlib/src/shield_text.ts | 473 ++++++++++++++++++++++++++++ shieldlib/src/types.ts | 13 +- 7 files changed, 533 insertions(+), 64 deletions(-) create mode 100644 shieldlib/src/shield_text.ts diff --git a/shieldlib/README.md b/shieldlib/README.md index c1f4e6379..1a85ff789 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -127,8 +127,8 @@ You should create one definition entry for each network. The entry key must matc "drawFunc": "pentagon", "params": { "pointUp": false, - "offset": 5, - "angle": 0, + "yOffset": 5, + "sideAngle": 0, "fillColor": "white", "strokeColor": "black", "radius1": 2, @@ -299,9 +299,9 @@ If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to The following `params` options can be specified: -- `angle` - indicates angle (in degrees) at which side edges deviate from vertical. Applies to `trapezoid`, `pentagon`, `hexagonHorizontal`, `octagonVertical`. +- `sideAngle` - indicates angle (in degrees) at which side edges deviate from vertical. Applies to `trapezoid`, `pentagon`, `hexagonHorizontal`, `octagonVertical`. - `fill` - specifies the internal fill color. -- `offset` - indicates height (in pixels) at which the bottom and/or top edges deviate from horizontal. Applies to `escutcheon`, `pentagon`, `hexagonVertical`, `octagonVertical`. +- `yOffset` - indicates height (in pixels) at which the bottom and/or top edges deviate from horizontal. Applies to `escutcheon`, `pentagon`, `hexagonVertical`, `octagonVertical`. - `outline` - specifies the outline color. - `outlineWidth` - specifies the width of the outline. - `pointUp` - applies to several shape types and specifies whether the pointy side is up. diff --git a/shieldlib/src/screen_gfx.ts b/shieldlib/src/screen_gfx.ts index 225b43420..e3fe2b55c 100644 --- a/shieldlib/src/screen_gfx.ts +++ b/shieldlib/src/screen_gfx.ts @@ -3,7 +3,7 @@ import { StyleImage } from "maplibre-gl"; import rgba from "color-rgba"; const defaultFontFamily = '"sans-serif-condensed", "Arial Narrow", sans-serif'; -export const shieldFont = (size: string, fontFamily: string) => +export const shieldFont = (size: number, fontFamily: string) => `bold ${size}px ${fontFamily || defaultFontFamily}`; export const fontSizeThreshold = 12; diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 11057815c..6cfa8154f 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -24,8 +24,8 @@ export function computeWidth( } let rectWidth = params.rectWidth == undefined ? null : params.rectWidth; - let angle = params.sideAngle == undefined ? 0 : params.sideAngle; - let tangent = Math.tan(angle); + let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; + let tangent = Math.tan(sideAngle); if (rectWidth == null) { let shieldWidth = @@ -36,8 +36,8 @@ export function computeWidth( //Shape-specific width adjustments switch (shape) { case "pentagon": - let offset = params.yOffset == undefined ? 0 : params.yOffset; - shieldWidth += ((r.shieldSize() - r.px(offset)) * tangent) / 2; + let yOffset = params.yOffset == undefined ? 0 : params.yOffset; + shieldWidth += ((r.shieldSize() - r.px(yOffset)) * tangent) / 2; break; case "trapezoid": shieldWidth += (r.shieldSize() * tangent) / 2; @@ -164,7 +164,7 @@ function escutcheon( params: ShapeBlankParams, ref: string ) { - let offset = params.yOffset == undefined ? 0 : params.yOffset; + let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -175,7 +175,7 @@ function escutcheon( let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; let drawRadius = r.px(radius); - let drawOffset = r.px(offset); + let drawOffset = r.px(yOffset); let x0 = lineWidth; let x5 = width - lineWidth; @@ -346,16 +346,16 @@ function trapezoid( ) { let shortSideUp = params.shortSideUp == undefined ? false : params.shortSideUp; - let angle = params.sideAngle == undefined ? 0 : params.sideAngle; + let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; let angleSign = shortSideUp ? -1 : 1; - let sine = Math.sin(angle); - let cosine = Math.cos(angle); - let tangent = Math.tan(angle); + let sine = Math.sin(sideAngle); + let cosine = Math.cos(sideAngle); + let tangent = Math.tan(sideAngle); let width = computeWidth(r, params, ref, "trapezoid"); @@ -476,8 +476,8 @@ function pentagon( ref: string ) { let pointUp = params.pointUp == undefined ? true : params.pointUp; - let offset = params.yOffset == undefined ? 0 : params.yOffset; - let angle = params.sideAngle == undefined ? 0 : params.sideAngle; + let yOffset = params.yOffset == undefined ? 0 : params.yOffset; + let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius1 = params.radius1 == undefined ? 0 : params.radius1; @@ -485,9 +485,9 @@ function pentagon( let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; let angleSign = pointUp ? -1 : 1; - let sine = Math.sin(angle); - let cosine = Math.cos(angle); - let tangent = Math.tan(angle); + let sine = Math.sin(sideAngle); + let cosine = Math.cos(sideAngle); + let tangent = Math.tan(sideAngle); let width = computeWidth(r, params, ref, "pentagon"); @@ -495,7 +495,7 @@ function pentagon( let lineWidth = lineThick / 2; let drawRadius1 = r.px(radius1); let drawRadius2 = r.px(radius2); - let drawOffset = r.px(offset); + let drawOffset = r.px(yOffset); let x0 = lineWidth; let x8 = width - lineWidth; @@ -510,10 +510,10 @@ function pentagon( let offsetAngle = Math.atan(drawOffset / (x4 - x0)); - let halfComplementAngle1 = (Math.PI / 2 - offsetAngle + angle) / 2; + let halfComplementAngle1 = (Math.PI / 2 - offsetAngle + sideAngle) / 2; let halfComplementTangent1 = Math.tan(halfComplementAngle1); - let halfComplementAngle2 = (Math.PI / 2 - angle) / 2; + let halfComplementAngle2 = (Math.PI / 2 - sideAngle) / 2; let halfComplementTangent2 = Math.tan(halfComplementAngle2); let x1 = x0 + drawRadius1 * halfComplementTangent1 * sine; @@ -548,7 +548,7 @@ function hexagonVertical( params: ShapeBlankParams, ref: string ) { - let offset = params.yOffset == undefined ? 0 : params.yOffset; + let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -559,7 +559,7 @@ function hexagonVertical( let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; let drawRadius = r.px(radius); - let drawOffset = r.px(offset); + let drawOffset = r.px(yOffset); let x0 = lineWidth; let x2 = width - lineWidth; @@ -668,23 +668,23 @@ function octagonVertical( params: ShapeBlankParams, ref: string ) { - let offset = params.yOffset == undefined ? 0 : params.yOffset; - let angle = params.sideAngle == undefined ? 0 : params.sideAngle; + let yOffset = params.yOffset == undefined ? 0 : params.yOffset; + let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let sine = Math.sin(angle); - let cosine = Math.cos(angle); - let tangent = Math.tan(angle); + let sine = Math.sin(sideAngle); + let cosine = Math.cos(sideAngle); + let tangent = Math.tan(sideAngle); let width = computeWidth(r, params, ref); let lineThick = r.px(outlineWidth); let lineWidth = lineThick / 2; let drawRadius = r.px(radius); - let drawOffset = r.px(offset); + let drawOffset = r.px(yOffset); let x0 = lineWidth; let x10 = width - lineWidth; @@ -707,13 +707,15 @@ function octagonVertical( let offsetSine = Math.sin(offsetAngle); let offsetCosine = Math.cos(offsetAngle); - let halfComplementAngle = (Math.PI / 2 - angle - offsetAngle) / 2; + let halfComplementAngle = (Math.PI / 2 - sideAngle - offsetAngle) / 2; let halfComplementCosine = Math.cos(halfComplementAngle); let dx = - (drawRadius * Math.cos(angle + halfComplementAngle)) / halfComplementCosine; + (drawRadius * Math.cos(sideAngle + halfComplementAngle)) / + halfComplementCosine; let dy = - (drawRadius * Math.sin(angle + halfComplementAngle)) / halfComplementCosine; + (drawRadius * Math.sin(sideAngle + halfComplementAngle)) / + halfComplementCosine; let x2 = x3 + dx - drawRadius * cosine; let x4 = x3 + dx - drawRadius * offsetSine; diff --git a/shieldlib/src/shield_helper.d.ts b/shieldlib/src/shield_helper.d.ts index 64bc9f72e..85c942bee 100644 --- a/shieldlib/src/shield_helper.d.ts +++ b/shieldlib/src/shield_helper.d.ts @@ -24,7 +24,7 @@ export declare function roundedRectShield( ): ShieldDefinition; export declare function escutcheonDownShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -48,16 +48,16 @@ export declare function triangleDownShield( ): ShieldDefinition; export declare function trapezoidDownShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, radius: number, rectWidth: number -); +): ShieldDefinition; export declare function trapezoidUpShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, @@ -74,8 +74,8 @@ export declare function diamondShield( ): ShieldDefinition; export declare function pentagonUpShield( - offset: number, - angle: number, + yOffset: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, @@ -85,7 +85,7 @@ export declare function pentagonUpShield( ): ShieldDefinition; export declare function homePlateDownShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -95,7 +95,7 @@ export declare function homePlateDownShield( ): ShieldDefinition; export declare function homePlateUpShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -105,7 +105,7 @@ export declare function homePlateUpShield( ): ShieldDefinition; export declare function hexagonVerticalShield( - offset: number, + yOffset: number, fillColor: string, strokeColor: string, textColor: string, @@ -113,19 +113,8 @@ export declare function hexagonVerticalShield( rectWidth: number ): ShieldDefinition; -/** - * Draws a shield with a horizontally-aligned hexagon background - * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical - * @param {*} fillColor - Color of hexagon background fill - * @param {*} strokeColor - Color of hexagon outline stroke - * @param {*} textColor - Color of text (defaults to strokeColor) - * @param {*} radius - Corner radius of hexagon (defaults to 2) - * @param {*} rectWidth - Width of hexagon (defaults to variable-width) - * @returns a shield definition object - */ export declare function hexagonHorizontalShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, @@ -134,8 +123,8 @@ export declare function hexagonHorizontalShield( ): ShieldDefinition; export declare function octagonVerticalShield( - offset: number, - angle: number, + yOffset: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index d8e6aebe0..8b34c9e9d 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -568,7 +568,7 @@ export function hexagonVerticalShield( /** * Draws a shield with a horizontally-aligned hexagon background * - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} sideAngle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of hexagon background fill * @param {*} strokeColor - Color of hexagon outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -577,14 +577,14 @@ export function hexagonVerticalShield( * @returns a shield definition object */ export function hexagonHorizontalShield( - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, radius: number, rectWidth: number ): ShieldDefinition { - let angleInRadians = (angle * Math.PI) / 180; + let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 2; return { diff --git a/shieldlib/src/shield_text.ts b/shieldlib/src/shield_text.ts new file mode 100644 index 000000000..e9dc755ef --- /dev/null +++ b/shieldlib/src/shield_text.ts @@ -0,0 +1,473 @@ +"use strict"; + +import * as Gfx from "./screen_gfx.js"; +import { ShieldRenderingContext } from "./shield_renderer.js"; +import { + BoxPadding, + ShieldDefinition, + TextLayout, + TextLayoutParameters, +} from "./types.js"; + +const VerticalAlignment = { + Middle: "middle", + Top: "top", + Bottom: "bottom", +} as const; + +type VerticalAlignmentType = + (typeof VerticalAlignment)[keyof typeof VerticalAlignment]; + +interface Dimension { + width: number; + height: number; +} + +type TextLayoutScaler = ( + availSize: Dimension, + textSize: Dimension, + options?: TextLayoutParameters +) => TextTransform; + +interface TextTransform { + scale: number; + valign: VerticalAlignmentType; +} + +interface TextPlacement { + xBaseline: number; + yBaseline: number; + fontPx: number; +} + +let noPadding: BoxPadding = { + top: 0, + bottom: 0, + left: 0, + right: 0, +}; + +let bannerLayout: TextLayout = { + constraintFunc: "rectangle", +}; + +function ellipseScale(spaceBounds: Dimension, textBounds: Dimension): number { + //Math derived from https://mathworld.wolfram.com/Ellipse-LineIntersection.html + var a = spaceBounds.width; + var b = spaceBounds.height; + + var x0 = textBounds.width; + var y0 = textBounds.height; + + return (a * b) / Math.sqrt(a * a * y0 * y0 + b * b * x0 * x0); +} + +function ellipseTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { + return { + scale: ellipseScale(spaceBounds, textBounds), + valign: VerticalAlignment.Middle, + }; +} + +function southHalfEllipseTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { + return { + scale: ellipseScale(spaceBounds, { + //Turn ellipse 90 degrees + height: textBounds.width / 2, + width: textBounds.height, + }), + valign: VerticalAlignment.Top, + }; +} + +function rectTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { + var scaleHeight = spaceBounds.height / textBounds.height; + var scaleWidth = spaceBounds.width / textBounds.width; + + return { + scale: Math.min(scaleWidth, scaleHeight), + valign: VerticalAlignment.Middle, + }; +} + +function roundedRectTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension, + options: TextLayoutParameters +): TextTransform { + //Shrink space bounds so that corners hit the arcs + let constraintRadius = 2; + if (options !== undefined && options.radius !== undefined) { + constraintRadius = options.radius; + } + + return rectTextConstraint( + { + width: spaceBounds.width - constraintRadius * (2 - Math.sqrt(2)), + height: spaceBounds.height - constraintRadius * (2 - Math.sqrt(2)), + }, + textBounds + ); +} + +function diamondTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { + let a = spaceBounds.width; + let b = spaceBounds.height; + + let x0 = textBounds.width; + let y0 = textBounds.height; + + return { + scale: (a * b) / (b * x0 + a * y0), + valign: VerticalAlignment.Middle, + }; +} + +function triangleDownTextConstraint( + spaceBounds: Dimension, + textBounds: Dimension +): TextTransform { + return { + scale: diamondTextConstraint(spaceBounds, textBounds).scale, + valign: VerticalAlignment.Top, + }; +} + +/** + * Determines the position and font size to draw text so that it fits within + * a bounding box. + * + * @param {*} r - rendering context + * @param {*} text - text to draw + * @param {*} padding - top/bottom/left/right padding around text + * @param {*} bounds - size of the overall graphics area + * @param {*} textLayoutDef - algorithm definition for text scaling + * @param {*} maxFontSize - maximum font size + * @returns JOSN object containing (X,Y) draw position and font size + */ +function layoutShieldText( + r: ShieldRenderingContext, + text: string, + padding: BoxPadding, + bounds: Dimension, + textLayoutDef: TextLayout, + maxFontSize: number = 14 +): TextPlacement { + var padTop = r.px(padding.top) || 0; + var padBot = r.px(padding.bottom) || 0; + var padLeft = r.px(padding.left) || 0; + var padRight = r.px(padding.right) || 0; + + var maxFont = r.px(maxFontSize); + //Temporary canvas for text measurment + var ctx = r.gfxFactory.createGraphics(bounds); + + ctx.font = Gfx.shieldFont(Gfx.fontSizeThreshold, r.options.shieldFont); + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + + var metrics = ctx.measureText(text); + + var textWidth = metrics.width; + var textHeight = metrics.actualBoundingBoxDescent; + + var availHeight = bounds.height - padTop - padBot; + var availWidth = bounds.width - padLeft - padRight; + + var xBaseline = padLeft + availWidth / 2; + + let textLayoutFunc = drawTextFunctions[textLayoutDef.constraintFunc]; + + let textConstraint = textLayoutFunc( + { height: availHeight, width: availWidth }, + { height: textHeight, width: textWidth }, + textLayoutDef.options + ); + + //If size-to-fill shield text is too big, shrink it + var fontSize = Math.min( + maxFont, + Gfx.fontSizeThreshold * textConstraint.scale + ); + + ctx.font = Gfx.shieldFont(fontSize, r.options.shieldFont); + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + + metrics = ctx.measureText(text); + textHeight = metrics.actualBoundingBoxDescent; + + let yBaseline: number; + + switch (textConstraint.valign) { + case VerticalAlignment.Top: + yBaseline = padTop; + break; + case VerticalAlignment.Bottom: + yBaseline = padTop + availHeight - textHeight; + break; + case VerticalAlignment.Middle: + default: + yBaseline = padTop + (availHeight - textHeight) / 2; + break; + } + + return { + xBaseline, + yBaseline, + fontPx: fontSize, + }; +} + +const defaultDefForLayout: ShieldDefinition = { + padding: { + top: 0, + bottom: 0, + left: 0, + right: 0, + }, + shapeBlank: { + drawFunc: "rectangle", + params: { + fillColor: "white", + strokeColor: "black", + }, + }, +}; + +/** + * Determines the position and font size to draw text so that it fits within + * a bounding box. + * + * @param {*} r - rendering context + * @param {*} text - text to draw + * @param {*} def - shield definition + * @param {*} bounds - size of the overall graphics area + * @returns JOSN object containing (X,Y) draw position and font size + */ +export function layoutShieldTextFromDef( + r: ShieldRenderingContext, + text: string, + def: ShieldDefinition, + bounds: Dimension +): TextPlacement { + //FIX + if (def == null) { + def = defaultDefForLayout; + } + + var padding = def.padding || noPadding; + + var textLayoutDef = { + constraintFunc: "rect", + }; + + var maxFontSize = 14; // default max size + + if (typeof def.textLayout != "undefined") { + textLayoutDef = def.textLayout; + } + + if (typeof def.maxFontSize != "undefined") { + maxFontSize = Math.min(maxFontSize, def.maxFontSize); // shield definition cannot set max size higher than default + } + + return layoutShieldText(r, text, padding, bounds, textLayoutDef, maxFontSize); +} + +/** + * Draw text on a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} textLayout - location to draw text + */ +export function renderShieldText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + textLayout: TextPlacement +): void { + //Text color is set by fillStyle + configureShieldText(r, ctx, textLayout); + + ctx.fillText(text, textLayout.xBaseline, textLayout.yBaseline); +} + +/** + * Draw drop shadow for text on a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} textLayout - location to draw text + */ +export function drawShieldHaloText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + textLayout: TextPlacement +): void { + //Stroke color is set by strokeStyle + configureShieldText(r, ctx, textLayout); + + ctx.shadowColor = ctx.strokeStyle.toString(); + ctx.shadowBlur = 0; + ctx.lineWidth = r.px(2); + + ctx.strokeText(text, textLayout.xBaseline, textLayout.yBaseline); + ctx.shadowColor = null; + ctx.shadowBlur = null; +} + +function configureShieldText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + textLayout: TextPlacement +): void { + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); +} + +/** + * Draw text on a modifier plate above a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + */ +export function drawBannerText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { + drawBannerTextComponent(r, ctx, text, bannerIndex, true); +} + +/** + * Draw drop shadow for text on a modifier plate above a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + */ +export function drawBannerHaloText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { + drawBannerTextComponent(r, ctx, text, bannerIndex, false); +} + +/** + * Banners are composed of two components: text on top, and a shadow beneath. + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + * @param {*} textComponent - if true, draw the text. If false, draw the halo + */ +function drawBannerTextComponent( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number, + textComponent: boolean +): void { + const bannerPadding = { + top: r.options.bannerPadding, + bottom: 0, + left: 0, + right: 0, + }; + + let bannerBounds: Dimension = { + width: ctx.canvas.width, + height: r.px(r.options.bannerHeight - r.options.bannerPadding), + }; + + let textLayout: TextPlacement = layoutShieldText( + r, + text, + bannerPadding, + bannerBounds, + bannerLayout + ); + + ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); + ctx.textBaseline = "top"; + ctx.textAlign = "center"; + + if (textComponent) { + ctx.fillStyle = r.options.bannerTextColor; + ctx.fillText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + } else { + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; + ctx.shadowBlur = 0; + ctx.lineWidth = r.px(2); + ctx.strokeText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + + ctx.shadowColor = null; + ctx.shadowBlur = null; + } +} + +export function calculateTextWidth( + r: ShieldRenderingContext, + text: string, + fontSize: number +): number { + var ctx = r.emptySprite(); //dummy canvas + ctx.font = Gfx.shieldFont(fontSize, r.options.shieldFont); + return Math.ceil(ctx.measureText(text).width); +} + +//Register text draw functions +const drawTextFunctions = {}; + +/** + * Invoked by a style to implement a custom draw function + * + * @param {*} name name of the function as referenced by the shield definition + * @param {*} fxn callback to the implementing function. Takes two parameters, ref and options + */ +function registerDrawTextFunction(name: string, fxn: TextLayoutScaler): void { + drawTextFunctions[name] = fxn; +} + +//Built-in draw functions (standard shapes) +registerDrawTextFunction("diamond", diamondTextConstraint); +registerDrawTextFunction("ellipse", ellipseTextConstraint); +registerDrawTextFunction("rect", rectTextConstraint); +registerDrawTextFunction("roundedRect", roundedRectTextConstraint); +registerDrawTextFunction("southHalfEllipse", southHalfEllipseTextConstraint); +registerDrawTextFunction("triangleDown", triangleDownTextConstraint); diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 5912be5de..2c1038dbb 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -27,6 +27,8 @@ export interface ShieldDefinitionBase { banners?: string[]; /** If true, no next should be drawn on this shield */ notext?: boolean; + /** Maximum size of shield text */ + maxFontSize?: number; } /** @@ -98,12 +100,15 @@ export interface ShapeBlankParams { sideAngle?: number; } -/** Parameters for laying out text on a shield background */ +/** Definition for laying out text on a shield background */ export interface TextLayout { constraintFunc: string; - options?: { - radius: number; - }; + options?: TextLayoutParameters; +} + +/** Options for text layout on a shield */ +export interface TextLayoutParameters { + radius: number; } /** From 592a3e9ea5a9fab4b15d00a1bb77ae1366de0573 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 3 Oct 2023 17:34:39 -0400 Subject: [PATCH 212/444] Update shieldlib/src/shield_helper.ts Co-authored-by: Clay Smalley --- shieldlib/src/shield_helper.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 8b34c9e9d..64b141e59 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -613,7 +613,7 @@ export function hexagonHorizontalShield( * Draws a shield with an octagon background * * @param {*} yOffset - Height of diagonal edges - * @param {*} angle - Angle (in degrees) at which sides deviate from vertical + * @param {*} sideAngle - Angle (in degrees) at which sides deviate from vertical * @param {*} fillColor - Color of octagon background fill * @param {*} strokeColor - Color of octagon outline stroke * @param {*} textColor - Color of text (defaults to strokeColor) @@ -623,14 +623,14 @@ export function hexagonHorizontalShield( */ export function octagonVerticalShield( yOffset: number, - angle: number, + sideAngle: number, fillColor: string, strokeColor: string, textColor: string, radius: number, rectWidth: number ): ShieldDefinition { - let angleInRadians = (angle * Math.PI) / 180; + let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 2; return { From 747bd234645789dc3080e7b498937c689e956fc7 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Tue, 3 Oct 2023 17:37:08 -0400 Subject: [PATCH 213/444] npm run code_format on Github workflows --- .github/workflows/deploy-pr-checks.yml | 2 +- .github/workflows/test-build-mac.yml | 6 +++--- .github/workflows/test-build-ubuntu.yml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy-pr-checks.yml b/.github/workflows/deploy-pr-checks.yml index 57babd8e2..19e11ef17 100644 --- a/.github/workflows/deploy-pr-checks.yml +++ b/.github/workflows/deploy-pr-checks.yml @@ -112,7 +112,7 @@ jobs: " > pr_preview.md - uses: tibdex/github-app-token@v1 id: checks_token - with: + with: app_id: 396440 #osm-americana checks app private_key: ${{ secrets.CHECKS_WRITER_SECRET }} - name: Print Preview Links to GitHub Checks diff --git a/.github/workflows/test-build-mac.yml b/.github/workflows/test-build-mac.yml index dbb8781e2..48b473012 100644 --- a/.github/workflows/test-build-mac.yml +++ b/.github/workflows/test-build-mac.yml @@ -10,9 +10,9 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 -# Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. -# See PR #905 and #908 for more details. -# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. + # Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. + # See PR #905 and #908 for more details. + # If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.0. - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index c0515a215..90656f40b 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -10,9 +10,9 @@ jobs: steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 -# Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. -# See PR #905 and #908 for more details. -# If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.1. + # Node v18.17.0, introduced July 18, 2023, introduces an error in unicode processing that breaks test cases on Ubuntu. + # See PR #905 and #908 for more details. + # If this bug is resolved in node, these lines can revert to 18.x rather than 18.16.1. - name: Use Node.js 18.16.1 uses: actions/setup-node@v3 with: From e8addda1c181070f1ef9079180a6962a91a28c51 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 3 Oct 2023 20:28:35 -0400 Subject: [PATCH 214/444] Update package-lock --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbab6f75c..6220c67ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1981,9 +1981,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" From 4a556d14f09d7cbc7fc0da0ee7b4fe64a9eab82c Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 3 Oct 2023 21:02:49 -0400 Subject: [PATCH 215/444] Resolve conflicts --- shieldlib/src/shield_canvas_draw.ts | 37 +++++++++++++---------------- shieldlib/src/shield_text.ts | 4 ---- shieldlib/src/types.ts | 4 ---- 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 03960659c..68bede46b 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -4,7 +4,7 @@ * Shield blanks which are drawn rather built from raster shield blanks */ -import * as ShieldText from "./shield_text.js"; +import * as ShieldText from "./shield_text.mjs"; import { loadCustomShields } from "./custom_shields"; import { ShapeDrawFunction, ShieldRenderingContext } from "./shield_renderer"; import { ShapeBlankParams } from "./types"; @@ -18,7 +18,7 @@ export function computeWidth( params: ShapeBlankParams, ref: string, shape?: string -): number { +) { if (fixedWidthDefinitions[shape] !== undefined) { return r.px(fixedWidthDefinitions[shape]); } @@ -97,10 +97,7 @@ function ellipse( return width; } -export function blank( - r: ShieldRenderingContext, - ref: string -): CanvasRenderingContext2D { +export function blank(r: ShieldRenderingContext, ref: string) { var shieldWidth = ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + r.px(2); @@ -166,7 +163,7 @@ function escutcheon( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -282,7 +279,7 @@ function triangle( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let pointUp = params.pointUp == undefined ? false : params.pointUp; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -348,7 +345,7 @@ function trapezoid( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let shortSideUp = params.shortSideUp == undefined ? false : params.shortSideUp; let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; @@ -410,7 +407,7 @@ function diamond( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; @@ -479,7 +476,7 @@ function pentagon( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let pointUp = params.pointUp == undefined ? true : params.pointUp; let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; @@ -552,7 +549,7 @@ function hexagonVertical( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; @@ -606,17 +603,17 @@ function hexagonHorizontal( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { - let angle = params.sideAngle == undefined ? 0 : params.sideAngle; +): number { + let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; let outline = params.strokeColor == undefined ? "black" : params.strokeColor; let radius = params.radius == undefined ? 0 : params.radius; let outlineWidth = params.outlineWidth == undefined ? 1 : params.outlineWidth; - let sine = Math.sin(angle); - let cosine = Math.cos(angle); - let tangent = Math.tan(angle); - let halfComplementTangent = Math.tan(Math.PI / 4 - angle / 2); + let sine = Math.sin(sideAngle); + let cosine = Math.cos(sideAngle); + let tangent = Math.tan(sideAngle); + let halfComplementTangent = Math.tan(Math.PI / 4 - sideAngle / 2); let width = computeWidth(r, params, ref, "hexagonHorizontal"); @@ -672,7 +669,7 @@ function octagonVertical( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { let yOffset = params.yOffset == undefined ? 0 : params.yOffset; let sideAngle = params.sideAngle == undefined ? 0 : params.sideAngle; let fill = params.fillColor == undefined ? "white" : params.fillColor; @@ -769,7 +766,7 @@ export function draw( ctx: CanvasRenderingContext2D, params: ShapeBlankParams, ref: string -) { +): number { return drawFunctions[name](r, ctx, params, ref); } diff --git a/shieldlib/src/shield_text.ts b/shieldlib/src/shield_text.ts index 197de1170..e9dc755ef 100644 --- a/shieldlib/src/shield_text.ts +++ b/shieldlib/src/shield_text.ts @@ -102,11 +102,7 @@ function rectTextConstraint( function roundedRectTextConstraint( spaceBounds: Dimension, textBounds: Dimension, -<<<<<<< HEAD - options -======= options: TextLayoutParameters ->>>>>>> main ): TextTransform { //Shrink space bounds so that corners hit the arcs let constraintRadius = 2; diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index c8ad67db6..2c1038dbb 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -27,11 +27,7 @@ export interface ShieldDefinitionBase { banners?: string[]; /** If true, no next should be drawn on this shield */ notext?: boolean; -<<<<<<< HEAD - /** Specifies the maximum font size of text on this shield */ -======= /** Maximum size of shield text */ ->>>>>>> main maxFontSize?: number; } From 8e0aba9c71473579c3364681ea1100a44304a124 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 3 Oct 2023 21:53:11 -0400 Subject: [PATCH 216/444] Consolidate shield banner code --- shieldlib/src/shield.js | 36 ++---- shieldlib/src/shield_banner.ts | 171 ++++++++++++++++++++++++++++ shieldlib/src/shield_canvas_draw.ts | 2 +- shieldlib/src/shield_text.ts | 114 +------------------ shieldlib/src/types.d.ts | 5 + shieldlib/src/types.ts | 5 + shieldlib/tsconfig.json | 2 +- 7 files changed, 195 insertions(+), 140 deletions(-) create mode 100644 shieldlib/src/shield_banner.ts diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index 6a17c72c8..dd15c53d0 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -1,20 +1,13 @@ "use strict"; import * as ShieldText from "./shield_text.js"; -import * as ShieldDraw from "./shield_canvas_draw"; +import * as ShieldDraw from "./shield_canvas_draw.js"; import * as Gfx from "./screen_gfx.js"; - -function drawBannerPart(r, ctx, shieldDef, drawFunc) { - if (shieldDef == null || typeof shieldDef.banners == "undefined") { - return ctx; //Unadorned shield - } - - for (var i = 0; i < shieldDef.banners.length; i++) { - drawFunc(r, ctx, shieldDef.banners[i], i); - } - - return ctx; -} +import { + drawBanners, + drawBannerHalos, + getBannerCount, +} from "./shield_banner.js"; function compoundShieldSize(r, dimension, bannerCount) { return { @@ -29,19 +22,6 @@ export function isValidRef(ref) { return ref !== null && ref.length !== 0 && ref.length <= 6; } -/** - * Get the number of banner placards associated with this shield - * - * @param {*} shield - Shield definition - * @returns the number of banner placards that need to be drawn - */ -function getBannerCount(shield) { - if (shield == null || typeof shield.banners == "undefined") { - return 0; //Unadorned shield - } - return shield.banners.length; -} - /** * Retrieve the shield blank that goes with a particular route. If there are * multiple shields for a route (different widths), it picks the best shield. @@ -359,7 +339,7 @@ export function generateShieldCtx(r, routeDef) { } // Add the halo around modifier plaque text - drawBannerPart(r, ctx, shieldDef, ShieldText.drawBannerHaloText); + drawBannerHalos(r, ctx, shieldDef); if (sourceSprite == null) { drawShield(r, ctx, shieldDef, routeDef); @@ -378,7 +358,7 @@ export function generateShieldCtx(r, routeDef) { drawShieldText(r, ctx, shieldDef, routeDef); // Add modifier plaque text - drawBannerPart(r, ctx, shieldDef, ShieldText.drawBannerText); + drawBanners(r, ctx, shieldDef); return ctx; } diff --git a/shieldlib/src/shield_banner.ts b/shieldlib/src/shield_banner.ts new file mode 100644 index 000000000..c7f76696e --- /dev/null +++ b/shieldlib/src/shield_banner.ts @@ -0,0 +1,171 @@ +import { shieldFont } from "./screen_gfx"; +import { ShieldRenderingContext } from "./shield_renderer"; +import { TextPlacement, layoutShieldText } from "./shield_text"; +import { Dimension, ShieldDefinition, TextLayout } from "./types"; + +let bannerLayout: TextLayout = { + constraintFunc: "rect", +}; + +/** + * Add modifier plaque text + * + * @param r - Shield rendering context + * @param ctx - Canvas drawing context + * @param shieldDef - Shield definition + */ +export function drawBanners( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + shieldDef: ShieldDefinition +) { + drawBannerPart(r, ctx, shieldDef, drawBannerText); +} + +/** + * Add the halo around modifier plaque text + * + * @param r - Shield rendering context + * @param ctx - Canvas drawing context + * @param shieldDef - Shield definition + */ +export function drawBannerHalos( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + shieldDef: ShieldDefinition +) { + drawBannerPart(r, ctx, shieldDef, drawBannerHaloText); +} + +type BannerDrawComponentFunction = ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +) => void; + +function drawBannerPart( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + shieldDef: ShieldDefinition, + drawFunc: BannerDrawComponentFunction +): void { + if (shieldDef == null || typeof shieldDef.banners == "undefined") { + return; //Unadorned shield + } + + for (var i = 0; i < shieldDef.banners.length; i++) { + drawFunc(r, ctx, shieldDef.banners[i], i); + } +} + +/** + * Get the number of banner placards associated with this shield + * + * @param shield - Shield definition + * @returns the number of banner placards that need to be drawn + */ +export function getBannerCount(shield: ShieldDefinition): number { + if (shield == null || typeof shield.banners == "undefined") { + return 0; //Unadorned shield + } + return shield.banners.length; +} + +/** + * Draw text on a modifier plate above a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + */ +export function drawBannerText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { + drawBannerTextComponent(r, ctx, text, bannerIndex, true); +} + +/** + * Draw drop shadow for text on a modifier plate above a shield + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + */ +export function drawBannerHaloText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number +): void { + drawBannerTextComponent(r, ctx, text, bannerIndex, false); +} + +/** + * Banners are composed of two components: text on top, and a shadow beneath. + * + * @param {*} r - rendering context + * @param {*} ctx - graphics context to draw to + * @param {*} text - text to draw + * @param {*} bannerIndex - plate position to draw, 0=top, incrementing + * @param {*} textComponent - if true, draw the text. If false, draw the halo + */ +function drawBannerTextComponent( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + text: string, + bannerIndex: number, + textComponent: boolean +): void { + const bannerPadding = { + top: r.options.bannerPadding, + bottom: 0, + left: 0, + right: 0, + }; + + let bannerBounds: Dimension = { + width: ctx.canvas.width, + height: r.px(r.options.bannerHeight - r.options.bannerPadding), + }; + + let textLayout: TextPlacement = layoutShieldText( + r, + text, + bannerPadding, + bannerBounds, + bannerLayout + ); + + ctx.font = shieldFont(textLayout.fontPx, r.options.shieldFont); + ctx.textBaseline = "top"; + ctx.textAlign = "center"; + + if (textComponent) { + ctx.fillStyle = r.options.bannerTextColor; + ctx.fillText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + } else { + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; + ctx.shadowBlur = 0; + ctx.lineWidth = r.px(2); + ctx.strokeText( + text, + textLayout.xBaseline, + textLayout.yBaseline + + bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) + ); + + ctx.shadowColor = null; + ctx.shadowBlur = null; + } +} diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 68bede46b..d79160fc5 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -4,7 +4,7 @@ * Shield blanks which are drawn rather built from raster shield blanks */ -import * as ShieldText from "./shield_text.mjs"; +import * as ShieldText from "./shield_text"; import { loadCustomShields } from "./custom_shields"; import { ShapeDrawFunction, ShieldRenderingContext } from "./shield_renderer"; import { ShapeBlankParams } from "./types"; diff --git a/shieldlib/src/shield_text.ts b/shieldlib/src/shield_text.ts index e9dc755ef..350f7f02c 100644 --- a/shieldlib/src/shield_text.ts +++ b/shieldlib/src/shield_text.ts @@ -4,6 +4,7 @@ import * as Gfx from "./screen_gfx.js"; import { ShieldRenderingContext } from "./shield_renderer.js"; import { BoxPadding, + Dimension, ShieldDefinition, TextLayout, TextLayoutParameters, @@ -18,11 +19,6 @@ const VerticalAlignment = { type VerticalAlignmentType = (typeof VerticalAlignment)[keyof typeof VerticalAlignment]; -interface Dimension { - width: number; - height: number; -} - type TextLayoutScaler = ( availSize: Dimension, textSize: Dimension, @@ -34,7 +30,7 @@ interface TextTransform { valign: VerticalAlignmentType; } -interface TextPlacement { +export interface TextPlacement { xBaseline: number; yBaseline: number; fontPx: number; @@ -47,10 +43,6 @@ let noPadding: BoxPadding = { right: 0, }; -let bannerLayout: TextLayout = { - constraintFunc: "rectangle", -}; - function ellipseScale(spaceBounds: Dimension, textBounds: Dimension): number { //Math derived from https://mathworld.wolfram.com/Ellipse-LineIntersection.html var a = spaceBounds.width; @@ -157,7 +149,7 @@ function triangleDownTextConstraint( * @param {*} maxFontSize - maximum font size * @returns JOSN object containing (X,Y) draw position and font size */ -function layoutShieldText( +export function layoutShieldText( r: ShieldRenderingContext, text: string, padding: BoxPadding, @@ -239,7 +231,7 @@ const defaultDefForLayout: ShieldDefinition = { right: 0, }, shapeBlank: { - drawFunc: "rectangle", + drawFunc: "rect", params: { fillColor: "white", strokeColor: "black", @@ -343,104 +335,6 @@ function configureShieldText( ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); } -/** - * Draw text on a modifier plate above a shield - * - * @param {*} r - rendering context - * @param {*} ctx - graphics context to draw to - * @param {*} text - text to draw - * @param {*} bannerIndex - plate position to draw, 0=top, incrementing - */ -export function drawBannerText( - r: ShieldRenderingContext, - ctx: CanvasRenderingContext2D, - text: string, - bannerIndex: number -): void { - drawBannerTextComponent(r, ctx, text, bannerIndex, true); -} - -/** - * Draw drop shadow for text on a modifier plate above a shield - * - * @param {*} r - rendering context - * @param {*} ctx - graphics context to draw to - * @param {*} text - text to draw - * @param {*} bannerIndex - plate position to draw, 0=top, incrementing - */ -export function drawBannerHaloText( - r: ShieldRenderingContext, - ctx: CanvasRenderingContext2D, - text: string, - bannerIndex: number -): void { - drawBannerTextComponent(r, ctx, text, bannerIndex, false); -} - -/** - * Banners are composed of two components: text on top, and a shadow beneath. - * - * @param {*} r - rendering context - * @param {*} ctx - graphics context to draw to - * @param {*} text - text to draw - * @param {*} bannerIndex - plate position to draw, 0=top, incrementing - * @param {*} textComponent - if true, draw the text. If false, draw the halo - */ -function drawBannerTextComponent( - r: ShieldRenderingContext, - ctx: CanvasRenderingContext2D, - text: string, - bannerIndex: number, - textComponent: boolean -): void { - const bannerPadding = { - top: r.options.bannerPadding, - bottom: 0, - left: 0, - right: 0, - }; - - let bannerBounds: Dimension = { - width: ctx.canvas.width, - height: r.px(r.options.bannerHeight - r.options.bannerPadding), - }; - - let textLayout: TextPlacement = layoutShieldText( - r, - text, - bannerPadding, - bannerBounds, - bannerLayout - ); - - ctx.font = Gfx.shieldFont(textLayout.fontPx, r.options.shieldFont); - ctx.textBaseline = "top"; - ctx.textAlign = "center"; - - if (textComponent) { - ctx.fillStyle = r.options.bannerTextColor; - ctx.fillText( - text, - textLayout.xBaseline, - textLayout.yBaseline + - bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) - ); - } else { - ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; - ctx.shadowBlur = 0; - ctx.lineWidth = r.px(2); - ctx.strokeText( - text, - textLayout.xBaseline, - textLayout.yBaseline + - bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) - ); - - ctx.shadowColor = null; - ctx.shadowBlur = null; - } -} - export function calculateTextWidth( r: ShieldRenderingContext, text: string, diff --git a/shieldlib/src/types.d.ts b/shieldlib/src/types.d.ts index 363863df1..a81c725ad 100644 --- a/shieldlib/src/types.d.ts +++ b/shieldlib/src/types.d.ts @@ -56,3 +56,8 @@ export interface GraphicsFactory { */ pixelRatio(): number; } + +export interface Dimension { + width: number; + height: number; +} diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 2c1038dbb..20b4f2fed 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -218,3 +218,8 @@ export interface GraphicsFactory { */ pixelRatio(): number; } + +export interface Dimension { + width: number; + height: number; +} diff --git a/shieldlib/tsconfig.json b/shieldlib/tsconfig.json index db5212aa2..1204f7fe6 100644 --- a/shieldlib/tsconfig.json +++ b/shieldlib/tsconfig.json @@ -11,5 +11,5 @@ "experimentalSpecifierResolution": "node" }, "exclude": ["node_modules", "**/*.json"], - "include": ["src/**/*.ts", "scripts/**.ts"] + "include": ["src/**/*.ts", "scripts/**.ts", "src/shield.js", "src/shield.js"] } From 0f569ac7c937ad50fae61af5cf1a540f667287d8 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 3 Oct 2023 22:22:54 -0400 Subject: [PATCH 217/444] Add Vermont green banner --- shieldlib/src/shield_banner.ts | 12 ++++++++++-- shieldlib/src/shield_helper.d.ts | 3 ++- shieldlib/src/shield_helper.ts | 4 +++- shieldlib/src/types.ts | 4 ++++ src/js/shield_defs.js | 7 ++++++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/shieldlib/src/shield_banner.ts b/shieldlib/src/shield_banner.ts index c7f76696e..7be6afd74 100644 --- a/shieldlib/src/shield_banner.ts +++ b/shieldlib/src/shield_banner.ts @@ -19,6 +19,11 @@ export function drawBanners( ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition ) { + if (shieldDef.bannerColor) { + ctx.fillStyle = shieldDef.bannerColor; + } else { + ctx.fillStyle = r.options.bannerTextColor; + } drawBannerPart(r, ctx, shieldDef, drawBannerText); } @@ -34,6 +39,11 @@ export function drawBannerHalos( ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition ) { + if (shieldDef.bannerHaloColor) { + ctx.strokeStyle = ctx.shadowColor = shieldDef.bannerHaloColor; + } else { + ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; + } drawBannerPart(r, ctx, shieldDef, drawBannerHaloText); } @@ -147,7 +157,6 @@ function drawBannerTextComponent( ctx.textAlign = "center"; if (textComponent) { - ctx.fillStyle = r.options.bannerTextColor; ctx.fillText( text, textLayout.xBaseline, @@ -155,7 +164,6 @@ function drawBannerTextComponent( bannerIndex * r.px(r.options.bannerHeight - r.options.bannerPadding) ); } else { - ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; ctx.shadowBlur = 0; ctx.lineWidth = r.px(2); ctx.strokeText( diff --git a/shieldlib/src/shield_helper.d.ts b/shieldlib/src/shield_helper.d.ts index 85c942bee..177bf9a22 100644 --- a/shieldlib/src/shield_helper.d.ts +++ b/shieldlib/src/shield_helper.d.ts @@ -141,5 +141,6 @@ export declare function pillShield( export function banneredShield( baseDef: ShieldDefinition, - banners: string[] + banners: string[], + bannerColor?: string ): ShieldDefinition; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 64b141e59..11b165f83 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -702,10 +702,12 @@ export function pillShield( */ export function banneredShield( baseDef: ShieldDefinition, - banners: string[] + banners: string[], + bannerColor?: string ): ShieldDefinition { return { banners, + bannerColor, ...baseDef, }; } diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 20b4f2fed..41b8363bd 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -19,6 +19,10 @@ export type Exclusive = export interface ShieldDefinitionBase { /** Color of text drawn on a shield */ textColor?: string; + /** Color of banner text */ + bannerColor?: string; + /** Color of banner text halo */ + bannerHaloColor?: string; /** Padding around shield text */ padding?: BoxPadding; /** Algorithm for expanding text to fill a shield background */ diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 54b34f5e8..61b43b446 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2428,7 +2428,12 @@ export function loadShields() { bottom: 2, }, }; - shields["US:VT:Alternate"] = banneredShield(shields["US:VT"], ["ALT"]); + shields["US:VT:Alternate"] = banneredShield( + shields["US:VT"], + ["ALT"], + Color.shields.green + ); + // Vermont routes town maintained sections - black and white ovals shields["US:VT:Town"] = ovalShield(Color.shields.white, Color.shields.black); From e012efa8715cde4fe46c00f2ec0fe122ddfadc1f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 18:29:09 -0400 Subject: [PATCH 218/444] Update docs and naming convention --- shieldlib/README.md | 4 ++++ shieldlib/src/shield_banner.ts | 8 ++++---- shieldlib/src/shield_helper.ts | 2 +- shieldlib/src/types.ts | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 1a85ff789..988dcd3db 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -136,6 +136,8 @@ You should create one definition entry for each network. The entry key must matc } }, "banners": ["ALT"], + "bannerTextColor": "#000", + "bannerTextHaloColor": "#FFF", "textLayout": { "constraintFunc": "roundedRect", "options": { @@ -173,6 +175,8 @@ You should create one definition entry for each network. The entry key must matc ![Bannered routes near Downington, PA](https://wiki.openstreetmap.org/w/images/f/f8/Downington_bannered_routes_Americana.png) +- **`bannerTextColor`**: specify the color of the banner text. +- **`bannerTextHaloColor`**: specify the color of the banner knockout halo. - **`textLayout`**: specify how text should be inscribed within the padded bounds of the shield. The text will be drawn at the maximum size allowed by this constraint. See the [text layout functions](#text-layout-functions) section for text layout options. - **`colorLighten`**: specify that the shield artwork should be lightened (multiplied) by the specified color. This means that black areas will be recolor with this color and white areas will remain the same. Alpha values will remain unmodified. - **`colorDarken`**: specify that the shield artwork should be darkened by the specified color. This means that white areas will be recolor with this color and black areas will remain the same. Alpha values will remain unmodified. diff --git a/shieldlib/src/shield_banner.ts b/shieldlib/src/shield_banner.ts index 7be6afd74..6961865b5 100644 --- a/shieldlib/src/shield_banner.ts +++ b/shieldlib/src/shield_banner.ts @@ -19,8 +19,8 @@ export function drawBanners( ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition ) { - if (shieldDef.bannerColor) { - ctx.fillStyle = shieldDef.bannerColor; + if (shieldDef.bannerTextColor) { + ctx.fillStyle = shieldDef.bannerTextColor; } else { ctx.fillStyle = r.options.bannerTextColor; } @@ -39,8 +39,8 @@ export function drawBannerHalos( ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition ) { - if (shieldDef.bannerHaloColor) { - ctx.strokeStyle = ctx.shadowColor = shieldDef.bannerHaloColor; + if (shieldDef.bannerTextHaloColor) { + ctx.strokeStyle = ctx.shadowColor = shieldDef.bannerTextHaloColor; } else { ctx.strokeStyle = ctx.shadowColor = r.options.bannerTextHaloColor; } diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index 11b165f83..f70c8b0b4 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -707,7 +707,7 @@ export function banneredShield( ): ShieldDefinition { return { banners, - bannerColor, + bannerTextColor: bannerColor, ...baseDef, }; } diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 41b8363bd..63ae4ff1d 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -20,9 +20,9 @@ export interface ShieldDefinitionBase { /** Color of text drawn on a shield */ textColor?: string; /** Color of banner text */ - bannerColor?: string; + bannerTextColor?: string; /** Color of banner text halo */ - bannerHaloColor?: string; + bannerTextHaloColor?: string; /** Padding around shield text */ padding?: BoxPadding; /** Algorithm for expanding text to fill a shield background */ From 3a091683a335f84b396bf7ba345b09e98c5e4a76 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 18:38:42 -0400 Subject: [PATCH 219/444] Add US:Historic banner color --- src/js/shield_defs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 61b43b446..57e071453 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -509,7 +509,8 @@ export function loadShields() { textColor: Color.shields.brown, colorLighten: Color.shields.brown, }, - ["HIST"] + ["HIST"], + Color.shields.brown ); // Federal Agencies From 8814367cd5e7d651e20c886249ffca55406cb3c2 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 20:59:09 -0400 Subject: [PATCH 220/444] Add script to generate samples --- .gitignore | 1 + package-lock.json | 46 ++++++++++++++++++++ package.json | 1 + scripts/generate_samples.ts | 85 +++++++++++++++++++++++++++++++++++++ src/js/shield_defs.js | 2 +- test/sample_locations.json | 44 +++++++++++++++++++ 6 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 scripts/generate_samples.ts create mode 100644 test/sample_locations.json diff --git a/.gitignore b/.gitignore index 3c0c0b15a..48c6367be 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ dist download local.config.js shieldlib/docs +samples diff --git a/package-lock.json b/package-lock.json index 6220c67ff..aab615aa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@basemaps/sprites": "^6.41.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", + "@playwright/test": "^1.38.1", "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", @@ -569,6 +570,21 @@ "gl-style-validate": "bin/gl-style-validate.js" } }, + "node_modules/@playwright/test": { + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", + "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", + "dev": true, + "dependencies": { + "playwright": "1.38.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -3789,6 +3805,36 @@ "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, + "node_modules/playwright": { + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", + "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", + "dev": true, + "dependencies": { + "playwright-core": "1.38.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", + "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/potpack": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", diff --git a/package.json b/package.json index dfa558db8..e21963aa6 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "@basemaps/sprites": "^6.41.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", + "@playwright/test": "^1.38.1", "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts new file mode 100644 index 000000000..0d47d0b73 --- /dev/null +++ b/scripts/generate_samples.ts @@ -0,0 +1,85 @@ +import fs from "fs"; +import { chromium } from "@playwright/test"; + +// Declare a global augmentation for the Window interface +declare global { + interface Window { + map: { + loaded: () => boolean; + }; + } +} + +type LocationClip = { + x: number; + y: number; + width: number; + height: number; +}; + +type SampleSpecification = { + location: string; + name: string; + viewport: { + width: number; + height: number; + }; + clip: LocationClip; +}; + +// Load list of locations to take map screenshots +const loadSampleLocations = (filePath: string): SampleSpecification[] => { + const rawData = fs.readFileSync(filePath, "utf8"); + return JSON.parse(rawData); +}; + +const sampleFolder = "./samples"; + +const screenshots: SampleSpecification[] = loadSampleLocations( + "test/sample_locations.json" +); + +fs.mkdirSync(sampleFolder, { recursive: true }); + +const browser = await chromium.launch({ headless: true }); +const context = await browser.newContext(); + +const page = await context.newPage(); + +for (const screenshot of screenshots) { + // Set viewport and double deviceScaleFactor to get a closer shot of the map + await page.setViewportSize(screenshot.viewport); + + await createImage(screenshot); +} + +async function createImage(screenshot: SampleSpecification) { + await page.goto(`http://localhost:1776/#map=${screenshot.location}`); + + // Wait for map to load, then wait two more seconds for images, etc. to load. + try { + await page.waitForFunction(() => window.map && window.map.loaded(), { + timeout: 3000, + }); + + // Wait for 1.5 seconds on 3D model examples, since this takes longer to load. + const waitTime = 1500; + console.log(`waiting for ${waitTime} ms`); + await page.waitForTimeout(waitTime); + } catch (e) { + console.log(`Timed out waiting for map load`); + } + + try { + await page.screenshot({ + path: `${sampleFolder}/${screenshot.name}.png`, + type: "png", + clip: screenshot.clip, + }); + console.log(`Created ${sampleFolder}/${screenshot.name}.png`); + } catch (err) { + console.log(err); + } +} + +await browser.close(); diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 54b34f5e8..45d61b376 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -509,7 +509,7 @@ export function loadShields() { textColor: Color.shields.brown, colorLighten: Color.shields.brown, }, - ["HIST"] + ["HI$T"] ); // Federal Agencies diff --git a/test/sample_locations.json b/test/sample_locations.json new file mode 100644 index 000000000..81272a54e --- /dev/null +++ b/test/sample_locations.json @@ -0,0 +1,44 @@ +[ + { + "location": "4/40.5/-94", + "name": "full_window", + "viewport": { + "width": 600, + "height": 250 + }, + "clip": { + "x": 0, + "y": 0, + "width": 600, + "height": 250 + } + }, + { + "location": "13/40.01264/-75.70446", + "name": "downingtown_alt_trk_bus", + "viewport": { + "width": 600, + "height": 600 + }, + "clip": { + "x": 100, + "y": 100, + "width": 400, + "height": 400 + } + }, + { + "location": "13/35.22439/-99.99495", + "name": "historic_us66_oklahoma", + "viewport": { + "width": 600, + "height": 600 + }, + "clip": { + "x": 100, + "y": 100, + "width": 400, + "height": 400 + } + } +] From 2b76f2ec2d410019da5e21e8637f209794773449 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 21:17:54 -0400 Subject: [PATCH 221/444] Add run script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e21963aa6..3d6d81467 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", "extract_layer": "node scripts/extract_layer", + "generate_samples": "npx playwright install && ts-node scripts/generate_samples.ts", "presprites": "shx rm -rf dist/sprites", "serve": "ts-node scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", From 232f42a307b79d9d44c6d1d18a540e87ad7d33cf Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 21:18:24 -0400 Subject: [PATCH 222/444] Add example diff for CI --- src/js/shield_defs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 45d61b376..e4484904f 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -509,7 +509,7 @@ export function loadShields() { textColor: Color.shields.brown, colorLighten: Color.shields.brown, }, - ["HI$T"] + ["XXXX"] //FOR TESTING - RESTORE TO HIST BEFORE COMMITTING PR ); // Federal Agencies From bad9eec43c0bed602b95f9ce59938293289aca5a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 21:28:30 -0400 Subject: [PATCH 223/444] Add sample generation --- .github/workflows/build-preview.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 78cded610..ea9bb89fa 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -29,6 +29,12 @@ jobs: npm run style npm run shields cp src/configs/config.aws.js src/config.js + npm start & + BACKGROUND_PID=$! + sleep 5 + npm run generate_samples + kill $BACKGROUND_PID + mv samples samples-main - name: Capture main branch usage statistics id: main-stats run: | @@ -52,6 +58,12 @@ jobs: cp src/configs/config.aws.js src/config.js mkdir -p dist/shield-docs cp -r shieldlib/docs/* dist/shield-docs + npm start & + BACKGROUND_PID=$! + sleep 5 + npm run generate_samples + kill $BACKGROUND_PID + mv samples samples-pr - name: Upload Build artifact uses: actions/upload-artifact@v3 with: From 08d443c2dba442e6ab92c04db861eb5c20782126 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 21:49:24 -0400 Subject: [PATCH 224/444] Restore CI --- .github/workflows/build-preview.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ea9bb89fa..78cded610 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -29,12 +29,6 @@ jobs: npm run style npm run shields cp src/configs/config.aws.js src/config.js - npm start & - BACKGROUND_PID=$! - sleep 5 - npm run generate_samples - kill $BACKGROUND_PID - mv samples samples-main - name: Capture main branch usage statistics id: main-stats run: | @@ -58,12 +52,6 @@ jobs: cp src/configs/config.aws.js src/config.js mkdir -p dist/shield-docs cp -r shieldlib/docs/* dist/shield-docs - npm start & - BACKGROUND_PID=$! - sleep 5 - npm run generate_samples - kill $BACKGROUND_PID - mv samples samples-pr - name: Upload Build artifact uses: actions/upload-artifact@v3 with: From 175317a5bc2b6bbeb498173d3cac964eeaaa7374 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 21:49:45 -0400 Subject: [PATCH 225/444] Restore shield deltas --- src/js/shield_defs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index e4484904f..54b34f5e8 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -509,7 +509,7 @@ export function loadShields() { textColor: Color.shields.brown, colorLighten: Color.shields.brown, }, - ["XXXX"] //FOR TESTING - RESTORE TO HIST BEFORE COMMITTING PR + ["HIST"] ); // Federal Agencies From 5c3fb07850cbbdb5637d827952f86927fc95bb5f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 22:00:57 -0400 Subject: [PATCH 226/444] Update scripts and docs --- dev/README.md | 7 +++++++ scripts/generate_samples.ts | 9 ++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dev/README.md b/dev/README.md index 2ec39e467..2ea16c39e 100644 --- a/dev/README.md +++ b/dev/README.md @@ -11,3 +11,10 @@ The highway shield [color palette](americana.gpl) can be imported into Inkscape 3. Import [americana.gpl](americana.gpl). 4. Restart Inkscape. 5. Click the โ—€ button to the right of the color palette strip at the bottom of the window (or in the top-right corner of the Color Palette panel), then choose americana.gpl from the menu. + +## Map sample images + +Map sample images can be generated with a script. See [sample_locations.json](test/sample_locations.json) for the format. + +1. Create a JSON file with the map location and clipping rectangles +2. Run the generate_samples script and pass the JSON file location: `npm run generate_samples -- test/sample_locations.json`` diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 0d47d0b73..f9b920dc0 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -35,9 +35,12 @@ const loadSampleLocations = (filePath: string): SampleSpecification[] => { const sampleFolder = "./samples"; -const screenshots: SampleSpecification[] = loadSampleLocations( - "test/sample_locations.json" -); +const jsonSampleLocations = process.argv[2] || "test/sample_locations.json"; + +console.log(`Loading sample locations from ${jsonSampleLocations}`); + +const screenshots: SampleSpecification[] = + loadSampleLocations(jsonSampleLocations); fs.mkdirSync(sampleFolder, { recursive: true }); From e27302c366f6dea08dc64cf722146172e420f8c4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 22:16:48 -0400 Subject: [PATCH 227/444] Add server start step --- dev/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/README.md b/dev/README.md index 2ea16c39e..2c76ccc82 100644 --- a/dev/README.md +++ b/dev/README.md @@ -17,4 +17,5 @@ The highway shield [color palette](americana.gpl) can be imported into Inkscape Map sample images can be generated with a script. See [sample_locations.json](test/sample_locations.json) for the format. 1. Create a JSON file with the map location and clipping rectangles -2. Run the generate_samples script and pass the JSON file location: `npm run generate_samples -- test/sample_locations.json`` +2. Start the server in the background with `npm start &` +3. Run the generate_samples script and pass the JSON file location: `npm run generate_samples -- test/sample_locations.json`` From 2733b53b731aa8cb0eb82bcfe6be5339c1f725e6 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 4 Oct 2023 22:28:12 -0400 Subject: [PATCH 228/444] Add route banner colors --- src/js/shield_defs.js | 99 +++++++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 27 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 57e071453..c1085579c 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -554,7 +554,11 @@ export function loadShields() { notext: true, }; - shields["GLCT:Loop"] = banneredShield(shields["GLCT"], ["LOOP"]); + shields["GLCT:Loop"] = banneredShield( + shields["GLCT"], + ["LOOP"], + Color.shields.brown + ); // Alaska shields["US:AK"] = { @@ -766,7 +770,11 @@ export function loadShields() { bottom: 4, }, }; - shields["US:CA:Business"] = banneredShield(shields["US:CA"], ["BUS"]); + shields["US:CA:Business"] = banneredShield( + shields["US:CA"], + ["BUS"], + Color.shields.green + ); shields["US:CA:CR"] = pentagonUpShield( 3, 15, @@ -1171,7 +1179,8 @@ export function loadShields() { textColor: Color.shields.green, colorLighten: Color.shields.green, }, - ["BUS"] + ["BUS"], + Color.shields.green ); // Maine @@ -1571,9 +1580,11 @@ export function loadShields() { spriteBlank: "shield_us_nj_ace_noref", notext: true, }; - shields["US:NJ:ACE:Connector"] = banneredShield(shields["US:NJ:ACE"], [ - "CONN", - ]); + shields["US:NJ:ACE:Connector"] = banneredShield( + shields["US:NJ:ACE"], + ["CONN"], + Color.shields.blue + ); shields["US:NJ:GSP"] = { spriteBlank: "shield_us_nj_gsp_noref", notext: true, @@ -1618,8 +1629,16 @@ export function loadShields() { Color.shields.white, Color.shields.black ); - shields["US:NJ:CR:Spur"] = banneredShield(shields["US:NJ:CR"], ["SPUR"]); - shields["US:NJ:CR:Truck"] = banneredShield(shields["US:NJ:CR"], ["TRK"]); + shields["US:NJ:CR:Spur"] = banneredShield( + shields["US:NJ:CR"], + ["SPUR"], + Color.shields.blue + ); + shields["US:NJ:CR:Truck"] = banneredShield( + shields["US:NJ:CR"], + ["TRK"], + Color.shields.blue + ); // New Mexico shields["US:NM"] = pillShield( @@ -2127,9 +2146,21 @@ export function loadShields() { bottom: 3, }, }; - shields["US:SC:Truck"] = banneredShield(shields["US:SC"], ["TRK"]); - shields["US:SC:Business"] = banneredShield(shields["US:SC"], ["BUS"]); - shields["US:SC:Alternate"] = banneredShield(shields["US:SC"], ["ALT"]); + shields["US:SC:Truck"] = banneredShield( + shields["US:SC"], + ["TRK"], + Color.shields.blue + ); + shields["US:SC:Business"] = banneredShield( + shields["US:SC"], + ["BUS"], + Color.shields.blue + ); + shields["US:SC:Alternate"] = banneredShield( + shields["US:SC"], + ["ALT"], + Color.shields.blue + ); // South Dakota shields["US:SD"] = { @@ -2266,7 +2297,8 @@ export function loadShields() { textColor: Color.shields.brown, colorLighten: Color.shields.brown, }, - ["R"] + ["R"], + Color.shields.brown ); shields["US:TX:NASA"] = banneredShield(shields["US:TX"], ["NASA"]); @@ -2275,22 +2307,31 @@ export function loadShields() { Color.shields.blue, Color.shields.white ); - shields["US:TX:Express:Toll"] = banneredShield(shields["US:TX:Toll"], [ - "EXPR", - ]); - shields["US:TX:Loop:Toll"] = banneredShield(shields["US:TX:Toll"], ["LOOP"]); - shields["US:TX:Loop:Express:Toll"] = banneredShield(shields["US:TX:Toll"], [ - "EXPR", - "LOOP", - ]); + shields["US:TX:Express:Toll"] = banneredShield( + shields["US:TX:Toll"], + ["EXPR"], + Color.shields.blue + ); + shields["US:TX:Loop:Toll"] = banneredShield( + shields["US:TX:Toll"], + ["LOOP"], + Color.shields.blue + ); + shields["US:TX:Loop:Express:Toll"] = banneredShield( + shields["US:TX:Toll"], + ["EXPR", "LOOP"], + Color.shields.blue + ); shields["US:TX:CTRMA"] = roundedRectShield( Color.shields.blue, Color.shields.yellow, Color.shields.white ); - shields["US:TX:CTRMA:Express"] = banneredShield(shields["US:TX:CTRMA"], [ - "EXPR", - ]); + shields["US:TX:CTRMA:Express"] = banneredShield( + shields["US:TX:CTRMA"], + ["EXPR"], + Color.shields.blue + ); shields["US:TX:Montgomery:MCTRA"] = homePlateDownShield( 5, Color.shields.blue, @@ -2375,11 +2416,13 @@ export function loadShields() { ); shields["US:TX:Jackson"] = banneredShield( roundedRectShield(Color.shields.blue, Color.shields.white), - ["CR"] + ["CR"], + Color.shields.blue ); shields["US:TX:Andrews:Andrews:Loop"] = banneredShield( roundedRectShield(Color.shields.white, Color.shields.blue), - ["LOOP"] + ["LOOP"], + Color.shields.blue ); // Utah @@ -3507,7 +3550,8 @@ export function loadShields() { ); shields[`AU:${state_or_territory}:ALT`] = banneredShield( roundedRectShield(Color.shields.green, Color.shields.yellow), - ["ALT"] + ["ALT"], + Color.shields.green ); shields[`AU:${state_or_territory}:ALT_NR`] = banneredShield( homePlateDownShield(5, Color.shields.white, Color.shields.black), @@ -3515,7 +3559,8 @@ export function loadShields() { ); shields[`AU:${state_or_territory}:ALT_S`] = banneredShield( fishheadDownShield(Color.shields.blue, Color.shields.white), - ["ALT"] + ["ALT"], + Color.shields.blue ); } ); From b2397dea113f2a2f6ae8e8e541deb060639d08a9 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 07:38:14 -0400 Subject: [PATCH 229/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index f9b920dc0..df85af549 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -1,4 +1,4 @@ -import fs from "fs"; +import fs from "node:fs"; import { chromium } from "@playwright/test"; // Declare a global augmentation for the Window interface From f9ed7dfc68cddcd109ba73d69d297b06305a05f9 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 07:38:23 -0400 Subject: [PATCH 230/444] Update .gitignore Co-authored-by: Josh Lee --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 48c6367be..7fc8e9cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ dist download local.config.js shieldlib/docs -samples +samples/ From a0c17feadf4f31891646c1332a5c4b6d6fabd84b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 07:40:11 -0400 Subject: [PATCH 231/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index df85af549..45bf3103a 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -35,7 +35,7 @@ const loadSampleLocations = (filePath: string): SampleSpecification[] => { const sampleFolder = "./samples"; -const jsonSampleLocations = process.argv[2] || "test/sample_locations.json"; +const jsonSampleLocations = process.argv[2] ?? "test/sample_locations.json"; console.log(`Loading sample locations from ${jsonSampleLocations}`); From a561508158b48b493275627fd6af688fd3b34c05 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 07:41:13 -0400 Subject: [PATCH 232/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 45bf3103a..170e61846 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -61,7 +61,7 @@ async function createImage(screenshot: SampleSpecification) { // Wait for map to load, then wait two more seconds for images, etc. to load. try { - await page.waitForFunction(() => window.map && window.map.loaded(), { + await page.waitForFunction(() => window.map?.loaded(), { timeout: 3000, }); From c8103ce3c1a1dbe32b922c320b7bbea1a1f9c631 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 07:41:29 -0400 Subject: [PATCH 233/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 170e61846..4cabe46e9 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -4,7 +4,7 @@ import { chromium } from "@playwright/test"; // Declare a global augmentation for the Window interface declare global { interface Window { - map: { + map?: { loaded: () => boolean; }; } From 4a932d230a6d055b82213e5450e6adc411f01bb1 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 09:39:29 -0400 Subject: [PATCH 234/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 4cabe46e9..d93708786 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -81,7 +81,7 @@ async function createImage(screenshot: SampleSpecification) { }); console.log(`Created ${sampleFolder}/${screenshot.name}.png`); } catch (err) { - console.log(err); + console.error(err); } } From 4b5d72b904c30a0d3778eefa1b01e337abc2a583 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 12:29:49 -0400 Subject: [PATCH 235/444] Update package.json Co-authored-by: Josh Lee --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3d6d81467..a38ab372e 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", "extract_layer": "node scripts/extract_layer", - "generate_samples": "npx playwright install && ts-node scripts/generate_samples.ts", + "generate_samples": "ts-node scripts/generate_samples.ts", "presprites": "shx rm -rf dist/sprites", "serve": "ts-node scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", From 6a1883564ff59fbb08d701cc8ab100f5bd3b842b Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 12:30:28 -0400 Subject: [PATCH 236/444] Update dev/README.md Co-authored-by: Josh Lee --- dev/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/README.md b/dev/README.md index 2c76ccc82..1b7c23781 100644 --- a/dev/README.md +++ b/dev/README.md @@ -18,4 +18,5 @@ Map sample images can be generated with a script. See [sample_locations.json](te 1. Create a JSON file with the map location and clipping rectangles 2. Start the server in the background with `npm start &` -3. Run the generate_samples script and pass the JSON file location: `npm run generate_samples -- test/sample_locations.json`` +3. Configure playwright: either `npx playwright install chromium` or `export CHROME_BIN=/usr/bin/chromium` +4. Run the generate_samples script and pass the JSON file location: `npm run generate_samples -- test/sample_locations.json`` From 7e3ce2d2b02f65a3240adde5650d8fae538d1e21 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 12:58:53 -0400 Subject: [PATCH 237/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index d93708786..be14b1fec 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -44,7 +44,10 @@ const screenshots: SampleSpecification[] = fs.mkdirSync(sampleFolder, { recursive: true }); -const browser = await chromium.launch({ headless: true }); +const browser = await chromium.launch({ + headless: true, + executablePath: process.env.CHROME_BIN, +}); const context = await browser.newContext(); const page = await context.newPage(); From 02d1124eac3bd877d32d2cb907c304b5af374720 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Thu, 5 Oct 2023 21:36:24 -0400 Subject: [PATCH 238/444] Remove wrong comments --- scripts/generate_samples.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index be14b1fec..07a059276 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -53,9 +53,7 @@ const context = await browser.newContext(); const page = await context.newPage(); for (const screenshot of screenshots) { - // Set viewport and double deviceScaleFactor to get a closer shot of the map await page.setViewportSize(screenshot.viewport); - await createImage(screenshot); } From ad17b6de756903d50e18b8a23dc6de03738f2725 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 6 Oct 2023 22:03:52 -0400 Subject: [PATCH 239/444] Separate bare map --- scripts/build.ts | 9 ++-- scripts/generate_samples.ts | 7 ++- src/americana.js | 66 ++++---------------------- src/bare_americana.js | 27 +++++++++++ src/bare_map.html | 30 ++++++++++++ src/js/map_builder.ts | 92 +++++++++++++++++++++++++++++++++++++ 6 files changed, 167 insertions(+), 64 deletions(-) create mode 100644 src/bare_americana.js create mode 100644 src/bare_map.html create mode 100644 src/js/map_builder.ts diff --git a/scripts/build.ts b/scripts/build.ts index 95823a3bb..69254cbec 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -1,5 +1,4 @@ import { stat, copyFile, mkdir } from "node:fs/promises"; -import { pathToFileURL } from "node:url"; import esbuild, { BuildContext, BuildOptions } from "esbuild"; @@ -26,7 +25,7 @@ const buildWith = async ( await mkdir("dist", { recursive: true }); await Promise.all( - ["index.html", "shieldtest.html", "favicon.ico"].map((f) => + ["index.html", "bare_map.html", "shieldtest.html", "favicon.ico"].map((f) => copyFile(`src/${f}`, `dist/${f}`) ) ); @@ -34,7 +33,11 @@ const buildWith = async ( const localConfig = await maybeLocalConfig(); const options = { - entryPoints: ["src/americana.js", "src/shieldtest.js"], + entryPoints: [ + "src/americana.js", + "src/bare_americana.js", + "src/shieldtest.js", + ], format: "esm", bundle: true, minify: true, diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 07a059276..525527daf 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -1,12 +1,11 @@ import fs from "node:fs"; import { chromium } from "@playwright/test"; +import { Map } from "maplibre-gl"; // Declare a global augmentation for the Window interface declare global { interface Window { - map?: { - loaded: () => boolean; - }; + map?: Map; } } @@ -67,7 +66,7 @@ async function createImage(screenshot: SampleSpecification) { }); // Wait for 1.5 seconds on 3D model examples, since this takes longer to load. - const waitTime = 1500; + const waitTime = 500; console.log(`waiting for ${waitTime} ms`); await page.waitForTimeout(waitTime); } catch (e) { diff --git a/src/americana.js b/src/americana.js index 95855becc..6e8b4819d 100644 --- a/src/americana.js +++ b/src/americana.js @@ -3,9 +3,6 @@ import config from "./config.js"; import * as Label from "./constants/label.js"; -import * as Style from "./js/style.js"; - -import * as Poi from "./js/poi.js"; import * as languageLabel from "./js/language_label.js"; @@ -17,26 +14,8 @@ import LegendControl from "./js/legend_control.js"; import * as LegendConfig from "./js/legend_config.js"; import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; -import { URLShieldRenderer } from "@americana/maplibre-shield-generator"; -import { - shieldPredicate, - networkPredicate, - routeParser, -} from "./js/shield_format.js"; - -export function buildStyle() { - var getUrl = window.location; - var baseUrl = (getUrl.protocol + "//" + getUrl.host + getUrl.pathname) - //Trim trailing slashes from URL - .replace(/\/+$/, ""); - return Style.build( - config.OPENMAPTILES_URL, - `${baseUrl}/sprites/sprite`, - config.FONT_URL ?? - "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", - Label.getLocales() - ); -} + +import { createMap, loadRTLPlugin } from "./js/map_builder.js"; function upgradeLegacyHash() { let hash = window.location.hash.substr(1); @@ -47,22 +26,14 @@ function upgradeLegacyHash() { } upgradeLegacyHash(); -maplibregl.setRTLTextPlugin( - "https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.2.3/mapbox-gl-rtl-text.min.js", - null, - true -); +loadRTLPlugin(); -window.maplibregl = maplibregl; -export const map = (window.map = new maplibregl.Map({ - container: "map", // container id - hash: "map", - antialias: true, - style: buildStyle(), - center: [-94, 40.5], // starting position [lng, lat] - zoom: 4, // starting zoom - attributionControl: false, -})); +export const map = createMap( + window, + (shields) => shieldDefLoad(shields), + [(-94, 40.5)], + 4 +); let options = {}; @@ -79,12 +50,6 @@ OpenMapTilesSamples.forEach((sample, i) => { let legendControl; -const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) - .filterImageID(shieldPredicate) - .filterNetwork(networkPredicate) - .renderOnMaplibreGL(map) - .onShieldDefLoad((shields) => shieldDefLoad(shields)); - function shieldDefLoad(shields) { legendControl = new LegendControl(shields); legendControl.sections = LegendConfig.sections; @@ -128,19 +93,6 @@ function shieldDefLoad(shields) { } } -map.on("styleimagemissing", function (e) { - switch (e.id.split("\n")[0]) { - case "shield": - break; - case "poi": - Poi.missingIconHandler(shieldRenderer, map, e); - break; - default: - console.warn("Image id not recognized:", JSON.stringify(e.id)); - break; - } -}); - function hotReloadMap() { map.setStyle(buildStyle()); } diff --git a/src/bare_americana.js b/src/bare_americana.js new file mode 100644 index 000000000..23b10dfee --- /dev/null +++ b/src/bare_americana.js @@ -0,0 +1,27 @@ +"use strict"; + +import "maplibre-gl/dist/maplibre-gl.css"; + +import { createMap } from "./js/map_builder.js"; + +loadRTLPlugin(); + +export const map = createMap( + window, + (shields) => shieldDefLoad(), + [-94, 40.5], + 4 +); + +function shieldDefLoad() { + if (window.top === window.self) { + // if not embedded in an iframe, autofocus canvas to enable keyboard shortcuts + map.getCanvas().focus(); + } + + if (window.LIVE_RELOAD) { + new EventSource("/esbuild").addEventListener("change", () => + location.reload() + ); + } +} diff --git a/src/bare_map.html b/src/bare_map.html new file mode 100644 index 000000000..c31e43b4e --- /dev/null +++ b/src/bare_map.html @@ -0,0 +1,30 @@ + + + + + OpenStreetMap Americana + + + + + + + +
+ + diff --git a/src/js/map_builder.ts b/src/js/map_builder.ts new file mode 100644 index 000000000..0bb43c484 --- /dev/null +++ b/src/js/map_builder.ts @@ -0,0 +1,92 @@ +/** + * Functions for assembling user-facing map components + */ +import { + ShieldDefinitions, + URLShieldRenderer, +} from "@americana/maplibre-shield-generator"; +import config from "../config.js"; + +import { + shieldPredicate, + networkPredicate, + routeParser, +} from "../js/shield_format.js"; + +import * as Poi from "../js/poi.js"; +import * as Label from "../constants/label.js"; +import * as Style from "../js/style.js"; +import maplibregl, { LngLatLike, Map, StyleSpecification } from "maplibre-gl"; + +export function buildStyle(): StyleSpecification { + var getUrl = window.location; + var baseUrl = ( + getUrl.protocol + + "//" + + getUrl.host + + removeAfterLastSlash(getUrl.pathname) + ) + //Trim trailing slashes from URL + .replace(/\/+$/, ""); + return Style.build( + config.OPENMAPTILES_URL, + `${baseUrl}/sprites/sprite`, + config.FONT_URL ?? + "https://osm-americana.github.io/fontstack66/{fontstack}/{range}.pbf", + Label.getLocales() + ); +} + +function removeAfterLastSlash(str: string): string { + const lastSlashIndex = str.lastIndexOf("/"); + if (lastSlashIndex === -1) { + return str; // return the original string if no slash is found + } + return str.substring(0, lastSlashIndex + 1); +} + +export function loadRTLPlugin(): void { + maplibregl.setRTLTextPlugin( + "https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.2.3/mapbox-gl-rtl-text.min.js", + null, + true + ); +} + +export function createMap( + window, + shieldDefCallback: (shields: ShieldDefinitions) => void, + center: LngLatLike, + zoom: number +): Map { + window.maplibregl = maplibregl; + let map: Map = (window.map = new maplibregl.Map({ + container: "map", // container id + hash: "map", + antialias: true, + style: buildStyle(), + center, // starting position [lng, lat] + zoom, // starting zoom + attributionControl: false, + })); + + const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) + .filterImageID(shieldPredicate) + .filterNetwork(networkPredicate) + .renderOnMaplibreGL(map) + .onShieldDefLoad(shieldDefCallback); + + map.on("styleimagemissing", function (e) { + switch (e.id.split("\n")[0]) { + case "shield": + break; + case "poi": + Poi.missingIconHandler(shieldRenderer, map, e); + break; + default: + console.warn("Image id not recognized:", JSON.stringify(e.id)); + break; + } + }); + return map; +} From 4920889b26777fd4fb30cc9ab5a887df04594eeb Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 6 Oct 2023 22:21:57 -0400 Subject: [PATCH 240/444] Simplify screenshot configs --- scripts/generate_samples.ts | 22 ++++++++++++---------- src/americana.js | 2 +- src/bare_americana.js | 2 +- test/sample_locations.json | 19 +------------------ 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 525527daf..3505b8896 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -9,21 +9,20 @@ declare global { } } -type LocationClip = { - x: number; - y: number; - width: number; - height: number; -}; - type SampleSpecification = { + /** location on the map, a string in the format "z/lat/lon" */ location: string; + /** name of this screenshot, used for the filename */ name: string; + /** Size in pixels of the clip */ viewport: { + /** Width of the clip */ width: number; + /** height of the clip */ height: number; }; - clip: LocationClip; + /** If true, include the Americana demo map controls in the screenshot */ + controls?: boolean; }; // Load list of locations to take map screenshots @@ -57,7 +56,11 @@ for (const screenshot of screenshots) { } async function createImage(screenshot: SampleSpecification) { - await page.goto(`http://localhost:1776/#map=${screenshot.location}`); + const pagePath: string = screenshot.controls ? "" : "bare_map.html"; + + await page.goto( + `http://localhost:1776/${pagePath}#map=${screenshot.location}` + ); // Wait for map to load, then wait two more seconds for images, etc. to load. try { @@ -77,7 +80,6 @@ async function createImage(screenshot: SampleSpecification) { await page.screenshot({ path: `${sampleFolder}/${screenshot.name}.png`, type: "png", - clip: screenshot.clip, }); console.log(`Created ${sampleFolder}/${screenshot.name}.png`); } catch (err) { diff --git a/src/americana.js b/src/americana.js index 6e8b4819d..87161d466 100644 --- a/src/americana.js +++ b/src/americana.js @@ -31,7 +31,7 @@ loadRTLPlugin(); export const map = createMap( window, (shields) => shieldDefLoad(shields), - [(-94, 40.5)], + [-94, 40.5], 4 ); diff --git a/src/bare_americana.js b/src/bare_americana.js index 23b10dfee..ed0d9d502 100644 --- a/src/bare_americana.js +++ b/src/bare_americana.js @@ -2,7 +2,7 @@ import "maplibre-gl/dist/maplibre-gl.css"; -import { createMap } from "./js/map_builder.js"; +import { createMap, loadRTLPlugin } from "./js/map_builder.js"; loadRTLPlugin(); diff --git a/test/sample_locations.json b/test/sample_locations.json index 81272a54e..689a07e94 100644 --- a/test/sample_locations.json +++ b/test/sample_locations.json @@ -6,12 +6,7 @@ "width": 600, "height": 250 }, - "clip": { - "x": 0, - "y": 0, - "width": 600, - "height": 250 - } + "controls": true }, { "location": "13/40.01264/-75.70446", @@ -19,12 +14,6 @@ "viewport": { "width": 600, "height": 600 - }, - "clip": { - "x": 100, - "y": 100, - "width": 400, - "height": 400 } }, { @@ -33,12 +22,6 @@ "viewport": { "width": 600, "height": 600 - }, - "clip": { - "x": 100, - "y": 100, - "width": 400, - "height": 400 } } ] From 7c6c10d5b1bc34b75f4e9c99eda877be65356829 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 6 Oct 2023 22:32:22 -0400 Subject: [PATCH 241/444] Remove comment --- scripts/generate_samples.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 3505b8896..f447157c4 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -68,7 +68,6 @@ async function createImage(screenshot: SampleSpecification) { timeout: 3000, }); - // Wait for 1.5 seconds on 3D model examples, since this takes longer to load. const waitTime = 500; console.log(`waiting for ${waitTime} ms`); await page.waitForTimeout(waitTime); From 033411f8d006af8c9f098bc50c98a921344015ba Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 7 Oct 2023 12:49:57 -0400 Subject: [PATCH 242/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index f447157c4..a4cbebe40 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -1,6 +1,6 @@ import fs from "node:fs"; import { chromium } from "@playwright/test"; -import { Map } from "maplibre-gl"; +import type * as maplibre from "maplibre-gl"; // Declare a global augmentation for the Window interface declare global { From 4a7cd09ee22917b8545b313336d5327aff104ae1 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 7 Oct 2023 12:50:04 -0400 Subject: [PATCH 243/444] Update scripts/generate_samples.ts Co-authored-by: Josh Lee --- scripts/generate_samples.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index a4cbebe40..b69823335 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -5,7 +5,7 @@ import type * as maplibre from "maplibre-gl"; // Declare a global augmentation for the Window interface declare global { interface Window { - map?: Map; + map?: maplibre.Map; } } From 700b04a684b37fe2d78158d31d9bfb6f5b5cf4a1 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 7 Oct 2023 14:42:28 -0400 Subject: [PATCH 244/444] Pass MapOptions and turn off fade and delay --- scripts/generate_samples.ts | 4 ---- src/americana.js | 17 ++++++++++------- src/bare_americana.js | 18 +++++++++++------- src/js/map_builder.ts | 15 +++------------ 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index b69823335..62569533a 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -67,10 +67,6 @@ async function createImage(screenshot: SampleSpecification) { await page.waitForFunction(() => window.map?.loaded(), { timeout: 3000, }); - - const waitTime = 500; - console.log(`waiting for ${waitTime} ms`); - await page.waitForTimeout(waitTime); } catch (e) { console.log(`Timed out waiting for map load`); } diff --git a/src/americana.js b/src/americana.js index 87161d466..5508382ba 100644 --- a/src/americana.js +++ b/src/americana.js @@ -15,7 +15,7 @@ import * as LegendConfig from "./js/legend_config.js"; import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; -import { createMap, loadRTLPlugin } from "./js/map_builder.js"; +import { createMap, loadRTLPlugin, buildStyle } from "./js/map_builder.js"; function upgradeLegacyHash() { let hash = window.location.hash.substr(1); @@ -28,12 +28,15 @@ upgradeLegacyHash(); loadRTLPlugin(); -export const map = createMap( - window, - (shields) => shieldDefLoad(shields), - [-94, 40.5], - 4 -); +export const map = createMap(window, (shields) => shieldDefLoad(shields), { + container: "map", // container id + hash: "map", + antialias: true, + style: buildStyle(), + center: [-94, 40.5], + zoom: 4, + attributionControl: false, +}); let options = {}; diff --git a/src/bare_americana.js b/src/bare_americana.js index ed0d9d502..256716578 100644 --- a/src/bare_americana.js +++ b/src/bare_americana.js @@ -2,16 +2,20 @@ import "maplibre-gl/dist/maplibre-gl.css"; -import { createMap, loadRTLPlugin } from "./js/map_builder.js"; +import { createMap, loadRTLPlugin, buildStyle } from "./js/map_builder.js"; loadRTLPlugin(); -export const map = createMap( - window, - (shields) => shieldDefLoad(), - [-94, 40.5], - 4 -); +export const map = createMap(window, (shields) => shieldDefLoad(), { + container: "map", // container id + hash: "map", + antialias: true, + style: buildStyle(), + center: [-94, 40.5], + zoom: 4, + fadeDuration: 0, + attributionControl: false, +}); function shieldDefLoad() { if (window.top === window.self) { diff --git a/src/js/map_builder.ts b/src/js/map_builder.ts index 0bb43c484..73ad97f9d 100644 --- a/src/js/map_builder.ts +++ b/src/js/map_builder.ts @@ -16,7 +16,7 @@ import { import * as Poi from "../js/poi.js"; import * as Label from "../constants/label.js"; import * as Style from "../js/style.js"; -import maplibregl, { LngLatLike, Map, StyleSpecification } from "maplibre-gl"; +import maplibregl, { Map, MapOptions, StyleSpecification } from "maplibre-gl"; export function buildStyle(): StyleSpecification { var getUrl = window.location; @@ -56,19 +56,10 @@ export function loadRTLPlugin(): void { export function createMap( window, shieldDefCallback: (shields: ShieldDefinitions) => void, - center: LngLatLike, - zoom: number + options: MapOptions ): Map { window.maplibregl = maplibregl; - let map: Map = (window.map = new maplibregl.Map({ - container: "map", // container id - hash: "map", - antialias: true, - style: buildStyle(), - center, // starting position [lng, lat] - zoom, // starting zoom - attributionControl: false, - })); + let map: Map = (window.map = new maplibregl.Map(options)); const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) .filterImageID(shieldPredicate) From a33b03ad7f29b91e4ad813f231e59f4e183a5be0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 8 Oct 2023 15:20:32 -0400 Subject: [PATCH 245/444] Add pr preview extra input --- .github/workflows/deploy-pr-checks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-pr-checks.yml b/.github/workflows/deploy-pr-checks.yml index 19e11ef17..62de10319 100644 --- a/.github/workflows/deploy-pr-checks.yml +++ b/.github/workflows/deploy-pr-checks.yml @@ -110,6 +110,7 @@ jobs: " > pr_preview.md + [ -f pr_preview-extra.md ] && cat pr_preview-extra.md >> pr_preview.md || echo "No extra PR preview found." - uses: tibdex/github-app-token@v1 id: checks_token with: From 32ea3a7254cd6c8f9271785bd0daac898108055f Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Thu, 12 Oct 2023 22:36:24 -0400 Subject: [PATCH 246/444] Workspace tweaks (#962) * Don't depend on a file: version. Since shieldlib is listed in workspaces, it will be installed into node_modules as a dependency, assuming it is semver compatible (by depending on *, it will always be). The main americana project could also be a workspace, but that would necessitate breaking some URLs. It's fine for the root project to list the workspaces and itself be a buildable artifact, but pushing it down to a subdirectory might be desirable. This is the sort of thing that a precommit/prepublish hook should enforce, maybe. As a "file:" dependency, both pnpm and yarn copy the directory into node_modules/, which is undesired as it will not have been built yet. * Remove double dependency on glob. * Pacify typedoc dependency * Remove npx, exec, and npm exec from scripts exec is redundant but is too sophisticated for yarn's shell implementation. npx and npm exec are redundant and additionally allow wandering outside the project to find globally-installed packages. * Hoist typedoc This is a concession to yarn not finding bin's from workspaces * Pacify ts-mocha with a peer dependency * Unhoist dependency Instead of a script calling 'npm run', use npm-run-all, which is clever enough to spawn a yarn/pnpm process. --- package-lock.json | 480 ++++++++++++++++++++++++++++------------- package.json | 12 +- scripts/sprites.js | 2 +- shieldlib/package.json | 8 +- 4 files changed, 339 insertions(+), 163 deletions(-) diff --git a/package-lock.json b/package-lock.json index aab615aa1..1555841b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,10 @@ "shieldlib" ], "dependencies": { - "@americana/maplibre-shield-generator": "file:shieldlib", + "@americana/maplibre-shield-generator": "*", "color-rgba": "^2.4.0", "events": "^3.3.0", "fonteditor-core": "^2.1.11", - "glob": "^8.0.3", "maplibre-gl": "^2.4.0", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", @@ -29,13 +28,14 @@ "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", + "@types/node": "^20.8.4", "benchmark": "^2.1.4", "canvas": "^2.11.0", "chai": "^4.3.7", "color-namer": "^1.4.0", "commander": "^10.0.0", "esbuild": "^0.17.4", - "glob": "^9.2.1", + "glob": "^10.3.10", "google-font-installer": "^1.2.0", "maplibre-gl": "^2.4.0", "mocha": "^10.1.0", @@ -439,6 +439,102 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", @@ -570,6 +666,16 @@ "gl-style-validate": "bin/gl-style-validate.js" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@playwright/test": { "version": "1.38.1", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", @@ -670,11 +776,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.4.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.9.tgz", - "integrity": "sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==", - "dev": true, - "peer": true + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "dependencies": { + "undici-types": "~5.25.1" + } }, "node_modules/@types/pbf": { "version": "3.0.2", @@ -732,7 +839,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, "engines": { "node": ">=6" } @@ -741,7 +847,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -756,7 +861,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -771,7 +875,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -808,8 +911,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", @@ -883,8 +985,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -920,7 +1021,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -946,7 +1046,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -955,7 +1054,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -966,8 +1064,7 @@ "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "node_modules/buffer": { "version": "5.7.1", @@ -1026,7 +1123,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1071,7 +1167,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1096,7 +1191,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -1138,7 +1232,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -1174,7 +1267,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1259,8 +1351,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -1380,7 +1471,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1397,7 +1487,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -1488,7 +1577,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -1553,11 +1641,16 @@ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -1759,7 +1852,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -1768,7 +1860,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1821,7 +1912,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1833,7 +1923,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1849,7 +1938,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } @@ -1871,6 +1959,93 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1904,14 +2079,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -1991,7 +2164,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2059,15 +2231,19 @@ "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -2080,7 +2256,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2186,7 +2361,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2252,7 +2426,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } @@ -2311,7 +2484,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2320,8 +2492,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -2387,7 +2558,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2469,7 +2639,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2478,7 +2647,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -2487,7 +2655,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2511,7 +2678,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -2535,7 +2701,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, "engines": { "node": ">=8" } @@ -2617,7 +2782,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -2660,11 +2824,28 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2735,7 +2916,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -2756,7 +2936,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -2905,9 +3084,9 @@ } }, "node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2928,12 +3107,12 @@ } }, "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { @@ -2983,7 +3162,6 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -3023,7 +3201,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3043,7 +3220,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3053,7 +3229,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3065,7 +3240,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3076,14 +3250,12 @@ "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3097,8 +3269,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/murmurhash-js": { "version": "1.0.0", @@ -3179,7 +3350,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3381,7 +3551,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3577,7 +3746,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -3620,7 +3788,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3635,7 +3802,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -3673,7 +3839,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -3682,7 +3847,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3718,15 +3882,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -3770,7 +3925,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -3957,7 +4111,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -4018,7 +4171,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -4059,7 +4211,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4174,7 +4325,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -4250,7 +4400,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -4636,6 +4785,20 @@ } }, "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", @@ -4712,6 +4875,18 @@ } }, "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -4736,7 +4911,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -4756,7 +4930,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4887,7 +5060,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5124,42 +5296,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -5188,6 +5324,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + }, "node_modules/upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -5321,10 +5462,26 @@ "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", @@ -5344,14 +5501,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -5366,7 +5521,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -5384,7 +5538,6 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, "engines": { "node": ">=10" } @@ -5393,7 +5546,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -5417,7 +5569,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -5430,8 +5581,10 @@ "version": "0.0.4", "license": "CC0-1.0", "dependencies": { + "@types/node": "^20.8.4", "color-rgba": "^2.4.0", - "maplibre-gl": "^2.4.0" + "maplibre-gl": "^2.4.0", + "mocha": "^10.2.0" }, "devDependencies": { "@types/color-rgba": "^2.1.0", @@ -5445,6 +5598,27 @@ "typedoc": "^0.24.8", "typescript": "^4.9.5" } + }, + "shieldlib/node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } } } } diff --git a/package.json b/package.json index a38ab372e..366cec122 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "shieldlib" ], "scripts": { - "build:shieldlib": "cd shieldlib && node scripts/build.js && npm run docs", - "build:code": "exec ts-node scripts/build", + "build:shieldlib": "cd shieldlib && run-s build:code docs", + "build:code": "ts-node scripts/build", "build": "run-s clean-build sprites build:shieldlib build:code taginfo status_map", "clean": "run-s clean:shieldlib clean:code clean-download clean-build", "clean-download": "shx rm -rf download", @@ -33,15 +33,14 @@ "stats": "node scripts/stats.js", "style": "node scripts/generate_style.js -o dist/style.json", "status_map": "node scripts/status_map.js", - "taginfo": "exec ts-node scripts/taginfo", + "taginfo": "ts-node scripts/taginfo", "test": "ts-mocha" }, "dependencies": { - "@americana/maplibre-shield-generator": "file:shieldlib", + "@americana/maplibre-shield-generator": "*", "color-rgba": "^2.4.0", "events": "^3.3.0", "fonteditor-core": "^2.1.11", - "glob": "^8.0.3", "maplibre-gl": "^2.4.0", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", @@ -55,13 +54,14 @@ "@types/chai": "^4.3.4", "@types/color-namer": "^1.3.0", "@types/mocha": "^10.0.1", + "@types/node": "^20.8.4", "benchmark": "^2.1.4", "canvas": "^2.11.0", "chai": "^4.3.7", "color-namer": "^1.4.0", "commander": "^10.0.0", "esbuild": "^0.17.4", - "glob": "^9.2.1", + "glob": "^10.3.10", "google-font-installer": "^1.2.0", "maplibre-gl": "^2.4.0", "mocha": "^10.1.0", diff --git a/scripts/sprites.js b/scripts/sprites.js index 49b1e9c81..367784da4 100644 --- a/scripts/sprites.js +++ b/scripts/sprites.js @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import glob from "glob"; +import { glob } from "glob"; import { Sprites } from "@basemaps/sprites"; await fs.mkdir("./dist/sprites/", { recursive: true }); diff --git a/shieldlib/package.json b/shieldlib/package.json index 112a26433..d2253bcbc 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -33,8 +33,8 @@ "code_format": "run-s code_format:prettier", "code_format:prettier": "prettier --write --list-different .", "clean": "shx rm -rf dist docs", - "docs": "npx typedoc src/index.ts", - "test": "npm exec -- ts-mocha", + "docs": "typedoc src/index.ts", + "test": "ts-mocha", "build:code": "node scripts/build.js", "build": "run-s clean build:code docs", "preversion": "npm version --no-git-tag-version --preid alpha", @@ -49,8 +49,10 @@ }, "homepage": "https://github.com/ZeLonewolf/openstreetmap-americana#readme", "dependencies": { + "@types/node": "^20.8.4", "color-rgba": "^2.4.0", - "maplibre-gl": "^2.4.0" + "maplibre-gl": "^2.4.0", + "mocha": "^10.2.0" }, "directories": { "test": "test" From 3577712151a27bc70e57f65dcc33a1c115e88e49 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 8 Oct 2023 14:26:59 -0400 Subject: [PATCH 247/444] change shield font to Noto Sans Condensed --- icons/shield_ca_mb_winnipeg.svg | 4 - icons/shield_ca_ns_h.svg | 8 -- icons/shield_ca_on_primary.svg | 3 +- icons/shield_ca_tch.svg | 3 - icons/shield_ca_tch_2.svg | 3 + icons/shield_ca_tch_3.svg | 3 + icons/shield_in_nh_2.svg | 2 +- icons/shield_in_nh_3.svg | 4 +- icons/shield_in_nh_4.svg | 4 +- icons/shield_kr_expressway_2.svg | 6 +- icons/shield_kr_expressway_3.svg | 6 +- icons/shield_us_fl_toll.svg | 8 +- icons/shield_us_ut_2.svg | 4 +- icons/shield_us_ut_3.svg | 4 +- scripts/build.ts | 10 +- shieldlib/src/screen_gfx.ts | 2 +- shieldlib/src/shield_helper.ts | 10 +- src/fonts.css | 18 +++ src/index.html | 11 ++ src/js/shield_defs.js | 193 ++++++++++++++++--------------- src/shieldtest.html | 17 ++- src/shieldtest.js | 5 +- 22 files changed, 176 insertions(+), 152 deletions(-) delete mode 100644 icons/shield_ca_mb_winnipeg.svg delete mode 100644 icons/shield_ca_ns_h.svg delete mode 100644 icons/shield_ca_tch.svg create mode 100644 icons/shield_ca_tch_2.svg create mode 100644 icons/shield_ca_tch_3.svg create mode 100644 src/fonts.css diff --git a/icons/shield_ca_mb_winnipeg.svg b/icons/shield_ca_mb_winnipeg.svg deleted file mode 100644 index 913652204..000000000 --- a/icons/shield_ca_mb_winnipeg.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/icons/shield_ca_ns_h.svg b/icons/shield_ca_ns_h.svg deleted file mode 100644 index 636f74df6..000000000 --- a/icons/shield_ca_ns_h.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/icons/shield_ca_on_primary.svg b/icons/shield_ca_on_primary.svg index 71a72ce15..b6b25e117 100644 --- a/icons/shield_ca_on_primary.svg +++ b/icons/shield_ca_on_primary.svg @@ -1,4 +1,3 @@ - - + diff --git a/icons/shield_ca_tch.svg b/icons/shield_ca_tch.svg deleted file mode 100644 index 1aa807c16..000000000 --- a/icons/shield_ca_tch.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/icons/shield_ca_tch_2.svg b/icons/shield_ca_tch_2.svg new file mode 100644 index 000000000..063fe7777 --- /dev/null +++ b/icons/shield_ca_tch_2.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/shield_ca_tch_3.svg b/icons/shield_ca_tch_3.svg new file mode 100644 index 000000000..2deb71227 --- /dev/null +++ b/icons/shield_ca_tch_3.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/shield_in_nh_2.svg b/icons/shield_in_nh_2.svg index 1e9651039..8739bd0cb 100644 --- a/icons/shield_in_nh_2.svg +++ b/icons/shield_in_nh_2.svg @@ -1,3 +1,3 @@ - + diff --git a/icons/shield_in_nh_3.svg b/icons/shield_in_nh_3.svg index 8b3daed05..86b7ace5c 100644 --- a/icons/shield_in_nh_3.svg +++ b/icons/shield_in_nh_3.svg @@ -1,3 +1,3 @@ - - + + diff --git a/icons/shield_in_nh_4.svg b/icons/shield_in_nh_4.svg index 415f898da..4bd800d9f 100644 --- a/icons/shield_in_nh_4.svg +++ b/icons/shield_in_nh_4.svg @@ -1,3 +1,3 @@ - - + + diff --git a/icons/shield_kr_expressway_2.svg b/icons/shield_kr_expressway_2.svg index c74b8ea03..7bb5a8918 100644 --- a/icons/shield_kr_expressway_2.svg +++ b/icons/shield_kr_expressway_2.svg @@ -1,6 +1,4 @@ - - - - + + diff --git a/icons/shield_kr_expressway_3.svg b/icons/shield_kr_expressway_3.svg index b6c43ffe7..a2b1100c5 100644 --- a/icons/shield_kr_expressway_3.svg +++ b/icons/shield_kr_expressway_3.svg @@ -1,6 +1,4 @@ - - - - + + diff --git a/icons/shield_us_fl_toll.svg b/icons/shield_us_fl_toll.svg index 1c83dbe7b..5c0d2ba74 100644 --- a/icons/shield_us_fl_toll.svg +++ b/icons/shield_us_fl_toll.svg @@ -1,7 +1,5 @@ - - - + + + - - diff --git a/icons/shield_us_ut_2.svg b/icons/shield_us_ut_2.svg index 598cb1678..a9e493979 100644 --- a/icons/shield_us_ut_2.svg +++ b/icons/shield_us_ut_2.svg @@ -1,4 +1,4 @@ - - + + diff --git a/icons/shield_us_ut_3.svg b/icons/shield_us_ut_3.svg index 946896860..1895ac7f2 100644 --- a/icons/shield_us_ut_3.svg +++ b/icons/shield_us_ut_3.svg @@ -1,4 +1,4 @@ - - + + diff --git a/scripts/build.ts b/scripts/build.ts index 69254cbec..1ba418418 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -25,9 +25,13 @@ const buildWith = async ( await mkdir("dist", { recursive: true }); await Promise.all( - ["index.html", "bare_map.html", "shieldtest.html", "favicon.ico"].map((f) => - copyFile(`src/${f}`, `dist/${f}`) - ) + [ + "index.html", + "bare_map.html", + "shieldtest.html", + "favicon.ico", + "fonts.css", + ].map((f) => copyFile(`src/${f}`, `dist/${f}`)) ); const localConfig = await maybeLocalConfig(); diff --git a/shieldlib/src/screen_gfx.ts b/shieldlib/src/screen_gfx.ts index e3fe2b55c..eec3087e8 100644 --- a/shieldlib/src/screen_gfx.ts +++ b/shieldlib/src/screen_gfx.ts @@ -4,7 +4,7 @@ import rgba from "color-rgba"; const defaultFontFamily = '"sans-serif-condensed", "Arial Narrow", sans-serif'; export const shieldFont = (size: number, fontFamily: string) => - `bold ${size}px ${fontFamily || defaultFontFamily}`; + `condensed 500 ${size}px ${fontFamily || defaultFontFamily}`; export const fontSizeThreshold = 12; // Replaces `sourceVal` with a blend of `lightenVal` and `darkenVal` proportional to the brightness; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index f70c8b0b4..da386c6e6 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -188,12 +188,12 @@ export function fishheadDownShield( outlineWidth: 1, }, }, - textLayout: textConstraint("roundedRect"), + textLayout: textConstraint("ellipse"), padding: { - left: 3, - right: 3, - top: 2, - bottom: 6, + left: 1, + right: 1, + top: 1, + bottom: 5, }, textColor, }; diff --git a/src/fonts.css b/src/fonts.css new file mode 100644 index 000000000..e0df38be9 --- /dev/null +++ b/src/fonts.css @@ -0,0 +1,18 @@ +@font-face { + font-family: "Noto Sans Condensed"; + src: url("https://osm-americana.github.io/web-fonts/noto/NotoSans-CondensedMedium-PropNums.woff2") + format("woff2"), + url("https://osm-americana.github.io/web-fonts/noto/NotoSans-CondensedMedium-PropNums.woff") + format("woff"); + font-weight: 500; + font-style: normal; +} +@font-face { + font-family: "Noto Sans Armenian Condensed"; + src: url("https://github.com/osm-americana/web-fonts/raw/main/noto/NotoSansArmenian-CondensedMedium-PropNums.woff2") + format("woff2"), + url("https://github.com/osm-americana/web-fonts/raw/main/noto/NotoSansArmenian-CondensedMedium-PropNums.woff") + format("woff"); + font-weight: 500; + font-style: normal; +} diff --git a/src/index.html b/src/index.html index 3a828f824..89a840fd2 100644 --- a/src/index.html +++ b/src/index.html @@ -3,6 +3,8 @@ OpenStreetMap Americana + + +

+ Invisible text so the font will load early +

Shield Test - - - + +