From 6e4bb02f5025d9585ebcf86f0842f18c17335c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janko=20Miheli=C4=87?= Date: Tue, 7 May 2024 14:08:18 +0200 Subject: [PATCH 01/47] Add shields for Croatia --- src/js/shield_defs.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 11e05798f..6c18f7614 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3356,6 +3356,35 @@ export function loadShields() { 34 ); + //Croatia + + shields["HR:Autoceste"] = hexagonVerticalShield( + 3, + Color.shields.green, + Color.shields.white, + Color.shields.white, + 0, + 34 + ); + + shields["HR:Državne ceste"] = roundedRectShield( + Color.shields.blue, + Color.shields.white, + Color.shields.white + ); + + shields["HR:Županijske ceste"] = roundedRectShield( + Color.shields.yellow, + Color.shields.black, + Color.shields.black + ); + + shields["HR:Lokalne ceste"] = roundedRectShield( + Color.shields.white, + Color.shields.black, + Color.shields.black + ); + // Iceland shields["IS"] = roundedRectShield( Color.shields.white, From a7413c251e754121225157e4f24d24a1c24a26ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janko=20Miheli=C4=87?= Date: Tue, 7 May 2024 14:15:46 +0200 Subject: [PATCH 02/47] Removed whitespaces --- src/js/shield_defs.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 6c18f7614..cc7f55989 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3356,8 +3356,7 @@ export function loadShields() { 34 ); - //Croatia - + // Croatia shields["HR:Autoceste"] = hexagonVerticalShield( 3, Color.shields.green, @@ -3366,19 +3365,16 @@ export function loadShields() { 0, 34 ); - shields["HR:Državne ceste"] = roundedRectShield( Color.shields.blue, Color.shields.white, Color.shields.white ); - shields["HR:Županijske ceste"] = roundedRectShield( Color.shields.yellow, Color.shields.black, Color.shields.black ); - shields["HR:Lokalne ceste"] = roundedRectShield( Color.shields.white, Color.shields.black, From 647db05ead555ec33bce5f862cb096728539b943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janko=20Miheli=C4=87?= Date: Fri, 10 May 2024 14:12:56 +0200 Subject: [PATCH 03/47] Update shield_map_world.svg, added .hr --- doc-img/shield_map_world.svg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc-img/shield_map_world.svg b/doc-img/shield_map_world.svg index 5de99353d..c11a1fe1d 100644 --- a/doc-img/shield_map_world.svg +++ b/doc-img/shield_map_world.svg @@ -155,6 +155,7 @@ See the end of this file for a list of available jurisdictions and their codes. .fr, .de, .gr, +.hr, .is, .ie, .it, @@ -2313,4 +2314,4 @@ If overlapping claims in Antarctica are configured to be shown at the same time, .aqclgb: portion claimed by Chile and the United Kingdom .aqarcl: portion claimed by Argentina, Chile and the United Kingdom --> - \ No newline at end of file + From 70ea0112a6d4245a53252be0d0b7db16b4a1663e Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 11 May 2024 17:39:41 -0400 Subject: [PATCH 04/47] add Hanford site routes --- src/js/shield_defs.js | 57 ++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 3a4418ebd..4cd44e443 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -103,6 +103,14 @@ export function loadShields() { }; // NORTH AMERICA + shields["GLCT"] = { + notext: true, + }; + shields["GLCT:Loop"] = banneredShield( + shields["GLCT"], + ["LOOP"], + Color.shields.brown + ); // Canada shields["CA:transcanada"] = { @@ -509,7 +517,9 @@ export function loadShields() { Color.shields.brown ); - // Federal Agencies + // US Federal Agencies + + // Bureau of Indian Affairs shields["US:BIA"] = { spriteBlank: "shield_us_bia", textColor: Color.shields.black, @@ -522,39 +532,48 @@ export function loadShields() { }, }; + // Department of Energy: see California + // National Park Service shields["US:NPS:Blue_Ridge"] = { noref: { spriteBlank: "shield_us_nps_brp", }, }; - shields["US:NPS:Natchez_Trace"] = { noref: { spriteBlank: "shield_us_nps_ntp", }, }; - shields["US:GRR"] = { + // Other multistate routes + + // Great Lakes Seaway Trail + shields["US:GLST"] = { noref: { - spriteBlank: "shield_us_grr", + spriteBlank: "shield_us_glst", }, }; - shields["US:GLST"] = { + // Great River Road + shields["US:GRR"] = { noref: { - spriteBlank: "shield_us_glst", + spriteBlank: "shield_us_grr", }, }; - shields["GLCT"] = { + // Lincoln Heritage Trail + shields["US:LHT"] = { + spriteBlank: "shield_us_lht", notext: true, }; - shields["GLCT:Loop"] = banneredShield( - shields["GLCT"], - ["LOOP"], - Color.shields.brown - ); + // Ohio River Scenic Byway + shields["US:ORSB"] = { + spriteBlank: ["shield_us_orsb"], + notext: true, + }; + + // US States // Alaska shields["US:AK"] = { @@ -795,6 +814,9 @@ export function loadShields() { notext: true, }; + // Department of Energy + shields["US:DOE:Hanford"] = shields["US:CA"]; + // Colorado shields["US:CO"] = { spriteBlank: "shield_us_co", @@ -2756,17 +2778,6 @@ export function loadShields() { )) ); - // Multistate auto trails - - shields["US:LHT"] = { - spriteBlank: "shield_us_lht", - notext: true, - }; - shields["US:ORSB"] = { - spriteBlank: ["shield_us_orsb"], - notext: true, - }; - // SOUTH AMERICA // Chile From da3b990c42bac7c5bf50f96ff552b73052b3a4a4 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 12 May 2024 21:55:49 -0400 Subject: [PATCH 05/47] Add artifacts --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e66cfa097..2c029dfad 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,12 @@ The technology stack for this style can be summarized below: 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). +## Artifacts + +- Style users can use the maplibre [StyleJSON](https://zelonewolf.github.io/openstreetmap-americana/style.json), and sprite sheets ([1x](https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite.png), [2x](https://zelonewolf.github.io/openstreetmap-americana/sprites/sprite@2x.png)). +- For highway shield library users, a [ShieldJSON](https://zelonewolf.github.io/openstreetmap-americana/shields.json) must be supplied to associate route networks with sprite images and drawn shield shapes. +- The project [taginfo.json](https://zelonewolf.github.io/openstreetmap-americana/taginfo.json) lists which tags are used by the style. + ## Data sources The OpenStreetMap Americana style is built upon the [OpenMapTiles schema](https://openmaptiles.org/schema/), which includes: From d4441235fac2d964eb768b234398424bd17b5f86 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 12 May 2024 23:41:10 -0400 Subject: [PATCH 06/47] Convert shield.js to typescript --- shieldlib/src/{shield.js => shield.ts} | 76 +++++++++++++------------- shieldlib/src/shield_helper.ts | 36 ++++++------ shieldlib/src/shield_renderer.ts | 4 +- shieldlib/src/shield_text.ts | 4 +- shieldlib/src/types.d.ts | 4 +- shieldlib/src/types.ts | 23 ++++++-- 6 files changed, 82 insertions(+), 65 deletions(-) rename shieldlib/src/{shield.js => shield.ts} (72%) diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.ts similarity index 72% rename from shieldlib/src/shield.js rename to shieldlib/src/shield.ts index 8a8202cde..505fa57a4 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.ts @@ -4,8 +4,12 @@ import * as ShieldText from "./shield_text"; import * as ShieldDraw from "./shield_canvas_draw"; import * as Gfx from "./screen_gfx"; import { drawBanners, drawBannerHalos, getBannerCount } from "./shield_banner"; +import { ShieldRenderingContext } from "./shield_renderer"; +import { Dimension, RouteDefinition, ShieldDefinition, ShieldDefinitions } from "./types"; +import { TextPlacement } from "./shield_text"; +import { StyleImage } from "maplibre-gl"; -function compoundShieldSize(r, dimension, bannerCount) { +function compoundShieldSize(r: ShieldRenderingContext, dimension: Dimension, bannerCount: number): Dimension { return { width: dimension.width, height: @@ -14,7 +18,7 @@ function compoundShieldSize(r, dimension, bannerCount) { }; } -export function isValidRef(ref) { +export function isValidRef(ref: string): boolean { return ref !== null && ref.length !== 0 && ref.length <= 6; } @@ -27,24 +31,24 @@ export function isValidRef(ref) { * @param {*} routeDef - route tagging from OSM * @returns shield blank or null if no shield exists */ -function getRasterShieldBlank(r, shieldDef, routeDef) { - var shieldArtwork = null; - var textLayout; - var bannerCount = 0; - var bounds; +function getRasterShieldBlank(r: ShieldRenderingContext, shieldDef: ShieldDefinition, routeDef: RouteDefinition): StyleImage { + let shieldArtwork = null; + let textPlacement: TextPlacement; + let bannerCount: number = 0; + let bounds: Dimension; if (Array.isArray(shieldDef.spriteBlank)) { for (var i = 0; i < shieldDef.spriteBlank.length; i++) { shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank[i]); bounds = compoundShieldSize(r, shieldArtwork.data, bannerCount); - textLayout = ShieldText.layoutShieldTextFromDef( + textPlacement = ShieldText.layoutShieldTextFromDef( r, routeDef.ref, shieldDef, bounds ); - if (textLayout.fontPx > r.px(Gfx.fontSizeThreshold)) { + if (textPlacement.fontPx > r.px(Gfx.fontSizeThreshold)) { break; } } @@ -55,16 +59,16 @@ function getRasterShieldBlank(r, shieldDef, routeDef) { return shieldArtwork; } -function textColor(shieldDef) { +function textColor(shieldDef: ShieldDefinition): string { if (shieldDef != null && typeof shieldDef.textColor != "undefined") { return shieldDef.textColor; } return "black"; } -function getDrawFunc(shieldDef) { +function getDrawFunc(shieldDef: ShieldDefinition): (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => void { if (typeof shieldDef.shapeBlank != "undefined") { - return (r, ctx, ref) => + return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => ShieldDraw.draw( r, shieldDef.shapeBlank.drawFunc, @@ -73,17 +77,17 @@ function getDrawFunc(shieldDef) { ref ); } - return ShieldDraw.blank; + return () => ShieldDraw.blank; } -function getDrawHeight(r, shieldDef) { +function getDrawHeight(r: ShieldRenderingContext, shieldDef: ShieldDefinition): number { if (typeof shieldDef.shapeBlank != "undefined") { return ShieldDraw.shapeHeight(r, shieldDef.shapeBlank.drawFunc); } return r.shieldSize(); } -function drawShieldText(r, ctx, shieldDef, routeDef, shieldBounds) { +function drawShieldText(r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition, routeDef: RouteDefinition, shieldBounds: Dimension): CanvasRenderingContext2D { if (shieldDef.notext) { //If the shield definition says not to draw a ref, ignore ref return ctx; @@ -97,8 +101,8 @@ function drawShieldText(r, ctx, shieldDef, routeDef, shieldBounds) { shieldBounds ); - if (typeof r.options.SHIELD_TEXT_HALO_COLOR_OVERRIDE !== "undefined") { - ctx.strokeStyle = options.SHIELD_TEXT_HALO_COLOR_OVERRIDE; + if (typeof r.debugOptions?.shieldTextHaloColor !== "undefined") { + ctx.strokeStyle = r.debugOptions.shieldTextHaloColor; ShieldText.drawShieldHaloText(r, ctx, routeDef.ref, textLayout); } else if (shieldDef.textHaloColor) { ctx.strokeStyle = shieldDef.textHaloColor; @@ -108,23 +112,23 @@ function drawShieldText(r, ctx, shieldDef, routeDef, shieldBounds) { ctx.fillStyle = textColor(shieldDef); ShieldText.renderShieldText(r, ctx, routeDef.ref, textLayout); - if (r.options.SHIELD_TEXT_BBOX_COLOR) { - ctx.strokeStyle = r.options.SHIELD_TEXT_BBOX_COLOR; //TODO move to debugOptions + if (r.debugOptions?.shieldTextBboxColor) { + ctx.strokeStyle = r.debugOptions.shieldTextBboxColor; //TODO move to debugOptions ctx.lineWidth = r.px(1); ctx.strokeRect( r.px(shieldDef.padding.left - 0.5), r.px(shieldDef.padding.top - 0.5), shieldBounds.width - - r.px(shieldDef.padding.left + shieldDef.padding.right - 1), + r.px(shieldDef.padding.left + shieldDef.padding.right - 1), shieldBounds.height - - r.px(shieldDef.padding.top + shieldDef.padding.bottom - 1) + r.px(shieldDef.padding.top + shieldDef.padding.bottom - 1) ); } return ctx; } -export function missingIconLoader(r, routeDef, spriteID, update) { +export function missingIconLoader(r: ShieldRenderingContext, routeDef: RouteDefinition, spriteID: string, update: boolean): void { let ctx = generateShieldCtx(r, routeDef); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 @@ -134,7 +138,7 @@ export function missingIconLoader(r, routeDef, spriteID, update) { storeSprite(r, spriteID, ctx, update); } -function storeSprite(r, id, ctx, update) { +function storeSprite(r: ShieldRenderingContext, id: string, ctx: CanvasRenderingContext2D, update: boolean): void { const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); r.spriteRepo.putSprite( id, @@ -148,11 +152,11 @@ function storeSprite(r, id, ctx, update) { ); } -export function storeNoShield(r, id) { - storeSprite(r, id, r.emptySprite()); +export function storeNoShield(r: ShieldRenderingContext, id: string): void { + storeSprite(r, id, r.emptySprite(), false); } -function refForDefs(routeDef, shieldDef) { +function refForDefs(routeDef: RouteDefinition, shieldDef: ShieldDefinition) { // Handle special case for manually-applied abbreviations if ( shieldDef.refsByName && @@ -164,7 +168,7 @@ function refForDefs(routeDef, shieldDef) { return routeDef.ref; } -function getShieldDef(shields, routeDef) { +function getShieldDef(shields: ShieldDefinitions, routeDef: RouteDefinition): ShieldDefinition { if (!shields) { //This occurs if the ShieldJSON is loaded from the network and hasn't loaded yet. return null; @@ -179,7 +183,7 @@ function getShieldDef(shields, routeDef) { if (shieldDef == null) { // Default to plain black text with halo and no background shield console.debug("Generic shield for", JSON.stringify(routeDef)); - return isValidRef(routeDef.ref) ? shields.default : null; + return isValidRef(routeDef.ref) ? shields.shield["default"] : null; } var ref = refForDefs(routeDef, shieldDef); @@ -222,7 +226,7 @@ function getShieldDef(shields, routeDef) { * Reformats an alphanumeric ref as Roman numerals, preserving any alphabetic * suffix. */ -export function romanizeRef(ref) { +export function romanizeRef(ref: string): string { let number = parseInt(ref, 10); if (isNaN(number)) { return ref; @@ -246,7 +250,7 @@ export function romanizeRef(ref) { return roman + ref.slice(number.toString().length); } -function getDrawnShieldBounds(r, shieldDef, ref) { +function getDrawnShieldBounds(r: ShieldRenderingContext, shieldDef: ShieldDefinition, ref: string): Dimension { let width = Math.max( r.shieldSize(), ShieldDraw.computeWidth( @@ -261,19 +265,17 @@ function getDrawnShieldBounds(r, shieldDef, ref) { return { width, height }; } -function bannerAreaHeight(r, bannerCount) { +function bannerAreaHeight(r: ShieldRenderingContext, bannerCount: number): number { if (bannerCount === 0) { return 0; } - return ( - bannerCount * r.px(r.options.bannerHeight) + + return bannerCount * r.px(r.options.bannerHeight) + //No padding after last banner - (bannerCount - 1) * r.px(r.options.bannerPadding) - ); + (bannerCount - 1) * r.px(r.options.bannerPadding); } -export function generateShieldCtx(r, routeDef) { - let shieldDef = getShieldDef(r.shieldDef, routeDef); +export function generateShieldCtx(r: ShieldRenderingContext, routeDef: RouteDefinition): CanvasRenderingContext2D { + let shieldDef: ShieldDefinition = getShieldDef(r.shieldDef, routeDef); if (shieldDef == null) { return null; diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index da386c6e6..fc2d8cc0c 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -40,7 +40,7 @@ export function ovalShield( strokeColor: string, textColor: string, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; return { shapeBlank: { @@ -74,7 +74,7 @@ export function circleShield( fillColor: string, strokeColor: string, textColor: string -): ShieldDefinition { +): Partial { return ovalShield(fillColor, strokeColor, textColor, 20); } @@ -94,7 +94,7 @@ export function roundedRectShield( textColor: string, rectWidth: number, radius: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius = radius ?? 2; return { @@ -136,7 +136,7 @@ export function escutcheonDownShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius = radius ?? 0; return { @@ -176,7 +176,7 @@ export function fishheadDownShield( strokeColor: string, textColor: string, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; return { shapeBlank: { @@ -215,7 +215,7 @@ export function triangleDownShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius = radius ?? 2; @@ -259,7 +259,7 @@ export function trapezoidDownShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 0; @@ -304,7 +304,7 @@ export function trapezoidUpShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 0; @@ -347,7 +347,7 @@ export function diamondShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius = radius ?? 2; return { @@ -393,7 +393,7 @@ export function pentagonUpShield( radius1: number, radius2: number, rectWidth: number -): ShieldDefinition { +): Partial { let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius1 = radius1 ?? 2; @@ -444,7 +444,7 @@ export function homePlateDownShield( radius1: number, radius2: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius1 = radius1 ?? 2; radius2 = radius2 ?? 2; @@ -493,7 +493,7 @@ export function homePlateUpShield( radius1: number, radius2: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius1 = radius1 ?? 2; radius2 = radius2 ?? 2; @@ -540,7 +540,7 @@ export function hexagonVerticalShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; radius = radius ?? 2; return { @@ -583,7 +583,7 @@ export function hexagonHorizontalShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 2; @@ -629,7 +629,7 @@ export function octagonVerticalShield( textColor: string, radius: number, rectWidth: number -): ShieldDefinition { +): Partial { let angleInRadians = (sideAngle * Math.PI) / 180; textColor = textColor ?? strokeColor; radius = radius ?? 2; @@ -670,7 +670,7 @@ export function pillShield( strokeColor: string, textColor: string, rectWidth: number -): ShieldDefinition { +): Partial { textColor = textColor ?? strokeColor; return { shapeBlank: { @@ -722,7 +722,7 @@ export function banneredShield( export function paBeltShield( fillColor: string, strokeColor: string -): ShieldDefinition { +): Partial { return { notext: true, shapeBlank: { @@ -745,7 +745,7 @@ export function paBeltShield( export function bransonRouteShield( fillColor: string, strokeColor: string -): ShieldDefinition { +): Partial { return { notext: true, shapeBlank: { diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 826555688..87f72cb55 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -27,7 +27,7 @@ import { DOMGraphicsFactory } from "./document_graphics"; export class ShieldRenderingContext { shieldDef: ShieldDefinitions; options: ShieldOptions; - debugOptions: DebugOptions; + debugOptions?: DebugOptions; gfxFactory: GraphicsFactory; spriteRepo: SpriteRepository; private _emptySpriteCache: CanvasRenderingContext2D; @@ -67,7 +67,7 @@ class MaplibreGLSpriteRepository implements SpriteRepository { putSprite( spriteID: string, image: ImageData, - options: StyleImageMetadata, + options: Partial, update: boolean ): void { if (update && this.map.listImages().includes(spriteID)) { diff --git a/shieldlib/src/shield_text.ts b/shieldlib/src/shield_text.ts index 5bc1071d0..8d19a92a9 100644 --- a/shieldlib/src/shield_text.ts +++ b/shieldlib/src/shield_text.ts @@ -250,7 +250,7 @@ export function layoutShieldText( }; } -const defaultDefForLayout: ShieldDefinition = { +const defaultDefForLayout: Partial = { padding: { top: 0, bottom: 0, @@ -279,7 +279,7 @@ const defaultDefForLayout: ShieldDefinition = { export function layoutShieldTextFromDef( r: ShieldRenderingContext, text: string, - def: ShieldDefinition, + def: Partial, bounds: Dimension ): TextPlacement { //FIX diff --git a/shieldlib/src/types.d.ts b/shieldlib/src/types.d.ts index cb78e4ad2..a91903395 100644 --- a/shieldlib/src/types.d.ts +++ b/shieldlib/src/types.d.ts @@ -1,4 +1,4 @@ -import { StyleImage } from "maplibre-gl"; +import { StyleImage, StyleImageMetadata } from "maplibre-gl"; export interface RouteDefinition { network: string; ref: string; @@ -26,7 +26,7 @@ export interface SpriteConsumer { putSprite( spriteID: string, image: ImageData, - pixelRatio: number, + options: Partial, update: boolean ): void; } diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 5ba35c4c9..ce85408ee 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -1,4 +1,4 @@ -import { StyleImage, StyleImageMetadata } from "maplibre-gl"; +import { StyleImage, StyleImageInterface, StyleImageMetadata } from "maplibre-gl"; /** Defines the set of routes that a shield applies to */ export interface RouteDefinition { @@ -19,6 +19,8 @@ export type Exclusive = export interface ShieldDefinitionBase { /** Color of text drawn on a shield */ textColor?: string; + /** Color of the halo drawn around text */ + textHaloColor?: string; /** Color of banner text */ bannerTextColor?: string; /** Color of banner text halo */ @@ -33,6 +35,16 @@ export interface ShieldDefinitionBase { notext?: boolean; /** Maximum size of shield text */ maxFontSize?: number; + /** ref values that can be mapped from names */ + refsByName?: Map; + /** Transpose numbering system, for example "roman" for Roman numerals */ + numberingSystem?: string; + /** Reflect this shield vertically */ + verticalReflect: boolean; + /** Perform a color lighten operation with this color */ + colorLighten: string; + /** Perform a color darken operation with this color */ + colorDarken: string; } /** @@ -137,8 +149,8 @@ export interface SpriteProducer { export interface SpriteConsumer { putSprite( spriteID: string, - image: ImageData, - options: StyleImageMetadata, + image: ImageData | StyleImageInterface, + options: Partial, update: boolean ): void; } @@ -153,10 +165,13 @@ export interface ShieldDefinitions { }; } -/** Additional debugging-only options */ +/** Additional debugging-only override options */ export interface DebugOptions { /** If set, draw a colored box around shield text constraint */ shieldTextBboxColor?: string; + + /** If set, draw a halo of this color around text */ + shieldTextHaloColor?: string; } /** Global options for shield rendering */ From 6b5419d7e2475958e387074c318142d58dd98f6a Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Mon, 13 May 2024 19:44:12 -0400 Subject: [PATCH 07/47] Fix default bug and remove dead code --- shieldlib/src/shield.ts | 6 ++++-- shieldlib/src/shield_canvas_draw.ts | 14 -------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index 505fa57a4..affed71b9 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -77,7 +77,8 @@ function getDrawFunc(shieldDef: ShieldDefinition): (r: ShieldRenderingContext, c ref ); } - return () => ShieldDraw.blank; + console.warn(`Draw function not defined in:\n${shieldDef}`); + return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => {}; } function getDrawHeight(r: ShieldRenderingContext, shieldDef: ShieldDefinition): number { @@ -183,7 +184,8 @@ function getShieldDef(shields: ShieldDefinitions, routeDef: RouteDefinition): Sh if (shieldDef == null) { // Default to plain black text with halo and no background shield console.debug("Generic shield for", JSON.stringify(routeDef)); - return isValidRef(routeDef.ref) ? shields.shield["default"] : null; + + return isValidRef(routeDef.ref) ? shields["default"] : null; } var ref = refForDefs(routeDef, shieldDef); diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index d79160fc5..19be1e854 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -97,20 +97,6 @@ function ellipse( return width; } -export function blank(r: ShieldRenderingContext, ref: string) { - var shieldWidth = - ShieldText.calculateTextWidth(r, ref, r.px(genericShieldFontSize)) + - r.px(2); - var width = Math.max( - r.px(minGenericShieldWidth), - Math.min(r.px(maxGenericShieldWidth), shieldWidth) - ); - return r.gfxFactory.createGraphics({ - width: width, - height: r.shieldSize(), - }); -} - export function roundedRectangle( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, From 10fcecbf290abb56274cd996ababf8ef6f94b1e6 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 14 May 2024 07:16:22 -0400 Subject: [PATCH 08/47] Wire in debug options --- src/americana.js | 19 +++++++++++-------- src/js/map_builder.ts | 6 +++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/americana.js b/src/americana.js index 5508382ba..5ad5cadfb 100644 --- a/src/americana.js +++ b/src/americana.js @@ -28,6 +28,16 @@ upgradeLegacyHash(); loadRTLPlugin(); +let debugOptions = {}; + +if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { + debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; +} + +if (config.SHIELD_TEXT_BBOX_COLOR) { + debugOptions.shieldTextBboxColor = config.SHIELD_TEXT_BBOX_COLOR; +} + export const map = createMap(window, (shields) => shieldDefLoad(shields), { container: "map", // container id hash: "map", @@ -36,14 +46,7 @@ export const map = createMap(window, (shields) => shieldDefLoad(shields), { center: [-94, 40.5], zoom: 4, attributionControl: false, -}); - -let options = {}; - -if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { - options["SHIELD_TEXT_HALO_COLOR_OVERRIDE"] = - config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; -} +}, {}, debugOptions); // Add our sample data. let sampleControl = new SampleControl({ permalinks: true }); diff --git a/src/js/map_builder.ts b/src/js/map_builder.ts index 73ad97f9d..9e6f44167 100644 --- a/src/js/map_builder.ts +++ b/src/js/map_builder.ts @@ -54,12 +54,12 @@ export function loadRTLPlugin(): void { } export function createMap( - window, + window: Window, shieldDefCallback: (shields: ShieldDefinitions) => void, options: MapOptions ): Map { - window.maplibregl = maplibregl; - let map: Map = (window.map = new maplibregl.Map(options)); + window["maplibregl"] = maplibregl; + let map: Map = (window["map"] = new maplibregl.Map(options)); const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) .filterImageID(shieldPredicate) From 3ec2ee712d2b1e195d00b801d7281e91187e6cde Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 14 May 2024 07:24:56 -0400 Subject: [PATCH 09/47] Hook up debug options --- src/americana.js | 4 ++-- src/js/map_builder.ts | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/americana.js b/src/americana.js index 5ad5cadfb..8662c6523 100644 --- a/src/americana.js +++ b/src/americana.js @@ -28,7 +28,7 @@ upgradeLegacyHash(); loadRTLPlugin(); -let debugOptions = {}; +const debugOptions = {}; if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; @@ -46,7 +46,7 @@ export const map = createMap(window, (shields) => shieldDefLoad(shields), { center: [-94, 40.5], zoom: 4, attributionControl: false, -}, {}, debugOptions); +}, debugOptions); // Add our sample data. let sampleControl = new SampleControl({ permalinks: true }); diff --git a/src/js/map_builder.ts b/src/js/map_builder.ts index 9e6f44167..3577f10d5 100644 --- a/src/js/map_builder.ts +++ b/src/js/map_builder.ts @@ -17,6 +17,7 @@ import * as Poi from "../js/poi.js"; import * as Label from "../constants/label.js"; import * as Style from "../js/style.js"; import maplibregl, { Map, MapOptions, StyleSpecification } from "maplibre-gl"; +import { DebugOptions } from "@americana/maplibre-shield-generator/src/types.js"; export function buildStyle(): StyleSpecification { var getUrl = window.location; @@ -56,12 +57,14 @@ export function loadRTLPlugin(): void { export function createMap( window: Window, shieldDefCallback: (shields: ShieldDefinitions) => void, - options: MapOptions + options: MapOptions, + debugOptions: DebugOptions ): Map { window["maplibregl"] = maplibregl; let map: Map = (window["map"] = new maplibregl.Map(options)); const shieldRenderer = new URLShieldRenderer("shields.json", routeParser) + .debugOptions(debugOptions) .filterImageID(shieldPredicate) .filterNetwork(networkPredicate) .renderOnMaplibreGL(map) From 7469bb51dcb97617a4b4c85084c9949d62bd2100 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 14 May 2024 07:26:36 -0400 Subject: [PATCH 10/47] Remove TODO --- shieldlib/src/shield.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index affed71b9..a60cc7282 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -114,7 +114,7 @@ function drawShieldText(r: ShieldRenderingContext, ctx: CanvasRenderingContext2D ShieldText.renderShieldText(r, ctx, routeDef.ref, textLayout); if (r.debugOptions?.shieldTextBboxColor) { - ctx.strokeStyle = r.debugOptions.shieldTextBboxColor; //TODO move to debugOptions + ctx.strokeStyle = r.debugOptions.shieldTextBboxColor; ctx.lineWidth = r.px(1); ctx.strokeRect( r.px(shieldDef.padding.left - 0.5), From bd0993f9e9fe04cdbb279451c702b03be5015eaa Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Tue, 14 May 2024 21:18:09 -0400 Subject: [PATCH 11/47] Apply debug options to all endpoints --- src/americana.js | 11 +---------- src/bare_americana.js | 3 ++- src/debug_config.ts | 14 ++++++++++++++ src/shieldtest.js | 2 ++ 4 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 src/debug_config.ts diff --git a/src/americana.js b/src/americana.js index 8662c6523..892377c2c 100644 --- a/src/americana.js +++ b/src/americana.js @@ -16,6 +16,7 @@ import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; import { createMap, loadRTLPlugin, buildStyle } from "./js/map_builder.js"; +import { debugOptions } from "./debug_config.js"; function upgradeLegacyHash() { let hash = window.location.hash.substr(1); @@ -28,16 +29,6 @@ upgradeLegacyHash(); loadRTLPlugin(); -const debugOptions = {}; - -if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { - debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; -} - -if (config.SHIELD_TEXT_BBOX_COLOR) { - debugOptions.shieldTextBboxColor = config.SHIELD_TEXT_BBOX_COLOR; -} - export const map = createMap(window, (shields) => shieldDefLoad(shields), { container: "map", // container id hash: "map", diff --git a/src/bare_americana.js b/src/bare_americana.js index 256716578..92439f5d8 100644 --- a/src/bare_americana.js +++ b/src/bare_americana.js @@ -3,6 +3,7 @@ import "maplibre-gl/dist/maplibre-gl.css"; import { createMap, loadRTLPlugin, buildStyle } from "./js/map_builder.js"; +import { debugOptions } from "./debug_config.js"; loadRTLPlugin(); @@ -15,7 +16,7 @@ export const map = createMap(window, (shields) => shieldDefLoad(), { zoom: 4, fadeDuration: 0, attributionControl: false, -}); +}, debugOptions); function shieldDefLoad() { if (window.top === window.self) { diff --git a/src/debug_config.ts b/src/debug_config.ts new file mode 100644 index 000000000..2dd4cac8d --- /dev/null +++ b/src/debug_config.ts @@ -0,0 +1,14 @@ +import { DebugOptions } from "@americana/maplibre-shield-generator/src/types.js"; +import config from "./config.js"; + +export const debugOptions: DebugOptions = {}; + +if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { + debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; +} + +if (config.SHIELD_TEXT_BBOX_COLOR) { + debugOptions.shieldTextBboxColor = config.SHIELD_TEXT_BBOX_COLOR; +} + +export { debugOptions as default } \ No newline at end of file diff --git a/src/shieldtest.js b/src/shieldtest.js index 1d5d78835..43ee5b361 100644 --- a/src/shieldtest.js +++ b/src/shieldtest.js @@ -8,6 +8,7 @@ import { networkPredicate, routeParser, } from "./js/shield_format.js"; +import { debugOptions } from "./debug_config.js"; var getUrl = window.location; var baseUrl = getUrl.protocol + "//" + getUrl.host + getUrl.pathname; @@ -27,6 +28,7 @@ export const map = (window.map = new maplibregl.Map({ const shields = ShieldDef.loadShields(); const shieldRenderer = new ShieldRenderer(shields, routeParser) + .debugOptions(debugOptions) .filterImageID(shieldPredicate) .filterNetwork(networkPredicate) .renderOnMaplibreGL(map); From 587691386c8a49ed94b627798d28dc7cc1750299 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Wed, 15 May 2024 18:51:41 -0400 Subject: [PATCH 12/47] Add missing types --- shieldlib/src/shield.ts | 2 +- shieldlib/src/types.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index a60cc7282..a7a01ec98 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -175,7 +175,7 @@ function getShieldDef(shields: ShieldDefinitions, routeDef: RouteDefinition): Sh return null; } - var shieldDef = shields[routeDef.network]; + let shieldDef: ShieldDefinition = shields[routeDef.network]; if (routeDef == null) { return null; diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index ce85408ee..ace751298 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -45,6 +45,12 @@ export interface ShieldDefinitionBase { colorLighten: string; /** Perform a color darken operation with this color */ colorDarken: string; + /** Provide a different shield style for specific name values */ + overrideByName: Map + /** Provide a different shield style for specific ref values */ + overrideByRef: Map + /** Provide a different shield style when there's no ref value */ + noref: ShieldDefinition } /** From 81e0836adbfda56771076a24322554b2a3acf17f Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Thu, 16 May 2024 21:30:10 -0400 Subject: [PATCH 13/47] Add shield for Inner Loop, Rochester, NY --- src/js/shield_defs.js | 10 ++++++++++ src/shieldtest.js | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 4cd44e443..71f49ea84 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1804,6 +1804,13 @@ export function loadShields() { }, }; shields["US:NY:Truck"] = banneredShield(shields["US:NY"], ["TRK"]); + shields["US:NY:Inner_Loop"] = trapezoidDownShield( + 10, + Color.shields.white, + Color.shields.black, + Color.shields.black, + 4 + ); shields["US:NY:Thruway"] = { noref: { spriteBlank: "shield_us_ny_thruway", @@ -3856,6 +3863,9 @@ export function loadShields() { }, }; + shields["US:NY:Inner_Loop"].refsByName = { + "Inner Loop": "LOOP", + }; shields["US:NY:Parkway"].refsByName = { "Bear Mountain State Parkway": "BMP", "Bronx River Parkway": "BRP", diff --git a/src/shieldtest.js b/src/shieldtest.js index 43ee5b361..9f354b97b 100644 --- a/src/shieldtest.js +++ b/src/shieldtest.js @@ -347,6 +347,10 @@ const iterShields = function* () { network: "US:NH:Turnpike", names: ["Blue Star Turnpike", "Everett Turnpike", "Spaulding Turnpike"], }; + yield { + network: "US:NY:Inner_Loop", + names: ["Inner Loop"], + }; }; const renderAllShields = async () => { From ae90b9883d1c82915bb44bea631c581f160d9329 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 17 May 2024 22:16:23 -0400 Subject: [PATCH 14/47] Make dedicated pill function --- scripts/taginfo.js | 9 ++++----- shieldlib/src/shield_canvas_draw.ts | 11 +++++++++++ shieldlib/src/shield_helper.ts | 3 +-- test/sample_locations.json | 8 ++++++++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/scripts/taginfo.js b/scripts/taginfo.js index e0f9a94ac..a0053ee2a 100644 --- a/scripts/taginfo.js +++ b/scripts/taginfo.js @@ -138,12 +138,11 @@ function addNetworkTags(project) { ); switch (shapeDef.drawFunc) { + case "pill": + prettyShapeName = "pill-shaped"; + break; case "roundedRectangle": - if (shapeDef.params.radius == 10) { - prettyShapeName = "pill-shaped"; - } else { - prettyShapeName = "rectangular"; - } + prettyShapeName = "rectangular"; break; case "hexagonVertical": prettyShapeName = "vertical hexagonal"; diff --git a/shieldlib/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 19be1e854..2799362c5 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -97,6 +97,16 @@ function ellipse( return width; } +export function pill( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + params: ShapeBlankParams, + ref?: string +): number { + params.radius = r.shieldSize() / 2; + return roundedRectangle(r, ctx, params, ref); +} + export function roundedRectangle( r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, @@ -789,6 +799,7 @@ registerDrawFunction("hexagonVertical", hexagonVertical); registerDrawFunction("hexagonHorizontal", hexagonHorizontal); registerDrawFunction("octagonVertical", octagonVertical); registerDrawFunction("pentagon", pentagon); +registerDrawFunction("pill", pill); registerDrawFunction("roundedRectangle", roundedRectangle); registerDrawFunction("trapezoid", trapezoid); registerDrawFunction("triangle", triangle); diff --git a/shieldlib/src/shield_helper.ts b/shieldlib/src/shield_helper.ts index fc2d8cc0c..d6da83d26 100644 --- a/shieldlib/src/shield_helper.ts +++ b/shieldlib/src/shield_helper.ts @@ -674,12 +674,11 @@ export function pillShield( textColor = textColor ?? strokeColor; return { shapeBlank: { - drawFunc: "roundedRectangle", + drawFunc: "pill", params: { fillColor, strokeColor, rectWidth, - radius: 10, }, }, textLayout: textConstraint("ellipse"), diff --git a/test/sample_locations.json b/test/sample_locations.json index dd5ba8dfe..efb4e9411 100644 --- a/test/sample_locations.json +++ b/test/sample_locations.json @@ -87,5 +87,13 @@ "width": 400, "height": 400 } + }, + { + "location": "12/38.86185/-77.20877", + "name": "northen_va_highways", + "viewport": { + "width": 400, + "height": 400 + } } ] From d8a24839f38a346012cee500b16cac37677108f8 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 17 May 2024 22:25:27 -0400 Subject: [PATCH 15/47] Update README with pill shape --- shieldlib/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 6df7226bc..0602c4d22 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -297,7 +297,8 @@ If `shapeBlank` is specified, the shield will be drawn as a shape. This needs to | ![](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/archive/1/17/20230326013156%21Pill_shape.svg) | `pill` | +| ![](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) | `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` | From 9b2faeda1625173f8a507d3c0683a780a3811053 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 13:44:17 -0400 Subject: [PATCH 16/47] Allow hard-coded ref --- CONTRIBUTING.md | 2 ++ shieldlib/README.md | 1 + shieldlib/src/shield.ts | 6 +++++- shieldlib/src/types.ts | 2 ++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41a359531..6c4e9a7e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -316,6 +316,8 @@ Additionally, **`refsByName`** is an object mapping way names to text that can b 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. +In the case where all routes in a network should be drawn with the same shield text, set the text value in `ref`. + ### Banners 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/shieldlib/README.md b/shieldlib/README.md index 6df7226bc..1bdbac279 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -182,6 +182,7 @@ You should create one definition entry for each network. The entry key must matc - **`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. +- **`ref`**: specify that all shields in this network should be drawn with the specified `ref` value. - **`overrideByName`**: specify that particular `name` should use a specific **`spriteBlank`** which differs from the rest of the network. ### Handling special case networks diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index a60cc7282..48c62b700 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -78,7 +78,7 @@ function getDrawFunc(shieldDef: ShieldDefinition): (r: ShieldRenderingContext, c ); } console.warn(`Draw function not defined in:\n${shieldDef}`); - return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => {}; + return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => { }; } function getDrawHeight(r: ShieldRenderingContext, shieldDef: ShieldDefinition): number { @@ -159,6 +159,9 @@ export function storeNoShield(r: ShieldRenderingContext, id: string): void { function refForDefs(routeDef: RouteDefinition, shieldDef: ShieldDefinition) { // Handle special case for manually-applied abbreviations + if (shieldDef.ref) { + return shieldDef.ref; + } if ( shieldDef.refsByName && routeDef.name && @@ -216,6 +219,7 @@ function getShieldDef(shields: ShieldDefinitions, routeDef: RouteDefinition): Sh if ( !isValidRef(ref) && !shieldDef.notext && + !shieldDef.ref && !(shieldDef.refsByName && routeDef.name) ) { return null; diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index ce85408ee..e0338ec70 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -37,6 +37,8 @@ export interface ShieldDefinitionBase { maxFontSize?: number; /** ref values that can be mapped from names */ refsByName?: Map; + /** hard-code the shield text to this value */ + ref?: string; /** Transpose numbering system, for example "roman" for Roman numerals */ numberingSystem?: string; /** Reflect this shield vertically */ From 1b4b3a6ce610e87cf3f7a93cee57ad2808705edc Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 18 May 2024 16:03:47 -0400 Subject: [PATCH 17/47] Format code --- shieldlib/src/shield.ts | 97 +++++++++++++++++++++++++++++++++-------- shieldlib/src/types.ts | 6 ++- src/americana.js | 23 ++++++---- src/bare_americana.js | 25 ++++++----- src/debug_config.ts | 6 +-- 5 files changed, 116 insertions(+), 41 deletions(-) diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index a60cc7282..2c2e32196 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -5,11 +5,20 @@ import * as ShieldDraw from "./shield_canvas_draw"; import * as Gfx from "./screen_gfx"; import { drawBanners, drawBannerHalos, getBannerCount } from "./shield_banner"; import { ShieldRenderingContext } from "./shield_renderer"; -import { Dimension, RouteDefinition, ShieldDefinition, ShieldDefinitions } from "./types"; +import { + Dimension, + RouteDefinition, + ShieldDefinition, + ShieldDefinitions, +} from "./types"; import { TextPlacement } from "./shield_text"; import { StyleImage } from "maplibre-gl"; -function compoundShieldSize(r: ShieldRenderingContext, dimension: Dimension, bannerCount: number): Dimension { +function compoundShieldSize( + r: ShieldRenderingContext, + dimension: Dimension, + bannerCount: number +): Dimension { return { width: dimension.width, height: @@ -31,7 +40,11 @@ export function isValidRef(ref: string): boolean { * @param {*} routeDef - route tagging from OSM * @returns shield blank or null if no shield exists */ -function getRasterShieldBlank(r: ShieldRenderingContext, shieldDef: ShieldDefinition, routeDef: RouteDefinition): StyleImage { +function getRasterShieldBlank( + r: ShieldRenderingContext, + shieldDef: ShieldDefinition, + routeDef: RouteDefinition +): StyleImage { let shieldArtwork = null; let textPlacement: TextPlacement; let bannerCount: number = 0; @@ -66,9 +79,19 @@ function textColor(shieldDef: ShieldDefinition): string { return "black"; } -function getDrawFunc(shieldDef: ShieldDefinition): (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => void { +function getDrawFunc( + shieldDef: ShieldDefinition +): ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + ref: string +) => void { if (typeof shieldDef.shapeBlank != "undefined") { - return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => + return ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + ref: string + ) => ShieldDraw.draw( r, shieldDef.shapeBlank.drawFunc, @@ -78,17 +101,30 @@ function getDrawFunc(shieldDef: ShieldDefinition): (r: ShieldRenderingContext, c ); } console.warn(`Draw function not defined in:\n${shieldDef}`); - return (r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, ref: string) => {}; + return ( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + ref: string + ) => {}; } -function getDrawHeight(r: ShieldRenderingContext, shieldDef: ShieldDefinition): number { +function getDrawHeight( + r: ShieldRenderingContext, + shieldDef: ShieldDefinition +): number { if (typeof shieldDef.shapeBlank != "undefined") { return ShieldDraw.shapeHeight(r, shieldDef.shapeBlank.drawFunc); } return r.shieldSize(); } -function drawShieldText(r: ShieldRenderingContext, ctx: CanvasRenderingContext2D, shieldDef: ShieldDefinition, routeDef: RouteDefinition, shieldBounds: Dimension): CanvasRenderingContext2D { +function drawShieldText( + r: ShieldRenderingContext, + ctx: CanvasRenderingContext2D, + shieldDef: ShieldDefinition, + routeDef: RouteDefinition, + shieldBounds: Dimension +): CanvasRenderingContext2D { if (shieldDef.notext) { //If the shield definition says not to draw a ref, ignore ref return ctx; @@ -120,16 +156,21 @@ function drawShieldText(r: ShieldRenderingContext, ctx: CanvasRenderingContext2D r.px(shieldDef.padding.left - 0.5), r.px(shieldDef.padding.top - 0.5), shieldBounds.width - - r.px(shieldDef.padding.left + shieldDef.padding.right - 1), + r.px(shieldDef.padding.left + shieldDef.padding.right - 1), shieldBounds.height - - r.px(shieldDef.padding.top + shieldDef.padding.bottom - 1) + r.px(shieldDef.padding.top + shieldDef.padding.bottom - 1) ); } return ctx; } -export function missingIconLoader(r: ShieldRenderingContext, routeDef: RouteDefinition, spriteID: string, update: boolean): void { +export function missingIconLoader( + r: ShieldRenderingContext, + routeDef: RouteDefinition, + spriteID: string, + update: boolean +): void { let ctx = generateShieldCtx(r, routeDef); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 @@ -139,7 +180,12 @@ export function missingIconLoader(r: ShieldRenderingContext, routeDef: RouteDefi storeSprite(r, spriteID, ctx, update); } -function storeSprite(r: ShieldRenderingContext, id: string, ctx: CanvasRenderingContext2D, update: boolean): void { +function storeSprite( + r: ShieldRenderingContext, + id: string, + ctx: CanvasRenderingContext2D, + update: boolean +): void { const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); r.spriteRepo.putSprite( id, @@ -169,7 +215,10 @@ function refForDefs(routeDef: RouteDefinition, shieldDef: ShieldDefinition) { return routeDef.ref; } -function getShieldDef(shields: ShieldDefinitions, routeDef: RouteDefinition): ShieldDefinition { +function getShieldDef( + shields: ShieldDefinitions, + routeDef: RouteDefinition +): ShieldDefinition { if (!shields) { //This occurs if the ShieldJSON is loaded from the network and hasn't loaded yet. return null; @@ -252,7 +301,11 @@ export function romanizeRef(ref: string): string { return roman + ref.slice(number.toString().length); } -function getDrawnShieldBounds(r: ShieldRenderingContext, shieldDef: ShieldDefinition, ref: string): Dimension { +function getDrawnShieldBounds( + r: ShieldRenderingContext, + shieldDef: ShieldDefinition, + ref: string +): Dimension { let width = Math.max( r.shieldSize(), ShieldDraw.computeWidth( @@ -267,16 +320,24 @@ function getDrawnShieldBounds(r: ShieldRenderingContext, shieldDef: ShieldDefini return { width, height }; } -function bannerAreaHeight(r: ShieldRenderingContext, bannerCount: number): number { +function bannerAreaHeight( + r: ShieldRenderingContext, + bannerCount: number +): number { if (bannerCount === 0) { return 0; } - return bannerCount * r.px(r.options.bannerHeight) + + return ( + bannerCount * r.px(r.options.bannerHeight) + //No padding after last banner - (bannerCount - 1) * r.px(r.options.bannerPadding); + (bannerCount - 1) * r.px(r.options.bannerPadding) + ); } -export function generateShieldCtx(r: ShieldRenderingContext, routeDef: RouteDefinition): CanvasRenderingContext2D { +export function generateShieldCtx( + r: ShieldRenderingContext, + routeDef: RouteDefinition +): CanvasRenderingContext2D { let shieldDef: ShieldDefinition = getShieldDef(r.shieldDef, routeDef); if (shieldDef == null) { diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index ce85408ee..593da3744 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -1,4 +1,8 @@ -import { StyleImage, StyleImageInterface, StyleImageMetadata } from "maplibre-gl"; +import { + StyleImage, + StyleImageInterface, + StyleImageMetadata, +} from "maplibre-gl"; /** Defines the set of routes that a shield applies to */ export interface RouteDefinition { diff --git a/src/americana.js b/src/americana.js index 892377c2c..e208b7cdf 100644 --- a/src/americana.js +++ b/src/americana.js @@ -29,15 +29,20 @@ upgradeLegacyHash(); loadRTLPlugin(); -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, -}, debugOptions); +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, + }, + debugOptions +); // Add our sample data. let sampleControl = new SampleControl({ permalinks: true }); diff --git a/src/bare_americana.js b/src/bare_americana.js index 92439f5d8..a0bdb3081 100644 --- a/src/bare_americana.js +++ b/src/bare_americana.js @@ -7,16 +7,21 @@ import { debugOptions } from "./debug_config.js"; loadRTLPlugin(); -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, -}, debugOptions); +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, + }, + debugOptions +); function shieldDefLoad() { if (window.top === window.self) { diff --git a/src/debug_config.ts b/src/debug_config.ts index 2dd4cac8d..c1285f49d 100644 --- a/src/debug_config.ts +++ b/src/debug_config.ts @@ -4,11 +4,11 @@ import config from "./config.js"; export const debugOptions: DebugOptions = {}; if (config.SHIELD_TEXT_HALO_COLOR_OVERRIDE) { - debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; + debugOptions.shieldTextHaloColor = config.SHIELD_TEXT_HALO_COLOR_OVERRIDE; } if (config.SHIELD_TEXT_BBOX_COLOR) { - debugOptions.shieldTextBboxColor = config.SHIELD_TEXT_BBOX_COLOR; + debugOptions.shieldTextBboxColor = config.SHIELD_TEXT_BBOX_COLOR; } -export { debugOptions as default } \ No newline at end of file +export { debugOptions as default }; From 63da3671bdf21ee46342511a31b3b5df10d288ce Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 19:08:28 -0400 Subject: [PATCH 18/47] prettier upgrade --- .github/workflows/lint.yml | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 04f98f9bb..ff1d0ed79 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,12 +18,19 @@ jobs: # This is important to fetch the changes to the previous commit fetch-depth: 0 - - name: Prettify code - uses: creyD/prettier_action@v3.3 # https://github.com/creyD/prettier_action + - name: Set up Node.js + uses: actions/setup-node@v3 with: - dry: true - prettier_options: --write . - # Setting only_changed to false picks up new files - only_changed: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + node-version: '16' # Specify the Node.js version + + - name: Install dependencies + run: npm install + + - name: Run Prettier + id: prettier + run: npx prettier --check . + continue-on-error: false + + - name: Check if Prettier failed + if: steps.prettier.outcome == 'failure' + run: exit 1 From c17ebf90a99389f006adc297b633e45ec223407d Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 19:11:32 -0400 Subject: [PATCH 19/47] Node 18 --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ff1d0ed79..43a309165 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '16' # Specify the Node.js version + node-version: '18' # Specify the Node.js version - name: Install dependencies run: npm install From 1cf7a6deef843c55f7e0b2cf07e35f137297ced0 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 19:13:44 -0400 Subject: [PATCH 20/47] Run prettier on the prettier action config --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 43a309165..418816635 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '18' # Specify the Node.js version + node-version: "18" # Specify the Node.js version - name: Install dependencies run: npm install From dd2192e2564f11667cde60ba5ea967ce646533db Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 19:40:40 -0400 Subject: [PATCH 21/47] Fix 2x zoom and run prettier --- shieldlib/README.md | 28 ++++++++++++++-------------- shieldlib/src/shield_canvas_draw.ts | 6 +++++- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 0602c4d22..e40ee6ec7 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -287,20 +287,20 @@ 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/archive/1/17/20230326013156%21Pill_shape.svg) | `pill` | -| ![](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) | `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/archive/1/17/20230326013156%21Pill_shape.svg) | `pill` | +| ![](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) | `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/src/shield_canvas_draw.ts b/shieldlib/src/shield_canvas_draw.ts index 2799362c5..a4370347e 100644 --- a/shieldlib/src/shield_canvas_draw.ts +++ b/shieldlib/src/shield_canvas_draw.ts @@ -103,7 +103,11 @@ export function pill( params: ShapeBlankParams, ref?: string ): number { - params.radius = r.shieldSize() / 2; + /* + shieldSize() has to be divided by r.px(1) to get down to 1x resolution. + Then we divide in half again to get a 50% height corner radius, hence px(2). + */ + params.radius = r.shieldSize() / r.px(2); return roundedRectangle(r, ctx, params, ref); } From 96fe9c81729dd213414508fbb4e863a5b9115a48 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sat, 18 May 2024 22:24:49 -0400 Subject: [PATCH 22/47] Add gz stats --- scripts/stats.js | 36 +++++++++++++++++++++++++++++++++++- scripts/stats_compare.js | 16 ++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/scripts/stats.js b/scripts/stats.js index c493f120a..3644eb238 100644 --- a/scripts/stats.js +++ b/scripts/stats.js @@ -2,6 +2,7 @@ import * as Style from "../src/js/style.js"; import config from "../src/config.js"; import { Command, Option } from "commander"; import fs from "node:fs"; +import zlib from "node:zlib"; const program = new Command(); program @@ -36,6 +37,18 @@ program "allJson" ) ) + .addOption( + new Option( + "-gsh, --gzip-shield-json-size", + "gzip compressed size of ShieldJSON" + ).conflicts("allJson") + ) + .addOption( + new Option( + "-gs, --gzip-style-size", + "gzip compressed size of style" + ).conflicts("allJson") + ) .option("-loc, --locales ", "language codes", ["mul"]) .option("-j, --all-json", "output all stats in JSON") .option("-pp, --pretty", "pretty-print JSON output") @@ -81,6 +94,10 @@ function distFileSize(distDir, path) { return fs.statSync(`${distDir}/${path}`).size; } +function gzipSize(content) { + return zlib.gzipSync(content).length; +} + const spriteSheet1xSize = spriteSheetSize(distDir, true); if (opts.spritesheet1xSize) { console.log(spriteSheet1xSize); @@ -93,27 +110,44 @@ if (opts.spritesheet2xSize) { process.exit(); } +const shieldJSONPath = `${distDir}/shields.json`; const shieldJSONSize = distFileSize(distDir, "shields.json"); if (opts.shieldJsonSize) { console.log(shieldJSONSize); process.exit(); } -const styleSize = JSON.stringify(layers).length; +const shieldJSONContent = fs.readFileSync(shieldJSONPath, "utf8"); +const gzipShieldJSONSize = gzipSize(shieldJSONContent); +if (opts.gzipShieldJsonSize) { + console.log(gzipShieldJSONSize); + process.exit(); +} + +const styleContent = JSON.stringify(layers); +const styleSize = styleContent.length; if (opts.layerSize) { console.log(styleSize); process.exit(); } +const gzipStyleSize = gzipSize(styleContent); +if (opts.gzipStyleSize) { + console.log(gzipStyleSize); + process.exit(); +} + const layerMap = new Map(); const stats = { layerCount, styleSize, + gzipStyleSize, layerGroup: {}, spriteSheet1xSize, spriteSheet2xSize, shieldJSONSize, + gzipShieldJSONSize, }; for (let i = 0; i < layerCount; i++) { diff --git a/scripts/stats_compare.js b/scripts/stats_compare.js index bf999529a..64623c7c6 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -28,6 +28,13 @@ const sizeRow = mdCompareRow( difference.styleSize ); +const gzSizeRow = mdCompareRow( + "Compressed StyleJSON Size (b)", + stats1.gzipStyleSize, + stats2.gzipStyleSize, + difference.styleSize +); + const shieldRow = mdCompareRow( "ShieldJSON Size (b)", stats1.shieldJSONSize, @@ -35,6 +42,13 @@ const shieldRow = mdCompareRow( difference.shieldJSONSize ); +const gzShieldRow = mdCompareRow( + "Compressed ShieldJSON Size (b)", + stats1.gzipShieldJSONSize, + stats2.gzipShieldJSONSize, + difference.shieldJSONSize +); + const ss1xRow = mdCompareRow( "1x Sprite Sheet Size (b)", stats1.spriteSheet1xSize, @@ -52,9 +66,11 @@ const ss2xRow = mdCompareRow( printTable("Style size statistics", [ layersRow, sizeRow, + gzSizeRow, ss1xRow, ss2xRow, shieldRow, + gzShieldRow, ]); /** From 80156e8ef50a8a184552aa4838867a28d1fcfdbd Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 19 May 2024 18:17:13 -0400 Subject: [PATCH 23/47] Run prettier --- doc-img/shield_map_world.svg | 2 +- shieldlib/src/types.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc-img/shield_map_world.svg b/doc-img/shield_map_world.svg index c11a1fe1d..ded937405 100644 --- a/doc-img/shield_map_world.svg +++ b/doc-img/shield_map_world.svg @@ -2314,4 +2314,4 @@ If overlapping claims in Antarctica are configured to be shown at the same time, .aqclgb: portion claimed by Chile and the United Kingdom .aqarcl: portion claimed by Argentina, Chile and the United Kingdom --> - + \ No newline at end of file diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 235bfc746..b008a5cea 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -52,11 +52,11 @@ export interface ShieldDefinitionBase { /** Perform a color darken operation with this color */ colorDarken: string; /** Provide a different shield style for specific name values */ - overrideByName: Map + overrideByName: Map; /** Provide a different shield style for specific ref values */ - overrideByRef: Map + overrideByRef: Map; /** Provide a different shield style when there's no ref value */ - noref: ShieldDefinition + noref: ShieldDefinition; } /** From 1b3799d6b114f47c97acb2ebd34f9d10df7f7e75 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 19 May 2024 19:34:06 -0400 Subject: [PATCH 24/47] Use new ref override for Rochester Inner Loop shield definition --- src/js/shield_defs.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 71f49ea84..85de4abf5 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1811,6 +1811,7 @@ export function loadShields() { Color.shields.black, 4 ); + shields["US:NY:Inner_Loop"].ref = "LOOP"; shields["US:NY:Thruway"] = { noref: { spriteBlank: "shield_us_ny_thruway", @@ -3863,9 +3864,6 @@ export function loadShields() { }, }; - shields["US:NY:Inner_Loop"].refsByName = { - "Inner Loop": "LOOP", - }; shields["US:NY:Parkway"].refsByName = { "Bear Mountain State Parkway": "BMP", "Bronx River Parkway": "BRP", From dd5cfdd403ea4d68fc0d6f3861ac8354a007e79e Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 19 May 2024 19:52:22 -0400 Subject: [PATCH 25/47] Move US:I down 1px --- src/js/shield_defs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 4cd44e443..e81fcf747 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -450,8 +450,8 @@ export function loadShields() { padding: { left: 4, right: 4, - top: 5, - bottom: 5, + top: 6, + bottom: 4, }, }; From 021e204d1f50a7407e91e8cea700ce6eff8a51a3 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 19 May 2024 20:53:01 -0400 Subject: [PATCH 26/47] Update src/js/shield_defs.js Co-authored-by: Clay Smalley --- 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 e81fcf747..24189b40a 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -451,7 +451,7 @@ export function loadShields() { left: 4, right: 4, top: 6, - bottom: 4, + bottom: 5, }, }; From 3e24ab325019471a65bbf123d5b06455689d4c09 Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Sun, 19 May 2024 22:22:49 -0400 Subject: [PATCH 27/47] Fix copy/paste typo --- 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 64623c7c6..9e620fb09 100644 --- a/scripts/stats_compare.js +++ b/scripts/stats_compare.js @@ -32,7 +32,7 @@ const gzSizeRow = mdCompareRow( "Compressed StyleJSON Size (b)", stats1.gzipStyleSize, stats2.gzipStyleSize, - difference.styleSize + difference.gzipStyleSize ); const shieldRow = mdCompareRow( @@ -46,7 +46,7 @@ const gzShieldRow = mdCompareRow( "Compressed ShieldJSON Size (b)", stats1.gzipShieldJSONSize, stats2.gzipShieldJSONSize, - difference.shieldJSONSize + difference.gzipShieldJSONSize ); const ss1xRow = mdCompareRow( From 1f57d82cd2f02cdd7d7afde16e5a70afa51cc7b4 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Mon, 27 May 2024 21:00:23 -0400 Subject: [PATCH 28/47] add icons for capitals of admin_level 5 and 6 --- icons/place_dot_in_circle.svg | 4 ++++ src/layer/place.js | 42 ++++++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 icons/place_dot_in_circle.svg diff --git a/icons/place_dot_in_circle.svg b/icons/place_dot_in_circle.svg new file mode 100644 index 000000000..96133cea2 --- /dev/null +++ b/icons/place_dot_in_circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/layer/place.js b/src/layer/place.js index a034b8d32..1020e7be3 100644 --- a/src/layer/place.js +++ b/src/layer/place.js @@ -34,6 +34,22 @@ const minorLocationStepFilter = [ [">=", ["get", "rank"], 1], ]; +const iconImage = [ + "match", + ["get", "capital"], + 2, + "place_star_in_circle", + 3, + "place_star", + 4, + "place_star", + 5, + "place_dot_in_circle", + 6, + "place_dot_in_circle", + "place_dot", +]; + function filterPlace(type) { return ["==", ["get", "class"], type]; } @@ -53,7 +69,7 @@ export const village = { [12, 12], ], }, - "icon-image": "place_dot", + "icon-image": iconImage, "icon-size": { base: 1.0, stops: [ @@ -100,7 +116,7 @@ export const town = { [12, 18], ], }, - "icon-image": "place_dot", + "icon-image": iconImage, "icon-size": { base: 1.2, stops: [ @@ -159,17 +175,7 @@ export const city = { [11, 24], ], }, - "icon-image": [ - "match", - ["get", "capital"], - 2, - "place_star_in_circle", - 3, - "place_star", - 4, - "place_star", - "place_dot", - ], + "icon-image": iconImage, "icon-size": { base: 1.2, stops: [ @@ -451,4 +457,14 @@ export const legendEntries = [ layers: populatedPlaceLayers, filter: ["==", ["get", "capital"], 4], }, + { + description: "Division capital", + layers: populatedPlaceLayers, + filter: ["==", ["get", "capital"], 5], + }, + { + description: "County seat or local capital", + layers: populatedPlaceLayers, + filter: ["==", ["get", "capital"], 6], + }, ]; From c06cedfbb818ffab47cfa5946d0c426b5a61ff44 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Tue, 28 May 2024 16:44:08 -0400 Subject: [PATCH 29/47] change padding values for Rochester Inner Loop shield --- src/js/shield_defs.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 9edd3b3e8..724f6afd6 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1804,13 +1804,21 @@ export function loadShields() { }, }; shields["US:NY:Truck"] = banneredShield(shields["US:NY"], ["TRK"]); - shields["US:NY:Inner_Loop"] = trapezoidDownShield( - 10, - Color.shields.white, - Color.shields.black, - Color.shields.black, - 4 - ); + shields["US:NY:Inner_Loop"] = { + ...trapezoidDownShield( + 10, + Color.shields.white, + Color.shields.black, + Color.shields.black, + 4 + ), + padding: { + left: 4, + right: 4, + top: 3, + bottom: 3, + }, + }; shields["US:NY:Inner_Loop"].ref = "LOOP"; shields["US:NY:Thruway"] = { noref: { From 280f0e69a9739421b1e058ce3b1bb1715fec6935 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Wed, 29 May 2024 16:07:39 -0400 Subject: [PATCH 30/47] Add Turkish state highway shields --- src/js/shield_defs.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 24189b40a..a10a2085d 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3197,6 +3197,10 @@ export function loadShields() { 0, 34 ); + shields["TR:national"] = roundedRectShield( + Color.shields.blue, + Color.shields.white + ); // Taiwan shields["TW:freeway"] = { From 5277fce0022ec26676ed9e6a373c10c8826054b7 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Wed, 29 May 2024 18:02:20 -0400 Subject: [PATCH 31/47] Add shields for expressways in Ontario, Canada --- icons/shield_ca_on_hamilton_blue.svg | 4 ++++ icons/shield_ca_on_hamilton_green.svg | 4 ++++ icons/shield_ca_on_toronto.svg | 5 +++++ src/js/shield_defs.js | 26 ++++++++++++++++++++++++++ src/shieldtest.js | 8 ++++++++ 5 files changed, 47 insertions(+) create mode 100644 icons/shield_ca_on_hamilton_blue.svg create mode 100644 icons/shield_ca_on_hamilton_green.svg create mode 100644 icons/shield_ca_on_toronto.svg diff --git a/icons/shield_ca_on_hamilton_blue.svg b/icons/shield_ca_on_hamilton_blue.svg new file mode 100644 index 000000000..eb3c79ac6 --- /dev/null +++ b/icons/shield_ca_on_hamilton_blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/shield_ca_on_hamilton_green.svg b/icons/shield_ca_on_hamilton_green.svg new file mode 100644 index 000000000..43fe46665 --- /dev/null +++ b/icons/shield_ca_on_hamilton_green.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/shield_ca_on_toronto.svg b/icons/shield_ca_on_toronto.svg new file mode 100644 index 000000000..1a8f35a75 --- /dev/null +++ b/icons/shield_ca_on_toronto.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 24189b40a..322a8d340 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -361,6 +361,32 @@ export function loadShields() { shields["CA:ON:Muskoka:West"] = banneredShield(shields["CA:ON:Muskoka"], [ "WEST", ]); + shields["CA:ON:Hamilton:Expressway"] = { + notext: true, + overrideByName: { + "Lincoln M. Alexander Parkway": { + spriteBlank: "shield_ca_on_hamilton_blue", + }, + "Red Hill Valley Parkway": { + spriteBlank: "shield_ca_on_hamilton_green", + }, + }, + }; + shields["CA:ON:Toronto:Expressway"] = { + spriteBlank: "shield_ca_on_toronto", + textColor: Color.shields.black, + textLayout: textConstraint("ellipse"), + padding: { + left: 5, + right: 5, + top: 5, + bottom: 5, + }, + refsByName: { + "Don Valley Parkway": "DV", + "Gardiner Expressway": "G", + }, + }; // Prince Edward Island shields["CA:PE"] = { diff --git a/src/shieldtest.js b/src/shieldtest.js index 43ee5b361..f687008e6 100644 --- a/src/shieldtest.js +++ b/src/shieldtest.js @@ -303,6 +303,14 @@ const iterShields = function* () { network: "CA:ON:primary", refs: ["QEW"], }; + yield { + network: "CA:ON:Hamilton:Expressway", + names: ["Lincoln M. Alexander Parkway", "Red Hill Valley Parkway"], + }; + yield { + network: "CA:ON:Toronto:Expressway", + refs: ["DV", "G"], + }; yield { network: "GLCT", refs: ["LECT", "LHCT", "LMCT", "LSCT"], From 46b4aca6de76af59545bc78383dafa91a43f0360 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Wed, 29 May 2024 19:37:31 -0400 Subject: [PATCH 32/47] reword legend entries for capital=5 and capital=6 --- src/layer/place.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layer/place.js b/src/layer/place.js index 1020e7be3..611199a7d 100644 --- a/src/layer/place.js +++ b/src/layer/place.js @@ -458,12 +458,12 @@ export const legendEntries = [ filter: ["==", ["get", "capital"], 4], }, { - description: "Division capital", + description: "Local capital", layers: populatedPlaceLayers, filter: ["==", ["get", "capital"], 5], }, { - description: "County seat or local capital", + description: "County seat or equivalent", layers: populatedPlaceLayers, filter: ["==", ["get", "capital"], 6], }, From de09a4e3bb70676dc44f0110301880a73f5518aa Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Wed, 29 May 2024 21:04:38 -0400 Subject: [PATCH 33/47] Refactor all special case shield definitions inline --- src/js/shield_defs.js | 383 ++++++++++++++++++++---------------------- 1 file changed, 180 insertions(+), 203 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 322a8d340..8172f8718 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -105,12 +105,33 @@ export function loadShields() { // NORTH AMERICA shields["GLCT"] = { notext: true, + overrideByRef: { + LECT: { + spriteBlank: "shield_glct_lect", + }, + LHCT: { + spriteBlank: "shield_glct_lhct", + }, + LMCT: { + spriteBlank: "shield_glct_lmct", + colorLighten: Color.shields.green, + }, + LSCT: { + spriteBlank: "shield_glct_lsct", + }, + }, + }; + shields["GLCT:Loop"] = { + ...shields["GLCT"], + banners: ["LOOP"], + bannerColor: Color.shields.brown, + overrideByRef: { + LMCT: { + spriteBlank: "shield_glct_lmct", + colorLighten: Color.shields.brown, + }, + }, }; - shields["GLCT:Loop"] = banneredShield( - shields["GLCT"], - ["LOOP"], - Color.shields.brown - ); // Canada shields["CA:transcanada"] = { @@ -214,6 +235,50 @@ export function loadShields() { ); shields["CA:NS:S"] = { notext: true, + overrideByName: { + "A. Murray MacKay Bridge": { + spriteBlank: "shield_ca_ns_s_mkb", + }, + "Angus L. MacDonald Bridge": { + spriteBlank: "shield_ca_ns_s_mdb", + }, + "Bras d'Or Lakes Scenic Drive": { + spriteBlank: "shield_ca_ns_s_bdolsd", + }, + "Ceilidh Trail": { + spriteBlank: "shield_ca_ns_s_cet", + }, + "Cabot Trail": { + spriteBlank: "shield_ca_ns_s_ct", + }, + "Digby Neck and Islands Scenic Drive": { + spriteBlank: "shield_ca_ns_s_dnisd", + }, + "Evangeline Trail": { + spriteBlank: "shield_ca_ns_s_et", + }, + "Fleur-de-lis Trail": { + spriteBlank: "shield_ca_ns_s_fdlt", + }, + "Glooscap Trail": { + spriteBlank: "shield_ca_ns_s_gt", + }, + "Kejimkujik Scenic Drive": { + spriteBlank: "shield_ca_ns_s_ksd", + }, + "Lighthouse Route": { + spriteBlank: "shield_ca_ns_s_lr", + }, + "Marine Drive": { + spriteBlank: "shield_ca_ns_s_md", + }, + "Marconi Trail": { + spriteBlank: "shield_ca_ns_s_mt", + }, + "Sunrise Trail": { + spriteBlank: "shield_ca_ns_s_st", + }, + }, }; // Northwest Territories @@ -238,6 +303,13 @@ export function loadShields() { top: 6, bottom: 2, }, + overrideByRef: { + QEW: { + textColor: Color.shields.blue, + colorLighten: Color.shields.blue, + colorDarken: Color.shields.yellow, + }, + }, }; shields["CA:ON:primary:Toll"] = { ...shields["CA:ON:primary"], @@ -446,6 +518,13 @@ export function loadShields() { // Yukon shields["CA:YT"] = roundedRectShield(Color.shields.white, Color.shields.red); + shields["CA:YT"].overrideByRef = { + 2: roundedRectShield(Color.shields.white, "#ce9d00"), + 3: roundedRectShield(Color.shields.white, "#ce9d00"), + 5: roundedRectShield(Color.shields.white, Color.shields.blue), + 6: roundedRectShield(Color.shields.white, Color.shields.green), + 11: roundedRectShield(Color.shields.white, Color.shields.blue), + }; // Haiti shields["HT:RN-road"] = shields["HT:RD-road"] = roundedRectShield( @@ -719,6 +798,13 @@ export function loadShields() { top: 4, bottom: 5, }, + overrideByRef: { + 980: { + textColor: Color.shields.white, + colorLighten: Color.shields.white, + colorDarken: Color.shields.blue, + }, + }, }; [ "Calhoun", @@ -913,9 +999,13 @@ export function loadShields() { Color.shields.white, Color.shields.black ); - shields["US:CT:Parkway"] = { notext: true, + overrideByName: { + "Merritt Parkway": { + spriteBlank: "shield_us_ct_parkway_merritt", + }, + }, }; // Washington, D.C. @@ -981,6 +1071,16 @@ export function loadShields() { top: 5, bottom: 4, }, + overrideByRef: { + 515: { + textColor: Color.shields.blue, + colorLighten: Color.shields.blue, + }, + 520: { + textColor: Color.shields.green, + colorLighten: Color.shields.green, + }, + }, }; shields["US:GA:Truck:Bypass"] = banneredShield(shields["US:GA"], [ "TRK", @@ -1161,6 +1261,15 @@ export function loadShields() { top: 2, bottom: 6, }, + refsByName: { + "Audubon Parkway": "AU", + "Bluegrass Parkway": "BG", + "Cumberland Parkway": "LN", + "Hal Rogers Parkway": "HR", + "Mountain Parkway": "MP", + "Purchase Parkway": "JC", + "Western Kentucky Parkway": "WK", + }, }; // Louisiana @@ -1257,6 +1366,15 @@ export function loadShields() { // Michigan shields["US:MI"] = diamondShield(Color.shields.white, Color.shields.black); + shields["US:MI"].overrideByRef = { + 185: diamondShield( + Color.shields.brown, + Color.shields.white, + Color.shields.white, + 0, + 24 + ), + }; shields["US:MI:Business"] = banneredShield(shields["US:MI"], ["BUS"]); shields["US:MI:Connector"] = banneredShield(shields["US:MI"], ["CONN"]); ["CR", "Benzie", "Gogebic", "Kalkaska", "Montcalm", "Roscommon"].forEach( @@ -1477,7 +1595,16 @@ export function loadShields() { Color.shields.brown, Color.shields.white ); - shields["US:MO:Taney:Branson"] = {}; // See ref-specific cases below + shields["US:MO:Taney:Branson"] = { + overrideByRef: { + "Red Route": bransonRouteShield(Color.shields.red, Color.shields.white), + "Yellow Route": bransonRouteShield( + Color.shields.yellow, + Color.shields.green + ), + "Blue Route": bransonRouteShield(Color.shields.blue, Color.shields.white), + }, + }; // Northern Mariana Islands shields["US:MP"] = { @@ -1664,6 +1791,16 @@ export function loadShields() { shields["US:NH:Bypass"] = banneredShield(shields["US:NH"], ["BYP"]); shields["US:NH:Turnpike"] = { notext: true, + overrideByName: { + "Everett Turnpike": { + spriteBlank: "shield_us_nh_turnpike", + colorLighten: Color.shields.green, + }, + "Spaulding Turnpike": { + spriteBlank: "shield_us_nh_turnpike", + colorLighten: Color.shields.blue, + }, + }, }; // New Jersey @@ -1845,6 +1982,18 @@ export function loadShields() { textColor: Color.shields.white, colorLighten: Color.shields.white, colorDarken: Color.shields.green, + refsByName: { + "Bear Mountain State Parkway": "BMP", + "Bronx River Parkway": "BRP", + "Cross County Parkway": "CCP", + "Hutchinson River Parkway": "HRP", + "Korean War Veterans Parkway": "KWVP", + "Mosholu Parkway": "MP", + "Niagara Scenic Parkway": "NSP", + "Saw Mill River Parkway": "SMP", + "Sprain Brook Parkway": "SBP", + "Taconic State Parkway": "TSP", + }, }; shields["US:NY:Parkway:LI"] = { spriteBlank: "shield_us_ny_parkway_li", @@ -2213,7 +2362,16 @@ export function loadShields() { colorDarken: Color.shields.green, }, }; - shields["US:PA:Allegheny:Belt"] = {}; // See ref-specific cases below + shields["US:PA:Allegheny:Belt"] = { + overrideByRef: { + "Red Belt": paBeltShield(Color.shields.red, Color.shields.black), + "Orange Belt": paBeltShield(Color.shields.orange, Color.shields.black), + "Yellow Belt": paBeltShield(Color.shields.yellow, Color.shields.black), + "Green Belt": paBeltShield(Color.shields.green, Color.shields.white), + "Blue Belt": paBeltShield(Color.shields.blue, Color.shields.white), + "Purple Belt": paBeltShield(Color.shields.purple, Color.shields.white), + }, + }; // Puerto Rico shields["US:PR:primary"] = escutcheonDownShield( @@ -2481,17 +2639,21 @@ export function loadShields() { top: 2, bottom: 8, }, + refsByName: { + "Fort Bend Parkway Toll Road": "FBP", + "Fort Bend Westpark Tollway": "WPT", + }, + }; + shields["US:TX:Harris:HCTRA"] = { + ...pentagonUpShield(3, 15, Color.shields.purple, Color.shields.yellow), + refsByName: { + "Sam Houston Tollway": "SHT", + "Fort Bend Toll Road": "FBTR", + "Hardy Toll Road": "HTR", + "Tomball Tollway": "TBT", + "Westpark Tollway": "WPT", + }, }; - shields["US:TX:Harris:HCTRA"] = pentagonUpShield( - 3, - 15, - Color.shields.purple, - Color.shields.yellow, - Color.shields.yellow, - 2, - 0, - 28 - ); // Texas county roads [ @@ -3754,191 +3916,6 @@ export function loadShields() { ); shields["NZ:WRR"] = circleShield(Color.shields.white, Color.shields.black); - // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md - - shields["CA:NS:S"].overrideByName = { - "A. Murray MacKay Bridge": { - spriteBlank: "shield_ca_ns_s_mkb", - }, - "Angus L. MacDonald Bridge": { - spriteBlank: "shield_ca_ns_s_mdb", - }, - "Bras d'Or Lakes Scenic Drive": { - spriteBlank: "shield_ca_ns_s_bdolsd", - }, - "Ceilidh Trail": { - spriteBlank: "shield_ca_ns_s_cet", - }, - "Cabot Trail": { - spriteBlank: "shield_ca_ns_s_ct", - }, - "Digby Neck and Islands Scenic Drive": { - spriteBlank: "shield_ca_ns_s_dnisd", - }, - "Evangeline Trail": { - spriteBlank: "shield_ca_ns_s_et", - }, - "Fleur-de-lis Trail": { - spriteBlank: "shield_ca_ns_s_fdlt", - }, - "Glooscap Trail": { - spriteBlank: "shield_ca_ns_s_gt", - }, - "Kejimkujik Scenic Drive": { - spriteBlank: "shield_ca_ns_s_ksd", - }, - "Lighthouse Route": { - spriteBlank: "shield_ca_ns_s_lr", - }, - "Marine Drive": { - spriteBlank: "shield_ca_ns_s_md", - }, - "Marconi Trail": { - spriteBlank: "shield_ca_ns_s_mt", - }, - "Sunrise Trail": { - spriteBlank: "shield_ca_ns_s_st", - }, - }; - - shields["CA:ON:primary"].overrideByRef = { - QEW: { - textColor: Color.shields.blue, - colorLighten: Color.shields.blue, - colorDarken: Color.shields.yellow, - }, - }; - - shields["CA:YT"].overrideByRef = { - 2: roundedRectShield(Color.shields.white, "#ce9d00"), - 3: roundedRectShield(Color.shields.white, "#ce9d00"), - 5: roundedRectShield(Color.shields.white, Color.shields.blue), - 6: roundedRectShield(Color.shields.white, Color.shields.green), - 11: roundedRectShield(Color.shields.white, Color.shields.blue), - }; - - shields["US:AR"].overrideByRef = { - 980: { - textColor: Color.shields.white, - colorLighten: Color.shields.white, - colorDarken: Color.shields.blue, - }, - }; - - shields["US:GA"].overrideByRef = { - 515: { - textColor: Color.shields.blue, - colorLighten: Color.shields.blue, - }, - 520: { - textColor: Color.shields.green, - colorLighten: Color.shields.green, - }, - }; - - shields["US:KY:Parkway"].refsByName = { - "Audubon Parkway": "AU", - "Bluegrass Parkway": "BG", - "Cumberland Parkway": "LN", - "Hal Rogers Parkway": "HR", - "Mountain Parkway": "MP", - "Purchase Parkway": "JC", - "Western Kentucky Parkway": "WK", - }; - - shields["US:CT:Parkway"].overrideByName = { - "Merritt Parkway": { - spriteBlank: "shield_us_ct_parkway_merritt", - }, - }; - - shields["US:MI"].overrideByRef = { - 185: diamondShield( - Color.shields.brown, - Color.shields.white, - Color.shields.white, - 0, - 24 - ), - }; - - shields["US:MO:Taney:Branson"].overrideByRef = { - "Red Route": bransonRouteShield(Color.shields.red, Color.shields.white), - "Yellow Route": bransonRouteShield( - Color.shields.yellow, - Color.shields.green - ), - "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 State Parkway": "BMP", - "Bronx River Parkway": "BRP", - "Cross County Parkway": "CCP", - "Hutchinson River Parkway": "HRP", - "Korean War Veterans Parkway": "KWVP", - "Mosholu Parkway": "MP", - "Niagara Scenic Parkway": "NSP", - "Saw Mill River Parkway": "SMP", - "Sprain Brook Parkway": "SBP", - "Taconic State Parkway": "TSP", - }; - - shields["US:PA:Allegheny:Belt"].overrideByRef = { - "Red Belt": paBeltShield(Color.shields.red, Color.shields.black), - "Orange Belt": paBeltShield(Color.shields.orange, Color.shields.black), - "Yellow Belt": paBeltShield(Color.shields.yellow, Color.shields.black), - "Green Belt": paBeltShield(Color.shields.green, Color.shields.white), - "Blue Belt": paBeltShield(Color.shields.blue, Color.shields.white), - "Purple Belt": paBeltShield(Color.shields.purple, Color.shields.white), - }; - - shields["US:TX:Fort_Bend:FBCTRA"].refsByName = { - "Fort Bend Parkway Toll Road": "FBP", - "Fort Bend Westpark Tollway": "WPT", - }; - shields["US:TX:Harris:HCTRA"].refsByName = { - "Sam Houston Tollway": "SHT", - "Fort Bend Toll Road": "FBTR", - "Hardy Toll Road": "HTR", - "Tomball Tollway": "TBT", - "Westpark Tollway": "WPT", - }; - - shields["GLCT"].overrideByRef = { - LECT: { - spriteBlank: "shield_glct_lect", - }, - LHCT: { - spriteBlank: "shield_glct_lhct", - }, - LMCT: { - spriteBlank: "shield_glct_lmct", - colorLighten: Color.shields.green, - }, - LSCT: { - spriteBlank: "shield_glct_lsct", - }, - }; - - shields["GLCT:Loop"].overrideByRef = { - LMCT: { - spriteBlank: "shield_glct_lmct", - colorLighten: Color.shields.brown, - }, - }; - return { networks: shields, options: { From f293eb9dbb9a3019ee89066e25fe2587630735ab Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Thu, 30 May 2024 09:32:35 -0400 Subject: [PATCH 34/47] adjust whitespace in dot-in-circle icon --- icons/place_dot_in_circle.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icons/place_dot_in_circle.svg b/icons/place_dot_in_circle.svg index 96133cea2..4b2703c0e 100644 --- a/icons/place_dot_in_circle.svg +++ b/icons/place_dot_in_circle.svg @@ -1,4 +1,4 @@ - + From 8a6e942168791338efac2e7b6c1f88931a466caa Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Thu, 30 May 2024 21:41:57 -0400 Subject: [PATCH 35/47] Replace Utah shield icons --- icons/shield_us_ut_2.svg | 6 ++++-- icons/shield_us_ut_3.svg | 8 +++++--- src/js/shield_defs.js | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/icons/shield_us_ut_2.svg b/icons/shield_us_ut_2.svg index a9e493979..b23fbf30e 100644 --- a/icons/shield_us_ut_2.svg +++ b/icons/shield_us_ut_2.svg @@ -1,4 +1,6 @@ - - + + + + diff --git a/icons/shield_us_ut_3.svg b/icons/shield_us_ut_3.svg index 1895ac7f2..7038d3967 100644 --- a/icons/shield_us_ut_3.svg +++ b/icons/shield_us_ut_3.svg @@ -1,4 +1,6 @@ - - - + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index a9d0d2c9a..1b4a8dce1 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2566,7 +2566,7 @@ export function loadShields() { padding: { left: 4, right: 4, - top: 5.5, + top: 6, bottom: 5, }, }; From e759496a5b23143f661d43a2c0b855fcadd94e2f Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Fri, 31 May 2024 20:24:34 -0400 Subject: [PATCH 36/47] Add shield for network=US:I:Spur --- 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 1b4a8dce1..3a1402216 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -483,6 +483,7 @@ export function loadShields() { shields["US:I:Alternate"] = banneredShield(shields["US:I"], ["ALT"]); shields["US:I:Future"] = banneredShield(shields["US:I"], ["FUT"]); + shields["US:I:Spur"] = banneredShield(shields["US:I"], ["SPUR"]); shields["US:I:Truck"] = banneredShield(shields["US:I"], ["TRK"]); shields["US:I:Express"] = banneredShield(shields["US:I"], ["EXPR"]); shields["US:I:Express:Toll"] = shields["US:I:Express"]; From e48473ac90991830268590147ab902c66911d15c Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Fri, 31 May 2024 21:27:07 -0400 Subject: [PATCH 37/47] Add shields for Alabama beach express highways --- icons/shield_us_al_foley.svg | 6 ++++++ src/js/shield_defs.js | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 icons/shield_us_al_foley.svg diff --git a/icons/shield_us_al_foley.svg b/icons/shield_us_al_foley.svg new file mode 100644 index 000000000..fe0a2c154 --- /dev/null +++ b/icons/shield_us_al_foley.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 1b4a8dce1..f4d276e0f 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -702,6 +702,14 @@ export function loadShields() { Color.shields.yellow )) ); + shields["US:AL:Baldwin:Baldwin_Beach_Express"] = { + ...roundedRectShield(Color.shields.green, Color.shields.white), + ref: "BBX", + }; + shields["US:AL:Baldwin:Foley_Beach_Express"] = { + spriteBlank: "shield_us_al_foley", + notext: true, + }; // Arizona shields["US:AZ:Scenic"] = { From 5f60b187e451c024c3124ce6ac82d23160b4ff82 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 1 Jun 2024 13:58:01 -0400 Subject: [PATCH 38/47] Assign shield icons based on ref length --- shieldlib/src/shield.ts | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index ae8363beb..66ce51ae3 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -14,6 +14,8 @@ import { import { TextPlacement } from "./shield_text"; import { StyleImage } from "maplibre-gl"; +const narrowCharacters = /[1Iil ]/g; + function compoundShieldSize( r: ShieldRenderingContext, dimension: Dimension, @@ -51,20 +53,23 @@ function getRasterShieldBlank( let bounds: Dimension; if (Array.isArray(shieldDef.spriteBlank)) { - for (var i = 0; i < shieldDef.spriteBlank.length; i++) { - shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank[i]); + // Certain narrow characters count as two-thirds of a character + let narrowCharacterCount = (routeDef.ref.match(narrowCharacters) ?? []) + .length; + let refLength = Math.ceil(routeDef.ref.length - narrowCharacterCount / 3); + + // Choose icon based on optimal character length at end of filename + shieldDef.spriteBlank.sort(); + let finalIndex = shieldDef.spriteBlank.length - 1; + let optimalCharacters = shieldDef.spriteBlank.map((blank) => + parseInt(blank.split("_").reverse()[0]) + ); + let spriteIndex = + refLength > optimalCharacters[finalIndex] + ? finalIndex + : Math.max(0, optimalCharacters.indexOf(refLength)); - bounds = compoundShieldSize(r, shieldArtwork.data, bannerCount); - textPlacement = ShieldText.layoutShieldTextFromDef( - r, - routeDef.ref, - shieldDef, - bounds - ); - if (textPlacement.fontPx > r.px(Gfx.fontSizeThreshold)) { - break; - } - } + shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank[spriteIndex]); } else { shieldArtwork = r.spriteRepo.getSprite(shieldDef.spriteBlank); } From af31fec47f2eab3e4741a45e6bcd93d61ef7e768 Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Jun 2024 16:38:33 -0400 Subject: [PATCH 39/47] feat: add region boundaries This adds rendering support for `admin_level=5` --- src/layer/boundary.js | 55 +++++++++++++++++++++++++++++++++++++++++++ src/layer/index.js | 2 ++ 2 files changed, 57 insertions(+) diff --git a/src/layer/boundary.js b/src/layer/boundary.js index cab85a6a6..a02c81e59 100644 --- a/src/layer/boundary.js +++ b/src/layer/boundary.js @@ -78,6 +78,57 @@ export const county = { "source-layer": "boundary", }; +export const regionCasing = { + id: "boundary_region_casing", + type: "line", + paint: { + "line-color": Color.borderCasing, + "line-width": { + stops: [ + [11, 5], + [12, 6], + ], + }, + }, + filter: [ + "all", + ["==", ["get", "admin_level"], 5], + ["==", ["get", "disputed"], 0], + ["==", ["get", "maritime"], 0], + ], + minzoom: 8, + layout: { + "line-join": "round", + visibility: "visible", + }, + source: "openmaptiles", + "source-layer": "boundary", +}; + +export const region = { + id: "boundary_region", + type: "line", + paint: { + "line-color": Color.border, + "line-dasharray": [5, 4], + "line-width": 1, + "line-offset": 0, + }, + filter: [ + "all", + ["==", ["get", "admin_level"], 5], + ["==", ["get", "disputed"], 0], + ["==", ["get", "maritime"], 0], + ], + minzoom: 6, + layout: { + "line-join": "round", + visibility: "visible", + }, + source: "openmaptiles", + "source-layer": "boundary", +}; + export const stateCasing = { id: "boundary_state_casing", type: "line", @@ -322,6 +373,10 @@ export const legendEntries = [ description: "County or county-equivalent", layers: [county.id, countyCasing.id], }, + { + description: "Region", + layers: [region.id, regionCasing.id], + }, { description: "City, town, or village", layers: [city.id], diff --git a/src/layer/index.js b/src/layer/index.js index 95fada71d..740eb6061 100644 --- a/src/layer/index.js +++ b/src/layer/index.js @@ -37,6 +37,7 @@ export function build(locales) { lyrPark.parkFill, lyrBoundary.countyCasing, + lyrBoundary.regionCasing, lyrBoundary.stateCasing, lyrBoundary.countryCasing, @@ -52,6 +53,7 @@ export function build(locales) { lyrBoundary.city, lyrBoundary.county, + lyrBoundary.region, lyrBoundary.state, lyrBoundary.country, From c918c8969c14a88531e07c21b23cc4d4b6ee8847 Mon Sep 17 00:00:00 2001 From: wolfy1339 Date: Sat, 1 Jun 2024 16:43:15 -0400 Subject: [PATCH 40/47] Adjust casing zoom layers --- src/layer/boundary.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layer/boundary.js b/src/layer/boundary.js index a02c81e59..b36d6eeec 100644 --- a/src/layer/boundary.js +++ b/src/layer/boundary.js @@ -85,8 +85,8 @@ export const regionCasing = { "line-color": Color.borderCasing, "line-width": { stops: [ - [11, 5], - [12, 6], + [8, 5], + [9, 6], ], }, }, From f5f29555ba25dc76f25cdb518121ae48a537bb18 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sat, 1 Jun 2024 16:51:42 -0400 Subject: [PATCH 41/47] Update documentation on shield filename selection --- shieldlib/README.md | 9 +++++---- shieldlib/src/shield.ts | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/shieldlib/README.md b/shieldlib/README.md index 79cea3915..fcadf3237 100644 --- a/shieldlib/README.md +++ b/shieldlib/README.md @@ -119,9 +119,9 @@ You should create one definition entry for each network. The entry key must matc "top": 3, "bottom": 3 }, - "spriteBlank": "name_of_image_1", + "spriteBlank": ["name_of_image_2", "name_of_image_3", "name_of_image_4"], "noref": { - "spriteBlank": "name_of_image_2" + "spriteBlank": "name_of_image_noref" } "shapeBlank": { "drawFunc": "pentagon", @@ -168,7 +168,8 @@ You should create one definition entry for each network. The entry key must matc - **`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. +- **`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 `spriteBlank` is an array of strings, they must be ordered from narrowest to widest, and the filenames must be suffixed with a consecutive range of integers, representing the optimal number of characters to display in each icon. - **`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: @@ -234,7 +235,7 @@ This effect can be achieved by overriding the text and sprite color in the route ```json "US:GA": { - "spriteBlank": ["shield_us_ga_narrow", "shield_us_ga_wide"], + "spriteBlank": ["shield_us_ga_2", "shield_us_ga_3"], "textColor": "black", "overrideByRef": { "520": { diff --git a/shieldlib/src/shield.ts b/shieldlib/src/shield.ts index 66ce51ae3..8eada1a6a 100644 --- a/shieldlib/src/shield.ts +++ b/shieldlib/src/shield.ts @@ -14,7 +14,7 @@ import { import { TextPlacement } from "./shield_text"; import { StyleImage } from "maplibre-gl"; -const narrowCharacters = /[1Iil ]/g; +const narrowCharacters = /[1IJijl .-]/g; function compoundShieldSize( r: ShieldRenderingContext, @@ -59,7 +59,6 @@ function getRasterShieldBlank( let refLength = Math.ceil(routeDef.ref.length - narrowCharacterCount / 3); // Choose icon based on optimal character length at end of filename - shieldDef.spriteBlank.sort(); let finalIndex = shieldDef.spriteBlank.length - 1; let optimalCharacters = shieldDef.spriteBlank.map((blank) => parseInt(blank.split("_").reverse()[0]) From cded92d9a6a169ed0b0b5815f698fde70738b24b Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 2 Jun 2024 19:41:45 -0400 Subject: [PATCH 42/47] Add Madagascar national route shields --- doc-img/shield_map_world.svg | 1 + src/js/shield_defs.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/doc-img/shield_map_world.svg b/doc-img/shield_map_world.svg index ded937405..f943d2478 100644 --- a/doc-img/shield_map_world.svg +++ b/doc-img/shield_map_world.svg @@ -124,6 +124,7 @@ See the end of this file for a list of available jurisdictions and their codes. .ve, .dz, .gh, +.mg, .am, .bd, .cn, diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index dc70be53e..7e03c25c5 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2919,6 +2919,12 @@ export function loadShields() { shields["GH:regional"] = roundedRectShield(Color.shields.yellow, Color.shields.black); + // Madagascar + shields["MG:RN-road"] = roundedRectShield( + Color.shields.red, + Color.shields.white + ); + // ASIA // Armenia From 0423a15aff970716f53102a02ed13be71a5ce225 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Sun, 2 Jun 2024 20:01:59 -0400 Subject: [PATCH 43/47] Add Niger national route shields --- doc-img/shield_map_world.svg | 1 + src/js/shield_defs.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/doc-img/shield_map_world.svg b/doc-img/shield_map_world.svg index ded937405..513c4f70c 100644 --- a/doc-img/shield_map_world.svg +++ b/doc-img/shield_map_world.svg @@ -124,6 +124,7 @@ See the end of this file for a list of available jurisdictions and their codes. .ve, .dz, .gh, +.ne, .am, .bd, .cn, diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index dc70be53e..49381c2fc 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -2919,6 +2919,12 @@ export function loadShields() { shields["GH:regional"] = roundedRectShield(Color.shields.yellow, Color.shields.black); + // Niger + shields["NE:N-roads"] = roundedRectShield( + Color.shields.red, + Color.shields.white + ); + // ASIA // Armenia From fea22c8ca2a011ba7ebc5987ccc95214c675a687 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 3 Jun 2024 14:20:15 +0000 Subject: [PATCH 44/47] run npm update --- package-lock.json | 2581 ++++++++++++++++++++++----------------------- 1 file changed, 1282 insertions(+), 1299 deletions(-) diff --git a/package-lock.json b/package-lock.json index 623957d73..317229671 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,42 +11,42 @@ "shieldlib" ], "dependencies": { - "@americana/maplibre-shield-generator": "*", + "@americana/maplibre-shield-generator": "^0.0.5", "color-rgba": "^2.4.0", "events": "^3.3.0", - "fonteditor-core": "^2.1.11", + "fonteditor-core": "^2.4.0", "maplibre-gl": "^2.4.0", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", "tokenfield": "^1.5.2" }, "devDependencies": { - "@basemaps/sprites": "^7.0.0", + "@basemaps/sprites": "^7.1.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", - "@types/node": "^20.8.4", + "@maplibre/maplibre-gl-style-spec": "^17.1.0", + "@playwright/test": "^1.44.1", + "@types/chai": "^4.3.16", + "@types/color-namer": "^1.3.3", + "@types/mocha": "^10.0.6", + "@types/node": "^20.14.0", "benchmark": "^2.1.4", - "canvas": "^2.11.0", - "chai": "^4.3.7", + "canvas": "^2.11.2", + "chai": "^4.4.1", "color-namer": "^1.4.0", - "commander": "^10.0.0", - "esbuild": "^0.17.4", - "glob": "^10.3.10", + "commander": "^10.0.1", + "esbuild": "^0.17.19", + "glob": "^10.4.1", "google-font-installer": "^1.2.0", "maplibre-gl": "^2.4.0", - "mocha": "^10.1.0", + "mocha": "^10.4.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", "pbf": "^3.2.1", - "prettier": "^2.3.2", - "sharp": "^0.33.2", + "prettier": "^2.8.8", + "sharp": "^0.33.4", "shx": "^0.3.4", "svgo": "^2.8.0", - "tsx": "^4.6.2", + "tsx": "^4.11.2", "typescript": "^4.9.5" }, "engines": { @@ -59,105 +59,46 @@ "link": true }, "node_modules/@basemaps/sprites": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-7.0.0.tgz", - "integrity": "sha512-9OwguPrnw51zBfadG5U2xN9pEtm4hMZ9gI0Su/uAVjCh5gdjGZfrdcJp0VP8xb98KACTjN0GFpZ1VOu9FfUaHA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-7.1.0.tgz", + "integrity": "sha512-IxEZxgBnIhUbe4RnG7FjKR4vEjI2oQaRoKWPDYUAkSPtU+dbcvQxe+HqUylyy0wmJILsf8fYz0A+ftcwNeePoQ==", "dev": true, "dependencies": { "@mapbox/shelf-pack": "^3.2.0", "cmd-ts": "^0.12.1", - "sharp": "^0.32.6" + "sharp": "^0.33.0" }, "bin": { "basemaps-sprites": "bin/basemaps-sprites.mjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@basemaps/sprites/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/@basemaps/sprites/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": ">=16.0.0" } }, - "node_modules/@basemaps/sprites/node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", "dev": true, - "hasInstallScript": true, + "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "tslib": "^2.4.0" } }, - "node_modules/@basemaps/sprites/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" - } + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.45.0.tgz", - "integrity": "sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==", "dev": true, "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, "node_modules/@esbuild/android-arm": { @@ -513,9 +454,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz", - "integrity": "sha512-itHBs1rPmsmGF9p4qRe++CzCgd+kFYktnsoR1sbIAfsRMrJZau0Tt1AH9KVnufc2/tU02Gf6Ibujx+15qRE03w==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", "cpu": [ "arm64" ], @@ -535,13 +476,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.1" + "@img/sharp-libvips-darwin-arm64": "1.0.2" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.2.tgz", - "integrity": "sha512-/rK/69Rrp9x5kaWBjVN07KixZanRr+W1OiyKdXcbjQD6KbW+obaTeBBtLUAtbBsnlTTmWthw99xqoOS7SsySDg==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", "cpu": [ "x64" ], @@ -561,13 +502,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.1" + "@img/sharp-libvips-darwin-x64": "1.0.2" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-kQyrSNd6lmBV7O0BUiyu/OEw9yeNGFbQhbxswS1i6rMDwBBSX+e+rPzu3S+MwAiGU3HdLze3PanQ4Xkfemgzcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", "cpu": [ "arm64" ], @@ -587,9 +528,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.1.tgz", - "integrity": "sha512-eVU/JYLPVjhhrd8Tk6gosl5pVlvsqiFlt50wotCvdkFGf+mDNBJxMh+bvav+Wt3EBnNZWq8Sp2I7XfSjm8siog==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", "cpu": [ "x64" ], @@ -609,9 +550,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.1.tgz", - "integrity": "sha512-FtdMvR4R99FTsD53IA3LxYGghQ82t3yt0ZQ93WMZ2xV3dqrb0E8zq4VHaTOuLEAuA83oDawHV3fd+BsAPadHIQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", "cpu": [ "arm" ], @@ -631,9 +572,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.1.tgz", - "integrity": "sha512-bnGG+MJjdX70mAQcSLxgeJco11G+MxTz+ebxlz8Y3dxyeb3Nkl7LgLI0mXupoO+u1wRNx/iRj5yHtzA4sde1yA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", "cpu": [ "arm64" ], @@ -653,9 +594,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.1.tgz", - "integrity": "sha512-3+rzfAR1YpMOeA2zZNp+aYEzGNWK4zF3+sdMxuCS3ey9HhDbJ66w6hDSHDMoap32DueFwhhs3vwooAB2MaK4XQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", "cpu": [ "s390x" ], @@ -675,9 +616,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.1.tgz", - "integrity": "sha512-3NR1mxFsaSgMMzz1bAnnKbSAI+lHXVTqAHgc1bgzjHuXjo4hlscpUxc0vFSAPKI3yuzdzcZOkq7nDPrP2F8Jgw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", "cpu": [ "x64" ], @@ -697,9 +638,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.1.tgz", - "integrity": "sha512-5aBRcjHDG/T6jwC3Edl3lP8nl9U2Yo8+oTl5drd1dh9Z1EBfzUKAJFUDTDisDjUwc7N4AjnPGfCA3jl3hY8uDg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", "cpu": [ "arm64" ], @@ -719,9 +660,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.1.tgz", - "integrity": "sha512-dcT7inI9DBFK6ovfeWRe3hG30h51cBAP5JXlZfx6pzc/Mnf9HFCQDLtYf4MCBjxaaTfjCCjkBxcy3XzOAo5txw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", "cpu": [ "x64" ], @@ -741,9 +682,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.2.tgz", - "integrity": "sha512-Fndk/4Zq3vAc4G/qyfXASbS3HBZbKrlnKZLEJzPLrXoJuipFNNwTes71+Ki1hwYW5lch26niRYoZFAtZVf3EGA==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", "cpu": [ "arm" ], @@ -763,13 +704,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.1" + "@img/sharp-libvips-linux-arm": "1.0.2" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.2.tgz", - "integrity": "sha512-pz0NNo882vVfqJ0yNInuG9YH71smP4gRSdeL09ukC2YLE6ZyZePAlWKEHgAzJGTiOh8Qkaov6mMIMlEhmLdKew==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", "cpu": [ "arm64" ], @@ -789,13 +730,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.1" + "@img/sharp-libvips-linux-arm64": "1.0.2" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.2.tgz", - "integrity": "sha512-MBoInDXDppMfhSzbMmOQtGfloVAflS2rP1qPcUIiITMi36Mm5YR7r0ASND99razjQUpHTzjrU1flO76hKvP5RA==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", "cpu": [ "s390x" ], @@ -805,7 +746,7 @@ "linux" ], "engines": { - "glibc": ">=2.28", + "glibc": ">=2.31", "node": "^18.17.0 || ^20.3.0 || >=21.0.0", "npm": ">=9.6.5", "pnpm": ">=7.1.0", @@ -815,13 +756,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.1" + "@img/sharp-libvips-linux-s390x": "1.0.2" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.2.tgz", - "integrity": "sha512-xUT82H5IbXewKkeF5aiooajoO1tQV4PnKfS/OZtb5DDdxS/FCI/uXTVZ35GQ97RZXsycojz/AJ0asoz6p2/H/A==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", "cpu": [ "x64" ], @@ -841,13 +782,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.1" + "@img/sharp-libvips-linux-x64": "1.0.2" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.2.tgz", - "integrity": "sha512-F+0z8JCu/UnMzg8IYW1TMeiViIWBVg7IWP6nE0p5S5EPQxlLd76c8jYemG21X99UzFwgkRo5yz2DS+zbrnxZeA==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", "cpu": [ "arm64" ], @@ -867,13 +808,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.1" + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.2.tgz", - "integrity": "sha512-+ZLE3SQmSL+Fn1gmSaM8uFusW5Y3J9VOf+wMGNnTtJUMUxFhv+P4UPaYEYT8tqnyYVaOVGgMN/zsOxn9pSsO2A==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", "cpu": [ "x64" ], @@ -893,20 +834,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.1" + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.2.tgz", - "integrity": "sha512-fLbTaESVKuQcpm8ffgBD7jLb/CQLcATju/jxtTXR1XCLwbOQt+OL5zPHSDMmp2JZIeq82e18yE0Vv7zh6+6BfQ==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", "cpu": [ "wasm32" ], "dev": true, "optional": true, "dependencies": { - "@emnapi/runtime": "^0.45.0" + "@emnapi/runtime": "^1.1.1" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0", @@ -919,9 +860,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.2.tgz", - "integrity": "sha512-okBpql96hIGuZ4lN3+nsAjGeggxKm7hIRu9zyec0lnfB8E7Z6p95BuRZzDDXZOl2e8UmR4RhYt631i7mfmKU8g==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", "cpu": [ "ia32" ], @@ -941,9 +882,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.2.tgz", - "integrity": "sha512-E4magOks77DK47FwHUIGH0RYWSgRBfGdK56kIHSVeB9uIS4pPFr4N2kIVsXdQQo4LzOsENKV5KAhRlRL7eMAdg==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", "cpu": [ "x64" ], @@ -991,41 +932,6 @@ "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", @@ -1041,23 +947,6 @@ "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/@mapbox/geojson-rewind": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", @@ -1175,12 +1064,12 @@ } }, "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==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz", + "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==", "dev": true, "dependencies": { - "playwright": "1.38.1" + "playwright": "1.44.1" }, "bin": { "playwright": "cli.js" @@ -1199,37 +1088,37 @@ } }, "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", "dev": true }, "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==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/color-namer/-/color-namer-1.3.3.tgz", + "integrity": "sha512-DJ0MHHqazwb94dUBRhahK49nXhRGk2DIRNrVNVR3U3uQjYWY4uNhEjHXO+TbFQGpZcwli1pCj6xm3S3KsB/+3A==", "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==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/color-rgba/-/color-rgba-2.1.2.tgz", + "integrity": "sha512-gDV/fgs4Mpc+hcHygYnM2EDgcxaHmvIGrAVxZJjP38f2IXQKHiGf0XMHhFd+dz8EVPSNTwHL5DJ6yXsxEiCQkg==", "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==" + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, "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==" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" }, "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==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -1237,23 +1126,23 @@ } }, "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, "node_modules/@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@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.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", @@ -1339,6 +1228,7 @@ "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==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "delegates": "^1.0.0", @@ -1354,29 +1244,34 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "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", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -1402,10 +1297,13 @@ "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1413,37 +1311,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true - }, "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==" }, - "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/benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", @@ -1455,22 +1327,14 @@ } }, "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "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, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boolbase": { @@ -1488,11 +1352,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1503,38 +1367,20 @@ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, - "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": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1577,18 +1423,18 @@ } }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "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", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -1610,10 +1456,13 @@ } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -1669,6 +1518,40 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/cliui/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==" + }, + "node_modules/cliui/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/cliui/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/cmd-ts": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/cmd-ts/-/cmd-ts-0.12.1.tgz", @@ -1721,9 +1604,9 @@ } }, "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==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", "dependencies": { "color-name": "^1.0.0" } @@ -1782,7 +1665,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -1800,28 +1684,17 @@ } }, "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==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "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" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">= 8" } }, "node_modules/css-select": { @@ -1883,19 +1756,74 @@ } }, "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/data-view-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1943,13 +1871,21 @@ "node": ">=6" } }, - "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/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -1962,11 +1898,12 @@ } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1984,9 +1921,9 @@ "dev": true }, "node_modules/detect-libc": { - "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, "engines": { "node": ">=8" @@ -2073,18 +2010,10 @@ "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==" - }, - "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, - "dependencies": { - "once": "^1.4.0" - } + "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/entities": { "version": "2.2.0", @@ -2105,50 +2034,57 @@ } }, "node_modules/es-abstract": { - "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, - "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", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.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", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -2157,15 +2093,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -2189,14 +2158,15 @@ } }, "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==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "dev": true, "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -2215,13 +2185,16 @@ } }, "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==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dev": true, "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/es6-weak-map": { @@ -2274,9 +2247,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -2292,6 +2265,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -2300,15 +2298,6 @@ "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, - "engines": { - "node": ">=6" - } - }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -2318,18 +2307,6 @@ "type": "^2.7.2" } }, - "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==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, "node_modules/file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", @@ -2340,9 +2317,9 @@ } }, "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==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2374,9 +2351,9 @@ } }, "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==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fonteditor-core/-/fonteditor-core-2.4.0.tgz", + "integrity": "sha512-c8o4EKdcTJXNtYeoiJ7Y6pNDM5fTpeAneEz4lV4E8YrTe7liqrOyNeLI8SPxY0RR0S0nSpHcop1Wyoz4AlYTuQ==", "dependencies": { "@xmldom/xmldom": "^0.8.3" } @@ -2406,83 +2383,6 @@ "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", - "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", @@ -2513,9 +2413,9 @@ "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==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -2535,15 +2435,15 @@ } }, "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==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -2565,6 +2465,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -2581,6 +2482,32 @@ "node": ">=10" } }, + "node_modules/gauge/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/gauge/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/gauge/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/geojson-validation": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/geojson-validation/-/geojson-validation-1.0.2.tgz", @@ -2612,15 +2539,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2638,13 +2569,14 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -2654,9 +2586,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -2665,34 +2597,28 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "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/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": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "dependencies": { "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" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2722,13 +2648,25 @@ "node": ">=6" } }, + "node_modules/global-prefix/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/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2782,18 +2720,6 @@ "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, - "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", @@ -2812,21 +2738,21 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -2848,12 +2774,12 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2868,6 +2794,18 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2930,6 +2868,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2946,13 +2885,13 @@ "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -2969,14 +2908,16 @@ } }, "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==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3040,12 +2981,27 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3109,9 +3065,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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -3168,12 +3124,15 @@ } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3210,12 +3169,12 @@ } }, "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==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -3271,9 +3230,9 @@ "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==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -3312,9 +3271,9 @@ "dev": true }, "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==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, "node_modules/kdbush": { @@ -3381,12 +3340,12 @@ } }, "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==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { @@ -3396,9 +3355,9 @@ "dev": true }, "node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -3511,9 +3470,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -3534,9 +3493,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -3579,16 +3538,10 @@ "mkdirp": "bin/cmd.js" } }, - "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.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -3597,13 +3550,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.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", @@ -3618,51 +3570,48 @@ }, "engines": { "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/mocha/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==" + }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "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" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "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==", - "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==", - "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", @@ -3696,7 +3645,8 @@ "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==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/murmurhash-js": { "version": "1.0.0", @@ -3731,6 +3681,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "inflight": "^1.0.4", @@ -3759,6 +3710,7 @@ "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^6.0.1" @@ -3768,27 +3720,17 @@ } }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", "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==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "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 + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", + "dev": true, + "optional": true }, "node_modules/ncp": { "version": "2.0.0", @@ -3811,28 +3753,10 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node_modules/node-abi": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true - }, "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -4058,6 +3982,22 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/npm-run-all/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/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", @@ -4067,25 +4007,64 @@ "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==", + "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/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/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/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/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": ">=4" + "node": ">=0.10.0" } }, - "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==", + "node_modules/npm-run-all/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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, "node_modules/npm-run-all/node_modules/supports-color": { @@ -4100,10 +4079,23 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "are-we-there-yet": "^2.0.0", @@ -4134,9 +4126,9 @@ } }, "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==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4152,13 +4144,13 @@ } }, "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==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -4197,7 +4189,6 @@ "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" } @@ -4205,7 +4196,6 @@ "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" @@ -4274,17 +4264,18 @@ "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==", + "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": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { @@ -4294,16 +4285,16 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4343,9 +4334,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -4387,12 +4378,12 @@ "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==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", + "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==", "dev": true, "dependencies": { - "playwright-core": "1.38.1" + "playwright-core": "1.44.1" }, "bin": { "playwright": "cli.js" @@ -4405,9 +4396,9 @@ } }, "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==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz", + "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -4416,122 +4407,33 @@ "node": ">=16" } }, - "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/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, - "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/prebuild-install/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/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==", + "node_modules/playwright/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, - "dependencies": { - "mimic-response": "^3.1.0" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "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==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "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/prebuild-install/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, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "node": ">= 0.4" } }, - "node_modules/prebuild-install/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, - "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/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.8", @@ -4553,22 +4455,6 @@ "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, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, "node_modules/quickselect": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", @@ -4582,30 +4468,6 @@ "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, - "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/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, - "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", @@ -4658,14 +4520,15 @@ } }, "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==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -4683,9 +4546,9 @@ } }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -4720,6 +4583,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -4745,6 +4609,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -4780,13 +4645,13 @@ "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -4817,15 +4682,18 @@ ] }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4837,13 +4705,10 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4851,18 +4716,6 @@ "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", @@ -4886,65 +4739,97 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/sharp": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.2.tgz", - "integrity": "sha512-WlYOPyyPDiiM07j/UO+E720ju6gtNtHjEGg5vovUk1Lgxyjm2LFO+37Nt/UI3MMh2l6hxTWQWi7qk3cXJTutcQ==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", "dev": true, "hasInstallScript": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.2", - "semver": "^7.5.4" + "detect-libc": "^2.0.3", + "semver": "^7.6.0" }, "engines": { - "libvips": ">=8.15.1", + "libvips": ">=8.15.2", "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.2", - "@img/sharp-darwin-x64": "0.33.2", - "@img/sharp-libvips-darwin-arm64": "1.0.1", - "@img/sharp-libvips-darwin-x64": "1.0.1", - "@img/sharp-libvips-linux-arm": "1.0.1", - "@img/sharp-libvips-linux-arm64": "1.0.1", - "@img/sharp-libvips-linux-s390x": "1.0.1", - "@img/sharp-libvips-linux-x64": "1.0.1", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.1", - "@img/sharp-libvips-linuxmusl-x64": "1.0.1", - "@img/sharp-linux-arm": "0.33.2", - "@img/sharp-linux-arm64": "0.33.2", - "@img/sharp-linux-s390x": "0.33.2", - "@img/sharp-linux-x64": "0.33.2", - "@img/sharp-linuxmusl-arm64": "0.33.2", - "@img/sharp-linuxmusl-x64": "0.33.2", - "@img/sharp-wasm32": "0.33.2", - "@img/sharp-win32-ia32": "0.33.2", - "@img/sharp-win32-x64": "0.33.2" + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" } }, "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==", + "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": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "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==", + "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": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { @@ -4987,6 +4872,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5016,9 +4902,9 @@ } }, "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==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", "dev": true, "dependencies": { "ansi-sequence-parser": "^1.1.0", @@ -5038,13 +4924,6 @@ "nanoid": "^2.1.0" } }, - "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, - "optional": true - }, "node_modules/shx": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", @@ -5062,24 +4941,34 @@ } }, "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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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 + "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/simple-concat": { "version": "1.0.1", @@ -5178,9 +5067,9 @@ } }, "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==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -5194,9 +5083,9 @@ } }, "node_modules/spdx-license-ids": { - "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==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/stable": { @@ -5206,16 +5095,6 @@ "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/streamx": { - "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", - "dev": true, - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5225,10 +5104,29 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { + "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/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==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5238,30 +5136,49 @@ "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==", + "node_modules/string-width-cjs/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/string-width/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/string-width/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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "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==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5271,14 +5188,15 @@ } }, "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==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5288,28 +5206,31 @@ } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5421,9 +5342,9 @@ } }, "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -5437,28 +5358,6 @@ "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dev": true, - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -5515,13 +5414,13 @@ "optional": true }, "node_modules/tsx": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.6.2.tgz", - "integrity": "sha512-QPpBdJo+ZDtqZgAnq86iY/PD2KYCUPSUGIunHdGwyII99GKH+f3z3FZ8XNFLSGQIA4I365ui8wnQpl8OKLqcsg==", + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.11.2.tgz", + "integrity": "sha512-V5DL5v1BuItjsQ2FN9+4OjR7n5cr8hSgN+VGmm/fd2/0cgQdBIWHcQ3bFYm/5ZTmyxkTDBUIaRuW2divgfPe0A==", "dev": true, "dependencies": { - "esbuild": "~0.18.20", - "get-tsconfig": "^4.7.2" + "esbuild": "~0.20.2", + "get-tsconfig": "^4.7.5" }, "bin": { "tsx": "dist/cli.mjs" @@ -5534,9 +5433,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -5550,9 +5449,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -5566,9 +5465,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -5582,9 +5481,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -5598,9 +5497,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -5614,9 +5513,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -5630,9 +5529,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -5646,9 +5545,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -5662,9 +5561,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -5678,9 +5577,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -5694,9 +5593,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -5710,9 +5609,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -5726,9 +5625,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -5742,9 +5641,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -5758,9 +5657,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -5774,9 +5673,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -5790,9 +5689,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -5806,9 +5705,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -5822,9 +5721,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -5838,9 +5737,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -5854,9 +5753,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -5870,9 +5769,9 @@ } }, "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -5886,9 +5785,9 @@ } }, "node_modules/tsx/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -5898,60 +5797,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/tsx/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.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==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", "dev": true }, "node_modules/type-detect": { @@ -5964,29 +5838,30 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5996,16 +5871,17 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6015,19 +5891,46 @@ } }, "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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "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/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -6057,9 +5960,9 @@ } }, "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==" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/upper-case": { "version": "1.1.3", @@ -6131,14 +6034,18 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { @@ -6158,16 +6065,16 @@ } }, "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6185,22 +6092,43 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wide-align/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/wide-align/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "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==", + "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": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -6224,6 +6152,65 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6282,6 +6269,24 @@ "node": ">=10" } }, + "node_modules/yargs/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==" + }, + "node_modules/yargs/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/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6294,47 +6299,25 @@ } }, "shieldlib": { - "name": "@americana/maplibre-shield-generator", "version": "0.0.5", "license": "CC0-1.0", "dependencies": { - "@types/node": "^20.8.4", + "@types/node": "^20.14.0", "color-rgba": "^2.4.0", "maplibre-gl": "^2.4.0", - "mocha": "^10.2.0" + "mocha": "^10.4.0" }, "devDependencies": { - "@types/color-rgba": "^2.1.0", + "@types/color-rgba": "^2.1.2", "canvas": "^2.11.2", - "esbuild": "^0.17.10", + "esbuild": "^0.17.19", "npm-run-all": "^4.1.5", - "prettier": "^2.8.4", + "prettier": "^2.8.8", "shx": "^0.3.4", - "tsx": "^4.6.2", + "tsx": "^4.11.2", "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" - } } } } From 8073dfdb62d8a5a16e70e6751c7be36782b51522 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Mon, 3 Jun 2024 11:10:13 -0400 Subject: [PATCH 45/47] fix bannerTextColor typo --- 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 e35e0207a..bae18b684 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -124,7 +124,7 @@ export function loadShields() { shields["GLCT:Loop"] = { ...shields["GLCT"], banners: ["LOOP"], - bannerColor: Color.shields.brown, + bannerTextColor: Color.shields.brown, overrideByRef: { LMCT: { spriteBlank: "shield_glct_lmct", From 97cf3de7406d640626f0c93bb6f9bb266a4eb40e Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Mon, 3 Jun 2024 11:14:29 -0400 Subject: [PATCH 46/47] combine Yukon shields into one declaration --- src/js/shield_defs.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index bae18b684..b2bfa3673 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -517,13 +517,15 @@ export function loadShields() { ); // Yukon - shields["CA:YT"] = roundedRectShield(Color.shields.white, Color.shields.red); - shields["CA:YT"].overrideByRef = { - 2: roundedRectShield(Color.shields.white, "#ce9d00"), - 3: roundedRectShield(Color.shields.white, "#ce9d00"), - 5: roundedRectShield(Color.shields.white, Color.shields.blue), - 6: roundedRectShield(Color.shields.white, Color.shields.green), - 11: roundedRectShield(Color.shields.white, Color.shields.blue), + shields["CA:YT"] = { + ...roundedRectShield(Color.shields.white, Color.shields.red), + overrideByRef: { + 2: roundedRectShield(Color.shields.white, "#ce9d00"), + 3: roundedRectShield(Color.shields.white, "#ce9d00"), + 5: roundedRectShield(Color.shields.white, Color.shields.blue), + 6: roundedRectShield(Color.shields.white, Color.shields.green), + 11: roundedRectShield(Color.shields.white, Color.shields.blue), + }, }; // Haiti From 2eb13a9b5ae616cbebee96eaa64e7ec33f641c93 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 3 Jun 2024 13:09:17 -0400 Subject: [PATCH 47/47] bump github action versions to hush warnings (#1091) --- .github/workflows/build-preview.yml | 10 +++++----- .github/workflows/deploy.yml | 8 ++++---- .github/workflows/lint.yml | 4 ++-- .github/workflows/test-build-macos-13.yml | 4 ++-- .github/workflows/test-build-ubuntu.yml | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 5a1fe803a..84d2ac002 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -19,16 +19,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Use Node.js 18.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x - name: Checkout Main Branch 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: main path: main - name: Checkout PR Branch 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: pr-branch - name: Install and Build Main Branch 🔧 @@ -110,7 +110,7 @@ jobs: mv samples-diff ../dist/ working-directory: pr-branch - name: Upload Build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: americana path: dist/ @@ -123,7 +123,7 @@ jobs: echo $PR_SHA > pr/pr_sha 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 + uses: actions/upload-artifact@v4 with: name: pr_ci_artifacts path: pr/ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 387e51a7f..fc8537a81 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,9 +19,9 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - name: Checkout 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js 18.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x - name: Install and Build 🔧 @@ -35,9 +35,9 @@ jobs: mkdir -p dist/shield-docs cp -r shieldlib/docs/* dist/shield-docs - name: Upload 🏗 - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: path: ./dist - name: Deploy 🚀 id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 418816635..5d1c098d2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: # Make sure the actual branch is checked out when running on pull requests repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -19,7 +19,7 @@ jobs: fetch-depth: 0 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18" # Specify the Node.js version diff --git a/.github/workflows/test-build-macos-13.yml b/.github/workflows/test-build-macos-13.yml index 0258b2282..3d893b395 100644 --- a/.github/workflows/test-build-macos-13.yml +++ b/.github/workflows/test-build-macos-13.yml @@ -9,9 +9,9 @@ jobs: runs-on: macos-13 steps: - name: Checkout 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js 18.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x - name: Build Shield Library 🛡️ diff --git a/.github/workflows/test-build-ubuntu.yml b/.github/workflows/test-build-ubuntu.yml index e52a87a94..4440ba9c6 100644 --- a/.github/workflows/test-build-ubuntu.yml +++ b/.github/workflows/test-build-ubuntu.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js 18.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x - name: Build Shield Library 🛡️