diff --git a/.circleci/config.yml b/.circleci/config.yml index 5d52de54e0a..17af296764d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,6 @@ version: 2.1 orbs: aws-cli: circleci/aws-cli@4.1.3 browser-tools: circleci/browser-tools@1.4.8 - win: circleci/windows@5.0.0 workflows: default: @@ -56,7 +55,7 @@ workflows: only: /.*/ - test-typings: requires: - - build + - prepare-linux filters: tags: only: /.*/ @@ -191,10 +190,10 @@ mac-defaults: &mac-defaults working_directory: ~/mapbox-gl-js windows-defaults: &windows-defaults - executor: - # windows-server-2022-gui:current - # https://circleci.com/developer/machine/image/windows-server-2022-gui - name: win/default + resource_class: windows.medium + machine: + image: default + shell: powershell.exe -ExecutionPolicy Bypass working_directory: ~/mapbox-gl-js jobs: @@ -272,7 +271,6 @@ jobs: - run: npm run build-csp - run: npm run build-css - run: npm run build-style-spec - - run: npm run build-dts - run: npm run test-build - run: npm run prepare-release-pages - run: @@ -344,6 +342,7 @@ jobs: steps: - attach_workspace: at: ~/ + - run: npm run build-dts - run: name: Test public typings command: | diff --git a/.gitignore b/.gitignore index 700c8e40205..e56b0590682 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ coverage .nyc_output *_generated.js *_generated.js.map +test/**/__screenshots__/ test/integration/**/index*.html test/integration/**/actual.png test/integration/**/actual.json diff --git a/3d-style/data/bucket/model_bucket.ts b/3d-style/data/bucket/model_bucket.ts index 8631902ebda..f398f6b7b8d 100644 --- a/3d-style/data/bucket/model_bucket.ts +++ b/3d-style/data/bucket/model_bucket.ts @@ -29,6 +29,7 @@ import type { import type Context from '../../../src/gl/context'; import type VertexBuffer from '../../../src/gl/vertex_buffer'; +import type {FeatureState} from '../../../src/style-spec/expression/index'; import type {FeatureStates} from '../../../src/source/source_state'; import type {SpritePositions} from '../../../src/util/image'; import type {ProjectionSpecification} from '../../../src/style-spec/types'; @@ -405,7 +406,7 @@ class ModelBucket implements Bucket { return this.modelUris; } - evaluate(feature: ModelFeature, featureState: FeatureStates, perModelVertexArray: PerModelAttributes, update: boolean) { + evaluate(feature: ModelFeature, featureState: FeatureState, perModelVertexArray: PerModelAttributes, update: boolean) { const layer = this.layers[0]; const evaluationFeature = feature.feature; const canonical = this.canonical; diff --git a/3d-style/data/bucket/tiled_3d_model_bucket.ts b/3d-style/data/bucket/tiled_3d_model_bucket.ts index 859a313fb66..628dd8e8f82 100644 --- a/3d-style/data/bucket/tiled_3d_model_bucket.ts +++ b/3d-style/data/bucket/tiled_3d_model_bucket.ts @@ -106,7 +106,7 @@ export class Tiled3dModelFeature { const aabb = new Aabb([Infinity, Infinity, Infinity], [-Infinity, -Infinity, -Infinity]); for (const mesh of this.node.meshes) { if (this.node.lightMeshIndex !== i) { - mesh.transformedAabb = Aabb.applyTransform(mesh.aabb, this.node.matrix); + mesh.transformedAabb = Aabb.applyTransformFast(mesh.aabb, this.node.matrix); aabb.encapsulate(mesh.transformedAabb); } i++; diff --git a/3d-style/data/model.ts b/3d-style/data/model.ts index dc8712ee8f5..b936bf853ee 100644 --- a/3d-style/data/model.ts +++ b/3d-style/data/model.ts @@ -271,7 +271,7 @@ export default class Model { // apply local transform to bounding volume if (node.meshes) { for (const mesh of node.meshes) { - const enclosingBounds = Aabb.applyTransform(mesh.aabb, node.matrix); + const enclosingBounds = Aabb.applyTransformFast(mesh.aabb, node.matrix); this.aabb.encapsulate(enclosingBounds); } } diff --git a/3d-style/render/draw_model.ts b/3d-style/render/draw_model.ts index fbcce715513..9b0f6d815af 100644 --- a/3d-style/render/draw_model.ts +++ b/3d-style/render/draw_model.ts @@ -241,8 +241,9 @@ function drawMesh(sortedMesh: SortedMesh, painter: Painter, layer: ModelStyleLay } export function prepare(layer: ModelStyleLayer, sourceCache: SourceCache, painter: Painter) { - const modelSource = sourceCache.getSource() as ModelSource | Tiled3DModelSource | VectorTileSource | GeoJSONSource; + const modelSource = sourceCache.getSource(); if (!modelSource.loaded()) return; + if (modelSource.type === 'vector' || modelSource.type === 'geojson') { const scope = modelSource.type === 'vector' ? layer.scope : ""; if (painter.modelManager) { @@ -252,10 +253,14 @@ export function prepare(layer: ModelStyleLayer, sourceCache: SourceCache, painte } return; } + if (modelSource.type === 'batched-model') { // batched models uploads happen in tile_3d_bucket return; } + + if (modelSource.type !== 'model') return; + const models = modelSource.getModels(); // Upload models for (const model of models) { @@ -354,7 +359,7 @@ function drawModels(painter: Painter, sourceCache: SourceCache, layer: ModelStyl } }; - const modelSource = sourceCache.getSource() as ModelSource | Tiled3DModelSource | VectorTileSource | GeoJSONSource; + const modelSource = sourceCache.getSource(); if (painter.renderPass === 'light-beam' && modelSource.type !== 'batched-model') { return; } @@ -373,6 +378,9 @@ function drawModels(painter: Painter, sourceCache: SourceCache, layer: ModelStyl cleanup(); return; } + + if (modelSource.type !== 'model') return; + const models = modelSource.getModels(); const modelParametersVector: ModelParameters[] = []; diff --git a/3d-style/shaders/_prelude_shadow.fragment.glsl b/3d-style/shaders/_prelude_shadow.fragment.glsl index 617dc89e84b..3c62c99c060 100644 --- a/3d-style/shaders/_prelude_shadow.fragment.glsl +++ b/3d-style/shaders/_prelude_shadow.fragment.glsl @@ -116,6 +116,15 @@ float shadowed_light_factor_normal(vec3 N, highp vec4 light_view_pos0, highp vec return mix(0.0, (1.0 - (u_shadow_intensity * occlusion)) * NDotL, step(0.0, NDotL)); } +float shadowed_light_factor_normal_opacity(vec3 N, highp vec4 light_view_pos0, highp vec4 light_view_pos1, float view_depth, float shadow_opacity) { + float NDotL = dot(N, u_shadow_direction); + + float bias = calculate_shadow_bias(NDotL); + float occlusion = shadow_occlusion(light_view_pos0, light_view_pos1, view_depth, bias) * shadow_opacity; + + return mix(0.0, (1.0 - (u_shadow_intensity * occlusion)) * NDotL, step(0.0, NDotL)); +} + float shadowed_light_factor_normal_unbiased(vec3 N, highp vec4 light_view_pos0, highp vec4 light_view_pos1, float view_depth) { float NDotL = dot(N, u_shadow_direction); diff --git a/3d-style/shaders/model.fragment.glsl b/3d-style/shaders/model.fragment.glsl index 4a75e36f9f8..f78252830ab 100644 --- a/3d-style/shaders/model.fragment.glsl +++ b/3d-style/shaders/model.fragment.glsl @@ -70,12 +70,34 @@ uniform highp sampler3D u_lutTexture; #ifdef TERRAIN_FRAGMENT_OCCLUSION in highp float v_depth; -uniform sampler2D u_depthTexture; +uniform highp sampler2D u_depthTexture; uniform vec2 u_inv_depth_size; +uniform vec2 u_depth_range_unpack; + +#ifdef TERRAIN_DEPTH_D24 + float unpack_depth(float depth) { + return depth * u_depth_range_unpack.x + u_depth_range_unpack.y; + } +#else + // Unpack depth from RGBA. A piece of code copied in various libraries and WebGL + // shadow mapping examples. + // https://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ + highp float unpack_depth_rgba(highp vec4 rgba_depth) + { + const highp vec4 bit_shift = vec4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0); + return dot(rgba_depth, bit_shift) * 2.0 - 1.0; + } +#endif bool isOccluded() { vec2 coord = gl_FragCoord.xy * u_inv_depth_size; - highp float depth = unpack_depth(texture(u_depthTexture, coord)); + + #ifdef TERRAIN_DEPTH_D24 + highp float depth = unpack_depth(texture(u_depthTexture, coord).r); + #else + highp float depth = unpack_depth_rgba(texture(u_depthTexture, coord)); + #endif + // Add some marging to avoid depth precision issues return v_depth > depth + 0.0005; } @@ -472,6 +494,12 @@ vec4 finalColor; #if defined(HAS_TEXTURE_u_emissionTexture) && defined(HAS_ATTRIBUTE_a_uv_2f) emissive.rgb *= sRGBToLinear(texture(u_emissionTexture, uv_2f).rgb); +#endif +#ifdef APPLY_LUT_ON_GPU + // Note: the color is multiplied by the length of u_emissiveFactor + // which avoids increasing the brightness if the LUT doesn't have pure black. + float emissiveFactorLength = max(length(u_emissiveFactor.rgb), 0.001); + emissive.rgb = sRGBToLinear(applyLUT(u_lutTexture, linearTosRGB(emissive.rgb / emissiveFactorLength).rbg)) * emissiveFactorLength; #endif color += emissive.rgb; @@ -494,10 +522,6 @@ vec4 finalColor; distance += mix(0.5, 0.0, clamp(resEmission - 1.0, 0.0, 1.0)); opacity *= v_roughness_metallic_emissive_alpha.w * saturate(1.0 - distance * distance); #endif -#else -#ifdef APPLY_LUT_ON_GPU - color = applyLUT(u_lutTexture, color); -#endif #endif // Use emissive strength as interpolation between lit and unlit color // for coherence with other layer types. diff --git a/3d-style/source/model_source.ts b/3d-style/source/model_source.ts index 8e6e4e5f5da..e333394aa68 100644 --- a/3d-style/source/model_source.ts +++ b/3d-style/source/model_source.ts @@ -5,11 +5,11 @@ import Model from '../data/model'; import convertModel from './model_loader'; import {loadGLTF} from '../util/loaders'; -import type {ISource} from '../../src/source/source'; import type Tile from '../../src/source/tile'; -import type {Callback} from '../../src/types/callback'; import type Dispatcher from '../../src/util/dispatcher'; import type {Map} from '../../src/ui/map'; +import type {Callback} from '../../src/types/callback'; +import type {ISource, SourceEvents} from '../../src/source/source'; import type {ModelSourceSpecification} from '../../src/style-spec/types'; /** @@ -18,7 +18,7 @@ import type {ModelSourceSpecification} from '../../src/style-spec/types'; // Important Note: ModelSource is legacy and should not be offered in the API, as the only valid official sources to add models // are batched-models and via GeoJson/vector sources. We keep this one (for now) just for ease development and get the render-tests // passing. -class ModelSource extends Evented implements ISource { +class ModelSource extends Evented implements ISource { type: 'model'; id: string; scope: string; diff --git a/3d-style/source/tiled_3d_model_source.ts b/3d-style/source/tiled_3d_model_source.ts index 1f2058a954f..7ff22ed4f98 100644 --- a/3d-style/source/tiled_3d_model_source.ts +++ b/3d-style/source/tiled_3d_model_source.ts @@ -9,17 +9,17 @@ import {postTurnstileEvent} from '../../src/util/mapbox'; // it's registered as a serializable class on the main thread import '../data/bucket/tiled_3d_model_bucket'; -import type Tiled3dModelBucket from '../data/bucket/tiled_3d_model_bucket'; -import type {ISource} from '../../src/source/source'; import type Tile from '../../src/source/tile'; -import type {Callback} from '../../src/types/callback'; -import type {Cancelable} from '../../src/types/cancelable'; import type Dispatcher from '../../src/util/dispatcher'; -import type {ModelSourceSpecification} from '../../src/style-spec/types'; +import type Tiled3dModelBucket from '../data/bucket/tiled_3d_model_bucket'; import type {Map} from '../../src/ui/map'; +import type {Callback} from '../../src/types/callback'; +import type {Cancelable} from '../../src/types/cancelable'; import type {OverscaledTileID} from '../../src/source/tile_id'; +import type {ISource, SourceEvents} from '../../src/source/source'; +import type {ModelSourceSpecification} from '../../src/style-spec/types'; -class Tiled3DModelSource extends Evented implements ISource { +class Tiled3DModelSource extends Evented implements ISource { type: 'batched-model'; id: string; scope: string; diff --git a/3d-style/style/style_layer/model_style_layer.ts b/3d-style/style/style_layer/model_style_layer.ts index ed86f8b7213..fc8cd9624b7 100644 --- a/3d-style/style/style_layer/model_style_layer.ts +++ b/3d-style/style/style_layer/model_style_layer.ts @@ -24,7 +24,7 @@ import {convertModelMatrixForGlobe, queryGeometryIntersectsProjectedAabb} from ' import type {VectorTileFeature} from '@mapbox/vector-tile'; import Tiled3dModelBucket from '../../data/bucket/tiled_3d_model_bucket'; import type {FeatureFilter} from '../../../src/style-spec/feature_filter/index'; -import type {QueryFeature} from '../../../src/source/query_features'; +import type {GeoJSONFeature} from '../../../src/util/vectortile_to_geojson'; import {CanonicalTileID} from '../../../src/source/tile_id'; import EvaluationParameters from '../../../src/style/evaluation_parameters'; import type {LUT} from "../../../src/util/lut"; @@ -173,7 +173,7 @@ class ModelStyleLayer extends StyleLayer { filter: FeatureFilter, transform: Transform, ): { - queryFeature: QueryFeature | null | undefined; + queryFeature: GeoJSONFeature | null | undefined; intersectionZ: number; } { diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ffaa9fe928..fe0c20e5732 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## 3.5.2 + +- Improve 3D models rendering performance. +- Slightly improve terrain rendering performance. +- Fix raster particle data decoding and improve rendering quality. +- Fix 3D lighting rendering when lookup tables (LUT) image is applied. +- Fix shadows rendering artifacts on `fill-extrusion-cutoff-fade-range`. +- Improve TypeScript API, including strongly typed Map event listeners, improved type narrowing, and more. + ## 3.5.1 - Revert default behavior of symbol occlusion behind terrain to maintain compatibility. Set `icon-occlusion-opacity`/`text-occlusion-opacity` properties to opt-in to new occlusion behavior. diff --git a/build/mapbox-gl.js.flow b/build/mapbox-gl.js.flow deleted file mode 100644 index 9ef358a454b..00000000000 --- a/build/mapbox-gl.js.flow +++ /dev/null @@ -1,3 +0,0 @@ -// @flow -/* eslint-disable */ -export * from '../src/index.js'; diff --git a/build/publish.sh b/build/publish.sh index 4d080f6518d..730e8255bf3 100755 --- a/build/publish.sh +++ b/build/publish.sh @@ -35,3 +35,9 @@ git tag --points-at HEAD | while read tag; do echo "Unrecognized tag: $tag" fi done + +if [ -n "$(git tag --points-at HEAD)" ]; then + node build/generate-release-list.js && + aws s3 cp --acl public-read --content-type application/json dist/versions.json s3://mapbox-gl-js/versions.json && + aws s3 cp --acl public-read --content-type application/javascript dist/versions.jsonp s3://mapbox-gl-js/versions.jsonp +fi diff --git a/package-lock.json b/package-lock.json index 73fdc04b9ee..0cf412a0836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "mapbox-gl", - "version": "3.5.1", + "version": "3.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mapbox-gl", - "version": "3.5.1", + "version": "3.5.2", "license": "SEE LICENSE IN LICENSE.txt", "workspaces": [ - "src/style-spec" + "src/style-spec", + "test/build/typings" ], "dependencies": { "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -19,6 +20,8 @@ "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.14", + "@types/mapbox__vector-tile": "^1.3.4", "cheap-ruler": "^4.0.0", "csscolorparser": "~1.0.3", "earcut": "^3.0.0", @@ -31,12 +34,12 @@ "murmurhash-js": "^1.0.0", "pbf": "^3.2.1", "potpack": "^2.0.0", - "quickselect": "^2.0.0", + "quickselect": "^3.0.0", "rw": "^1.3.3", "serialize-to-js": "^3.1.2", "supercluster": "^8.0.1", - "tiny-lru": "^11.2.6", - "tinyqueue": "^2.0.3", + "tiny-lru": "^11.2.11", + "tinyqueue": "^3.0.0", "tweakpane": "^4.0.4", "vt-pbf": "^3.1.3" }, @@ -50,24 +53,22 @@ "@rollup/plugin-strip": "^3.0.4", "@rollup/plugin-terser": "^0.4.4", "@tweakpane/core": "^2.0.4", - "@types/geojson": "^7946.0.14", "@types/geojson-vt": "^3.2.5", "@types/jest": "^29.5.12", "@types/mapbox__point-geometry": "^0.1.4", - "@types/mapbox__vector-tile": "^1.3.4", - "@types/node": "^20.14.9", + "@types/node": "^20.14.10", "@types/offscreencanvas": "^2019.7.3", "@types/pbf": "^3.0.5", - "@typescript-eslint/eslint-plugin": "^7.15.0", - "@typescript-eslint/parser": "^7.15.0", - "@vitest/browser": "^1.6.0", - "@vitest/ui": "^1.6.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "@vitest/browser": "^2.0.3", + "@vitest/ui": "^2.0.3", "address": "^2.0.3", "browserify": "^17.0.0", "chalk": "^5.0.1", "chokidar": "^3.6.0", "cross-env": "^7.0.3", - "cssnano": "^7.0.3", + "cssnano": "^7.0.4", "d3-queue": "^3.0.7", "diff": "^5.2.0", "dts-bundle-generator": "^9.5.1", @@ -79,8 +80,8 @@ "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-html": "^8.1.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.5.0", - "glob": "^10.4.2", + "eslint-plugin-jsdoc": "^48.7.0", + "glob": "^11.0.0", "is-builtin-module": "^4.0.0", "jest-extended": "^4.0.2", "json-stringify-pretty-compact": "^4.0.0", @@ -93,7 +94,7 @@ "npm-font-open-sans": "^1.1.0", "npm-run-all": "^4.1.5", "pixelmatch": "^6.0.0", - "playwright": "^1.45.0", + "playwright": "^1.45.1", "postcss": "^8.4.39", "postcss-cli": "^11.0.0", "postcss-inline-svg": "^6.0.0", @@ -105,17 +106,17 @@ "serve-static": "^1.15.0", "shuffle-seed": "^1.1.6", "st": "^3.0.0", - "stylelint": "^16.6.1", + "stylelint": "^16.7.0", "stylelint-config-standard": "^36.0.1", "tape": "^5.8.1", "tape-filter": "^1.0.4", "testem": "^3.15.0", - "tsx": "^4.16.0", + "tsx": "^4.16.2", "typescript": "^5.5.3", - "typescript-eslint": "^7.15.0", + "typescript-eslint": "^7.16.1", "utility-types": "^3.11.0", "vite-plugin-arraybuffer": "^0.0.8", - "vitest": "^1.6.0" + "vitest": "^2.0.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -123,15 +124,30 @@ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -145,6 +161,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -154,6 +171,7 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -169,6 +187,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -183,6 +202,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -192,6 +212,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -201,6 +222,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -208,11 +230,24 @@ "node": ">=4" } }, + "node_modules/@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@bundled-es-modules/cookie": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", "dev": true, + "license": "ISC", "dependencies": { "cookie": "^0.5.0" } @@ -222,14 +257,15 @@ "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", "dev": true, + "license": "ISC", "dependencies": { "statuses": "^2.0.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -245,13 +281,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -268,9 +304,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -286,8 +322,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { @@ -305,6 +341,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "engines": { "node": "^14 || ^16 || >=18" }, @@ -317,22 +354,20 @@ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.43.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", - "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", + "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", "dev": true, "dependencies": { - "@types/eslint": "^8.56.5", - "@types/estree": "^1.0.5", - "@typescript-eslint/types": "^7.2.0", "comment-parser": "1.4.1", - "esquery": "^1.5.0", + "esquery": "^1.6.0", "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { @@ -347,6 +382,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -363,6 +399,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -379,6 +416,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -395,6 +433,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -411,6 +450,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -427,6 +467,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -443,6 +484,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -459,6 +501,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -475,6 +518,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -491,6 +535,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -507,6 +552,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -523,6 +569,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -539,6 +586,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -555,6 +603,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -571,6 +620,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -587,6 +637,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -603,6 +654,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -619,6 +671,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -635,6 +688,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -651,6 +705,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -667,6 +722,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -683,6 +739,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -699,6 +756,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -715,6 +773,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -728,6 +787,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -743,6 +803,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -752,6 +813,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -770,49 +832,28 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "argparse": "^2.0.1" + "brace-expansion": "^1.1.7" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/@eslint/js": { @@ -820,6 +861,7 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -828,7 +870,9 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -838,11 +882,36 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -855,13 +924,16 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@inquirer/confirm": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.0.tgz", "integrity": "sha512-nH5mxoTEoqk6WpoBz80GMpDSm9jH5V9AF8n+JZAZfMzd9gHeEG9w1o3KawPRR72lfzpP+QxBHLkOKLEApwhDiQ==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^7.1.0", "@inquirer/type": "^1.2.1" @@ -875,6 +947,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-7.1.0.tgz", "integrity": "sha512-FRCiDiU54XHt5B/D8hX4twwZuzSP244ANHbu3R7CAsJfiv1dUOz24ePBgCZjygEjDUi6BWIJuk4eWLKJ7LATUw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/type": "^1.2.1", "@types/mute-stream": "^0.0.4", @@ -900,6 +973,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -915,6 +989,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -931,6 +1006,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -942,19 +1018,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@inquirer/core/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 + "dev": true, + "license": "MIT" }, "node_modules/@inquirer/core/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -969,6 +1048,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -983,6 +1063,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.2.1.tgz", "integrity": "sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -1036,6 +1117,7 @@ "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@javascript-obfuscator/estraverse": "^5.3.0", "esprima": "^4.0.1", @@ -1054,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -1067,6 +1150,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -1093,6 +1177,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -1103,6 +1188,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -1115,6 +1201,7 @@ "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -1124,6 +1211,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -1136,6 +1224,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1148,6 +1237,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1165,6 +1255,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1180,6 +1271,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1196,6 +1288,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1207,13 +1300,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1228,6 +1323,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1237,6 +1333,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1246,6 +1343,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -1255,13 +1353,15 @@ "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1272,6 +1372,7 @@ "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.1.3.tgz", "integrity": "sha512-d+tsDgfkj9X5QTriqM4lKesCkMMJC3IrbPKHvayP00ELx2axdXvDfWkqjxrLXIzGcQzmj7VAUT1wopqARTvafw==", "dev": true, + "license": "MIT", "dependencies": { "@ljharb/through": "^2.3.13", "call-bind": "^1.0.7" @@ -1285,6 +1386,7 @@ "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -1307,13 +1409,15 @@ "node_modules/@mapbox/mapbox-gl-supported": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz", - "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==" + "integrity": "sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==", + "license": "BSD-3-Clause" }, "node_modules/@mapbox/mvt-fixtures": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/@mapbox/mvt-fixtures/-/mvt-fixtures-3.10.0.tgz", "integrity": "sha512-HpObcr5eu7MOcxWqjj81fWjQ/VNUaAWKoK/rjxnd6NeEgN3uknrq6aGrkhC5vvZ20T2G6sWkikyITJ8mgPUa8g==", "dev": true, + "license": "ISC", "dependencies": { "@mapbox/sphericalmercator": "^1.0.5", "@mapbox/vector-tile": "^1.3.0", @@ -1325,7 +1429,8 @@ "node_modules/@mapbox/point-geometry": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" }, "node_modules/@mapbox/sphericalmercator": { "version": "1.2.0", @@ -1342,17 +1447,20 @@ "node_modules/@mapbox/tiny-sdf": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", - "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } @@ -1361,6 +1469,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", "engines": { "node": ">=6.0.0" } @@ -1370,6 +1479,7 @@ "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -1379,6 +1489,7 @@ "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", "dev": true, + "license": "MIT", "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", @@ -1396,6 +1507,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1409,6 +1521,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -1418,6 +1531,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1431,6 +1545,7 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">= 18" @@ -1441,6 +1556,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", @@ -1455,11 +1571,31 @@ "node": ">= 18" } }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/endpoint": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@octokit/types": "^12.0.0", @@ -1469,11 +1605,31 @@ "node": ">= 18" } }, + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/graphql": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@octokit/request": "^8.0.1", @@ -1484,18 +1640,38 @@ "node": ">= 18" } }, - "node_modules/@octokit/openapi-types": { + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { "version": "20.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", "dev": true, + "license": "MIT", "peer": true }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "dev": true, + "license": "MIT" + }, "node_modules/@octokit/plugin-paginate-rest": { "version": "11.3.1", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -1506,26 +1682,12 @@ "@octokit/core": "5" } }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -1536,26 +1698,12 @@ "@octokit/core": "^5" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, "node_modules/@octokit/request": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@octokit/endpoint": "^9.0.0", @@ -1572,6 +1720,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@octokit/types": "^12.0.0", @@ -1582,11 +1731,50 @@ "node": ">= 18" } }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/rest": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.0.0.tgz", "integrity": "sha512-XudXXOmiIjivdjNZ+fN71NLrnDM00sxSZlhqmPR3v0dVoJwyP628tSlc12xqn8nX3N0965583RBw5GPo6r8u4Q==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^6.1.2", "@octokit/plugin-paginate-rest": "^11.0.0", @@ -1602,6 +1790,7 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } @@ -1611,6 +1800,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.0.0", @@ -1629,6 +1819,7 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.0.0", "universal-user-agent": "^7.0.2" @@ -1642,6 +1833,7 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^9.0.0", "@octokit/types": "^13.0.0", @@ -1651,17 +1843,12 @@ "node": ">= 18" } }, - "node_modules/@octokit/rest/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true - }, "node_modules/@octokit/rest/node_modules/@octokit/plugin-request-log": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.0.tgz", "integrity": "sha512-FiGcyjdtYPlr03ExBk/0ysIlEFIFGJQAVoPPMxL19B24bVSEiZQnVGBunNtaAF1YnvE/EFoDpXmITtRnyCiypQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" }, @@ -1674,6 +1861,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz", "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^10.0.0", "@octokit/request-error": "^6.0.1", @@ -1689,6 +1877,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz", "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.0.0" }, @@ -1696,48 +1885,43 @@ "node": ">= 18" } }, - "node_modules/@octokit/rest/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^22.2.0" - } - }, "node_modules/@octokit/rest/node_modules/before-after-hook": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@octokit/rest/node_modules/universal-user-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@octokit/types": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", - "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^20.0.0" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@open-draft/deferred-promise": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@open-draft/logger": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", "dev": true, + "license": "MIT", "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" @@ -1747,7 +1931,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -1764,6 +1949,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -1782,6 +1968,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz", "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -1802,11 +1989,69 @@ } } }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@rollup/plugin-commonjs/node_modules/path-scurry": { + "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": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0" }, @@ -1827,6 +2072,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1852,6 +2098,7 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -1864,6 +2111,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -1879,6 +2127,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" @@ -1900,6 +2149,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-strip/-/plugin-strip-3.0.4.tgz", "integrity": "sha512-LDRV49ZaavxUo2YoKKMQjCxzCxugu1rCPQa0lDYBOWLj6vtzBMr8DcoJjsmg+s450RbKbe3qI9ZLaSO+O1oNbg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", @@ -1922,6 +2172,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, + "license": "MIT", "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", @@ -1944,6 +2195,7 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1969,6 +2221,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -1982,6 +2235,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -1995,6 +2249,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2008,6 +2263,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2021,6 +2277,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2034,6 +2291,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2047,6 +2305,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2060,6 +2319,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2073,6 +2333,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2086,6 +2347,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2099,6 +2361,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2112,6 +2375,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2125,6 +2389,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2138,6 +2403,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2151,6 +2417,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2164,6 +2431,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2173,13 +2441,15 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -2191,13 +2461,128 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.3.1.tgz", + "integrity": "sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -2206,44 +2591,44 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@tweakpane/core/-/core-2.0.4.tgz", "integrity": "sha512-0P3xcmvjBr8AmqMOEDNYIbkiaPwvQPkj8VeJX+8ZYkpRgWWbNp1HLbld0MDI0WJHdom89osH3MmCDLnWEXKI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", - "dev": true + "license": "MIT" }, "node_modules/@types/geojson-vt": { "version": "3.2.5", @@ -2259,13 +2644,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -2275,6 +2662,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -2284,34 +2672,30 @@ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", - "dev": true + "license": "MIT" }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", - "dev": true, + "license": "MIT", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -2323,15 +2707,17 @@ "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } @@ -2340,43 +2726,49 @@ "version": "2019.7.3", "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/pbf": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", - "dev": true + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/statuses": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -2385,20 +2777,20 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/type-utils": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2422,16 +2814,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", + "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" }, "engines": { @@ -2451,14 +2842,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2469,14 +2859,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2497,11 +2886,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -2511,14 +2899,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2539,87 +2926,16 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2633,13 +2949,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2654,24 +2969,29 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vitest/browser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-1.6.0.tgz", - "integrity": "sha512-3Wpp9h1hf++rRVPvoXevkdHybLhJVn7MwIMKMIh08tVaoDMmT6fnNhbP222Z48V9PptpYeA5zvH9Ct/ZcaAzmQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.0.3.tgz", + "integrity": "sha512-PQQ89fRaFVm/ja3x92BxAXUIxdxSSuQqu9ijR1rLT8FYCBU+BTzZ7razwLmzMS8AMMaKOFoRXbLg7A2mtSzANg==", "dev": true, "dependencies": { - "@vitest/utils": "1.6.0", - "magic-string": "^0.30.5", - "sirv": "^2.0.4" + "@testing-library/dom": "^10.2.0", + "@testing-library/user-event": "^14.5.2", + "@vitest/utils": "2.0.3", + "magic-string": "^0.30.10", + "msw": "^2.3.1", + "sirv": "^2.0.4", + "ws": "^8.17.1" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "playwright": "*", - "vitest": "1.6.0", + "vitest": "2.0.3", "webdriverio": "*" }, "peerDependenciesMeta": { @@ -2686,118 +3006,124 @@ } } }, - "node_modules/@vitest/expect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", - "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "node_modules/@vitest/browser/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, - "dependencies": { - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "chai": "^4.3.10" + "engines": { + "node": ">=10.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@vitest/runner": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", - "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", + "node_modules/@vitest/expect": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.3.tgz", + "integrity": "sha512-X6AepoOYePM0lDNUPsGXTxgXZAl3EXd0GYe/MZyVE4HzkUqyUVC6S3PrY5mClDJ6/7/7vALLMV3+xD/Ko60Hqg==", "dev": true, "dependencies": { - "@vitest/utils": "1.6.0", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "@vitest/spy": "2.0.3", + "@vitest/utils": "2.0.3", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/@vitest/pretty-format": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.3.tgz", + "integrity": "sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==", "dev": true, "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" + "tinyrainbow": "^1.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "node_modules/@vitest/runner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.3.tgz", + "integrity": "sha512-EmSP4mcjYhAcuBWwqgpjR3FYVeiA4ROzRunqKltWjBfLNs1tnMLtF+qtgd5ClTwkDP6/DGlKJTNa6WxNK0bNYQ==", "dev": true, - "engines": { - "node": ">=12.20" + "dependencies": { + "@vitest/utils": "2.0.3", + "pathe": "^1.1.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", - "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.3.tgz", + "integrity": "sha512-6OyA6v65Oe3tTzoSuRPcU6kh9m+mPL1vQ2jDlPdn9IQoUxl8rXhBnfICNOC+vwxWY684Vt5UPgtcA2aPFBb6wg==", "dev": true, "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "2.0.3", + "magic-string": "^0.30.10", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", - "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.3.tgz", + "integrity": "sha512-sfqyAw/ypOXlaj4S+w8689qKM1OyPOqnonqOc9T91DsoHbfN5mU7FdifWWv3MtQFf0lEUstEwR9L/q/M390C+A==", "dev": true, "dependencies": { - "tinyspy": "^2.2.0" + "tinyspy": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/ui": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.6.0.tgz", - "integrity": "sha512-k3Lyo+ONLOgylctiGovRKy7V4+dIN2yxstX3eY5cWFXH6WP+ooVX79YSyi0GagdTQzLmT43BF27T0s6dOIPBXA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-2.0.3.tgz", + "integrity": "sha512-UAkzHk5veR3NRF7BNUxWlLly7Cw7H+wzP3+eiMIVeKo3Md33Ey20rYsNQn/9McIqOeO02tMzqHhpThmjk1yRzw==", "dev": true, "dependencies": { - "@vitest/utils": "1.6.0", + "@vitest/utils": "2.0.3", "fast-glob": "^3.3.2", - "fflate": "^0.8.1", - "flatted": "^3.2.9", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "sirv": "^2.0.4" + "fflate": "^0.8.2", + "flatted": "^3.3.1", + "pathe": "^1.1.2", + "sirv": "^2.0.4", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "1.6.0" + "vitest": "2.0.3" } }, "node_modules/@vitest/utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", - "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-c/UdELMuHitQbbc/EVctlBaxoYAwQPQdSNwv7z/vHyBKy2edYZaFgptE27BRueZB7eW8po+cllotMNTDpL3HWg==", "dev": true, "dependencies": { - "diff-sequences": "^29.6.3", + "@vitest/pretty-format": "2.0.3", "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -2817,6 +3143,7 @@ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2826,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2835,10 +3163,11 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2851,6 +3180,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2860,17 +3190,32 @@ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2880,6 +3225,7 @@ "resolved": "https://registry.npmjs.org/address/-/address-2.0.3.tgz", "integrity": "sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16.0.0" } @@ -2889,6 +3235,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2905,6 +3252,7 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, + "license": "BSD-3-Clause OR MIT", "engines": { "node": ">=0.4.2" } @@ -2914,6 +3262,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2929,6 +3278,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2941,6 +3291,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2950,6 +3301,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2962,6 +3314,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2974,13 +3327,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -2989,7 +3344,9 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -3003,6 +3360,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3013,12 +3371,19 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { @@ -3026,6 +3391,7 @@ "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3041,13 +3407,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3068,6 +3436,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3077,6 +3446,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.6.tgz", "integrity": "sha512-gNEqZD97w6bfQRNmHkFv7rNnGM+VWyHZT+h/rf9C+22owcXuENr66Lfo0phItpU5KoXW6Owb34q2+8MnSIZ57w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3096,6 +3466,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3116,6 +3487,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3134,6 +3506,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3152,6 +3525,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -3174,6 +3548,7 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -3184,13 +3559,15 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/assert": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, + "license": "MIT", "dependencies": { "object.assign": "^4.1.4", "util": "^0.10.4" @@ -3200,24 +3577,26 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/assert/node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.3" } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/astral-regex": { @@ -3225,6 +3604,7 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3233,7 +3613,8 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-cache": { "version": "1.1.0", @@ -3241,6 +3622,7 @@ "integrity": "sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==", "deprecated": "No longer maintained. Use [lru-cache](http://npm.im/lru-cache) version 7.6 or higher, and provide an asynchronous `fetchMethod` option.", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^4.0.0" } @@ -3250,22 +3632,18 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, - "node_modules/async-cache/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, "node_modules/available-typed-arrays": { "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, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -3281,6 +3659,7 @@ "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", "dev": true, + "license": "MIT", "dependencies": { "underscore": ">=1.8.3" } @@ -3289,7 +3668,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -3309,13 +3689,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -3325,6 +3707,7 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, + "license": "Apache-2.0", "peer": true }, "node_modules/binary-extensions": { @@ -3332,6 +3715,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3344,6 +3728,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -3369,6 +3754,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -3379,6 +3765,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3392,19 +3779,22 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -3429,6 +3819,7 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3438,6 +3829,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3446,22 +3838,24 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -3469,6 +3863,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -3480,13 +3875,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, + "license": "MIT", "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", @@ -3504,6 +3901,7 @@ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.17.0" } @@ -3513,6 +3911,7 @@ "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", @@ -3575,6 +3974,7 @@ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -3589,6 +3989,7 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -3600,6 +4001,7 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -3612,6 +4014,7 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -3622,6 +4025,7 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, + "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -3643,15 +4047,29 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserify/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", "dependencies": { - "pako": "~1.0.5" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/browserify/node_modules/glob": { "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, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3667,6 +4085,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/browserify/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/browserslist": { "version": "4.23.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", @@ -3686,6 +4117,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001629", "electron-to-chromium": "^1.4.796", @@ -3704,6 +4136,7 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, + "license": "MIT", "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -3713,19 +4146,22 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-4.0.0.tgz", "integrity": "sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.20" }, @@ -3737,13 +4173,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3761,13 +4199,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3787,6 +4227,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3796,6 +4237,7 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -3807,12 +4249,13 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { @@ -3827,24 +4270,23 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "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.8" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -3852,6 +4294,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -3864,6 +4307,7 @@ "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", "integrity": "sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1" } @@ -3875,15 +4319,12 @@ "license": "ISC" }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -3891,6 +4332,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3921,6 +4363,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -3930,6 +4373,7 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -3940,6 +4384,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3952,6 +4397,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 12" } @@ -3961,6 +4407,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3975,6 +4422,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3990,6 +4438,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4001,19 +4450,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4028,6 +4480,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4045,6 +4498,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -4053,13 +4507,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } @@ -4068,13 +4524,15 @@ "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, + "license": "MIT", "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", @@ -4082,17 +4540,12 @@ "source-map": "~0.5.3" } }, - "node_modules/combine-source-map/node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", - "dev": true - }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -4110,13 +4563,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -4129,6 +4584,7 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -4147,6 +4603,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4155,19 +4612,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4177,6 +4637,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4184,12 +4645,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dev": true - }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -4200,7 +4655,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/consolidate": { "version": "0.16.0", @@ -4208,6 +4664,7 @@ "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", "dev": true, + "license": "MIT", "dependencies": { "bluebird": "^3.7.2" }, @@ -4219,13 +4676,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4238,15 +4697,24 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", + "dev": true, + "license": "MIT" + }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4255,19 +4723,22 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -4281,6 +4752,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -4302,29 +4774,12 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/cosmiconfig/node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -4343,6 +4798,7 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -4352,13 +4808,15 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -4372,6 +4830,7 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -4386,6 +4845,7 @@ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -4404,6 +4864,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4418,6 +4879,7 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -4440,6 +4902,7 @@ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -4452,6 +4915,7 @@ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12 || >=16" } @@ -4461,6 +4925,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -4477,6 +4942,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -4490,6 +4956,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -4500,13 +4967,15 @@ "node_modules/csscolorparser": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT" }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4515,12 +4984,13 @@ } }, "node_modules/cssnano": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.3.tgz", - "integrity": "sha512-lsekJctOTqdCn4cNrtrSwsuMR/fHC+oiVMHkp/OugBWtwjH8XJag1/OtGaYJGtz0un1fQcRy4ryfYTQsfh+KSQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.4.tgz", + "integrity": "sha512-rQgpZra72iFjiheNreXn77q1haS2GEy69zCMbu4cpXCFPMQF+D4Ik5V7ktMzUF/sA7xCIgcqHwGPnCD+0a1vHg==", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.3", + "cssnano-preset-default": "^7.0.4", "lilconfig": "^3.1.2" }, "engines": { @@ -4535,17 +5005,18 @@ } }, "node_modules/cssnano-preset-default": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.3.tgz", - "integrity": "sha512-dQ3Ba1p/oewICp/szF1XjFFgql8OlOBrI2YNBUUwhHQnJNoMOcQTa+Bi7jSJN8r/eM1egW0Ud1se/S7qlduWKA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.4.tgz", + "integrity": "sha512-jQ6zY9GAomQX7/YNLibMEsRZguqMUGuupXcEk2zZ+p3GUxwCAsobqPYE62VrJ9qZ0l9ltrv2rgjwZPBIFIjYtw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "css-declaration-sorter": "^7.2.0", "cssnano-utils": "^5.0.0", "postcss-calc": "^10.0.0", "postcss-colormin": "^7.0.1", - "postcss-convert-values": "^7.0.1", + "postcss-convert-values": "^7.0.2", "postcss-discard-comments": "^7.0.1", "postcss-discard-duplicates": "^7.0.0", "postcss-discard-empty": "^7.0.0", @@ -4583,6 +5054,7 @@ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -4595,6 +5067,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -4608,6 +5081,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -4621,25 +5095,29 @@ "version": "2.0.28", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/d3-queue": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", "integrity": "sha512-2rs+6pNFKkrJhqe1rg5znw7dKJ7KZr62j9aLZfhondkrnz6U7VRmJj1UGcbD8MRc46c7H8m4SWhab8EalBQrkw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4657,6 +5135,7 @@ "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4674,6 +5153,7 @@ "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4687,10 +5167,11 @@ } }, "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, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -4704,13 +5185,10 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -4720,6 +5198,7 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", @@ -4751,19 +5230,22 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4773,6 +5255,7 @@ "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, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4790,6 +5273,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4807,6 +5291,7 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4815,13 +5300,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4831,6 +5318,7 @@ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -4840,6 +5328,7 @@ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/deps-sort": { @@ -4847,6 +5336,7 @@ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, + "license": "MIT", "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", @@ -4857,11 +5347,21 @@ "deps-sort": "bin/cmd.js" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/des.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -4872,6 +5372,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4882,6 +5383,7 @@ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, + "license": "MIT", "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", @@ -4899,6 +5401,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -4908,6 +5411,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4917,6 +5421,7 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -4927,13 +5432,15 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4941,20 +5448,12 @@ "node": ">=8" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4962,11 +5461,18 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -4981,6 +5487,7 @@ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4", "npm": ">=1.2" @@ -4996,13 +5503,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -5018,6 +5527,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -5032,6 +5542,7 @@ "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^3.0.4" }, @@ -5039,11 +5550,36 @@ "ignored": "bin/ignored" } }, + "node_modules/dotignore/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dotignore/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/dts-bundle-generator": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz", "integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==", "dev": true, + "license": "MIT", "dependencies": { "typescript": ">=5.0.2", "yargs": "^17.6.0" @@ -5060,6 +5596,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } @@ -5080,13 +5617,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -5098,16 +5637,18 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.811", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.811.tgz", - "integrity": "sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==", - "dev": true + "version": "1.4.819", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.819.tgz", + "integrity": "sha512-8RwI6gKUokbHWcN3iRij/qpvf/wCbIVY5slODi85werwqUQwpFXM+dvUBND93Qh7SB0pW3Hlq3/wZsqQ3M9Jaw==", + "dev": true, + "license": "ISC" }, "node_modules/elliptic": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5122,7 +5663,8 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -5135,6 +5677,7 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5144,6 +5687,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -5153,6 +5697,7 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -5174,6 +5719,7 @@ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -5182,36 +5728,17 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/engine.io/node_modules/cookie": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 0.6" } }, "node_modules/enhanced-resolve": { @@ -5219,6 +5746,7 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5232,6 +5760,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5244,6 +5773,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5253,6 +5783,7 @@ "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "^4.0.0", "through": "~2.3.4" @@ -5266,6 +5797,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -5275,6 +5807,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -5335,6 +5868,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -5347,6 +5881,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5356,6 +5891,7 @@ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -5375,19 +5911,22 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5400,6 +5939,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5414,6 +5954,7 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } @@ -5423,6 +5964,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5441,6 +5983,7 @@ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5479,6 +6022,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5487,13 +6031,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5506,6 +6052,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -5560,13 +6107,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-config-mourner/-/eslint-config-mourner-3.0.0.tgz", "integrity": "sha512-QWMt3Cbqkhg/73fZ2UrTNa/p27nF3JhI1Ej2Jg7qSBri88Y0bg4LFzz0/6I5IrvFR10c6UPwDS+DsV9Ec42aVQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5578,6 +6127,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5587,6 +6137,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, + "license": "ISC", "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", @@ -5612,6 +6163,7 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5629,6 +6181,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5638,6 +6191,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.1.tgz", "integrity": "sha512-6qmlJsc40D2m3Dn9oEH+0PAOkJhxVu0f5sVItqpCE0YWgYnyP4xCjBc3UWTHaJcY9ARkWOLIIuXLq0ndRnQOHw==", "dev": true, + "license": "ISC", "dependencies": { "htmlparser2": "^9.1.0" }, @@ -5650,6 +6204,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -5676,11 +6231,23 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5690,6 +6257,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5697,20 +6265,42 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.5.0.tgz", - "integrity": "sha512-ukXPNpGby3KjCveCizIS8t1EbuJEHYEu/tBg8GCbn/YbHcXwphyvYCdvRZ/oMRfTscGSSzfsWoZ+ZkAP0/6YMQ==", + "version": "48.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.7.0.tgz", + "integrity": "sha512-5oiVf7Y+ZxGYQTlLq81X72n+S+hjvS/u0upAdbpPEeaIZILK3MKN8lm/6QqKioBjm/qZ0B5XpMQUtc2fUkqXAg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.43.1", + "@es-joy/jsdoccomment": "~0.46.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.3.4", + "debug": "^4.3.5", "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "parse-imports": "^2.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", "semver": "^7.6.2", "spdx-expression-parse": "^4.0.0", "synckit": "^0.9.0" @@ -5722,16 +6312,21 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -5739,6 +6334,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5751,6 +6347,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5761,17 +6358,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5788,6 +6391,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5799,38 +6403,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5838,43 +6419,17 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "argparse": "^2.0.1" + "brace-expansion": "^1.1.7" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/espree": { @@ -5882,6 +6437,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5894,23 +6450,12 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5920,9 +6465,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -5931,20 +6476,12 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5952,11 +6489,12 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -5965,13 +6503,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -5981,6 +6521,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5989,13 +6530,15 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -6004,13 +6547,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6021,6 +6566,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -6039,6 +6585,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -6050,23 +6597,12 @@ "node": ">=4.8" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/execa/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6076,6 +6612,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -6085,6 +6622,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -6097,6 +6635,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6105,13 +6644,15 @@ "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 + "dev": true, + "license": "ISC" }, "node_modules/execa/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6124,6 +6665,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -6140,6 +6682,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -6182,6 +6725,7 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6191,6 +6735,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6199,25 +6744,29 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6233,25 +6782,29 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -6261,6 +6814,7 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6269,18 +6823,21 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/fd/-/fd-0.0.3.tgz", "integrity": "sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -6296,6 +6853,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -6305,6 +6863,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6317,24 +6876,17 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6347,6 +6899,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6359,6 +6912,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -6377,6 +6931,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6385,13 +6940,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6408,6 +6965,7 @@ "resolved": "https://registry.npmjs.org/fireworm/-/fireworm-0.7.2.tgz", "integrity": "sha512-GjebTzq+NKKhfmDxjKq3RXwQcN9xRmZWhnnuC9L+/x5wBQtR0aaQM50HsjrzJ2wc28v1vSdfOpELok0TKR4ddg==", "dev": true, + "license": "MIT", "dependencies": { "async": "~0.2.9", "is-type": "0.0.1", @@ -6422,11 +6980,36 @@ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", "dev": true }, + "node_modules/fireworm/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fireworm/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6440,7 +7023,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -6453,6 +7037,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -6467,6 +7052,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -6476,6 +7062,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6492,6 +7079,7 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6501,6 +7089,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6510,6 +7099,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6523,7 +7113,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -6531,6 +7122,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6544,6 +7136,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6553,6 +7146,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6571,6 +7165,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6579,7 +7174,9 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -6598,19 +7195,22 @@ "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6630,13 +7230,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6655,6 +7257,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6674,6 +7277,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -6683,6 +7287,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6690,11 +7295,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/get-symbol-description": { "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6712,6 +7331,7 @@ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6722,26 +7342,27 @@ "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==" + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "license": "MIT" }, "node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6752,6 +7373,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6759,25 +7381,16 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6788,6 +7401,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -6800,6 +7414,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -6814,6 +7429,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6821,11 +7437,28 @@ "which": "bin/which" } }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -6837,32 +7470,21 @@ } }, "node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6872,13 +7494,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6890,19 +7514,22 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphql": { "version": "16.8.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -6910,19 +7537,22 @@ "node_modules/grid-index": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC" }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -6932,6 +7562,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6941,6 +7572,7 @@ "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.1.0.tgz", "integrity": "sha512-su0anMkNEnJKZ/rB99jn3y6lV/J8Ro96hBJ28YAeVzj5rWxH+YL/AdCyiYYA1HDLV9YhmvqpWSJJj2KLo1MX6g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2" @@ -6957,6 +7589,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6966,6 +7599,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -6978,6 +7612,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6990,6 +7625,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7002,6 +7638,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7016,13 +7653,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -7036,6 +7675,7 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7046,6 +7686,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7057,13 +7698,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -7074,13 +7717,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -7093,6 +7738,7 @@ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -7109,6 +7755,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -7121,6 +7768,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7137,6 +7785,7 @@ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -7150,7 +7799,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "5.0.0", @@ -7166,6 +7816,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7190,13 +7841,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -7206,6 +7859,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7222,6 +7876,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7230,7 +7885,9 @@ "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.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7240,19 +7897,22 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inline-source-map": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.3.tgz", "integrity": "sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "~0.5.3" } @@ -7262,6 +7922,7 @@ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, + "license": "MIT", "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", @@ -7283,6 +7944,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7297,6 +7959,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -7306,6 +7969,7 @@ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7322,6 +7986,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7337,13 +8002,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -7356,6 +8023,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7368,6 +8036,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7383,13 +8052,15 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-builtin-module": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-4.0.0.tgz", "integrity": "sha512-rWP3AMAalQSesXO8gleROyL2iKU73SX5Er66losQn9rWOWL4Gef0a/xOEOVqjWGMuR2vHG3FJ8UUmT700O8oFg==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^4.0.0" }, @@ -7405,6 +8076,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7417,6 +8089,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -7429,6 +8102,7 @@ "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, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -7444,6 +8118,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7459,6 +8134,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -7474,6 +8150,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7483,6 +8160,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7492,6 +8170,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7507,6 +8186,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7519,6 +8199,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7530,13 +8211,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7548,13 +8231,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -7564,6 +8249,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7579,6 +8265,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7588,6 +8275,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7597,6 +8285,7 @@ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -7606,6 +8295,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7622,6 +8312,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7634,6 +8325,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -7649,6 +8341,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7658,6 +8351,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7673,6 +8367,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7688,6 +8383,7 @@ "resolved": "https://registry.npmjs.org/is-type/-/is-type-0.0.1.tgz", "integrity": "sha512-YwJh/zBVrcJ90aAnPBM0CbHvm7lG9ao7lIFeqTZ1UQj4iFLpM5CikdaU+dGGesrMJwxLqPGmjjrUrQ6Kn3Zh+w==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0" } @@ -7697,6 +8393,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7712,6 +8409,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7724,6 +8422,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7736,6 +8435,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -7752,6 +8452,7 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -7763,24 +8464,26 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/jackspeak": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", - "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=14" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7794,6 +8497,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -7812,6 +8516,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7822,11 +8527,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7843,6 +8560,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7854,13 +8572,28 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -7876,6 +8609,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7891,6 +8625,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7907,6 +8642,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7918,13 +8654,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-extended": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.2.tgz", "integrity": "sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==", "dev": true, + "license": "MIT", "dependencies": { "jest-diff": "^29.0.0", "jest-get-type": "^29.0.0" @@ -7946,6 +8684,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -7955,6 +8694,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -7970,6 +8710,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7985,6 +8726,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8001,6 +8743,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8012,13 +8755,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-message-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -8039,6 +8784,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8054,6 +8800,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8070,6 +8817,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8081,22 +8829,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -8114,6 +8855,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8129,6 +8871,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8145,6 +8888,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8156,22 +8900,24 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -8190,42 +8936,62 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-pretty-compact": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", - "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8240,13 +9006,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -8261,13 +9029,15 @@ "node_modules/kdbush": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -8277,14 +9047,15 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/known-css-properties": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", - "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/labeled-stream-splicer": { @@ -8292,6 +9063,7 @@ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" @@ -8302,6 +9074,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8315,6 +9088,7 @@ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -8326,13 +9100,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -8348,31 +9124,17 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dev": true, - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8388,6 +9150,7 @@ "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", "integrity": "sha512-fESngZd+X4k+GbTxdMutf8ohQa0s3sJEHIcwtu4/LsIQ2JTDzdRxDCMQjW+ezzwRitLmHnacVVmosCbxifefbw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.isarguments": "^3.0.0", "lodash.isarray": "^3.0.0" @@ -8397,42 +9160,49 @@ "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.assignin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", "integrity": "sha512-lcmJwMpdPAtChA4hfiwxTtgFeNAaow701wWUgVUqeD0XJF7vMXIN+bu/2FJSGxT0NUbZy9g9VFrlOFfPjl+0Ew==", "dev": true, + "license": "MIT", "dependencies": { "lodash._getnative": "^3.0.0" } @@ -8441,13 +9211,15 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flatten": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-3.0.2.tgz", "integrity": "sha512-jCXLoNcqQRbnT/KWZq2fIREHWeczrzpTR0vsycm96l/pu5hGeAntVBG0t7GuM/2wFqmnZs3d1eGptnAH2E8+xQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._baseflatten": "^3.0.0", "lodash._isiterateecall": "^3.0.0" @@ -8457,31 +9229,36 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -8492,6 +9269,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0" } @@ -8500,56 +9278,92 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" } }, + "node_modules/lru-cache": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, + "node_modules/mapbox-gl": { + "resolved": "", + "link": true + }, "node_modules/mapbox-gl-styles": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mapbox-gl-styles/-/mapbox-gl-styles-2.0.2.tgz", "integrity": "sha512-Uf9Pd37vnKK+7iVs5PHvVr1k0cCdHu+k+twYx0woFf12y6nq340qJUb2HtBFu8vzYjx4OFBvLES8GQZ5ei5sLw==", "deprecated": "This package has moved to the @mapbox namespace. All new version are available via @mapbox/mapbox-gl-styles", "dev": true, + "license": "ISC", "dependencies": { "glob": "^5.0.14" } }, + "node_modules/mapbox-gl-styles/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/mapbox-gl-styles/node_modules/glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -8561,11 +9375,29 @@ "node": "*" } }, + "node_modules/mapbox-gl-styles/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mapbox-gl-ts": { + "resolved": "test/build/typings", + "link": true + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8576,6 +9408,7 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -8586,13 +9419,15 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8611,6 +9446,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8622,7 +9458,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -8635,6 +9472,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -8644,6 +9482,7 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8653,6 +9492,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8666,6 +9506,7 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -8678,13 +9519,15 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8697,6 +9540,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8706,6 +9550,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8729,30 +9574,37 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8771,57 +9623,37 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/mlly": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", - "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", - "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" - } - }, - "node_modules/mlly/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "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, + "license": "MIT" + }, "node_modules/mock-geolocation": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/mock-geolocation/-/mock-geolocation-1.0.11.tgz", "integrity": "sha512-F/kvZfwuVnuPNHjHPuSVZlch8HnLwZgq7LVyp83PKSW3sXYm3tJhi/Z1gIHvnbY953YfAxiq5a7wFhgzX+qIkg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mock-property": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/mock-property/-/mock-property-1.0.3.tgz", "integrity": "sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.1", "functions-have-names": "^1.2.3", @@ -8841,13 +9673,15 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, + "license": "MIT", "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", @@ -8885,7 +9719,8 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/msw": { "version": "2.3.1", @@ -8893,6 +9728,7 @@ "integrity": "sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@bundled-es-modules/cookie": "^2.0.0", "@bundled-es-modules/statuses": "^1.0.1", @@ -8935,6 +9771,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8950,6 +9787,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8966,6 +9804,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8977,19 +9816,28 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/msw/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true + "node_modules/msw/node_modules/type-fest": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.13.1.tgz", + "integrity": "sha512-ASMgM+Vf2cLwDMt1KXSkMUDSYCxtckDJs8zsaVF/mYteIsiARKCVtyXtcK38mIKbLTctZP8v6GMqdNaeI3fo7g==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "^0.1.34" } @@ -9009,13 +9857,15 @@ "node_modules/murmurhash-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" }, "node_modules/mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true, + "license": "MIT", "bin": { "mustache": "bin/mustache" } @@ -9025,6 +9875,7 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9040,6 +9891,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9051,13 +9903,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9066,13 +9920,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "dev": true, + "license": "MIT", "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -9082,50 +9938,19 @@ "which": "^2.0.2" } }, - "node_modules/node-notifier/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/node-notifier/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -9138,6 +9963,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -9147,6 +9973,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9155,13 +9982,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/npm-font-open-sans/-/npm-font-open-sans-1.1.0.tgz", "integrity": "sha512-t1y5ShWm6a8FSLwBdINT47XYMcuKY2rkTBsTdz/76YB2MtX0YD89RUkY2eSS2/XOmlZfBe1HFBAwD+b9+/UfmQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -9182,11 +10011,23 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -9201,6 +10042,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -9217,6 +10059,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -9226,15 +10069,30 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "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, + "license": "MIT", "engines": { "node": ">=4" } @@ -9244,6 +10102,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -9253,6 +10112,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -9265,6 +10125,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9274,6 +10135,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -9286,6 +10148,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9298,6 +10161,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -9310,6 +10174,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9318,7 +10183,9 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -9334,6 +10201,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -9346,6 +10214,7 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9355,6 +10224,7 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9364,6 +10234,7 @@ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -9380,6 +10251,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9389,6 +10261,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -9407,6 +10280,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9425,6 +10299,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9439,6 +10314,7 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9456,6 +10332,7 @@ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -9468,6 +10345,7 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9477,6 +10355,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -9501,6 +10380,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9517,13 +10397,15 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9532,13 +10414,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9548,6 +10432,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9563,6 +10448,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9577,19 +10463,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9602,6 +10491,7 @@ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, + "license": "MIT", "dependencies": { "path-platform": "~0.11.15" } @@ -9611,6 +10501,7 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", @@ -9624,9 +10515,9 @@ } }, "node_modules/parse-imports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.0.tgz", - "integrity": "sha512-JQWgmK2o4w8leUkZeZPatWdAny6vXGU/3siIUvMF6J2rDCud9aTt8h/px9oZJ6U3EcfhngBJ635uPFI0q0VAeA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", + "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", "dev": true, "dependencies": { "es-module-lexer": "^1.5.3", @@ -9641,6 +10532,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -9654,6 +10546,7 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9662,13 +10555,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9678,6 +10573,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9687,6 +10583,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9695,52 +10592,50 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "license": "MIT" }, "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/pathe": { @@ -9750,18 +10645,19 @@ "dev": true }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/pbf": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -9775,6 +10671,7 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -9790,13 +10687,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9809,6 +10708,7 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -9821,6 +10721,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9838,24 +10739,14 @@ "pixelmatch": "bin/pixelmatch" } }, - "node_modules/pkg-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz", - "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==", - "dev": true, - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.6.1", - "pathe": "^1.1.2" - } - }, "node_modules/playwright": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", - "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.1.tgz", + "integrity": "sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.45.0" + "playwright-core": "1.45.1" }, "bin": { "playwright": "cli.js" @@ -9868,10 +10759,11 @@ } }, "node_modules/playwright-core": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", - "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.1.tgz", + "integrity": "sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -9885,6 +10777,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -9908,6 +10801,7 @@ "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, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9931,6 +10825,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", @@ -9945,6 +10840,7 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" @@ -9961,6 +10857,7 @@ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.3.0", "dependency-graph": "^0.11.0", @@ -9985,11 +10882,46 @@ "postcss": "^8.0.0" } }, + "node_modules/postcss-cli/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-cli/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/postcss-cli/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -10002,6 +10934,7 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.1.tgz", "integrity": "sha512-uszdT0dULt3FQs47G5UHCduYK+FnkLYlpu1HpWu061eGsKZ7setoG7kA+WC9NQLsOJf69D5TxGHgnAdRgylnFQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", @@ -10016,10 +10949,11 @@ } }, "node_modules/postcss-convert-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.1.tgz", - "integrity": "sha512-9x2ofb+hYPwHWMlWAzyWys2yMDZYGfkX9LodbaVTmLdlupmtH2AGvj8Up95wzzNPRDEzPIxQIkUaPJew3bT6xA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.2.tgz", + "integrity": "sha512-MuZIF6HJ4izko07Q0TgW6pClalI4al6wHRNPkFzqQdwAwG7hPn0lA58VZdxyb2Vl5AYjJ1piO+jgF9EnTjQwQQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" @@ -10036,6 +10970,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.1.tgz", "integrity": "sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.1.0" }, @@ -10051,6 +10986,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -10063,6 +10999,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -10075,6 +11012,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -10087,6 +11025,7 @@ "resolved": "https://registry.npmjs.org/postcss-inline-svg/-/postcss-inline-svg-6.0.0.tgz", "integrity": "sha512-ok5j0Iqsn8mS/5U1W+Im6qkQjm6nBxdwwJU+BSnBaDhLjC06h1xvy9MA+tefxhfZP/ARTRwARSozzYGf/sqEGg==", "dev": true, + "license": "MIT", "dependencies": { "css-select": "^5.1.0", "dom-serializer": "^2.0.0", @@ -10109,6 +11048,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -10131,6 +11071,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -10156,6 +11097,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.2.tgz", "integrity": "sha512-06vrW6ZWi9qeP7KMS9fsa9QW56+tIMW55KYqF7X3Ccn+NI2pIgPV6gFfvXTMQ05H90Y5DvnCDPZ2IuHa30PMUg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^7.0.2" @@ -10172,6 +11114,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz", "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", @@ -10190,6 +11133,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10205,6 +11149,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, + "license": "MIT", "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^5.0.0", @@ -10222,6 +11167,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.1.tgz", "integrity": "sha512-e+Xt8xErSRPgSRFxHeBCSxMiO8B8xng7lh8E0A5ep1VfwYhY8FXhu4Q3APMjgx9YDDbSp53IBGENrzygbUvgUQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "cssnano-utils": "^5.0.0", @@ -10239,6 +11185,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.2.tgz", "integrity": "sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "postcss-selector-parser": "^6.1.0" @@ -10255,6 +11202,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -10267,6 +11215,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10282,6 +11231,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10297,6 +11247,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10312,6 +11263,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10327,6 +11279,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10342,6 +11295,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.1.tgz", "integrity": "sha512-PTPGdY9xAkTw+8ZZ71DUePb7M/Vtgkbbq+EoI33EuyQEzbKemEQMhe5QSr0VP5UfZlreANDPxSfcdSprENcbsg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" @@ -10358,6 +11312,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10373,6 +11328,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10388,6 +11344,7 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dev": true, + "license": "MIT", "dependencies": { "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" @@ -10404,6 +11361,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.1.tgz", "integrity": "sha512-0JDUSV4bGB5FGM5g8MkS+rvqKukJZ7OTHw/lcKn7xPNqeaqJyQbUO8/dJpvyTpaVwPsd3Uc33+CfNzdVowp2WA==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "caniuse-api": "^3.0.0" @@ -10420,6 +11378,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -10445,6 +11404,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "thenby": "^1.3.4" @@ -10460,7 +11420,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/postcss-safe-parser": { "version": "7.0.0", @@ -10481,6 +11442,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=18.0" }, @@ -10493,6 +11455,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10506,6 +11469,7 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.3.2" @@ -10522,6 +11486,7 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.1.tgz", "integrity": "sha512-MH7QE/eKUftTB5ta40xcHLl7hkZjgDFydpfTK+QWXeHxghVt3VoPqYL5/G+zYZPPIs+8GuqFXSTgxBSoB1RZtQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.1.0" }, @@ -10536,18 +11501,21 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/potpack": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", - "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", + "license": "ISC" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -10557,6 +11525,7 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -10569,6 +11538,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -10583,6 +11553,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10595,6 +11566,7 @@ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10604,6 +11576,7 @@ "resolved": "https://registry.npmjs.org/printf/-/printf-0.6.1.tgz", "integrity": "sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.9.0" } @@ -10613,6 +11586,7 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -10621,18 +11595,21 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -10645,13 +11622,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -10665,13 +11644,15 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10681,7 +11662,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/qrcode-terminal": { "version": "0.12.0", @@ -10697,6 +11679,7 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -10734,18 +11717,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -10755,6 +11741,7 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -10765,6 +11752,7 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10774,6 +11762,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -10789,6 +11778,7 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10797,13 +11787,15 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.3.0" } @@ -10813,6 +11805,7 @@ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.2" } @@ -10822,6 +11815,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -10836,6 +11830,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -10848,6 +11843,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10857,6 +11853,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10871,13 +11868,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/readable-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -10887,6 +11886,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10894,11 +11894,18 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/regexp.prototype.flags": { "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -10917,6 +11924,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10926,6 +11934,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10934,13 +11943,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -10958,6 +11969,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10967,6 +11979,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -10975,6 +11988,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", "dependencies": { "protocol-buffers-schema": "^3.3.1" } @@ -10984,6 +11998,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10993,7 +12008,9 @@ "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, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -11004,11 +12021,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11024,11 +12054,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -11039,6 +12083,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -11074,6 +12119,7 @@ "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-6.1.1.tgz", "integrity": "sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.5", "debug": "^4.3.4", @@ -11093,6 +12139,7 @@ "resolved": "https://registry.npmjs.org/rollup-plugin-unassert/-/rollup-plugin-unassert-0.6.0.tgz", "integrity": "sha512-wdfjsa8pPYFKRwHEOh2K9MAjkdEB864a8bTgDykqle85nGowY1lI8oCU5aqWG8zTc/bkF8/15C8ApzeBtT6VaA==", "dev": true, + "license": "Beerware", "dependencies": { "@javascript-obfuscator/escodegen": "^2.3.0", "@rollup/pluginutils": "^4.2.1", @@ -11107,6 +12154,7 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -11115,29 +12163,19 @@ "node": ">= 8.0.0" } }, - "node_modules/rollup-plugin-unassert/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/rollup-plugin-unassert/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/run-async": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -11161,6 +12199,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -11168,13 +12207,15 @@ "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" }, "node_modules/safe-array-concat": { "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -11192,7 +12233,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", @@ -11212,13 +12254,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -11235,21 +12279,27 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/seedrandom": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -11257,6 +12307,7 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -11281,6 +12332,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -11289,19 +12341,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -11310,6 +12365,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.2.tgz", "integrity": "sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -11319,6 +12375,7 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -11333,13 +12390,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11357,6 +12416,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11371,13 +12431,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -11391,6 +12453,7 @@ "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "fast-safe-stringify": "^2.0.7" } @@ -11400,6 +12463,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -11412,6 +12476,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11421,6 +12486,7 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11429,13 +12495,15 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/shuffle-seed": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz", "integrity": "sha512-Vr9wlwMKJVUeFNGyc4aNbrzkI568gkve7ykyJ+1/cz78j3yRlJODWU0CuJ/fmk3MCjvAClpnqlycd/Y53UG3UA==", "dev": true, + "license": "MIT", "dependencies": { "seedrandom": "^2.4.2" } @@ -11445,6 +12513,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11469,6 +12538,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -11494,7 +12564,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/sirv": { "version": "2.0.4", @@ -11510,6 +12581,16 @@ "node": ">= 10" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/slashes": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", @@ -11521,6 +12602,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -11538,6 +12620,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11553,6 +12636,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11564,19 +12648,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/smob": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/socket.io": { "version": "4.7.5", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -11595,37 +12682,18 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "~4.3.4", "ws": "~8.11.0" } }, - "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -11639,6 +12707,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -11648,6 +12717,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -11657,6 +12727,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11667,6 +12738,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -11675,13 +12747,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", "integrity": "sha512-73BoniQDcRWgnLAf/suKH6V5H54gd1KLzwYN9FB6J/evqTV33htH9xwV/4BHek+++jzxpVlZQKKZkqstPQPmQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -11692,6 +12766,7 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -11701,13 +12776,15 @@ "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 + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -11717,19 +12794,22 @@ "version": "3.0.17", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/st": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/st/-/st-3.0.0.tgz", "integrity": "sha512-UEUi8P8Y5GOewlJbE5vrhsaQRwmbNVMUr6PLxRZHH4Cwz8CkHhnBqlqGtE3egXQd+ceUwNxdOVjsC/IsgN2Pww==", "dev": true, + "license": "ISC", "dependencies": { "async-cache": "^1.1.0", "bl": "^5.0.0", @@ -11749,6 +12829,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -11761,6 +12842,7 @@ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -11773,6 +12855,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11788,6 +12871,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11803,6 +12887,7 @@ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, + "license": "MIT", "dependencies": { "internal-slot": "^1.0.4" }, @@ -11815,6 +12900,7 @@ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -11825,6 +12911,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11839,6 +12926,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -11849,6 +12937,7 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -11861,6 +12950,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11875,6 +12965,7 @@ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" @@ -11884,13 +12975,15 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -11965,6 +13058,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11983,6 +13077,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12001,6 +13096,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12015,6 +13111,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12032,6 +13129,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12057,6 +13155,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -12066,6 +13165,7 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12087,6 +13187,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -12094,35 +13195,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", - "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", - "dev": true, - "dependencies": { - "js-tokens": "^9.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", - "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", - "dev": true - }, "node_modules/styled_string": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/styled_string/-/styled_string-0.0.1.tgz", "integrity": "sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylehacks": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.2.tgz", "integrity": "sha512-HdkWZS9b4gbgYTdMg4gJLmm7biAUug1qTqXjS+u8X+/pUd+9Px1E+520GnOW3rST9MNsVOVpsJG+mPHNosxjOQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.1", "postcss-selector-parser": "^6.1.0" @@ -12135,9 +13220,9 @@ } }, "node_modules/stylelint": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.6.1.tgz", - "integrity": "sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", + "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", "dev": true, "funding": [ { @@ -12150,9 +13235,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", "@csstools/selector-specificity": "^3.1.1", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", @@ -12160,7 +13245,7 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", + "debug": "^4.3.5", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^9.0.0", @@ -12171,13 +13256,13 @@ "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.31.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.7", "normalize-path": "^3.0.0", "picocolors": "^1.0.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^7.0.0", "postcss-selector-parser": "^6.1.0", @@ -12212,6 +13297,7 @@ "url": "https://github.com/sponsors/stylelint" } ], + "license": "MIT", "engines": { "node": ">=18.12.0" }, @@ -12234,6 +13320,7 @@ "url": "https://github.com/sponsors/stylelint" } ], + "license": "MIT", "dependencies": { "stylelint-config-recommended": "^14.0.1" }, @@ -12248,19 +13335,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylelint/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 + "dev": true, + "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^5.0.0" }, @@ -12273,6 +13363,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.3.1", "keyv": "^4.5.4" @@ -12281,40 +13372,12 @@ "node": ">=18" } }, - "node_modules/stylelint/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12324,6 +13387,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12338,6 +13402,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12350,6 +13415,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12365,6 +13431,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12377,6 +13444,7 @@ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.1.0" } @@ -12385,6 +13453,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", "dependencies": { "kdbush": "^4.0.2" } @@ -12394,6 +13463,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12406,6 +13476,7 @@ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -12419,6 +13490,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12437,6 +13509,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -12462,6 +13535,7 @@ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -12478,6 +13552,7 @@ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, + "license": "MIT", "dependencies": { "acorn-node": "^1.2.0" } @@ -12487,6 +13562,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -12503,6 +13579,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12518,19 +13595,22 @@ "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 + "dev": true, + "license": "MIT" }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12545,6 +13625,7 @@ "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", "dev": true, + "license": "MIT", "dependencies": { "events-to-array": "^1.0.1", "js-yaml": "^3.2.7", @@ -12554,21 +13635,54 @@ "tap-parser": "bin/cmd.js" } }, + "node_modules/tap-parser/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/tap-parser/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/tap-parser/node_modules/minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, + "license": "ISC", "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, + "node_modules/tap-parser/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12578,6 +13692,7 @@ "resolved": "https://registry.npmjs.org/tape/-/tape-5.8.1.tgz", "integrity": "sha512-pUzADXBVYm5Jkneh9hfXnirADrzQrDA3vddKbPOc/ZLORj4dFQ6GR1KdGWX0/NvOLDcYkVgeMdw78Uf6BzO3KA==", "dev": true, + "license": "MIT", "dependencies": { "@ljharb/resumer": "^0.1.3", "@ljharb/through": "^2.3.13", @@ -12614,15 +13729,29 @@ "resolved": "https://registry.npmjs.org/tape-filter/-/tape-filter-1.0.4.tgz", "integrity": "sha512-iLXfCT4yxphhbYQNqpYpoyB5LJpem6QoRZKfqTuzI/qJUwzlyZSA6+V22Abnk1RoKB6ovuWBErwxLq4mgTQOFg==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" } }, + "node_modules/tape/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/tape/node_modules/glob": { "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, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12638,11 +13767,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tape/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/tape/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -12660,6 +13803,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12673,29 +13817,19 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/testem": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/testem/-/testem-3.15.0.tgz", "integrity": "sha512-vI1oQsjJW4QdVaH6ZmfNErzH7nzs0KzHJluocnfvbz1XRYGJKkIMGKWfsbD8MGGJOg+uzXcEek0/2W7BmGR4ug==", "dev": true, + "license": "MIT", "dependencies": { "@xmldom/xmldom": "^0.8.0", "backbone": "^1.1.2", @@ -12734,17 +13868,41 @@ "node": ">= 7.*" } }, + "node_modules/testem/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/testem/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/testem/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/testem/node_modules/glob": { "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, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12760,29 +13918,60 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/testem/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/testem/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thenby": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -12801,9 +13990,10 @@ } }, "node_modules/tiny-lru": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.2.6.tgz", - "integrity": "sha512-0PU3c9PjMnltZaFo2sGYv/nnJsMjG0Cxx8X6FXHPPGjFyoo1SJDxvUXW1207rdiSxYizf31roo+GrkIByQeZoA==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.2.11.tgz", + "integrity": "sha512-27BIW0dIWTYYoWNnqSmoNMKe5WIbkXsc0xaCQHd3/3xT2XMuMJrzHdrO9QBFR14emBz1Bu0dOAs2sCBBrvgPQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -12815,23 +14005,33 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", - "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", + "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", "dev": true, "engines": { - "node": ">=14.0.0" + "node": "^18.0.0 || >=20.0.0" } }, "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", + "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", "dev": true, "engines": { "node": ">=14.0.0" @@ -12842,6 +14042,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -12854,6 +14055,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -12866,6 +14068,7 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -12884,6 +14087,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -12896,6 +14100,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -12903,29 +14108,19 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsx": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.0.tgz", - "integrity": "sha512-MPgN+CuY+4iKxGoJNPv+1pyo5YWZAQ5XfsyobUG+zoKG7IkvCPLZDEyoIb8yLS2FcWci1nlxAqmvPlFWD5AFiQ==", + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", + "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "~0.21.5", "get-tsconfig": "^4.7.5" @@ -12948,6 +14143,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -12964,6 +14160,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -12980,6 +14177,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -12996,6 +14194,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -13012,6 +14211,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -13028,6 +14228,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -13044,6 +14245,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -13060,6 +14262,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -13076,6 +14279,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13092,6 +14296,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13108,6 +14313,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13124,6 +14330,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13140,6 +14347,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13156,6 +14364,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13172,6 +14381,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13188,6 +14398,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13204,6 +14415,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -13220,6 +14432,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -13236,6 +14449,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -13252,6 +14466,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -13268,6 +14483,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -13284,6 +14500,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -13300,6 +14517,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -13314,6 +14532,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -13350,12 +14569,14 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tweakpane": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-4.0.4.tgz", "integrity": "sha512-RkWD54zDlEbnN01wQPk0ANHGbdCvlJx/E8A1QxhTfCbX+ROWos1Ws2MnhOm39aUGMOh+36TjUwpDmLfmwTr1Fg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/cocopon" } @@ -13365,6 +14586,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -13372,22 +14594,14 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.13.1.tgz", - "integrity": "sha512-ASMgM+Vf2cLwDMt1KXSkMUDSYCxtckDJs8zsaVF/mYteIsiARKCVtyXtcK38mIKbLTctZP8v6GMqdNaeI3fo7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13398,6 +14612,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -13411,6 +14626,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -13425,6 +14641,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -13444,6 +14661,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -13464,6 +14682,7 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -13483,13 +14702,15 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13499,15 +14720,14 @@ } }, "node_modules/typescript-eslint": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.15.0.tgz", - "integrity": "sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.1.tgz", + "integrity": "sha512-889oE5qELj65q/tGeOSvlreNKhimitFwZqQ0o7PcWC7/lgRkAMknznsCsV8J8mZGTP/Z+cIbX8accf2DE33hrA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@typescript-eslint/utils": "7.15.0" + "@typescript-eslint/eslint-plugin": "7.16.1", + "@typescript-eslint/parser": "7.16.1", + "@typescript-eslint/utils": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -13525,17 +14745,12 @@ } } }, - "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", - "dev": true - }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true, + "license": "MIT", "bin": { "umd": "bin/cli.js" } @@ -13545,24 +14760,17 @@ "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", "dev": true, + "license": "MIT", "dependencies": { "estraverse": "^5.0.0" } }, - "node_modules/unassert/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -13578,6 +14786,7 @@ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", @@ -13593,19 +14802,22 @@ "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -13618,6 +14830,7 @@ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/universalify": { @@ -13625,6 +14838,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -13634,14 +14848,15 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -13657,6 +14872,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" @@ -13673,6 +14889,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -13682,6 +14899,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -13691,6 +14909,7 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" @@ -13701,6 +14920,7 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -13716,6 +14936,7 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -13728,7 +14949,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utility-types": { "version": "3.11.0", @@ -13745,6 +14967,7 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -13754,6 +14977,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -13763,6 +14987,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -13773,6 +14998,7 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13783,18 +15009,19 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vite": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.3.tgz", - "integrity": "sha512-+i1oagbvkVIhEy9TnEV+fgXsng13nZM90JQbrcPrf6DvW2mXARlz+DK7DLiDP+qeKoD1FCVx/1SpFL1CLq9Mhw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.36", + "esbuild": "^0.21.3", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { @@ -13843,15 +15070,15 @@ } }, "node_modules/vite-node": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", - "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.3.tgz", + "integrity": "sha512-14jzwMx7XTcMB+9BhGQyoEAmSl0eOr3nrnn+Z12WNERtOvLN+d2scbRUvyni05rT3997Bg+rZb47NyP4IQPKXg==", "dev": true, "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", + "debug": "^4.3.5", + "pathe": "^1.1.2", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -13868,12 +15095,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/vite-plugin-arraybuffer/-/vite-plugin-arraybuffer-0.0.8.tgz", "integrity": "sha512-F+InDQuxd93YDVRdXTjBr3lydgjyVHSpgRZS4izK/i85Anl5kmbvf2NwJ//XHAccHh1TScfX70MFJfBx/rf3cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vite/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==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -13887,9 +15115,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -13903,9 +15131,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -13919,9 +15147,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -13935,9 +15163,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "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==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -13951,9 +15179,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -13967,9 +15195,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -13983,9 +15211,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -13999,9 +15227,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -14015,9 +15243,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "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==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -14031,9 +15259,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -14047,9 +15275,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -14063,9 +15291,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -14079,9 +15307,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -14095,9 +15323,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -14111,9 +15339,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -14127,9 +15355,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -14143,9 +15371,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -14159,9 +15387,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -14175,9 +15403,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -14191,9 +15419,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -14207,9 +15435,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -14223,9 +15451,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -14239,9 +15467,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -14251,56 +15479,55 @@ "node": ">=12" }, "optionalDependencies": { - "@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" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vitest": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", - "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", - "dev": true, - "dependencies": { - "@vitest/expect": "1.6.0", - "@vitest/runner": "1.6.0", - "@vitest/snapshot": "1.6.0", - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "acorn-walk": "^8.3.2", - "chai": "^4.3.10", - "debug": "^4.3.4", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.3.tgz", + "integrity": "sha512-o3HRvU93q6qZK4rI2JrhKyZMMuxg/JRt30E6qeQs6ueaiz5hr1cPj+Sk2kATgQzMMqsa2DiNI0TIK++1ULx8Jw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.3", + "@vitest/pretty-format": "^2.0.3", + "@vitest/runner": "2.0.3", + "@vitest/snapshot": "2.0.3", + "@vitest/spy": "2.0.3", + "@vitest/utils": "2.0.3", + "chai": "^5.1.1", + "debug": "^4.3.5", "execa": "^8.0.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "tinybench": "^2.5.1", - "tinypool": "^0.8.3", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "1.6.0", + "vite-node": "2.0.3", "why-is-node-running": "^2.2.2" }, "bin": { @@ -14315,8 +15542,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.6.0", - "@vitest/ui": "1.6.0", + "@vitest/browser": "2.0.3", + "@vitest/ui": "2.0.3", "happy-dom": "*", "jsdom": "*" }, @@ -14341,15 +15568,6 @@ } } }, - "node_modules/vitest/node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/vitest/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -14428,12 +15646,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vt-pbf": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", @@ -14445,6 +15665,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -14460,6 +15681,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -14476,6 +15698,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -14494,6 +15717,7 @@ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -14509,9 +15733,9 @@ } }, "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "dependencies": { "siginfo": "^2.0.0", @@ -14529,6 +15753,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -14537,13 +15762,15 @@ "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 + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14558,6 +15785,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14693,13 +15921,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -14708,11 +15938,34 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -14722,21 +15975,24 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" }, "node_modules/yaml": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -14749,6 +16005,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14762,17 +16019,29 @@ "node": ">=12" } }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14782,20 +16051,12 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14805,7 +16066,7 @@ }, "src/style-spec": { "name": "@mapbox/mapbox-gl-style-spec", - "version": "14.5.1", + "version": "14.5.2", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", @@ -14815,9 +16076,9 @@ "csscolorparser": "~1.0.2", "json-stringify-pretty-compact": "^4.0.0", "minimist": "^1.2.6", - "quickselect": "^2.0.0", + "quickselect": "^3.0.0", "rw": "^1.3.3", - "tinyqueue": "^2.0.3" + "tinyqueue": "^3.0.0" }, "bin": { "gl-style-composite": "bin/gl-style-composite.js", @@ -14825,6 +16086,16 @@ "gl-style-migrate": "bin/gl-style-migrate.js", "gl-style-validate": "bin/gl-style-validate.js" } + }, + "test/build/typings": { + "name": "mapbox-gl-ts", + "dependencies": { + "mapbox-gl": "file:../../../" + }, + "devDependencies": { + "@types/geojson": "*", + "typescript": "^5.4.5" + } } } } diff --git a/package.json b/package.json index 41ec9935c8d..bb0ebb2e66f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "3.5.1", + "version": "3.5.2", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "types": "dist/mapbox-gl.d.ts", @@ -12,7 +12,8 @@ "url": "git://github.com/mapbox/mapbox-gl-js.git" }, "workspaces": [ - "src/style-spec" + "src/style-spec", + "test/build/typings" ], "dependencies": { "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -22,6 +23,8 @@ "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.14", + "@types/mapbox__vector-tile": "^1.3.4", "cheap-ruler": "^4.0.0", "csscolorparser": "~1.0.3", "earcut": "^3.0.0", @@ -34,12 +37,12 @@ "murmurhash-js": "^1.0.0", "pbf": "^3.2.1", "potpack": "^2.0.0", - "quickselect": "^2.0.0", + "quickselect": "^3.0.0", "rw": "^1.3.3", "serialize-to-js": "^3.1.2", "supercluster": "^8.0.1", - "tiny-lru": "^11.2.6", - "tinyqueue": "^2.0.3", + "tiny-lru": "^11.2.11", + "tinyqueue": "^3.0.0", "tweakpane": "^4.0.4", "vt-pbf": "^3.1.3" }, @@ -53,24 +56,22 @@ "@rollup/plugin-strip": "^3.0.4", "@rollup/plugin-terser": "^0.4.4", "@tweakpane/core": "^2.0.4", - "@types/geojson": "^7946.0.14", "@types/geojson-vt": "^3.2.5", "@types/jest": "^29.5.12", "@types/mapbox__point-geometry": "^0.1.4", - "@types/mapbox__vector-tile": "^1.3.4", - "@types/node": "^20.14.9", + "@types/node": "^20.14.10", "@types/offscreencanvas": "^2019.7.3", "@types/pbf": "^3.0.5", - "@typescript-eslint/eslint-plugin": "^7.15.0", - "@typescript-eslint/parser": "^7.15.0", - "@vitest/browser": "^1.6.0", - "@vitest/ui": "^1.6.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "@vitest/browser": "^2.0.3", + "@vitest/ui": "^2.0.3", "address": "^2.0.3", "browserify": "^17.0.0", "chalk": "^5.0.1", "chokidar": "^3.6.0", "cross-env": "^7.0.3", - "cssnano": "^7.0.3", + "cssnano": "^7.0.4", "d3-queue": "^3.0.7", "diff": "^5.2.0", "dts-bundle-generator": "^9.5.1", @@ -82,8 +83,8 @@ "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-html": "^8.1.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.5.0", - "glob": "^10.4.2", + "eslint-plugin-jsdoc": "^48.7.0", + "glob": "^11.0.0", "is-builtin-module": "^4.0.0", "jest-extended": "^4.0.2", "json-stringify-pretty-compact": "^4.0.0", @@ -96,7 +97,7 @@ "npm-font-open-sans": "^1.1.0", "npm-run-all": "^4.1.5", "pixelmatch": "^6.0.0", - "playwright": "^1.45.0", + "playwright": "^1.45.1", "postcss": "^8.4.39", "postcss-cli": "^11.0.0", "postcss-inline-svg": "^6.0.0", @@ -108,17 +109,17 @@ "serve-static": "^1.15.0", "shuffle-seed": "^1.1.6", "st": "^3.0.0", - "stylelint": "^16.6.1", + "stylelint": "^16.7.0", "stylelint-config-standard": "^36.0.1", "tape": "^5.8.1", "tape-filter": "^1.0.4", "testem": "^3.15.0", - "tsx": "^4.16.0", + "tsx": "^4.16.2", "typescript": "^5.5.3", - "typescript-eslint": "^7.15.0", + "typescript-eslint": "^7.16.1", "utility-types": "^3.11.0", "vite-plugin-arraybuffer": "^0.0.8", - "vitest": "^1.6.0" + "vitest": "^2.0.3" }, "scripts": { "build-dev": "rollup -c --environment BUILD:dev", @@ -168,11 +169,9 @@ "tsc": "tsc --project tsconfig.json" }, "files": [ - "build/", "dist/mapbox-gl*", "dist/style-spec/", "dist/package.json", - "src/", "LICENSE.txt" ] } diff --git a/src/data/feature_index.ts b/src/data/feature_index.ts index 52f356ce6f8..2371b2dcecf 100644 --- a/src/data/feature_index.ts +++ b/src/data/feature_index.ts @@ -8,7 +8,7 @@ import Grid from 'grid-index'; import DictionaryCoder from '../util/dictionary_coder'; import {VectorTile} from '@mapbox/vector-tile'; import Protobuf from 'pbf'; -import GeoJSONFeature from '../util/vectortile_to_geojson'; +import Feature from '../util/vectortile_to_geojson'; import {arraysIntersect, mapObject, extend} from '../util/util'; import {OverscaledTileID} from '../source/tile_id'; import {register} from '../util/web_worker_transfer'; @@ -20,10 +20,11 @@ import {FeatureIndexArray} from './array_types'; import {DEMSampler} from '../terrain/elevation'; import type StyleLayer from '../style/style_layer'; -import type {QueryResult, QueryFeature} from '../source/query_features'; +import type {QueryResult} from '../source/query_features'; import type {FeatureStates} from '../source/source_state'; import type {FeatureFilter} from '../style-spec/feature_filter/index'; import type Transform from '../geo/transform'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import type {FilterSpecification, PromoteIdSpecification} from '../style-spec/types'; import type {TilespaceQueryGeometry} from '../style/query_geometry'; import type {FeatureIndex as FeatureIndexStruct} from './array_types'; @@ -273,7 +274,7 @@ class FeatureIndex { continue; } - const geojsonFeature = new GeoJSONFeature(feature, this.z, this.x, this.y, id); + const geojsonFeature = new Feature(feature, this.z, this.x, this.y, id); const serializedLayer = extend({}, serializedLayers[layerID]); @@ -285,7 +286,7 @@ class FeatureIndex { } } - appendToResult(result: QueryResult, layerID: string, featureIndex: number, geojsonFeature: QueryFeature, intersectionZ: boolean | number) { + appendToResult(result: QueryResult, layerID: string, featureIndex: number, geojsonFeature: GeoJSONFeature, intersectionZ: boolean | number) { let layerResult = result[layerID]; if (layerResult === undefined) { layerResult = result[layerID] = []; diff --git a/src/data/mrt/mrt.ts b/src/data/mrt/mrt.ts index 52d95004590..3e10d656504 100644 --- a/src/data/mrt/mrt.ts +++ b/src/data/mrt/mrt.ts @@ -1,7 +1,7 @@ // @ts-nocheck /* eslint-disable camelcase */ -import {TileHeader, NumericData} from './mrt_pbf_decoder'; +import {readTileHeader, readNumericData} from './mrt_pbf_decoder'; import {lru} from 'tiny-lru'; import deltaDecode from './filters/delta'; import zigzagDecode from './filters/zigzag'; @@ -99,7 +99,7 @@ class MapboxRasterTile { const pbf = new Pbf(bytes.subarray(0, headerLength)); /** @type {TPbfRasterTileData} */ - const meta = TileHeader.read(pbf); + const meta = readTileHeader(pbf); // Validate the incoming tile z/x/y matches, if already initialized if ( @@ -424,18 +424,9 @@ MapboxRasterTile.performDecoding = function (buf, decodingBatch) { switch (codec) { case 'gzip_data': { decoded = decompress(taskBuf, codec).then((bytes) => { - const pbf = NumericData.read(new Pbf(bytes)); - switch (pbf.values) { - case 'uint32_values': { - pbf.uint32_values.readValuesInto(values); - const Ctor = PIXEL_FORMAT_TO_CTOR[pixelFormat]; - return new Ctor(values.buffer); - } - default: - throw new Error( - `Unhandled numeric data "${pbf.values}"` - ); - } + readNumericData(new Pbf(bytes), values); + const Ctor = PIXEL_FORMAT_TO_CTOR[pixelFormat]; + return new Ctor(values.buffer); }); break; } diff --git a/src/data/mrt/mrt_pbf_decoder.ts b/src/data/mrt/mrt_pbf_decoder.ts index 82349840ac4..896419b7c03 100644 --- a/src/data/mrt/mrt_pbf_decoder.ts +++ b/src/data/mrt/mrt_pbf_decoder.ts @@ -1,392 +1,124 @@ // @ts-nocheck /* eslint-disable camelcase */ -/* eslint-disable no-sequences */ -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unreachable */ -/* eslint-disable no-unused-expressions */ -/* This code is not entirely auto-generated. It's based on the output of npm run - * pbf:generate, but it has been hand-modified. - * - * There is precisely two section which are customized: A utility function is - * added at the top, and then at the bottom the NumericData.VariableLengthValues - * reader is modified to read values into a preallocated typed array in order - * to avoid the default behavior which reads them into a generic JavaScript - * array only to then pass them into a typed array. - * - * To update this file: - * 1. run `npm run pbf:generate` - * 2. copy the contents of the updated `mrt/js/proto/mrt_v2_pb2.js` into this file - * 3. manually transfer over modified sections - * 4. delete all `write` methods (they're not used in JS) - * 5. remove references to `exports` - */ - -/******************************************************** - **************** BEGIN EDITED SECTION ****************** - ********************************************************/ -const Bytes = 2; - -function readPackedEnd(pbf) { - return pbf.type === Bytes ? pbf.readVarint() + pbf.pos : pbf.pos + 1; +export function readTileHeader(pbf, end) { + return pbf.readFields(readTileHeaderTag, {header_length: 0, x: 0, y: 0, z: 0, layers: []}, end); } - -function createPackedVarintReader(pbf) { - if (pbf.type !== Bytes) throw new Error(`Unsupported pbf type "${pbf.type}"`); - const end = readPackedEnd(pbf); - const start = pbf.pos; - pbf.pos = end; - return function readInto(arr) { - pbf.pos = start; - let i = 0; - while (pbf.pos < end) { - const value = pbf.readVarint(); - arr[i++] = value; - } - return arr; - }; -} -/******************************************************** - ***************** END EDITED SECTION ******************* - ********************************************************/ - -// TileHeader ======================================== - -const TileHeader: Record = {}; - -TileHeader.read = function (pbf, end) { - return pbf.readFields( - TileHeader._readField, - {header_length: 0, x: 0, y: 0, z: 0, layers: []}, - end - ); -}; -TileHeader._readField = function (tag, obj, pbf) { +function readTileHeaderTag(tag, obj, pbf) { if (tag === 1) obj.header_length = pbf.readFixed32(); else if (tag === 2) obj.x = pbf.readVarint(); else if (tag === 3) obj.y = pbf.readVarint(); else if (tag === 4) obj.z = pbf.readVarint(); - else if (tag === 5) - obj.layers.push(TileHeader.Layer.read(pbf, pbf.readVarint() + pbf.pos)); -}; - -TileHeader.PixelFormat = { - PIXEL_FORMAT_UNKNOWN: { - value: 0, - options: {}, - }, - PIXEL_FORMAT_UINT32: { - value: 1, - options: {}, - }, - PIXEL_FORMAT_UINT16: { - value: 2, - options: {}, - }, - PIXEL_FORMAT_UINT8: { - value: 3, - options: {}, - }, -}; - -// TileHeader.Filter ======================================== - -TileHeader.Filter = {}; - -TileHeader.Filter.read = function (pbf, end) { - return pbf.readFields( - TileHeader.Filter._readField, - { - delta_filter: null, - filter: null, - zigzag_filter: null, - bitshuffle_filter: null, - byteshuffle_filter: null, - }, - end - ); -}; -TileHeader.Filter._readField = function (tag, obj, pbf) { - if (tag === 1) - (obj.delta_filter = TileHeader.Filter.Delta.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.filter = 'delta_filter'); - else if (tag === 2) - (obj.zigzag_filter = TileHeader.Filter.Zigzag.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.filter = 'zigzag_filter'); - else if (tag === 3) - (obj.bitshuffle_filter = TileHeader.Filter.BitShuffle.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.filter = 'bitshuffle_filter'); - else if (tag === 4) - (obj.byteshuffle_filter = TileHeader.Filter.ByteShuffle.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.filter = 'byteshuffle_filter'); -}; - -// TileHeader.Filter.Delta ======================================== + else if (tag === 5) obj.layers.push(readLayer(pbf, pbf.readVarint() + pbf.pos)); +} -TileHeader.Filter.Delta = {}; +function readFilter(pbf, end) { + return pbf.readFields(readFilterTag, {}, end); +} +function readFilterTag(tag, obj, pbf) { + if (tag === 1) { + obj.delta_filter = readFilterDelta(pbf, pbf.readVarint() + pbf.pos); + obj.filter = 'delta_filter'; + } else if (tag === 2) { + pbf.readVarint(); + obj.filter = 'zigzag_filter'; + } else if (tag === 3) { + pbf.readVarint(); + obj.filter = 'bitshuffle_filter'; + } else if (tag === 4) { + pbf.readVarint(); + obj.filter = 'byteshuffle_filter'; + } +} -TileHeader.Filter.Delta.read = function (pbf, end) { - return pbf.readFields( - TileHeader.Filter.Delta._readField, - {block_size: 0}, - end - ); -}; -TileHeader.Filter.Delta._readField = function (tag, obj, pbf) { +function readFilterDelta(pbf, end) { + return pbf.readFields(readFilterDeltaTag, {block_size: 0}, end); +} +function readFilterDeltaTag(tag, obj, pbf) { if (tag === 1) obj.block_size = pbf.readVarint(); -}; - -// TileHeader.Filter.Zigzag ======================================== - -TileHeader.Filter.Zigzag = {}; - -TileHeader.Filter.Zigzag.read = function (pbf, end) { - return pbf.readFields(TileHeader.Filter.Zigzag._readField, {}, end); -}; -TileHeader.Filter.Zigzag._readField = function (tag, obj, pbf) {}; - -// TileHeader.Filter.BitShuffle ======================================== - -TileHeader.Filter.BitShuffle = {}; - -TileHeader.Filter.BitShuffle.read = function (pbf, end) { - return pbf.readFields(TileHeader.Filter.BitShuffle._readField, {}, end); -}; -TileHeader.Filter.BitShuffle._readField = function (tag, obj, pbf) {}; - -// TileHeader.Filter.ByteShuffle ======================================== - -TileHeader.Filter.ByteShuffle = {}; - -TileHeader.Filter.ByteShuffle.read = function (pbf, end) { - return pbf.readFields(TileHeader.Filter.ByteShuffle._readField, {}, end); -}; -TileHeader.Filter.ByteShuffle._readField = function (tag, obj, pbf) {}; - -// TileHeader.Codec ======================================== - -TileHeader.Codec = {}; - -TileHeader.Codec.read = function (pbf, end) { - return pbf.readFields( - TileHeader.Codec._readField, - { - gzip_data: null, - codec: null, - jpeg_image: null, - webp_image: null, - png_image: null, - }, - end - ); -}; -TileHeader.Codec._readField = function (tag, obj, pbf) { - if (tag === 1) - (obj.gzip_data = TileHeader.Codec.GzipData.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.codec = 'gzip_data'); - else if (tag === 2) - (obj.jpeg_image = TileHeader.Codec.JpegImage.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.codec = 'jpeg_image'); - else if (tag === 3) - (obj.webp_image = TileHeader.Codec.WebpImage.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.codec = 'webp_image'); - else if (tag === 4) - (obj.png_image = TileHeader.Codec.PngImage.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.codec = 'png_image'); -}; - -// TileHeader.Codec.GzipData ======================================== - -TileHeader.Codec.GzipData = {}; - -TileHeader.Codec.GzipData.read = function (pbf, end) { - return pbf.readFields(TileHeader.Codec.GzipData._readField, {}, end); -}; -TileHeader.Codec.GzipData._readField = function (tag, obj, pbf) {}; - -// TileHeader.Codec.JpegImage ======================================== - -TileHeader.Codec.JpegImage = {}; - -TileHeader.Codec.JpegImage.read = function (pbf, end) { - return pbf.readFields(TileHeader.Codec.JpegImage._readField, {}, end); -}; -TileHeader.Codec.JpegImage._readField = function (tag, obj, pbf) {}; - -// TileHeader.Codec.WebpImage ======================================== - -TileHeader.Codec.WebpImage = {}; - -TileHeader.Codec.WebpImage.read = function (pbf, end) { - return pbf.readFields(TileHeader.Codec.WebpImage._readField, {}, end); -}; -TileHeader.Codec.WebpImage._readField = function (tag, obj, pbf) {}; - -// TileHeader.Codec.PngImage ======================================== - -TileHeader.Codec.PngImage = {}; - -TileHeader.Codec.PngImage.read = function (pbf, end) { - return pbf.readFields(TileHeader.Codec.PngImage._readField, {}, end); -}; -TileHeader.Codec.PngImage._readField = function (tag, obj, pbf) {}; - -// TileHeader.DataIndexEntry ======================================== +} -TileHeader.DataIndexEntry = {}; +function readCodec(pbf, end) { + return pbf.readFields(readCodecTag, {}, end); +} +function readCodecTag(tag, obj, pbf) { + if (tag === 1) { + pbf.readVarint(); + obj.codec = 'gzip_data'; + } else if (tag === 2) { + pbf.readVarint(); + obj.codec = 'jpeg_image'; + } else if (tag === 3) { + pbf.readVarint(); + obj.codec = 'webp_image'; + } else if (tag === 4) { + pbf.readVarint(); + obj.codec = 'png_image'; + } +} -TileHeader.DataIndexEntry.read = function (pbf, end) { - return pbf.readFields( - TileHeader.DataIndexEntry._readField, - { - first_byte: 0, - last_byte: 0, - filters: [], - codec: null, - offset: 0, - scale: 0, - bands: [], - }, - end - ); -}; -TileHeader.DataIndexEntry._readField = function (tag, obj, pbf) { +function readDataIndexEntry(pbf, end) { + return pbf.readFields(readDataIndexEntryTag, { + first_byte: 0, + last_byte: 0, + filters: [], + codec: null, + offset: 0, + scale: 0, + bands: [], + }, end); +} +function readDataIndexEntryTag(tag, obj, pbf) { if (tag === 1) obj.first_byte = pbf.readFixed64(); else if (tag === 2) obj.last_byte = pbf.readFixed64(); - else if (tag === 3) - obj.filters.push( - TileHeader.Filter.read(pbf, pbf.readVarint() + pbf.pos) - ); - else if (tag === 4) - obj.codec = TileHeader.Codec.read(pbf, pbf.readVarint() + pbf.pos); + else if (tag === 3) obj.filters.push(readFilter(pbf, pbf.readVarint() + pbf.pos)); + else if (tag === 4) obj.codec = readCodec(pbf, pbf.readVarint() + pbf.pos); else if (tag === 5) obj.offset = pbf.readFloat(); else if (tag === 6) obj.scale = pbf.readFloat(); else if (tag === 7) obj.bands.push(pbf.readString()); -}; - -// TileHeader.Layer ======================================== - -TileHeader.Layer = {}; +} -TileHeader.Layer.read = function (pbf, end) { - return pbf.readFields( - TileHeader.Layer._readField, - { - version: 0, - name: '', - units: '', - tilesize: 0, - buffer: 0, - pixel_format: 0, - data_index: [], - }, - end - ); -}; -TileHeader.Layer._readField = function (tag, obj, pbf) { +function readLayer(pbf, end) { + return pbf.readFields(readLayerTag, { + version: 0, + name: '', + units: '', + tilesize: 0, + buffer: 0, + pixel_format: 0, + data_index: [], + }, end); +} +function readLayerTag(tag, obj, pbf) { if (tag === 1) obj.version = pbf.readVarint(); else if (tag === 2) obj.name = pbf.readString(); else if (tag === 3) obj.units = pbf.readString(); else if (tag === 4) obj.tilesize = pbf.readVarint(); else if (tag === 5) obj.buffer = pbf.readVarint(); else if (tag === 6) obj.pixel_format = pbf.readVarint(); - else if (tag === 7) - obj.data_index.push( - TileHeader.DataIndexEntry.read(pbf, pbf.readVarint() + pbf.pos) - ); -}; - -// NumericData ======================================== - -const NumericData: Record = {}; - -NumericData.read = function (pbf, end) { - return pbf.readFields( - NumericData._readField, - {uint32_values: null, values: null, fixed32_values: null}, - end - ); -}; -NumericData._readField = function (tag, obj, pbf) { - if (tag === 2) - (obj.uint32_values = NumericData.Uint32Values.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.values = 'uint32_values'); - else if (tag === 3) - (obj.fixed32_values = NumericData.Fixed32Values.read( - pbf, - pbf.readVarint() + pbf.pos - )), - (obj.values = 'fixed32_values'); -}; - -// NumericData.Uint32Values ======================================== - -NumericData.Uint32Values = {}; - -NumericData.Uint32Values.read = function (pbf, end) { - return pbf.readFields( - NumericData.Uint32Values._readField, - {values: []}, - end - ); -}; -NumericData.Uint32Values._readField = function (tag, obj, pbf) { - /******************************************************** - ***************** BEGIN EDITED SECTION ******************* - ********************************************************/ - if (tag === 1) obj.readValuesInto = createPackedVarintReader(pbf); - /******************************************************** - ***************** END EDITED SECTION ******************* - ********************************************************/ -}; - -// NumericData.Fixed32Values ======================================== - -NumericData.Fixed32Values = {}; + else if (tag === 7) obj.data_index.push(readDataIndexEntry(pbf, pbf.readVarint() + pbf.pos)); +} -NumericData.Fixed32Values.read = function (pbf, end) { - return pbf.readFields( - NumericData.Fixed32Values._readField, - {values: []}, - end - ); -}; -NumericData.Fixed32Values._readField = function (tag, obj, pbf) { - /******************************************************** - ***************** BEGIN EDITED SECTION ******************* - ********************************************************/ - throw new Error('Not implemented'); - if (tag === 1) pbf.readPackedFixed32(obj.values); - /******************************************************** - ***************** END EDITED SECTION ******************* - ********************************************************/ -}; +export function readNumericData(pbf, values) { + pbf.readFields(readNumericDataTag, values); +} +function readNumericDataTag(tag, values, pbf) { + if (tag === 2) { + readUint32Values(pbf, pbf.readVarint() + pbf.pos, values); + } else if (tag === 3) { + throw new Error('Not implemented'); + } +} -export {TileHeader, NumericData}; +function readUint32Values(pbf, end, values) { + return pbf.readFields(readUint32ValuesTag, values, end); +} +function readUint32ValuesTag(tag, values, pbf) { + if (tag === 1) { + let i = 0; + const end = pbf.readVarint() + pbf.pos; + while (pbf.pos < end) { + values[i++] = pbf.readVarint(); + } + } +} diff --git a/src/geo/edge_insets.ts b/src/geo/edge_insets.ts index 59eed9d8fac..249db7edd3b 100644 --- a/src/geo/edge_insets.ts +++ b/src/geo/edge_insets.ts @@ -1,6 +1,7 @@ -import {number} from '../style-spec/util/interpolate'; -import Point from "@mapbox/point-geometry"; +import Point from "@mapbox/point-geometry"; + import {clamp} from '../util/util'; +import {number} from '../style-spec/util/interpolate'; /** * @private @@ -102,10 +103,10 @@ class EdgeInsets { } export type PaddingOptions = { - readonly top: number | null | undefined; - readonly bottom: number | null | undefined; - readonly right: number | null | undefined; - readonly left: number | null | undefined; + readonly top?: number; + readonly bottom?: number; + readonly right?: number; + readonly left?: number; }; export default EdgeInsets; diff --git a/src/geo/transform.ts b/src/geo/transform.ts index c62f7253e42..f69450b479a 100644 --- a/src/geo/transform.ts +++ b/src/geo/transform.ts @@ -1063,7 +1063,7 @@ class Transform { const maxZoom = z; const overscaledZ = options.reparseOverscaled ? actualZ : z; const square = (a: number) => a * a; - const cameraHeightSqr = square((cameraAltitude - this._centerAltitude) * meterToTile); // in tile coordinates. + const cameraHeight = (cameraAltitude - this._centerAltitude) * meterToTile; // in tile coordinates. const getAABBFromElevation = (it: RootTile) => { assert(this._elevation); @@ -1088,7 +1088,7 @@ class Transform { // Scale distance to split for acute angles. // dzSqr: z component of camera to tile distance, square. // dSqr: 3D distance of camera to tile, square. - const distToSplitScale = (dzSqr: number, dSqr: number) => { + const distToSplitScale = (dz: number, d: number) => { // When the angle between camera to tile ray and tile plane is smaller // than acuteAngleThreshold, scale the distance to split. Scaling is adaptive: smaller // the angle, the scale gets lower value. Although it seems early to start at 45, @@ -1104,8 +1104,8 @@ class Transform { // = dz / acuteAngleThresholdSin + dz * ((stretchTile ^ (k + 1) - 1) / (stretchTile - 1) - 1) // or put differently, given that k is based on d and dz, tile on distance d could be used on distance scaled by: // 1 / acuteAngleThresholdSin + (stretchTile ^ (k + 1) - 1) / (stretchTile - 1) - 1 - if (dSqr * square(acuteAngleThresholdSin) < dzSqr) return 1.0; // Early return, no scale. - const r = Math.sqrt(dSqr / dzSqr); + if (d * acuteAngleThresholdSin < dz) return 1.0; // Early return, no scale. + const r = d / dz; const k = r - 1 / acuteAngleThresholdSin; return r / (1 / acuteAngleThresholdSin + (Math.pow(stretchTile, k + 1) - 1) / (stretchTile - 1) - 1); }; @@ -1121,11 +1121,11 @@ class Transform { } const dx = it.aabb.distanceX(cameraPoint); const dy = it.aabb.distanceY(cameraPoint); - let dzSqr = cameraHeightSqr; + let dz = cameraHeight; let tileScaleAdjustment = 1; if (isGlobe) { - dzSqr = square(it.aabb.distanceZ(cameraPoint)); + dz = it.aabb.distanceZ(cameraPoint); // Compensate physical sizes of the tiles when determining which zoom level to use. // In practice tiles closer to poles should use more aggressive LOD as their // physical size is already smaller than size of tiles near the equator. @@ -1163,7 +1163,7 @@ class Transform { } else { assert(zInMeters); if (useElevationData) { - dzSqr = square(it.aabb.distanceZ(cameraPoint) * meterToTile); + dz = it.aabb.distanceZ(cameraPoint) * meterToTile; } if (this.projection.isReprojectedInTileSpace && actualZ <= 5) { // In other projections, not all tiles are the same size. @@ -1177,11 +1177,43 @@ class Transform { } } - const distanceSqr = dx * dx + dy * dy + dzSqr; - const distToSplit = (1 << maxZoom - it.zoom) * zoomSplitDistance * tileScaleAdjustment; - const distToSplitSqr = square(distToSplit * distToSplitScale(Math.max(dzSqr, cameraHeightSqr), distanceSqr)); + if (!isMercator) { + const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + let distToSplit = (1 << maxZoom - it.zoom) * zoomSplitDistance * tileScaleAdjustment; + distToSplit = distToSplit * distToSplitScale(Math.max(dz, cameraHeight), distance); + return distance < distToSplit; + } - return distanceSqr < distToSplitSqr; + let closestDistance = Number.MAX_VALUE; + let closestElevation = 0.0; + const corners = it.aabb.getCorners(); + const distanceXyz = [] as any; + for (const corner of corners) { + vec3.sub(distanceXyz, corner, cameraPoint as any); + if (!isGlobe) { + if (useElevationData) { + distanceXyz[2] *= meterToTile; + } else { + distanceXyz[2] = cameraHeight; + } + } + const dist = vec3.dot(distanceXyz, this._camera.forward()); + if (dist < closestDistance) { + closestDistance = dist; + closestElevation = Math.abs(distanceXyz[2]); + } + } + + let distToSplit = (1 << (maxZoom - it.zoom)) * zoomSplitDistance * tileScaleAdjustment; + distToSplit *= distToSplitScale(Math.max(closestElevation, cameraHeight), closestDistance); + + if (closestDistance < distToSplit) { + return true; + } + // Border case: with tilt of 85 degrees, center could be outside max zoom distance, due to scale. + // Ensure max zoom tiles over center. + const closestPointToCenter = it.aabb.closestPoint(centerPoint as any); + return (closestPointToCenter[0] === centerPoint[0] && closestPointToCenter[1] === centerPoint[1]); }; if (this.renderWorldCopies) { diff --git a/src/index.ts b/src/index.ts index c3b06f8c493..e2f2afb5b89 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,15 +35,29 @@ export type * from './ui/events'; export type * from './style-spec/types'; export type * from './source/source_types'; export type * from './types/deprecated-aliases'; -export type {Anchor} from './ui/anchor'; + export type {PointLike} from './types/point-like'; -export type {PopupOptions} from './ui/popup'; export type {PluginStatus} from './source/rtl_text_plugin'; -export type {PaddingOptions} from './geo/edge_insets'; + export type {Event, ErrorEvent} from './util/evented'; -export type {MapOptions, IControl} from './ui/map'; +export type {GeoJSONFeature} from './util/vectortile_to_geojson'; +export type {PaddingOptions} from './geo/edge_insets'; export type {LngLatLike, LngLatBoundsLike} from './geo/lng_lat'; -export type {AnimationOptions, CameraOptions} from './ui/camera'; + +export type {FeatureSelector} from './style/style'; +export type {StyleImageInterface} from './style/style_image'; +export type {CustomLayerInterface} from './style/style_layer/custom_style_layer'; + +export type {Anchor} from './ui/anchor'; +export type {PopupOptions} from './ui/popup'; +export type {MarkerOptions} from './ui/marker'; +export type {ScaleControlOptions} from './ui/control/scale_control'; +export type {GeolocateControlOptions} from './ui/control/geolocate_control'; +export type {NavigationControlOptions} from './ui/control/navigation_control'; +export type {FullscreenControlOptions} from './ui/control/fullscreen_control'; +export type {AttributionControlOptions} from './ui/control/attribution_control'; +export type {MapOptions, IControl, ControlPosition} from './ui/map'; +export type {AnimationOptions, CameraOptions, EasingOptions} from './ui/camera'; export type { Map, diff --git a/src/render/draw_circle.ts b/src/render/draw_circle.ts index 750d037fda6..1bdf546fca5 100644 --- a/src/render/draw_circle.ts +++ b/src/render/draw_circle.ts @@ -79,6 +79,7 @@ function drawCircles(painter: Painter, sourceCache: SourceCache, layer: CircleSt if (isGlobeProjection) { definesValues.push('PROJECTION_GLOBE_VIEW'); } + definesValues.push('TERRAIN_DEPTH_D24'); const program = painter.getOrCreateProgram('circle', {config: programConfiguration, defines: definesValues, overrideFog: affectedByFog}); const layoutVertexBuffer = bucket.layoutVertexBuffer; const globeExtVertexBuffer = bucket.globeExtVertexBuffer; diff --git a/src/render/draw_raster.ts b/src/render/draw_raster.ts index 96f2ddbcc4a..8d5dea9d8a8 100644 --- a/src/render/draw_raster.ts +++ b/src/render/draw_raster.ts @@ -490,9 +490,7 @@ function configureRaster( resampling = gl.NEAREST; if (!range) { - // @ts-expect-error - TS2339 - Property 'rasterLayers' does not exist on type 'RasterTileSource | RasterDEMTileSource | RasterArrayTileSource | VideoSource | ImageSource | CanvasSource'. if (source.rasterLayers) { - // @ts-expect-error - TS2339 - Property 'rasterLayers' does not exist on type 'RasterTileSource | RasterDEMTileSource | RasterArrayTileSource | VideoSource | ImageSource | CanvasSource'. const foundLayer = source.rasterLayers.find(({id}) => id === layer.sourceLayer); if (foundLayer && foundLayer.fields && foundLayer.fields.range) { range = foundLayer.fields.range; diff --git a/src/render/draw_symbol.ts b/src/render/draw_symbol.ts index 5d6fdc69c1f..fa0b439f88e 100644 --- a/src/render/draw_symbol.ts +++ b/src/render/draw_symbol.ts @@ -538,6 +538,8 @@ function drawLayerSymbols( baseDefines.push('Z_OFFSET'); } + baseDefines.push('TERRAIN_DEPTH_D24'); + if (iconSaturation !== 0 || iconContrast !== 0 || iconBrightnessMin !== 0 || iconBrightnessMax !== 1) { baseDefines.push('COLOR_ADJUSTMENT'); } @@ -646,6 +648,8 @@ function drawLayerSymbols( baseDefines.push('Z_OFFSET'); } + baseDefines.push('TERRAIN_DEPTH_D24'); + const programConfiguration = bucket.text.programConfigurations.get(layer.id); const program = painter.getOrCreateProgram(bucket.iconsInText ? 'symbolTextAndIcon' : 'symbolSDF', {config: programConfiguration, defines: baseDefines}); diff --git a/src/render/painter.ts b/src/render/painter.ts index 0733efeaded..c49359c71e2 100644 --- a/src/render/painter.ts +++ b/src/render/painter.ts @@ -68,6 +68,7 @@ import type {DynamicDefinesType} from './program/program_uniforms'; import {FOG_OPACITY_THRESHOLD} from '../style/fog_helpers'; import type {ContextOptions} from '../gl/context'; import type {ITrackedParameters} from '../tracked-parameters/tracked_parameters_base'; +import Framebuffer from '../gl/framebuffer'; import {OcclusionBuffers} from './occlusion_static_buffers'; @@ -249,6 +250,9 @@ class Painter { symbolParams: SymbolParams; + terrainDepthFBO: Framebuffer; + terrainDepthTexture: Texture; + constructor(gl: WebGL2RenderingContext, contextCreateOptions: ContextOptions, transform: Transform, tp: ITrackedParameters) { this.context = new Context(gl, contextCreateOptions); @@ -676,6 +680,41 @@ class Painter { return this.currentLayer < this.opaquePassCutoff; } + blitDepth() { + const gl = this.context.gl; + + const depthWidth = Math.ceil(this.width); + const depthHeight = Math.ceil(this.height); + + const fboPrev = this.context.bindFramebuffer.get(); + const texturePrev = gl.getParameter(gl.TEXTURE_BINDING_2D); + + if (!this.terrainDepthFBO || this.terrainDepthFBO.width !== depthWidth || this.terrainDepthFBO.height !== depthHeight) { + if (this.terrainDepthFBO) { + this.terrainDepthFBO.destroy(); + this.terrainDepthFBO = undefined; + this.terrainDepthTexture = undefined; + } + + if (depthWidth !== 0 && depthHeight !== 0) { + this.terrainDepthFBO = new Framebuffer(this.context, depthWidth, depthHeight, false, 'texture'); + + this.terrainDepthTexture = new Texture(this.context, {width: depthWidth, height: depthHeight, data: null}, gl.DEPTH_STENCIL); + this.terrainDepthFBO.depthAttachment.set(this.terrainDepthTexture.texture); + } + } + + this.context.bindFramebuffer.set(fboPrev); + gl.bindTexture(gl.TEXTURE_2D, texturePrev); + + if (this.terrainDepthFBO) { + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this.terrainDepthFBO.framebuffer); + gl.blitFramebuffer(0, 0, depthWidth, depthHeight, 0, 0, depthWidth, depthHeight, gl.DEPTH_BUFFER_BIT, gl.NEAREST); + gl.bindFramebuffer(gl.FRAMEBUFFER, this.context.bindFramebuffer.current); + } + } + updateAverageFPS() { const fps = this._dt === 0 ? 0 : 1000.0 / this._dt; @@ -951,16 +990,6 @@ class Painter { this.depthRangeFor3D = [0, 1 - ((orderedLayers.length + 2) * this.numSublayers * this.depthEpsilon)]; - // Terrain depth offscreen render pass ========================== - // With terrain on, renders the depth buffer into a texture. - // This texture is used for occlusion testing (labels). - // When orthographic camera is in use we don't really need the depth occlusion testing (see https://mapbox.atlassian.net/browse/MAPS3D-1132) - // Therefore we can safely skip the rendering to the depth texture. - const terrain = this.terrain; - if (terrain && (this.style.hasSymbolLayers() || this.style.hasCircleLayers()) && !this.transform.isOrthographic) { - terrain.drawDepth(); - } - // Shadow pass ================================================== if (this._shadowRenderer) { this.renderPass = 'shadow'; @@ -1093,6 +1122,8 @@ class Painter { shadowLayers = shadowRenderer.getShadowCastingLayerCount(); } + let terrainDepthCopied = false; + while (this.currentLayer < layerIds.length) { const layer = orderedLayers[this.currentLayer]; const sourceCache = style.getLayerSourceCache(layer); @@ -1106,19 +1137,26 @@ class Painter { // With terrain on and for draped layers only, issue rendering and progress // this.currentLayer until the next non-draped layer. // Otherwise we interleave terrain draped render with non-draped layers on top - if (terrain && this.style.isLayerDraped(layer)) { + if (this.terrain && this.style.isLayerDraped(layer)) { if (layer.isHidden(this.transform.zoom)) { ++this.currentLayer; continue; } const prevLayer = this.currentLayer; - this.currentLayer = terrain.renderBatch(this.currentLayer); + this.currentLayer = this.terrain.renderBatch(this.currentLayer); this._lastOcclusionLayer = Math.max(this.currentLayer, this._lastOcclusionLayer); assert(this.context.bindFramebuffer.current === null); assert(this.currentLayer > prevLayer); continue; } + // First layer after terrain + if (!terrainDepthCopied && this.terrain && (this.style.hasSymbolLayers() || this.style.hasCircleLayers()) && !this.transform.isOrthographic) { + terrainDepthCopied = true; + + this.blitDepth(); + } + if (!layer.is3D() && !this.terrain) { // @ts-expect-error - TS2345 - Argument of type 'void | SourceCache' is not assignable to parameter of type 'SourceCache'. this._renderTileClippingMasks(layer, sourceCache, sourceCache ? coordsAscending[sourceCache.id] : undefined); @@ -1127,7 +1165,7 @@ class Painter { this.renderLayer(this, sourceCache, layer, coordsForTranslucentLayer(layer, sourceCache)); // Render ground shadows after the last shadow caster layer - if (!terrain && shadowRenderer && shadowLayers > 0 && layer.hasShadowPass() && --shadowLayers === 0) { + if (!this.terrain && shadowRenderer && shadowLayers > 0 && layer.hasShadowPass() && --shadowLayers === 0) { shadowRenderer.drawGroundShadows(); if (this.firstLightBeamLayer <= this.currentLayer) { // render light beams for 3D models (all are before ground shadows) @@ -1532,6 +1570,12 @@ class Painter { this.debugOverlayTexture.destroy(); } this._wireframeDebugCache.destroy(); + + if (this.terrainDepthFBO) { + this.terrainDepthFBO.destroy(); + this.terrainDepthFBO = undefined; + this.terrainDepthTexture = undefined; + } } prepareDrawTile() { diff --git a/src/render/program/program_uniforms.ts b/src/render/program/program_uniforms.ts index f941ab565bc..1968b73d258 100644 --- a/src/render/program/program_uniforms.ts +++ b/src/render/program/program_uniforms.ts @@ -31,7 +31,8 @@ import {starsUniforms} from '../../terrain/stars_program'; import {occlusionUniforms} from './occlusion_program'; export type FogDefinesType = ['FOG', 'FOG_DITHERING']; -export type DynamicDefinesType = CircleDefinesType | SymbolDefinesType | LineDefinesType | HeatmapDefinesType | GlobeDefinesType | RasterDefinesType | RasterParticleDefinesType | FogDefinesType | HillshadeDefinesType; +export type TerrainDepthAccessDefinesType = 'TERRAIN_DEPTH_D24'; +export type DynamicDefinesType = CircleDefinesType | SymbolDefinesType | LineDefinesType | HeatmapDefinesType | GlobeDefinesType | RasterDefinesType | RasterParticleDefinesType | FogDefinesType | HillshadeDefinesType | TerrainDepthAccessDefinesType; export const programUniforms = { fillExtrusion: fillExtrusionUniforms, @@ -64,7 +65,6 @@ export const programUniforms = { background: backgroundUniforms, backgroundPattern: backgroundPatternUniforms, terrainRaster: terrainRasterUniforms, - terrainDepth: terrainRasterUniforms, skybox: skyboxUniforms, skyboxGradient: skyboxGradientUniforms, skyboxCapture: skyboxCaptureUniforms, diff --git a/src/render/program/raster_particle_program.ts b/src/render/program/raster_particle_program.ts index b5cb3324552..b665af32851 100644 --- a/src/render/program/raster_particle_program.ts +++ b/src/render/program/raster_particle_program.ts @@ -10,7 +10,7 @@ import { import type Context from '../../gl/context'; import type {UniformValues} from '../uniform_binding'; -export const RASTER_PARTICLE_POS_OFFSET: number = 0.15; +export const RASTER_PARTICLE_POS_OFFSET: number = 0.05; export const RASTER_PARTICLE_POS_SCALE: number = 1.0 + 2.0 * RASTER_PARTICLE_POS_OFFSET; export type RasterParticleUniformsType = { @@ -109,7 +109,7 @@ export type RasterParticleDrawUniformsType = { ['u_velocity_res']: Uniform2f; ['u_max_speed']: Uniform1f; ['u_uv_offset']: Uniform2f; - ['u_data_scale']: Uniform4f; + ['u_data_scale']: Uniform2f; ['u_data_offset']: Uniform1f; ['u_particle_pos_scale']: Uniform1f; ['u_particle_pos_offset']: Uniform2f; @@ -124,7 +124,7 @@ const rasterParticleDrawUniforms = (context: Context): RasterParticleDrawUniform 'u_velocity_res': new Uniform2f(context), 'u_max_speed': new Uniform1f(context), 'u_uv_offset': new Uniform2f(context), - 'u_data_scale': new Uniform4f(context), + 'u_data_scale': new Uniform2f(context), 'u_data_offset': new Uniform1f(context), 'u_particle_pos_scale': new Uniform1f(context), 'u_particle_pos_offset': new Uniform2f(context) @@ -150,7 +150,10 @@ const rasterParticleDrawUniformValues = ( 'u_velocity_res': velocityTextureSize, 'u_max_speed': maxSpeed, 'u_uv_offset': textureOffset, - 'u_data_scale': dataScale, + 'u_data_scale': [ + 255.0 * dataScale[0], + 255.0 * dataScale[1] + ], 'u_data_offset': dataOffset, 'u_particle_pos_scale': RASTER_PARTICLE_POS_SCALE, 'u_particle_pos_offset': [RASTER_PARTICLE_POS_OFFSET, RASTER_PARTICLE_POS_OFFSET] @@ -166,7 +169,7 @@ export type RasterParticleUpdateUniformsType = { ['u_reset_rate']: Uniform1f; ['u_rand_seed']: Uniform1f; ['u_uv_offset']: Uniform2f; - ['u_data_scale']: Uniform4f; + ['u_data_scale']: Uniform2f; ['u_data_offset']: Uniform1f; ['u_particle_pos_scale']: Uniform1f; ['u_particle_pos_offset']: Uniform2f; @@ -182,7 +185,7 @@ const rasterParticleUpdateUniforms = (context: Context): RasterParticleUpdateUni 'u_reset_rate': new Uniform1f(context), 'u_rand_seed': new Uniform1f(context), 'u_uv_offset': new Uniform2f(context), - 'u_data_scale': new Uniform4f(context), + 'u_data_scale': new Uniform2f(context), 'u_data_offset': new Uniform1f(context), 'u_particle_pos_scale': new Uniform1f(context), 'u_particle_pos_offset': new Uniform2f(context) @@ -209,7 +212,10 @@ const rasterParticleUpdateUniformValues = ( 'u_reset_rate': resetRate, 'u_rand_seed': Math.random(), 'u_uv_offset': textureOffset, - 'u_data_scale': dataScale, + 'u_data_scale': [ + 255.0 * dataScale[0], + 255.0 * dataScale[1] + ], 'u_data_offset': dataOffset, 'u_particle_pos_scale': RASTER_PARTICLE_POS_SCALE, 'u_particle_pos_offset': [RASTER_PARTICLE_POS_OFFSET, RASTER_PARTICLE_POS_OFFSET] diff --git a/src/render/texture.ts b/src/render/texture.ts index 7c2b3722be5..2841b616b07 100644 --- a/src/render/texture.ts +++ b/src/render/texture.ts @@ -3,8 +3,8 @@ import type {RGBAImage, AlphaImage} from '../util/image'; import {Float32Image} from '../util/image'; import assert from 'assert'; -export type TextureFormat = WebGL2RenderingContext['RGBA'] | WebGL2RenderingContext['DEPTH_COMPONENT'] | WebGL2RenderingContext['R8'] | WebGL2RenderingContext['R32F'] | WebGL2RenderingContext['RED']; -export type TextureType = WebGL2RenderingContext['UNSIGNED_BYTE'] | WebGL2RenderingContext['UNSIGNED_SHORT'] | WebGL2RenderingContext['FLOAT']; +export type TextureFormat = WebGL2RenderingContext['RGBA'] | WebGL2RenderingContext['DEPTH_COMPONENT'] | WebGL2RenderingContext['DEPTH_STENCIL'] | WebGL2RenderingContext['R8'] | WebGL2RenderingContext['R32F'] | WebGL2RenderingContext['RED']; +export type TextureType = WebGL2RenderingContext['UNSIGNED_INT_24_8'] | WebGL2RenderingContext['UNSIGNED_BYTE'] | WebGL2RenderingContext['UNSIGNED_SHORT'] | WebGL2RenderingContext['FLOAT']; export type TextureFilter = WebGL2RenderingContext['LINEAR'] | WebGL2RenderingContext['NEAREST_MIPMAP_NEAREST'] | WebGL2RenderingContext['LINEAR_MIPMAP_NEAREST'] | WebGL2RenderingContext['NEAREST_MIPMAP_LINEAR'] | WebGL2RenderingContext['LINEAR_MIPMAP_LINEAR'] | WebGL2RenderingContext['NEAREST']; export type TextureWrap = WebGL2RenderingContext['REPEAT'] | WebGL2RenderingContext['CLAMP_TO_EDGE'] | WebGL2RenderingContext['MIRRORED_REPEAT']; @@ -54,6 +54,8 @@ class Texture { context.pixelStoreUnpack.set(1); context.pixelStoreUnpackPremultiplyAlpha.set(this.format === gl.RGBA && (!options || options.premultiply !== false)); + this.useMipmap = Boolean(options && options.useMipmap); + if (!position && (!this.size || this.size[0] !== width || this.size[1] !== height)) { this.size = [width, height]; @@ -67,12 +69,19 @@ class Texture { let internalFormat = this.format; let format = this.format; let type: TextureType = gl.UNSIGNED_BYTE; + let preferTexStorage = false; if (this.format === gl.DEPTH_COMPONENT) { // @ts-expect-error - TS2322 - Type '33189' is not assignable to type 'TextureFormat'. internalFormat = gl.DEPTH_COMPONENT16; type = gl.UNSIGNED_SHORT; } + if (this.format === gl.DEPTH_STENCIL) { + // @ts-expect-error - TS2322 - Type '33189' is not assignable to type 'TextureFormat'. + internalFormat = gl.DEPTH24_STENCIL8; + type = gl.UNSIGNED_INT_24_8; + preferTexStorage = true; + } if (this.format === gl.R8) { format = gl.RED; } @@ -81,8 +90,12 @@ class Texture { type = gl.FLOAT; format = gl.RED; } - // @ts-expect-error - TS2339 - Property 'data' does not exist on type 'ImageBitmap | RGBAImage | AlphaImage | Float32Image | EmptyImage'. - gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, image.data); + if (!this.useMipmap && preferTexStorage) { + gl.texStorage2D(gl.TEXTURE_2D, 1, internalFormat, width, height); + } else { + // @ts-expect-error - TS2339 - Property 'data' does not exist on type 'ImageBitmap | RGBAImage | AlphaImage | Float32Image | EmptyImage'. + gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, image.data); + } } } else { const {x, y} = position || {x: 0, y: 0}; @@ -103,7 +116,6 @@ class Texture { } } - this.useMipmap = Boolean(options && options.useMipmap); if (this.useMipmap) { gl.generateMipmap(gl.TEXTURE_2D); } diff --git a/src/shaders/_prelude.fragment.glsl b/src/shaders/_prelude.fragment.glsl index 7af592683fe..7405cd8bf28 100644 --- a/src/shaders/_prelude.fragment.glsl +++ b/src/shaders/_prelude.fragment.glsl @@ -54,18 +54,18 @@ in float v_cutoff_opacity; #endif // This function should be used in cases where mipmap usage is expected and -// the sampling coordinates are not continous. The lod_parameter should be -// a continous function derived from the sampling coordinates. +// the sampling coordinates are not continous. The lod_parameter should be +// a continous function derived from the sampling coordinates. vec4 textureLodCustom(sampler2D image, vec2 pos, vec2 lod_coord) { vec2 size = vec2(textureSize(image, 0)); vec2 dx = dFdx(lod_coord.xy * size); vec2 dy = dFdy(lod_coord.xy * size); float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); - float lod = 0.5 * log2(delta_max_sqr); + float lod = 0.5 * log2(delta_max_sqr); // Note: textureLod doesn't support anisotropic filtering - // We could use textureGrad instead which supports it, but it's discouraged + // We could use textureGrad instead which supports it, but it's discouraged // in the ARM Developer docs: - // "Do not use textureGrad() unless absolutely necessary. + // "Do not use textureGrad() unless absolutely necessary. // It is much slower that texture() and textureLod()..." // https://developer.arm.com/documentation/101897/0301/Buffers-and-textures/Texture-sampling-performance return textureLod(image, pos, lod); @@ -80,4 +80,4 @@ vec4 applyLUT(highp sampler3D lut, vec4 col) { vec3 applyLUT(highp sampler3D lut, vec3 col) { return applyLUT(lut, vec4(col, 1.0)).rgb; -} \ No newline at end of file +} diff --git a/src/shaders/_prelude_raster_particle.glsl b/src/shaders/_prelude_raster_particle.glsl index dca4d3db2ad..cd9b95ed52b 100644 --- a/src/shaders/_prelude_raster_particle.glsl +++ b/src/shaders/_prelude_raster_particle.glsl @@ -8,7 +8,7 @@ const vec2 INVALID_VELOCITY = vec2(-1); uniform highp vec2 u_uv_offset; uniform highp float u_data_offset; -uniform highp vec4 u_data_scale; +uniform highp vec2 u_data_scale; ivec4 rasterArrayLinearCoord(highp vec2 texCoord, highp vec2 texResolution, out highp vec2 fxy) { texCoord = texCoord * texResolution - 0.5; @@ -41,7 +41,8 @@ highp vec2 lookup_velocity(highp vec2 uv) { highp vec4 t = mix(mix(bl, br, fxy.x), mix(tl, tr, fxy.x), fxy.y); - highp vec2 velocity = vec2(u_data_offset + dot(t.rg, u_data_scale.yx), -(u_data_offset + dot(t.ba, u_data_scale.yx))); + highp vec2 velocity = u_data_offset + vec2(dot(t.rg, u_data_scale), dot(t.ba, u_data_scale)); + velocity.y = -velocity.y; velocity /= max(u_max_speed, length(velocity)); return velocity; } diff --git a/src/shaders/_prelude_terrain.vertex.glsl b/src/shaders/_prelude_terrain.vertex.glsl index 7fd8f974f37..f618b42d49f 100644 --- a/src/shaders/_prelude_terrain.vertex.glsl +++ b/src/shaders/_prelude_terrain.vertex.glsl @@ -39,8 +39,9 @@ uniform float u_exaggeration; uniform float u_meter_to_dem; uniform mat4 u_label_plane_matrix_inv; -uniform sampler2D u_depth; +uniform highp sampler2D u_depth; uniform vec2 u_depth_size_inv; +uniform vec2 u_depth_range_unpack; vec4 tileUvToDemSample(vec2 uv, float dem_size, float dem_scale, vec2 dem_tl) { vec2 pos = dem_size * (uv * dem_scale + dem_tl) + 1.0; @@ -104,18 +105,35 @@ float elevation(vec2 apos) { } #endif -// Unpack depth from RGBA. A piece of code copied in various libraries and WebGL -// shadow mapping examples. -// https://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ -highp float unpack_depth(highp vec4 rgba_depth) -{ - const highp vec4 bit_shift = vec4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0); - return dot(rgba_depth, bit_shift) * 2.0 - 1.0; -} +#ifdef TERRAIN_DEPTH_D24 + float unpack_depth(float depth) { + return depth * u_depth_range_unpack.x + u_depth_range_unpack.y; + } + + vec4 unpack_depth4(vec4 depth) { + return depth * u_depth_range_unpack.x + vec4(u_depth_range_unpack.y); + } +#else + // Unpack depth from RGBA. A piece of code copied in various libraries and WebGL + // shadow mapping examples. + // https://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ + highp float unpack_depth_rgba(highp vec4 rgba_depth) + { + const highp vec4 bit_shift = vec4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0); + return dot(rgba_depth, bit_shift) * 2.0 - 1.0; + } +#endif + bool isOccluded(vec4 frag) { vec3 coord = frag.xyz / frag.w; - float depth = unpack_depth(texture(u_depth, (coord.xy + 1.0) * 0.5)); + + #ifdef TERRAIN_DEPTH_D24 + float depth = unpack_depth(texture(u_depth, (coord.xy + 1.0) * 0.5).r); + #else + float depth = unpack_depth_rgba(texture(u_depth, (coord.xy + 1.0) * 0.5)); + #endif + return coord.z > depth + 0.0005; } @@ -124,12 +142,24 @@ float occlusionFade(vec4 frag) { vec3 df = vec3(5.0 * u_depth_size_inv, 0.0); vec2 uv = 0.5 * coord.xy + 0.5; - vec4 depth = vec4( - unpack_depth(texture(u_depth, uv - df.xz)), - unpack_depth(texture(u_depth, uv + df.xz)), - unpack_depth(texture(u_depth, uv - df.zy)), - unpack_depth(texture(u_depth, uv + df.zy)) - ); + + #ifdef TERRAIN_DEPTH_D24 + vec4 depth = vec4( + texture(u_depth, uv - df.xz).r, + texture(u_depth, uv + df.xz).r, + texture(u_depth, uv - df.zy).r, + texture(u_depth, uv + df.zy).r + ); + depth = unpack_depth4(depth); + #else + vec4 depth = vec4( + unpack_depth_rgba(texture(u_depth, uv - df.xz)), + unpack_depth_rgba(texture(u_depth, uv + df.xz)), + unpack_depth_rgba(texture(u_depth, uv - df.zy)), + unpack_depth_rgba(texture(u_depth, uv + df.zy)) + ); + #endif + return dot(vec4(0.25), vec4(1.0) - clamp(300.0 * (vec4(coord.z - 0.001) - depth), 0.0, 1.0)); } diff --git a/src/shaders/fill_extrusion.fragment.glsl b/src/shaders/fill_extrusion.fragment.glsl index cc3ad2ec3c6..4fe59140cc7 100644 --- a/src/shaders/fill_extrusion.fragment.glsl +++ b/src/shaders/fill_extrusion.fragment.glsl @@ -102,7 +102,15 @@ float flood_radiance = 0.0; color.rgb = mix(litColor, floodLitColor, flood_radiance); #else // FLOOD_LIGHT - float shadowed_lighting_factor = shadowed_light_factor_normal(normal, v_pos_light_view_0, v_pos_light_view_1, 1.0 / gl_FragCoord.w); + float shadowed_lighting_factor; +#ifdef RENDER_CUTOFF + shadowed_lighting_factor = shadowed_light_factor_normal_opacity(normal, v_pos_light_view_0, v_pos_light_view_1, 1.0 / gl_FragCoord.w, v_cutoff_opacity); + if (v_cutoff_opacity == 0.0) { + discard; + } +#else // RENDER_CUTOFF + shadowed_lighting_factor = shadowed_light_factor_normal(normal, v_pos_light_view_0, v_pos_light_view_1, 1.0 / gl_FragCoord.w); +#endif // RENDER_CUTOFF color.rgb = apply_lighting(color.rgb, normal, shadowed_lighting_factor); #endif // !FLOOD_LIGHT #else // RENDER_SHADOWS diff --git a/src/shaders/fill_extrusion.vertex.glsl b/src/shaders/fill_extrusion.vertex.glsl index 4e9baf9d933..549c63d54ea 100644 --- a/src/shaders/fill_extrusion.vertex.glsl +++ b/src/shaders/fill_extrusion.vertex.glsl @@ -134,7 +134,7 @@ void main() { vec3 centroid_random = vec3(centroid_pos.xy, centroid_pos.x + centroid_pos.y + 1.0); vec3 ground_pos = centroid_pos.x == 0.0 ? pos.xyz : (centroid_random / 8.0); vec4 ground = u_matrix * vec4(ground_pos.xy, ele, 1.0); - cutoff = max(0.01, cutoff_opacity(u_cutoff_params, ground.z)); + cutoff = cutoff_opacity(u_cutoff_params, ground.z); if (centroid_pos.y != 0.0 && centroid_pos.x != 0.0) { vec3 g = floor(ground_pos); vec3 mod_ = centroid_random - g * 8.0; @@ -144,10 +144,11 @@ void main() { } } float cutoff_scale = cutoff; + v_cutoff_opacity = cutoff; scaled_pos.z = mix(c_ele, h, cutoff_scale); #endif - float hidden = float((centroid_pos.x == 0.0 && centroid_pos.y == 1.0) || (cutoff < 0.01 && centroid_pos.x != 0.0)); + float hidden = float((centroid_pos.x == 0.0 && centroid_pos.y == 1.0) || (cutoff == 0.0 && centroid_pos.x != 0.0)); gl_Position = mix(u_matrix * vec4(scaled_pos, 1), AWAY, hidden); h = h - ele; diff --git a/src/shaders/line.fragment.glsl b/src/shaders/line.fragment.glsl index 0e7f721ac47..833d1ed7d0d 100644 --- a/src/shaders/line.fragment.glsl +++ b/src/shaders/line.fragment.glsl @@ -107,7 +107,7 @@ void main() { float alpha2 = clamp(min(dist - (v_width2.t - edgeBlur), v_width2.s - dist) / edgeBlur, 0.0, 1.0); if (alpha2 < 1.) { float smoothAlpha = smoothstep(0.6, 1.0, alpha2); - if (border_color.a == 0.0) { + if (border_color.a == 0.0) { float Y = (out_color.a > 0.01) ? luminance(out_color.rgb / out_color.a) : 1.; // out_color is premultiplied float adjustment = (Y > 0.) ? 0.5 / Y : 0.45; if (out_color.a > 0.25 && Y < 0.25) { diff --git a/src/shaders/raster_particle_draw.vertex.glsl b/src/shaders/raster_particle_draw.vertex.glsl index b6798c63c48..56e9eacae52 100644 --- a/src/shaders/raster_particle_draw.vertex.glsl +++ b/src/shaders/raster_particle_draw.vertex.glsl @@ -21,7 +21,7 @@ void main() { gl_Position = AWAY; v_particle_speed = 0.0; } else { - gl_Position = vec4(2.0 * pos - vec2(1.0), 0.0, 1.0); + gl_Position = vec4(2.0 * pos - 1.0, 0, 1); v_particle_speed = length(velocity); } gl_PointSize = 1.0; diff --git a/src/shaders/raster_particle_update.fragment.glsl b/src/shaders/raster_particle_update.fragment.glsl index 65895543fda..240d64fcce5 100644 --- a/src/shaders/raster_particle_update.fragment.glsl +++ b/src/shaders/raster_particle_update.fragment.glsl @@ -8,6 +8,10 @@ uniform highp float u_rand_seed; in highp vec2 v_tex_coord; +vec2 linearstep(vec2 edge0, vec2 edge1, vec2 x) { + return clamp((x - edge0) / (edge1 - edge0), vec2(0), vec2(1)); +} + // pseudo-random generator const highp vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453); highp float rand(const highp vec2 co) { @@ -25,14 +29,29 @@ void main() { highp vec2 seed = (pos + v_tex_coord) * u_rand_seed; highp vec2 random_pos = vec2(rand(seed + 1.3), rand(seed + 2.1)); - highp float speed = velocity == INVALID_VELOCITY ? 0.0 : length(velocity); - highp float reset_rate_bump = speed * u_reset_rate; - highp vec2 particle_pos_min = -u_particle_pos_offset; - highp vec2 particle_pos_max = vec2(1.0) + u_particle_pos_offset; - // drop rate 0: (min pos) < x < (max pos), else drop rate 1 - highp vec2 pos_drop_rate = vec2(1.0) - step(particle_pos_min, pos) + step(particle_pos_max, pos); - highp float drop_rate = max(u_reset_rate + reset_rate_bump, length(pos_drop_rate)); - highp float drop = step(1.0 - drop_rate, rand(seed)); + + // An ad hoc mask that's 1 inside the tile and ramps to zero outside the + // boundary. The constant power of 4 is tuned to cause particles to traverse + // roughly the width of the boundary before dropping. + highp vec2 persist_rate = pow( + linearstep(vec2(-u_particle_pos_offset), vec2(0), pos) * + linearstep(vec2(1.0 + u_particle_pos_offset), vec2(1), pos), + vec2(4) + ); + + // Raise the persist rate to the inverse power of the number of steps + // taken to traverse the boundary. This yields a per-frame persist + // rate which gives the overall chance of dropping by the time it + // traverses the entire boundary buffer. + highp vec2 per_frame_persist = pow(persist_rate, abs(dp) / u_particle_pos_offset); + + // Combine drop probability wrt x-boundary and y-boundary into a single drop rate + highp float drop_rate = 1.0 - per_frame_persist.x * per_frame_persist.y; + + // Apply a hard drop cutoff outside the boundary of what we encode + drop_rate = any(greaterThanEqual(abs(pos - 0.5), vec2(0.5 + u_particle_pos_offset))) ? 1.0 : drop_rate; + + highp float drop = step(1.0 - drop_rate - u_reset_rate, rand(seed)); highp vec2 next_pos = mix(pos, random_pos, drop); glFragColor = pack_pos_to_rgba(next_pos); diff --git a/src/source/canvas_source.ts b/src/source/canvas_source.ts index 61af907358f..aba8aa6342e 100644 --- a/src/source/canvas_source.ts +++ b/src/source/canvas_source.ts @@ -54,7 +54,8 @@ export type CanvasSourceSpecification = { * map.removeSource('some id'); // remove * @see [Example: Add a canvas source](https://docs.mapbox.com/mapbox-gl-js/example/canvas-source/) */ -class CanvasSource extends ImageSource { +class CanvasSource extends ImageSource<'canvas'> { + type: 'canvas'; options: CanvasSourceSpecification; animate: boolean; canvas: HTMLCanvasElement; diff --git a/src/source/custom_source.ts b/src/source/custom_source.ts index 8b7336e6efb..e115f91d47d 100644 --- a/src/source/custom_source.ts +++ b/src/source/custom_source.ts @@ -7,10 +7,9 @@ import {makeFQID} from '../util/fqid'; import type {Map} from '../ui/map'; import type Dispatcher from '../util/dispatcher'; -import type {ISource} from './source'; import type {Callback} from '../types/callback'; import type {OverscaledTileID} from './tile_id'; -import type {SourceSpecification} from '../style-spec/types'; +import type {ISource, SourceEvents} from './source'; type DataType = 'raster'; @@ -172,7 +171,7 @@ export interface CustomSourceInterface extends Evented { onRemove: (map: Map) => void | null | undefined; } -class CustomSource extends Evented implements ISource { +class CustomSource extends Evented implements ISource { id: string; scope: string; type: 'custom'; @@ -190,7 +189,7 @@ class CustomSource extends Evented implements ISource { maxTileCacheSize: number | null | undefined; reparseOverscaled: boolean | undefined; - _map: Map; + map: Map; _loaded: boolean; _dispatcher: Dispatcher; _dataType: DataType | null | undefined; @@ -257,7 +256,7 @@ class CustomSource extends Evented implements ISource { } onAdd(map: Map): void { - this._map = map; + this.map = map; this._loaded = false; this.fire(new Event('dataloading', {dataType: 'source'})); if (this._implementation.onAdd) this._implementation.onAdd(map); @@ -336,7 +335,7 @@ class CustomSource extends Evented implements ISource { loadTileData(tile: Tile, data: T): void { // Only raster data supported at the moment - tile.setTexture((data as any), this._map.painter); + tile.setTexture((data as any), this.map.painter); } unloadTile(tile: Tile, callback?: Callback): void { @@ -349,7 +348,7 @@ class CustomSource extends Evented implements ISource { // Save the texture to the cache if (tile.texture && tile.texture instanceof Texture) { - this._map.painter.saveTileTexture(tile.texture); + this.map.painter.saveTileTexture(tile.texture); } } else { tile.destroy(); @@ -381,7 +380,7 @@ class CustomSource extends Evented implements ISource { x: number; y: number; }[] { - const tileIDs = this._map.transform.coveringTiles({ + const tileIDs = this.map.transform.coveringTiles({ tileSize: this.tileSize, minzoom: this.minzoom, maxzoom: this.maxzoom, @@ -393,7 +392,7 @@ class CustomSource extends Evented implements ISource { _clearTiles() { const fqid = makeFQID(this.id, this.scope); - this._map.style.clearSource(fqid); + this.map.style.clearSource(fqid); } _update() { diff --git a/src/source/geojson_source.ts b/src/source/geojson_source.ts index 3a1ad598c45..63aaf937ac1 100644 --- a/src/source/geojson_source.ts +++ b/src/source/geojson_source.ts @@ -5,7 +5,7 @@ import EXTENT from '../style-spec/data/extent'; import {ResourceType} from '../util/ajax'; import browser from '../util/browser'; -import type {ISource} from './source'; +import type {ISource, SourceEvents} from './source'; import type {Map} from '../ui/map'; import type Dispatcher from '../util/dispatcher'; import type Tile from './tile'; @@ -61,7 +61,7 @@ import type {Cancelable} from '../types/cancelable'; * @see [Example: Create a heatmap from points](https://www.mapbox.com/mapbox-gl-js/example/heatmap/) * @see [Example: Create and style clusters](https://www.mapbox.com/mapbox-gl-js/example/cluster/) */ -class GeoJSONSource extends Evented implements ISource { +class GeoJSONSource extends Evented implements ISource { type: 'geojson'; id: string; scope: string; diff --git a/src/source/image_source.ts b/src/source/image_source.ts index 78252e00d00..6f20aac0ffd 100644 --- a/src/source/image_source.ts +++ b/src/source/image_source.ts @@ -14,7 +14,7 @@ import {GLOBE_VERTEX_GRID_SIZE} from '../geo/projection/globe_constants'; import {mat3, vec3} from 'gl-matrix'; import LngLat from '../geo/lng_lat'; -import type {ISource} from './source'; +import type {ISource, SourceEvents} from './source'; import type {CanvasSourceSpecification} from './canvas_source'; import type {Map} from '../ui/map'; import type Dispatcher from '../util/dispatcher'; @@ -215,8 +215,8 @@ function sortTriangles(centerLatitudes: number[], indices: TriangleIndexArray): * @see [Example: Add an image](https://www.mapbox.com/mapbox-gl-js/example/image-on-a-map/) * @see [Example: Animate a series of images](https://www.mapbox.com/mapbox-gl-js/example/animate-images/) */ -class ImageSource extends Evented implements ISource { - type: string; +class ImageSource extends Evented implements ISource { + type: T; id: string; scope: string; minzoom: number; @@ -242,7 +242,7 @@ class ImageSource extends Evented implements ISource { map: Map; texture: Texture | UserManagedTexture | null; image: HTMLImageElement | ImageBitmap | ImageData; - tileID: CanonicalTileID | null | undefined; + tileID?: CanonicalTileID; onNorthPole: boolean; onSouthPole: boolean; _unsupportedCoords: boolean; @@ -276,7 +276,7 @@ class ImageSource extends Evented implements ISource { this.dispatcher = dispatcher; this.coordinates = options.coordinates; - this.type = 'image'; + this.type = 'image' as T; this.minzoom = 0; this.maxzoom = 22; this.tileSize = 512; diff --git a/src/source/query_features.ts b/src/source/query_features.ts index c0fc680ea4e..959f8343b03 100644 --- a/src/source/query_features.ts +++ b/src/source/query_features.ts @@ -6,23 +6,16 @@ import type SourceCache from './source_cache'; import type StyleLayer from '../style/style_layer'; import type CollisionIndex from '../symbol/collision_index'; import type Transform from '../geo/transform'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import type {OverscaledTileID} from './tile_id'; import type {RetainedQueryData} from '../symbol/placement'; import type {QueryGeometry, TilespaceQueryGeometry} from '../style/query_geometry'; -import type {LayerSpecification, FilterSpecification, ExpressionSpecification} from '../style-spec/types'; - -// we augment GeoJSON with custom properties in query*Features results -export interface QueryFeature extends GeoJSON.Feature { - layer?: LayerSpecification; - source: string; - sourceLayer?: string; - state?: unknown; -} +import type {FilterSpecification, ExpressionSpecification} from '../style-spec/types'; export type QueryResult = { [_: string]: Array<{ featureIndex: number; - feature: QueryFeature; + feature: GeoJSONFeature; intersectionZ: boolean | number; }>; }; @@ -200,7 +193,7 @@ export function querySourceFeatures(sourceCache: SourceCache, params?: { sourceLayer?: string; filter?: FilterSpecification | ExpressionSpecification; validate?: boolean; -}): Array { +}): Array { const tiles = sourceCache.getRenderableIds().map((id) => { return sourceCache.getTileByID(id); }); diff --git a/src/source/raster_array_tile_source.ts b/src/source/raster_array_tile_source.ts index 9e79a8a3a53..f578ac91ce0 100644 --- a/src/source/raster_array_tile_source.ts +++ b/src/source/raster_array_tile_source.ts @@ -19,7 +19,8 @@ import type {TextureDescriptor} from './raster_array_tile'; import type {ISource, SourceRasterLayer} from './source'; import type {RasterArraySourceSpecification} from '../style-spec/types'; -class RasterArrayTileSource extends RasterTileSource implements ISource { +class RasterArrayTileSource extends RasterTileSource<'raster-array'> implements ISource { + type: 'raster-array'; map: Map; rasterLayers: Array | undefined; rasterLayerIds: Array | undefined; diff --git a/src/source/raster_dem_tile_source.ts b/src/source/raster_dem_tile_source.ts index bb6cd7c082c..ba795759a32 100644 --- a/src/source/raster_dem_tile_source.ts +++ b/src/source/raster_dem_tile_source.ts @@ -18,7 +18,8 @@ import type {Callback} from '../types/callback'; import type {TextureImage} from '../render/texture'; import type {RasterDEMSourceSpecification} from '../style-spec/types'; -class RasterDEMTileSource extends RasterTileSource implements ISource { +class RasterDEMTileSource extends RasterTileSource<'raster-dem'> implements ISource { + type: 'raster-dem'; encoding: 'mapbox' | 'terrarium'; constructor(id: string, options: RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) { diff --git a/src/source/raster_tile_source.ts b/src/source/raster_tile_source.ts index 91b103b2cd2..ccfbac64e1c 100644 --- a/src/source/raster_tile_source.ts +++ b/src/source/raster_tile_source.ts @@ -9,7 +9,7 @@ import browser from '../util/browser'; import {cacheEntryPossiblyAdded} from '../util/tile_request_cache'; import {makeFQID} from '../util/fqid'; -import type {ISource} from './source'; +import type {ISource, SourceEvents} from './source'; import type {OverscaledTileID} from './tile_id'; import type {Map} from '../ui/map'; import type Dispatcher from '../util/dispatcher'; @@ -44,8 +44,8 @@ import Texture from '../render/texture'; * @see [Example: Add a raster tile source](https://docs.mapbox.com/mapbox-gl-js/example/map-tiles/) * @see [Example: Add a WMS source](https://docs.mapbox.com/mapbox-gl-js/example/wms/) */ -class RasterTileSource extends Evented implements ISource { - type: 'raster' | 'raster-dem' | 'raster-array'; +class RasterTileSource extends Evented implements ISource { + type: T; id: string; scope: string; minzoom: number; @@ -81,7 +81,7 @@ class RasterTileSource extends Evented implements ISource { this.dispatcher = dispatcher; this.setEventedParent(eventedParent); - this.type = 'raster'; + this.type = 'raster' as T; this.minzoom = 0; this.maxzoom = 22; this.roundZoom = true; diff --git a/src/source/rtl_text_plugin.ts b/src/source/rtl_text_plugin.ts index 3321aeacc26..d3be3f802b1 100644 --- a/src/source/rtl_text_plugin.ts +++ b/src/source/rtl_text_plugin.ts @@ -43,7 +43,11 @@ function sendPluginStateToWorker() { evented.fire(new Event('pluginStateChange', {pluginStatus, pluginURL})); } -export const evented: Evented = new Evented(); +type EventRegistry = { + 'pluginStateChange': PluginState; +}; + +export const evented = new Evented(); export const getRTLTextPluginStatus = function(): PluginStatus { return pluginStatus; diff --git a/src/source/source.ts b/src/source/source.ts index bce5258aa71..799937444f6 100644 --- a/src/source/source.ts +++ b/src/source/source.ts @@ -17,15 +17,17 @@ import type Tile from './tile'; import type Dispatcher from '../util/dispatcher'; import type {Map} from '../ui/map'; import type {Class} from '../types/class'; +import type {Source} from './source_types'; +import type {Evented} from '../util/evented'; import type {Callback} from '../types/callback'; -import type {MapEvent} from '../ui/events'; -import type {Event, Evented} from '../util/evented'; +import type {MapEvents} from '../ui/events'; import type {OverscaledTileID} from './tile_id'; -import type {Source} from './source_types'; import type {SourceSpecification} from '../style-spec/types'; export type {Source}; +export type SourceEvents = Pick; + export type SourceRasterLayer = { id: string; maxzoom?: number; @@ -67,7 +69,7 @@ export type SourceVectorLayer = { * @property {boolean} roundZoom `true` if zoom levels are rounded to the nearest integer in the source data, `false` * if they are floor-ed to the nearest integer. */ -export interface ISource { +export interface ISource extends Evented { readonly type: string; id: string; scope: string; @@ -91,10 +93,6 @@ export interface ISource { rasterLayerIds?: Array; hasTransition(): boolean; loaded(): boolean; - fire(event: Event): unknown; - on(type: MapEvent, listener: (arg1: any) => any): Evented; - off(type: MapEvent, listener: (arg1: any) => any): Evented; - setEventedParent(parent?: Evented | null | undefined, data?: any | (() => any)): Evented; readonly onAdd?: (map: Map) => void; readonly onRemove?: (map: Map) => void; loadTile( @@ -105,8 +103,8 @@ export interface ISource { }, ): void; readonly hasTile?: (tileID: OverscaledTileID) => boolean; - readonly abortTile?: (tile: Tile, callback: Callback) => void; - readonly unloadTile?: (tile: Tile, callback: Callback) => void; + readonly abortTile?: (tile: Tile, callback?: Callback) => void; + readonly unloadTile?: (tile: Tile, callback?: Callback) => void; readonly reload?: () => void; /** * @returns A plain (stringifiable) JS object representing the current state of the source. @@ -114,7 +112,7 @@ export interface ISource { * equivalent to this one. * @private */ - serialize(): any; + serialize(): SourceSpecification | {type: 'custom', [key: string]: unknown}; readonly prepare?: () => void; readonly afterUpdate?: () => void; readonly _clear?: () => void; @@ -160,14 +158,13 @@ export const create = function( dispatcher: Dispatcher, eventedParent: Evented, ): Source { - const source = new sourceTypes[specification.type](id, specification, dispatcher, eventedParent); + const source = new sourceTypes[specification.type](id, specification, dispatcher, eventedParent) as Source; if (source.id !== id) { throw new Error(`Expected Source id to be ${id} instead of ${source.id}`); } bindAll(['load', 'abort', 'unload', 'serialize', 'prepare'], source); - // @ts-expect-error - TS2322 - Type 'ISource' is not assignable to type 'Source'. return source; }; @@ -180,5 +177,5 @@ export const setType = function (name: string, type: Class) { }; export interface Actor { - send(type: string, data: any, callback: Callback): void; + send(type: string, data: unknown, callback: Callback): void; } diff --git a/src/source/source_cache.ts b/src/source/source_cache.ts index 23d3930cd7e..baf5128d8bc 100644 --- a/src/source/source_cache.ts +++ b/src/source/source_cache.ts @@ -11,13 +11,13 @@ import assert from 'assert'; import SourceFeatureState from './source_state'; import {mercatorXfromLng} from '../geo/mercator_coordinate'; -import type {Source} from './source'; +import type {ISource, Source} from './source'; import type {SourceSpecification} from '../style-spec/types'; import type {Map as MapboxMap} from '../ui/map'; import type Transform from '../geo/transform'; import type {TileState} from './tile'; import type {Callback} from '../types/callback'; -import type {FeatureStates} from './source_state'; +import type {FeatureState} from '../style-spec/expression/index'; import type {QueryGeometry, TilespaceQueryGeometry} from '../style/query_geometry'; import type {vec3} from 'gl-matrix'; @@ -36,7 +36,7 @@ class SourceCache extends Evented { id: string; map: MapboxMap; - _source: Source; + _source: ISource; _sourceLoaded: boolean; _sourceErrored: boolean; _tiles: Partial>; @@ -134,8 +134,8 @@ class SourceCache extends Evented { return true; } - getSource(): Source { - return this._source; + getSource(): T { + return this._source as T; } pause() { @@ -167,7 +167,7 @@ class SourceCache extends Evented { return this._source.abortTile(tile); } - serialize(): SourceSpecification { + serialize(): SourceSpecification | {type: 'custom', [key: string]: unknown} { return this._source.serialize(); } @@ -532,10 +532,8 @@ class SourceCache extends Evented { if (!this.used && !this.usedForTerrain) { idealTileIDs = []; - // @ts-expect-error - TS2339 - Property 'tileID' does not exist on type 'Source'. } else if (this._source.tileID) { - // @ts-expect-error - TS2339 - Property 'tileID' does not exist on type 'Source'. - idealTileIDs = transform.getVisibleUnwrappedCoordinates((this._source.tileID as CanonicalTileID)) + idealTileIDs = transform.getVisibleUnwrappedCoordinates((this._source.tileID)) .map((unwrapped) => new OverscaledTileID(unwrapped.canonical.z, unwrapped.wrap, unwrapped.canonical.z, unwrapped.canonical.x, unwrapped.canonical.y)); } else if (this.tileCoverLift !== 0.0) { // Extended tile cover to load elevated tiles @@ -1056,7 +1054,7 @@ class SourceCache extends Evented { * Set the value of a particular state for a feature * @private */ - setFeatureState(sourceLayer: string | null | undefined, featureId: number | string, state: any) { + setFeatureState(sourceLayer: string | null | undefined, featureId: number | string, state: FeatureState) { sourceLayer = sourceLayer || '_geojsonTileLayer'; this._state.updateState(sourceLayer, featureId, state); } @@ -1074,7 +1072,7 @@ class SourceCache extends Evented { * Get the entire state object for a feature * @private */ - getFeatureState(sourceLayer: string | null | undefined, featureId: number | string): FeatureStates { + getFeatureState(sourceLayer: string | null | undefined, featureId: number | string): FeatureState { sourceLayer = sourceLayer || '_geojsonTileLayer'; return this._state.getState(sourceLayer, featureId); } diff --git a/src/source/source_state.ts b/src/source/source_state.ts index 49f4c915863..9665b4172d2 100644 --- a/src/source/source_state.ts +++ b/src/source/source_state.ts @@ -1,11 +1,12 @@ import {extend} from '../util/util'; import type Tile from './tile'; -import type {FeatureState} from '../style-spec/expression/index'; import type Painter from '../render/painter'; +import type {FeatureState} from '../style-spec/expression/index'; export type FeatureStates = { [feature_id: string]: FeatureState; }; + export type LayerFeatureStates = { [layer: string]: FeatureStates; }; @@ -22,7 +23,7 @@ export type LayerFeatureStates = { class SourceFeatureState { state: LayerFeatureStates; stateChanges: LayerFeatureStates; - deletedStates: Record; + deletedStates: LayerFeatureStates; constructor() { this.state = {}; @@ -30,7 +31,7 @@ class SourceFeatureState { this.deletedStates = {}; } - updateState(sourceLayer: string, featureId: number | string, newState: any) { + updateState(sourceLayer: string, featureId: number | string, newState: FeatureState) { const feature = String(featureId); this.stateChanges[sourceLayer] = this.stateChanges[sourceLayer] || {}; this.stateChanges[sourceLayer][feature] = this.stateChanges[sourceLayer][feature] || {}; @@ -84,7 +85,7 @@ class SourceFeatureState { } } - getState(sourceLayer: string, featureId: number | string): FeatureStates { + getState(sourceLayer: string, featureId: number | string): FeatureState { const feature = String(featureId); const base = this.state[sourceLayer] || {}; const changes = this.stateChanges[sourceLayer] || {}; @@ -105,13 +106,13 @@ class SourceFeatureState { tile.setFeatureState(this.state, painter); } - coalesceChanges(tiles: Partial>, painter: any) { + coalesceChanges(tiles: Record, painter: Painter) { //track changes with full state objects, but only for features that got modified const featuresChanged: LayerFeatureStates = {}; for (const sourceLayer in this.stateChanges) { - this.state[sourceLayer] = this.state[sourceLayer] || {}; - const layerStates: Record = {}; + this.state[sourceLayer] = this.state[sourceLayer] || {}; + const layerStates: Record = {}; for (const feature in this.stateChanges[sourceLayer]) { if (!this.state[sourceLayer][feature]) this.state[sourceLayer][feature] = {}; extend(this.state[sourceLayer][feature], this.stateChanges[sourceLayer][feature]); @@ -121,8 +122,8 @@ class SourceFeatureState { } for (const sourceLayer in this.deletedStates) { - this.state[sourceLayer] = this.state[sourceLayer] || {}; - const layerStates: Record = {}; + this.state[sourceLayer] = this.state[sourceLayer] || {}; + const layerStates: Record = {}; if (this.deletedStates[sourceLayer] === null) { for (const ft in this.state[sourceLayer]) { diff --git a/src/source/tile.ts b/src/source/tile.ts index 5e333e0563a..ec2c7efa8a4 100644 --- a/src/source/tile.ts +++ b/src/source/tile.ts @@ -1,7 +1,7 @@ import {uniqueId, parseCacheControl} from '../util/util'; import {deserialize as deserializeBucket} from '../data/bucket'; import FeatureIndex from '../data/feature_index'; -import GeoJSONFeature from '../util/vectortile_to_geojson'; +import Feature from '../util/vectortile_to_geojson'; import featureFilter from '../style-spec/feature_filter/index'; import SymbolBucket from '../data/bucket/symbol_bucket'; import FillBucket from '../data/bucket/fill_bucket'; @@ -43,6 +43,7 @@ import type Context from '../gl/context'; import type {CanonicalTileID, OverscaledTileID} from './tile_id'; import type Framebuffer from '../gl/framebuffer'; import type Transform from '../geo/transform'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import type {LayerFeatureStates} from './source_state'; import type {Cancelable} from '../types/cancelable'; import type {FilterSpecification, ExpressionSpecification} from '../style-spec/types'; @@ -52,7 +53,7 @@ import type IndexBuffer from '../gl/index_buffer'; import type Projection from '../geo/projection/projection'; import type {TileTransform} from '../geo/projection/tile_transform'; import type Painter from '../render/painter'; -import type {QueryResult, QueryFeature} from '../source/query_features'; +import type {QueryResult} from '../source/query_features'; import type {UserManagedTexture, TextureImage} from '../render/texture'; import type {VectorTileLayer} from '@mapbox/vector-tile'; @@ -480,7 +481,7 @@ class Tile { }, layers, serializedLayers, sourceFeatureState); } - querySourceFeatures(result: Array, params?: { + querySourceFeatures(result: Array, params?: { sourceLayer?: string; filter?: FilterSpecification | ExpressionSpecification; validate?: boolean; @@ -510,7 +511,7 @@ class Tile { continue; } const id = featureIndex.getId(feature, sourceLayer); - const geojsonFeature = new GeoJSONFeature(feature, z, x, y, id); + const geojsonFeature = new Feature(feature, z, x, y, id); geojsonFeature.tile = coord; result.push(geojsonFeature); diff --git a/src/source/vector_tile_source.ts b/src/source/vector_tile_source.ts index 94be1d76896..d5246a379f6 100644 --- a/src/source/vector_tile_source.ts +++ b/src/source/vector_tile_source.ts @@ -10,7 +10,7 @@ import {cacheEntryPossiblyAdded} from '../util/tile_request_cache'; import {DedupedRequest, loadVectorTile} from './load_vector_tile'; import {makeFQID} from '../util/fqid'; -import type {ISource} from './source'; +import type {ISource, SourceEvents} from './source'; import type {OverscaledTileID} from './tile_id'; import type {Map} from '../ui/map'; import type Dispatcher from '../util/dispatcher'; @@ -48,7 +48,7 @@ import type {WorkerTileResult} from './worker_source'; * @see [Example: Add a vector tile source](https://docs.mapbox.com/mapbox-gl-js/example/vector-source/) * @see [Example: Add a third party vector tile source](https://docs.mapbox.com/mapbox-gl-js/example/third-party/) */ -class VectorTileSource extends Evented implements ISource { +class VectorTileSource extends Evented implements ISource { type: 'vector'; id: string; scope: string; diff --git a/src/source/video_source.ts b/src/source/video_source.ts index f53442d54df..fad6b2d68f9 100644 --- a/src/source/video_source.ts +++ b/src/source/video_source.ts @@ -42,7 +42,8 @@ import type {VideoSourceSpecification} from '../style-spec/types'; * map.removeSource('some id'); // remove * @see [Example: Add a video](https://www.mapbox.com/mapbox-gl-js/example/video-on-a-map/) */ -class VideoSource extends ImageSource { +class VideoSource extends ImageSource<'video'> { + type: 'video'; options: VideoSourceSpecification; urls: Array; video: HTMLVideoElement; diff --git a/src/style-spec/expression/index.ts b/src/style-spec/expression/index.ts index b1577a441ef..a011a1397fa 100644 --- a/src/style-spec/expression/index.ts +++ b/src/style-spec/expression/index.ts @@ -46,7 +46,7 @@ export interface Feature { } export type FeatureState = { - [_: string]: any; + [_: string]: unknown; }; export interface GlobalProperties { diff --git a/src/style-spec/package.json b/src/style-spec/package.json index f0ab9d25fc1..0ba8b265304 100644 --- a/src/style-spec/package.json +++ b/src/style-spec/package.json @@ -1,6 +1,6 @@ { "name": "@mapbox/mapbox-gl-style-spec", - "version": "14.5.1", + "version": "14.5.2", "description": "a specification for mapbox gl styles", "author": "Mapbox", "license": "SEE LICENSE IN LICENSE.txt", @@ -50,8 +50,8 @@ "csscolorparser": "~1.0.2", "json-stringify-pretty-compact": "^4.0.0", "minimist": "^1.2.6", - "quickselect": "^2.0.0", + "quickselect": "^3.0.0", "rw": "^1.3.3", - "tinyqueue": "^2.0.3" + "tinyqueue": "^3.0.0" } } diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 297c29e69c5..99727a24c97 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -1262,13 +1262,13 @@ }, "clip": { "doc": "Layer that removes 3D content from map.", + "experimental": true, "sdk-support": { "basic functionality": { "js": "3.5.0", - "android": "11.5.0", - "ios": "11.5.0" - }, - "experimental": true + "android": "11.6.0", + "ios": "11.6.0" + } } } }, @@ -1476,8 +1476,8 @@ "sdk-support": { "basic functionality": { "js": "3.5.0", - "android": "11.5.0", - "ios": "11.5.0" + "android": "11.6.0", + "ios": "11.6.0" } }, "expression": { diff --git a/src/style/style.ts b/src/style/style.ts index b71dee72b07..c19d9d18d74 100644 --- a/src/style/style.ts +++ b/src/style/style.ts @@ -97,6 +97,7 @@ const emitValidationErrors = (evented: Evented, errors?: ValidationErrors | null import type {LightProps as Ambient} from '../../3d-style/style/ambient_light_properties'; import type {LightProps as Directional} from '../../3d-style/style/directional_light_properties'; import type {vec3} from 'gl-matrix'; +import type {MapEvents} from '../ui/events'; import type {Map as MapboxMap} from '../ui/map'; import type Transform from '../geo/transform'; import type {StyleImage} from './style_image'; @@ -109,11 +110,12 @@ import type {RequestParameters, ResponseCallback} from '../util/ajax'; import type {CustomLayerInterface} from './style_layer/custom_style_layer'; import type {Validator, ValidationErrors} from './validate_style'; import type {OverscaledTileID} from '../source/tile_id'; -import type {FeatureStates} from '../source/source_state'; +import type {FeatureState} from '../style-spec/expression/index'; import type {PointLike} from '../types/point-like'; -import type {Source, SourceClass} from '../source/source'; +import type {ISource, Source, SourceClass} from '../source/source'; import type {TransitionParameters, ConfigOptions} from './properties'; -import type {QueryResult, QueryFeature, QueryRenderedFeaturesParams} from '../source/query_features'; +import type {QueryResult, QueryRenderedFeaturesParams} from '../source/query_features'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import type {LUT} from '../util/lut'; const supportedDiffOperations = pick(diffOperations, [ @@ -150,6 +152,22 @@ const ignoredDiffOperations = pick(diffOperations, [ const empty = emptyStyle(); +type AnyLayerSource = { + source?: LayerSpecification['source'] | SourceSpecification +} + +/** + * Helper type that represents user provided layer in addLayer method. + * @private + */ +export type AnyLayer = Omit & AnyLayerSource | CustomLayerInterface; + +export type FeatureSelector = { + id: string | number; + source: string; + sourceLayer?: string; +} + export type StyleOptions = { validate?: boolean; localFontFamily?: string | null | undefined; @@ -185,6 +203,7 @@ export type Fragment = { type StyleColorTheme = { lut: LUT | null; lutLoading: boolean; + lutLoadingCorrelationID: number; colorTheme: ColorThemeSpecification | null; }; @@ -194,7 +213,7 @@ const defaultTransition = {duration: 300, delay: 0}; /** * @private */ -class Style extends Evented { +class Style extends Evented { map: MapboxMap; stylesheet: StyleSpecification; dispatcher: Dispatcher; @@ -367,6 +386,7 @@ class Style extends Evented { this._styleColorTheme = { lut: null, lutLoading: false, + lutLoadingCorrelationID: 0, colorTheme: null }; this._styleColorThemeForScope = {}; @@ -1058,18 +1078,21 @@ class Style extends Evented { return properties.get('data'); } - _loadColorTheme(colorThemeData: string): Promise { + _loadColorTheme(inputData: string | null): Promise { this._styleColorTheme.lutLoading = true; + this._styleColorTheme.lutLoadingCorrelationID += 1; + const correlationID = this._styleColorTheme.lutLoadingCorrelationID; return new Promise((resolve, reject) => { const dataURLPrefix = 'data:image/png;base64,'; - if (colorThemeData.length === 0) { + if (!inputData || inputData.length === 0) { this._styleColorTheme.lut = null; this._styleColorTheme.lutLoading = false; resolve(); return; } + let colorThemeData = inputData; if (!colorThemeData.startsWith(dataURLPrefix)) { colorThemeData = dataURLPrefix + colorThemeData; } @@ -1084,6 +1107,10 @@ class Style extends Evented { }; lutImage.onload = () => { + if (this._styleColorTheme.lutLoadingCorrelationID !== correlationID) { + resolve(); + return; + } this._styleColorTheme.lutLoading = false; const {width, height, data} = browser.getImageData(lutImage); if (height > 32) { @@ -1106,7 +1133,7 @@ class Style extends Evented { } else { this._styleColorTheme.lut = { image: image.data, - data: colorThemeData + data: inputData }; resolve(); } @@ -1469,7 +1496,8 @@ class Style extends Evented { for (const sourceId in sourcesUsedBefore) { const sourceCache = this._mergedSourceCaches[sourceId]; if (sourcesUsedBefore[sourceId] !== sourceCache.used) { - sourceCache.getSource().fire(new Event('data', {sourceDataType: 'visibility', dataType:'source', sourceId: sourceCache.getSource().id})); + const source = sourceCache.getSource() as ISource; + source.fire(new Event('data', {sourceDataType: 'visibility', dataType:'source', sourceId: sourceCache.getSource().id})); } } @@ -1740,7 +1768,7 @@ class Style extends Evented { this._checkLoaded(); assert(this.getOwnSource(id) !== undefined, 'There is no source with this ID'); - const geojsonSource: GeoJSONSource = (this.getOwnSource(id) as any); + const geojsonSource: GeoJSONSource = this.getOwnSource(id); assert(geojsonSource.type === 'geojson'); geojsonSource.setData(data); @@ -1752,7 +1780,7 @@ class Style extends Evented { * @param {string} id ID of the desired source. * @returns {?Source} The source object. */ - getOwnSource(id: string): Source | null | undefined { + getOwnSource(id: string): T | undefined { const sourceCache = this.getOwnSourceCache(id); return sourceCache && sourceCache.getSource(); } @@ -2081,7 +2109,7 @@ class Style extends Evented { * @param {Object} options Style setter options. * @returns {Map} The {@link Map} object. */ - addLayer(layerObject: LayerSpecification | CustomLayerInterface, before?: string, options: StyleSetterOptions = {}) { + addLayer(layerObject: AnyLayer, before?: string, options: StyleSetterOptions = {}) { this._checkLoaded(); const id = layerObject.id; @@ -2106,7 +2134,7 @@ class Style extends Evented { if (this._validate(validateLayer, `layers.${id}`, layerObject, {arrayIndex: -1}, options)) return; - layer = createStyleLayer(layerObject, this.scope, this._styleColorTheme.lut, this.options); + layer = createStyleLayer(layerObject as LayerSpecification, this.scope, this._styleColorTheme.lut, this.options); this._validateLayer(layer); layer.setEventedParent(this, {layer: {id}}); @@ -2271,8 +2299,8 @@ class Style extends Evented { * @param {string} id ID of the desired layer. * @returns {?StyleLayer} A layer, if one with the given `id` exists. */ - getOwnLayer(id: string): StyleLayer | null | undefined { - return this._layers[id]; + getOwnLayer(id: string): T | undefined { + return this._layers[id] as T; } /** @@ -2450,7 +2478,7 @@ class Style extends Evented { return layer.getPaintProperty(name); } - setFeatureState(target: {id: string | number; source: string; sourceLayer?: string}, state: any) { + setFeatureState(target: FeatureSelector | GeoJSONFeature, state: FeatureState) { this._checkLoaded(); const sourceId = target.source; const sourceLayer = target.sourceLayer; @@ -2477,11 +2505,7 @@ class Style extends Evented { } } - removeFeatureState(target: { - source: string; - sourceLayer?: string; - id?: string | number; - }, key?: string) { + removeFeatureState(target: Omit & {id?: FeatureSelector['id']} | GeoJSONFeature, key?: string) { this._checkLoaded(); const sourceId = target.source; @@ -2507,13 +2531,7 @@ class Style extends Evented { } } - getFeatureState( - target: { - source: string; - sourceLayer?: string; - id: string | number; - }, - ): FeatureStates | null | undefined { + getFeatureState(target: FeatureSelector | GeoJSONFeature): FeatureState | null | undefined { this._checkLoaded(); const sourceId = target.source; const sourceLayer = target.sourceLayer; @@ -2592,7 +2610,7 @@ class Style extends Evented { layer.invalidateCompiledFilter(); } - _flattenAndSortRenderedFeatures(sourceResults: Array): Array { + _flattenAndSortRenderedFeatures(sourceResults: Array): Array { // Feature order is complicated. // The order between features in two 2D layers is determined by layer order (subject to draped rendering modification). // - if terrain/globe enabled layers are reordered in a drape-first, immediate-second manner @@ -2668,7 +2686,7 @@ class Style extends Evented { queryGeometry: PointLike | [PointLike, PointLike], params: QueryRenderedFeaturesParams, transform: Transform, - ): Array { + ): Array { if (params && params.filter) { this._validate(validateFilter, 'queryRenderedFeatures.filter', params.filter, null, params); } @@ -2750,7 +2768,7 @@ class Style extends Evented { filter?: FilterSpecification | ExpressionSpecification; validate?: boolean; }, - ): Array { + ): Array { if (params && params.filter) { this._validate(validateFilter, 'querySourceFeatures.filter', params.filter, null, params); } @@ -2980,6 +2998,7 @@ class Style extends Evented { const data = this._evaluateColorThemeData(colorTheme); this._loadColorTheme(data).then(() => { + this.fire(new Event('colorthemeset')); updateStyle(); }).catch((e) => { warnOnce(`Couldn\'t set color theme: ${e}`); diff --git a/src/style/style_layer.ts b/src/style/style_layer.ts index b4270f155cd..93a57b94137 100644 --- a/src/style/style_layer.ts +++ b/src/style/style_layer.ts @@ -27,7 +27,7 @@ import type {VectorTileFeature} from '@mapbox/vector-tile'; import type {CreateProgramParams} from '../render/painter'; import type SourceCache from '../source/source_cache'; import type Painter from '../render/painter'; -import type {QueryFeature} from '../source/query_features'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import type {LUT} from '../util/lut'; const TRANSITION_SUFFIX = '-transition'; @@ -381,7 +381,7 @@ class StyleLayer extends Evented { _transform: Transform, // @ts-expect-error - TS2355 - A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ): { - queryFeature: QueryFeature | null | undefined; + queryFeature: GeoJSONFeature | null | undefined; intersectionZ: number; } {} } diff --git a/src/style/style_layer/custom_style_layer.ts b/src/style/style_layer/custom_style_layer.ts index c00fbb8fa5f..35bc7c6743d 100644 --- a/src/style/style_layer/custom_style_layer.ts +++ b/src/style/style_layer/custom_style_layer.ts @@ -7,14 +7,14 @@ import type {ValidationErrors} from '../validate_style'; import type {ProjectionSpecification} from '../../style-spec/types'; import type SourceCache from '../../source/source_cache'; -type CustomRenderMethod = ( +type CustomLayerRenderMethod = ( gl: WebGL2RenderingContext, matrix: Array, - projection?: ProjectionSpecification | null | undefined, - projectionToMercatorMatrix?: Array | null | undefined, - projectionToMercatorTransition?: number | null | undefined, - centerInMercator?: Array | null | undefined, - pixelsPerMeterRatio?: number | null | undefined, + projection?: ProjectionSpecification, + projectionToMercatorMatrix?: Array, + projectionToMercatorTransition?: number, + centerInMercator?: Array, + pixelsPerMeterRatio?: number, ) => void; /** @@ -158,18 +158,18 @@ type CustomRenderMethod = ( * lengths in mercator units would be rendered as a cube. {@link MercatorCoordinate}.fromLngLat * can be used to project a `LngLat` to a mercator coordinate. */ -export type CustomLayerInterface = { +export interface CustomLayerInterface { id: string; type: 'custom'; - slot?: string | undefined; + slot?: string; renderingMode?: '2d' | '3d'; - render: CustomRenderMethod; - prerender?: CustomRenderMethod | undefined; + render: CustomLayerRenderMethod; + prerender?: CustomLayerRenderMethod; renderToTile?: (gl: WebGL2RenderingContext, tileId: MercatorCoordinate) => void; shouldRerenderTiles?: () => boolean; onAdd?: (map: Map, gl: WebGL2RenderingContext) => void; onRemove?: (map: Map, gl: WebGL2RenderingContext) => void; -}; +} export function validateCustomStyleLayer(layerObject: CustomLayerInterface): ValidationErrors { const errors = []; diff --git a/src/terrain/draw_terrain_raster.ts b/src/terrain/draw_terrain_raster.ts index 16d04d1095e..8361e70ce24 100644 --- a/src/terrain/draw_terrain_raster.ts +++ b/src/terrain/draw_terrain_raster.ts @@ -32,8 +32,7 @@ import {calculateGroundShadowFactor} from '../../3d-style/render/shadow_renderer import {getCutoffParams} from '../render/cutoff'; export { - drawTerrainRaster, - drawTerrainDepth + drawTerrainRaster }; type DEMChain = { @@ -377,31 +376,6 @@ function drawTerrainRaster(painter: Painter, terrain: Terrain, sourceCache: Sour } } -function drawTerrainDepth(painter: Painter, terrain: Terrain, sourceCache: SourceCache, tileIDs: Array) { - if (painter.transform.projection.name === 'globe') { - return; - } - - assert(painter.renderPass === 'offscreen'); - - const context = painter.context; - const gl = context.gl; - - context.clear({depth: 1}); - const program = painter.getOrCreateProgram('terrainDepth'); - const depthMode = new DepthMode(gl.LESS, DepthMode.ReadWrite, painter.depthRangeFor3D); - - for (const coord of tileIDs) { - const tile = sourceCache.getTile(coord); - const uniformValues = terrainRasterUniformValues(coord.projMatrix, 0, [0, 0, 0]); - terrain.setupElevationDraw(tile, program); - - // @ts-expect-error - TS2554 - Expected 12-16 arguments, but got 11. - program.draw(painter, gl.TRIANGLES, depthMode, StencilMode.disabled, ColorMode.unblended, CullFaceMode.backCCW, - uniformValues, "terrain_depth", terrain.gridBuffer, terrain.gridIndexBuffer, terrain.gridNoSkirtSegments); - } -} - function skirtHeight(zoom: number, terrainExaggeration: number, tileSize: number) { // Skirt height calculation is heuristic: provided value hides // seams between tiles and it is not too large: 9 at zoom 22, ~20000m at zoom 0. diff --git a/src/terrain/terrain.ts b/src/terrain/terrain.ts index e3fa1d23d9d..d9afe6e569f 100644 --- a/src/terrain/terrain.ts +++ b/src/terrain/terrain.ts @@ -22,7 +22,7 @@ import Color from '../style-spec/util/color'; import type {Callback} from '../types/callback'; import StencilMode from '../gl/stencil_mode'; import {DepthStencilAttachment} from '../gl/value'; -import {drawTerrainRaster, drawTerrainDepth} from './draw_terrain_raster'; +import {drawTerrainRaster} from './draw_terrain_raster'; import type RasterStyleLayer from '../style/style_layer/raster_style_layer'; import type CustomStyleLayer from '../style/style_layer/custom_style_layer'; import type LineStyleLayer from '../style/style_layer/line_style_layer'; @@ -112,7 +112,7 @@ class ProxySourceCache extends SourceCache { // This source is not to be added as a map source: we use it's tile management. // For that, initialize internal structures used for tile cover update. - this.map = (this.getSource() as GeoJSONSource).map = map; + this.map = this.getSource().map = map; this.used = this._sourceLoaded = true; this.renderCache = []; this.renderCachePool = []; @@ -800,13 +800,23 @@ export class Terrain extends Elevation { } context.activeTexture.set(gl.TEXTURE3); - if (options && options.useDepthForOcclusion) { - if (this._depthTexture) this._depthTexture.bind(gl.NEAREST, gl.CLAMP_TO_EDGE); - if (this._depthFBO) uniforms['u_depth_size_inv'] = [1 / this._depthFBO.width, 1 / this._depthFBO.height]; + if (options && options.useDepthForOcclusion && this.painter.terrainDepthTexture && this.painter.terrainDepthFBO) { + this.painter.terrainDepthTexture.bind(gl.NEAREST, gl.CLAMP_TO_EDGE); + uniforms['u_depth_size_inv'] = [1 / this.painter.terrainDepthFBO.width, 1 / this.painter.terrainDepthFBO.height]; + + const getUnpackDepthRangeParams = (depthRange: [number, number]): [number, number] => { + // -1.0 + 2.0 * (depth - u_depth_range.x) / (u_depth_range.y - u_depth_range.x) + const a = 2 / (depthRange[1] - depthRange[0]); + const b = -1 - 2 * depthRange[0] / (depthRange[1] - depthRange[0]); + return [a, b]; + }; + + uniforms['u_depth_range_unpack'] = getUnpackDepthRangeParams(this.painter.depthRangeFor3D); } else { this.emptyDepthBufferTexture.bind(gl.NEAREST, gl.CLAMP_TO_EDGE); - uniforms['u_depth_size_inv'] = [1, 1]; + uniforms['u_depth_range_unpack'] = [2, 0]; } + context.activeTexture.set(gl.TEXTURE0); if (options && options.useMeterToDem && demTile) { const meterToDEM = (1 << demTile.tileID.canonical.z) * mercatorZfromAltitude(1, this.painter.transform.center.lat) * this.sourceCache.getSource().tileSize; @@ -1460,35 +1470,6 @@ export class Terrain extends Elevation { return p; } - drawDepth() { - const painter = this.painter; - const context = painter.context; - const psc = this.proxySourceCache; - - const width = Math.ceil(painter.width), height = Math.ceil(painter.height); - if (this._depthFBO && (this._depthFBO.width !== width || this._depthFBO.height !== height)) { - this._depthFBO.destroy(); - this._depthFBO = undefined; - this._depthTexture = undefined; - } - if (!this._depthFBO) { - const gl = context.gl; - const fbo = context.createFramebuffer(width, height, true, 'renderbuffer'); - context.activeTexture.set(gl.TEXTURE0); - const texture = new Texture(context, {width, height, data: null}, gl.RGBA); - texture.bind(gl.NEAREST, gl.CLAMP_TO_EDGE); - fbo.colorAttachment.set(texture.texture); - const renderbuffer = context.createRenderbuffer(context.gl.DEPTH_COMPONENT16, width, height); - fbo.depthAttachment.set(renderbuffer); - this._depthFBO = fbo; - this._depthTexture = texture; - } - context.bindFramebuffer.set(this._depthFBO.framebuffer); - context.viewport.set([0, 0, width, height]); - - drawTerrainDepth(painter, this, psc, this.proxyCoords); - } - _setupProxiedCoordsForOrtho( sourceCache: SourceCache, sourceCoords: Array, @@ -1557,7 +1538,7 @@ export class Terrain extends Elevation { const coords = this.proxiedCoords[sourceCache.id] = []; const proxys = this.proxyCoords; - const imageSource: ImageSource = (sourceCache.getSource() as ImageSource); + const imageSource: ImageSource = sourceCache.getSource(); // Special case where image is rendered outside of the map's bounds (eg. pole caps) const tileID = imageSource.tileID; if (!tileID) return; @@ -1805,6 +1786,7 @@ export type TerrainUniformsType = { ["u_exaggeration"]: Uniform1f; ['u_depth']: Uniform1i; ['u_depth_size_inv']: Uniform2f; + ['u_depth_range_unpack']: Uniform2f; ['u_meter_to_dem']?: Uniform1f; ['u_label_plane_matrix_inv']?: UniformMatrix4f; }; @@ -1821,6 +1803,7 @@ export const terrainUniforms = (context: Context): TerrainUniformsType => ({ 'u_exaggeration': new Uniform1f(context), 'u_depth': new Uniform1i(context), 'u_depth_size_inv': new Uniform2f(context), + 'u_depth_range_unpack': new Uniform2f(context), 'u_meter_to_dem': new Uniform1f(context), 'u_label_plane_matrix_inv': new UniformMatrix4f(context), }); @@ -1837,6 +1820,7 @@ function defaultTerrainUniforms(): UniformValues { 'u_dem_lerp': 1.0, 'u_depth': 3, 'u_depth_size_inv': [0, 0], + 'u_depth_range_unpack': [2, 0], 'u_exaggeration': 0, }; } diff --git a/src/types/deprecated-aliases.ts b/src/types/deprecated-aliases.ts index 683e0a820db..a4c60ce2711 100644 --- a/src/types/deprecated-aliases.ts +++ b/src/types/deprecated-aliases.ts @@ -1,8 +1,9 @@ -import type GeoJSONFeature from '../util/vectortile_to_geojson'; -import type {MapOptions, FeatureSelector} from '../ui/map'; -import type {Event, ErrorEvent} from '../util/evented'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; +import type {MapOptions} from '../ui/map'; +import type {FeatureSelector} from '../style/style'; +import type {ErrorEvent} from '../util/evented'; import type {RequestTransformFunction} from '../util/mapbox'; -import type {MapMouseEvent, MapTouchEvent} from '../ui/events'; +import type {MapEvent, MapMouseEvent, MapTouchEvent} from '../ui/events'; import type { Source, VectorTileSource, @@ -20,9 +21,9 @@ import type { export type MapboxOptions = MapOptions; /** - * @deprecated Use `Event` instead. + * @deprecated Use `MapEvent` instead. */ -export type MapboxEvent = Event; +export type MapboxEvent = MapEvent; /** * @deprecated Use `ErrorEvent` instead. @@ -49,6 +50,11 @@ export type TransformRequestFunction = RequestTransformFunction; */ export type MapboxGeoJSONFeature = GeoJSONFeature; +/** + * @deprecated Use `GeoJSONFeature` instead. +*/ +export type QueryFeature = GeoJSONFeature; + /** * @deprecated Use `MapOptions['fitBoundsOptions']` instead. */ diff --git a/src/ui/camera.ts b/src/ui/camera.ts index 22b30aaabc4..2bbce4f25e1 100644 --- a/src/ui/camera.ts +++ b/src/ui/camera.ts @@ -1,3 +1,4 @@ +import {vec3, vec4, mat4} from 'gl-matrix'; import { bindAll, extend, @@ -27,17 +28,18 @@ import MercatorCoordinate, { latFromMercatorY, lngFromMercatorX } from '../geo/mercator_coordinate'; -import {vec3, vec4, mat4} from 'gl-matrix'; -import type {FreeCameraOptions} from './free_camera'; +import {Aabb} from '../util/primitives'; + import type Transform from '../geo/transform'; -import type {LngLatLike, LngLatBoundsLike} from '../geo/lng_lat'; -import type {ElevationQueryOptions} from '../terrain/elevation'; import type {TaskID} from '../util/task_queue'; import type {Callback} from '../types/callback'; +import type {MapEvents} from './events'; +import type {EventData} from '../util/evented'; import type {PointLike} from '../types/point-like'; -import {Aabb} from '../util/primitives'; import type {PaddingOptions} from '../geo/edge_insets'; -import type {MapEvent} from './events'; +import type {FreeCameraOptions} from './free_camera'; +import type {ElevationQueryOptions} from '../terrain/elevation'; +import type {LngLatLike, LngLatBoundsLike} from '../geo/lng_lat'; /** * Options common to {@link Map#jumpTo}, {@link Map#easeTo}, and {@link Map#flyTo}, controlling the desired location, @@ -81,7 +83,7 @@ export type CameraOptions = { bearing?: number; pitch?: number; around?: LngLatLike; - padding?: PaddingOptions; + padding?: number | PaddingOptions; maxZoom?: number; }; @@ -180,7 +182,7 @@ const freeCameraNotSupportedWarning = 'map.setFreeCameraOptions(...) and map.get * @see [Example: Fit a map to a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/fitbounds/) */ -class Camera extends Evented { +class Camera extends Evented { transform: Transform; _moving: boolean; _zooming: boolean; @@ -248,7 +250,7 @@ class Camera extends Evented { * @example * map.setCenter([-74, 38]); */ - setCenter(center: LngLatLike, eventData?: any): this { + setCenter(center: LngLatLike, eventData?: EventData): this { return this.jumpTo({center}, eventData); } @@ -269,7 +271,7 @@ class Camera extends Evented { * map.panBy([-74, 38], {duration: 5000}); * @see [Example: Navigate the map with game-like controls](https://www.mapbox.com/mapbox-gl-js/example/game-controls/) */ - panBy(offset: PointLike, options?: AnimationOptions, eventData?: any): this { + panBy(offset: PointLike, options?: AnimationOptions, eventData?: EventData): this { offset = Point.convert(offset).mult(-1); return this.panTo(this.transform.center, extend({offset}, options), eventData); } @@ -291,7 +293,7 @@ class Camera extends Evented { * map.panTo([-74, 38], {duration: 5000}); * @see [Example: Update a feature in realtime](https://docs.mapbox.com/mapbox-gl-js/example/live-update-feature/) */ - panTo(lnglat: LngLatLike, options?: AnimationOptions, eventData?: any): this { + panTo(lnglat: LngLatLike, options?: AnimationOptions, eventData?: EventData): this { return this.easeTo(extend({ center: lnglat }, options), eventData); @@ -324,7 +326,7 @@ class Camera extends Evented { * // Zoom to the zoom level 5 without an animated transition * map.setZoom(5); */ - setZoom(zoom: number, eventData?: any): this { + setZoom(zoom: number, eventData?: EventData): this { this.jumpTo({zoom}, eventData); return this; } @@ -352,7 +354,7 @@ class Camera extends Evented { * offset: [100, 50] * }); */ - zoomTo(zoom: number, options?: AnimationOptions | null, eventData?: any): this { + zoomTo(zoom: number, options?: AnimationOptions | null, eventData?: EventData): this { return this.easeTo(extend({ zoom }, options), eventData); @@ -375,7 +377,7 @@ class Camera extends Evented { * // zoom the map in one level with a custom animation duration * map.zoomIn({duration: 1000}); */ - zoomIn(options?: AnimationOptions, eventData?: any): this { + zoomIn(options?: AnimationOptions, eventData?: EventData): this { this.zoomTo(this.getZoom() + 1, options, eventData); return this; } @@ -397,7 +399,7 @@ class Camera extends Evented { * // zoom the map out one level with a custom animation offset * map.zoomOut({offset: [80, 60]}); */ - zoomOut(options?: AnimationOptions, eventData?: any): this { + zoomOut(options?: AnimationOptions, eventData?: EventData): this { this.zoomTo(this.getZoom() - 1, options, eventData); return this; } @@ -432,7 +434,7 @@ class Camera extends Evented { * // Rotate the map to 90 degrees. * map.setBearing(90); */ - setBearing(bearing: number, eventData?: any): this { + setBearing(bearing: number, eventData?: EventData): this { this.jumpTo({bearing}, eventData); return this; } @@ -462,7 +464,7 @@ class Camera extends Evented { * // Sets a left padding of 300px, and a top padding of 50px * map.setPadding({left: 300, top: 50}); */ - setPadding(padding: PaddingOptions, eventData?: any): this { + setPadding(padding: PaddingOptions, eventData?: EventData): this { this.jumpTo({padding}, eventData); return this; } @@ -485,7 +487,7 @@ class Camera extends Evented { * // rotateTo with an animation of 2 seconds. * map.rotateTo(30, {duration: 2000}); */ - rotateTo(bearing: number, options?: EasingOptions, eventData?: any): this { + rotateTo(bearing: number, options?: EasingOptions, eventData?: EventData): this { return this.easeTo(extend({ bearing }, options), eventData); @@ -505,7 +507,7 @@ class Camera extends Evented { * // resetNorth with an animation of 2 seconds. * map.resetNorth({duration: 2000}); */ - resetNorth(options?: EasingOptions, eventData?: any): this { + resetNorth(options?: EasingOptions, eventData?: EventData): this { this.rotateTo(0, extend({duration: 1000}, options), eventData); return this; } @@ -524,7 +526,7 @@ class Camera extends Evented { * // resetNorthPitch with an animation of 2 seconds. * map.resetNorthPitch({duration: 2000}); */ - resetNorthPitch(options?: EasingOptions, eventData?: any): this { + resetNorthPitch(options?: EasingOptions, eventData?: EventData): this { this.easeTo(extend({ bearing: 0, pitch: 0, @@ -548,7 +550,7 @@ class Camera extends Evented { * // snapToNorth with an animation of 2 seconds. * map.snapToNorth({duration: 2000}); */ - snapToNorth(options?: EasingOptions, eventData?: any): this { + snapToNorth(options?: EasingOptions, eventData?: EventData): this { if (Math.abs(this.getBearing()) < this._bearingSnap) { return this.resetNorth(options, eventData); } @@ -579,7 +581,7 @@ class Camera extends Evented { * // setPitch with an animation of 2 seconds. * map.setPitch(80, {duration: 2000}); */ - setPitch(pitch: number, eventData?: any): this { + setPitch(pitch: number, eventData?: EventData): this { this.jumpTo({pitch}, eventData); return this; } @@ -988,7 +990,7 @@ class Camera extends Evented { * }); * @see [Example: Fit a map to a bounding box](https://www.mapbox.com/mapbox-gl-js/example/fitbounds/) */ - fitBounds(bounds: LngLatBoundsLike, options?: EasingOptions, eventData?: any): this { + fitBounds(bounds: LngLatBoundsLike, options?: EasingOptions, eventData?: EventData): this { const cameraPlacement = this.cameraForBounds(bounds, options); return this._fitInternal(cameraPlacement, options, eventData); } @@ -1029,7 +1031,7 @@ class Camera extends Evented { p1: PointLike, bearing: number, options?: EasingOptions, - eventData?: any, + eventData?: EventData, ): this { const screen0 = Point.convert(p0); const screen1 = Point.convert(p1); @@ -1065,7 +1067,7 @@ class Camera extends Evented { _fitInternal( calculatedOptions?: EasingOptions | null, options?: EasingOptions, - eventData?: any, + eventData?: EventData, ): this { // cameraForBounds warns + returns undefined if unable to fit: if (!calculatedOptions) return this; @@ -1109,12 +1111,7 @@ class Camera extends Evented { * @see [Example: Jump to a series of locations](https://docs.mapbox.com/mapbox-gl-js/example/jump-to/) * @see [Example: Update a feature in realtime](https://docs.mapbox.com/mapbox-gl-js/example/live-update-feature/) */ - jumpTo( - options: CameraOptions & { - preloadOnly?: AnimationOptions['preloadOnly']; - }, - eventData?: any, - ): this { + jumpTo(options: CameraOptions & {preloadOnly?: AnimationOptions['preloadOnly']}, eventData?: EventData): this { this.stop(); const tr = options.preloadOnly ? this.transform.clone() : this.transform; @@ -1141,8 +1138,12 @@ class Camera extends Evented { tr.pitch = +options.pitch; } - if (options.padding != null && !tr.isPaddingEqual(options.padding)) { - tr.padding = options.padding; + if (options.padding != null) { + const padding = typeof options.padding === 'number' ? + this._extendPadding(options.padding) : + options.padding; + + if (!tr.isPaddingEqual(padding)) tr.padding = padding; } if (options.preloadOnly) { @@ -1234,7 +1235,7 @@ class Camera extends Evented { * * map.setFreeCameraOptions(camera); */ - setFreeCameraOptions(options: FreeCameraOptions, eventData?: any): this { + setFreeCameraOptions(options: FreeCameraOptions, eventData?: EventData): this { const tr = this.transform; if (!tr.projection.supportsFreeCamera) { @@ -1324,7 +1325,7 @@ class Camera extends Evented { options: EasingOptions & { easeId?: string; }, - eventData?: any, + eventData?: EventData, ): this { this._stop(false, options.easeId); @@ -1458,7 +1459,7 @@ class Camera extends Evented { return this; } - _prepareEase(eventData: any | null | undefined, noMoveStart: boolean, currently: any = {}) { + _prepareEase(eventData: EventData | null | undefined, noMoveStart: boolean, currently: any = {}) { this._moving = true; this.transform.cameraElevationReference = "sea"; if (this.transform._orthographicProjectionAtLowPitch && this.transform.pitch === 0 && this.transform.projection.name !== 'globe') { @@ -1481,7 +1482,7 @@ class Camera extends Evented { } } - _fireMoveEvents(eventData?: any) { + _fireMoveEvents(eventData?: EventData) { this.fire(new Event('move', eventData)); if (this._zooming) { this.fire(new Event('zoom', eventData)); @@ -1494,7 +1495,7 @@ class Camera extends Evented { } } - _afterEase(eventData?: any, easeId?: string) { + _afterEase(eventData?: EventData, easeId?: string) { // if this easing is being stopped to start another easing with // the same id then don't fire any events to avoid extra start/stop events if (this._easeId && easeId && this._easeId === easeId) { @@ -1583,7 +1584,7 @@ class Camera extends Evented { * @see [Example: Slowly fly to a location](https://www.mapbox.com/mapbox-gl-js/example/flyto-options/) * @see [Example: Fly to a location based on scroll position](https://www.mapbox.com/mapbox-gl-js/example/scroll-fly-to/) */ - flyTo(options: EasingOptions, eventData?: any): this { + flyTo(options: EasingOptions, eventData?: EventData): this { // Fall through to jumpTo if user has set prefers-reduced-motion if (this._prefersReducedMotion(options)) { const coercedOptions = pick(options, ['center', 'zoom', 'bearing', 'pitch', 'around', 'padding']); @@ -1889,22 +1890,21 @@ function addAssertions(camera: Camera) { //eslint-disable-line Debug.run(() => { const inProgress: Record = {}; - ['drag', 'zoom', 'rotate', 'pitch', 'move'].forEach(name => { + (['drag', 'zoom', 'rotate', 'pitch', 'move'] as const).forEach(name => { inProgress[name] = false; - camera.on((`${name}start` as MapEvent), () => { + camera.on(`${name}start`, () => { assert(!inProgress[name], `"${name}start" fired twice without a "${name}end"`); inProgress[name] = true; assert(inProgress.move); }); - // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'MapEvent'. camera.on(name, () => { assert(inProgress[name]); assert(inProgress.move); }); - camera.on((`${name}end` as MapEvent), () => { + camera.on(`${name}end`, () => { assert(inProgress.move); assert(inProgress[name]); inProgress[name] = false; diff --git a/src/ui/control/attribution_control.ts b/src/ui/control/attribution_control.ts index ef4b432519b..a7aab458dd7 100644 --- a/src/ui/control/attribution_control.ts +++ b/src/ui/control/attribution_control.ts @@ -3,11 +3,11 @@ import {bindAll} from '../../util/util'; import config from '../../util/config'; import {getHashString} from '../hash'; -import type {Map, ControlPosition} from '../map'; +import type {Map, ControlPosition, IControl} from '../map'; -type Options = { +export type AttributionControlOptions = { compact?: boolean; - customAttribution?: string | null | undefined | Array ; + customAttribution?: string | null | undefined | Array; }; /** @@ -24,18 +24,18 @@ type Options = { * customAttribution: 'Map design by me' * })); */ -class AttributionControl { - options: Options; +class AttributionControl implements IControl { + options: AttributionControlOptions; _map: Map; _container: HTMLElement; _innerContainer: HTMLElement; _compactButton: HTMLButtonElement; - _editLink: HTMLAnchorElement | null | undefined; + _editLink?: HTMLAnchorElement; _attribHTML: string; styleId: string; styleOwner: string; - constructor(options: Options = {}) { + constructor(options: AttributionControlOptions = {}) { this.options = options; bindAll([ diff --git a/src/ui/control/fullscreen_control.ts b/src/ui/control/fullscreen_control.ts index fc4e056c122..366d041bbd4 100644 --- a/src/ui/control/fullscreen_control.ts +++ b/src/ui/control/fullscreen_control.ts @@ -2,9 +2,9 @@ import * as DOM from '../../util/dom'; import {bindAll, warnOnce} from '../../util/util'; -import type {Map} from '../map'; +import type {Map, IControl} from '../map'; -type Options = { +export type FullscreenControlOptions = { container?: HTMLElement; }; @@ -21,7 +21,7 @@ type Options = { * @see [Example: View a fullscreen map](https://www.mapbox.com/mapbox-gl-js/example/fullscreen/) */ -class FullscreenControl { +class FullscreenControl implements IControl { _map: Map; _controlContainer: HTMLElement; _fullscreen: boolean; @@ -29,7 +29,7 @@ class FullscreenControl { _fullscreenButton: HTMLElement; _container: HTMLElement; - constructor(options?: Options) { + constructor(options: FullscreenControlOptions = {}) { this._fullscreen = false; if (options && options.container) { if (options.container instanceof HTMLElement) { diff --git a/src/ui/control/geolocate_control.ts b/src/ui/control/geolocate_control.ts index 84a007faccf..9643fe8d732 100644 --- a/src/ui/control/geolocate_control.ts +++ b/src/ui/control/geolocate_control.ts @@ -7,17 +7,18 @@ import LngLat from '../../geo/lng_lat'; import throttle from '../../util/throttle'; import {mercatorZfromAltitude} from '../../geo/mercator_coordinate'; -import type {Map} from '../map'; +import type {Map, IControl} from '../map'; +import type {MapEventOf} from '../events'; import type {AnimationOptions, CameraOptions} from '../camera'; -type Options = { - positionOptions: PositionOptions; - fitBoundsOptions: AnimationOptions & CameraOptions; - trackUserLocation: boolean; - showAccuracyCircle: boolean; - showUserLocation: boolean; - showUserHeading: boolean; - geolocation: Geolocation; +export type GeolocateControlOptions = { + positionOptions?: PositionOptions; + fitBoundsOptions?: AnimationOptions & CameraOptions; + trackUserLocation?: boolean; + showAccuracyCircle?: boolean; + showUserLocation?: boolean; + showUserHeading?: boolean; + geolocation?: Geolocation; }; type DeviceOrientationEvent = { @@ -44,6 +45,14 @@ const defaultOptions = { showUserHeading: false }; +type GeolocateControlEvents = { + 'error': GeolocationPositionError; + 'geolocate': GeolocationPosition; + 'outofmaxbounds': GeolocationPosition; + 'trackuserlocationstart': void; + 'trackuserlocationend': void; +}; + /** * A `GeolocateControl` control provides a button that uses the browser's geolocation * API to locate the user on the map. @@ -84,29 +93,29 @@ const defaultOptions = { * })); * @see [Example: Locate the user](https://www.mapbox.com/mapbox-gl-js/example/locate-user/) */ -class GeolocateControl extends Evented { +class GeolocateControl extends Evented implements IControl { _map: Map; - options: Options; + options: GeolocateControlOptions; _container: HTMLElement; _dotElement: HTMLElement; _circleElement: HTMLElement; _geolocateButton: HTMLButtonElement; _geolocationWatchID: number; - _timeoutId: number | null | undefined; + _timeoutId?: number; _watchState: 'OFF' | 'ACTIVE_LOCK' | 'WAITING_ACTIVE' | 'ACTIVE_ERROR' | 'BACKGROUND' | 'BACKGROUND_ERROR'; - _lastKnownPosition: any; + _lastKnownPosition?: GeolocationPosition; _userLocationDotMarker: Marker; _accuracyCircleMarker: Marker; _accuracy: number; _setup: boolean; // set to true once the control has been setup - _heading: number | null | undefined; - _updateMarkerRotationThrottled: any; + _heading?: number; + _updateMarkerRotationThrottled?: () => number; _numberOfWatches: number; _noTimeout: boolean; _supportsGeolocation: boolean; - constructor(options?: Partial) { + constructor(options: GeolocateControlOptions = {}) { super(); const geolocation = navigator.geolocation; this.options = extend({geolocation}, defaultOptions, options); @@ -470,7 +479,7 @@ class GeolocateControl extends Evented { // when the camera is changed (and it's not as a result of the Geolocation Control) change // the watch mode to background watch, so that the marker is updated but not the camera. if (this.options.trackUserLocation) { - this._map.on('movestart', (event) => { + this._map.on('movestart', (event: MapEventOf<'movestart'> & {geolocateSource?: boolean}) => { const fromResize = event.originalEvent && event.originalEvent.type === 'resize'; if (!event.geolocateSource && this._watchState === 'ACTIVE_LOCK' && !fromResize) { this._watchState = 'BACKGROUND'; diff --git a/src/ui/control/logo_control.ts b/src/ui/control/logo_control.ts index 98926971ade..3c47f2c8afa 100644 --- a/src/ui/control/logo_control.ts +++ b/src/ui/control/logo_control.ts @@ -1,8 +1,8 @@ import * as DOM from '../../util/dom'; import {bindAll} from '../../util/util'; -import type {Map, ControlPosition} from '../map'; -import type {MapSourceDataEvent} from '../events'; +import type {MapEventOf} from '../events'; +import type {Map, IControl, ControlPosition} from '../map'; /** * A `LogoControl` is a control that adds the Mapbox watermark @@ -14,7 +14,7 @@ import type {MapSourceDataEvent} from '../events'; * @private **/ -class LogoControl { +class LogoControl implements IControl { _map: Map; _container: HTMLElement; @@ -56,7 +56,7 @@ class LogoControl { return 'bottom-left'; } - _updateLogo(e?: MapSourceDataEvent) { + _updateLogo(e?: MapEventOf<'sourcedata'>) { if (!e || e.sourceDataType === 'metadata') { this._container.style.display = this._logoRequired() ? 'block' : 'none'; } diff --git a/src/ui/control/navigation_control.ts b/src/ui/control/navigation_control.ts index a88dd03e6a8..e3a40be1f5b 100644 --- a/src/ui/control/navigation_control.ts +++ b/src/ui/control/navigation_control.ts @@ -1,17 +1,18 @@ +import type Point from '@mapbox/point-geometry'; + import * as DOM from '../../util/dom'; import {extend, bindAll} from '../../util/util'; import {MouseRotateHandler, MousePitchHandler} from '../handler/mouse'; -import type {Map} from '../map'; -import type Point from '@mapbox/point-geometry'; +import type {Map, IControl} from '../map'; -type Options = { +export type NavigationControlOptions = { showCompass?: boolean; showZoom?: boolean; visualizePitch?: boolean; }; -const defaultOptions: Options = { +const defaultOptions: NavigationControlOptions = { showCompass: true, showZoom: true, visualizePitch: false @@ -37,17 +38,17 @@ const defaultOptions: Options = { * @see [Example: Display map navigation controls](https://www.mapbox.com/mapbox-gl-js/example/navigation/) * @see [Example: Add a third party vector tile source](https://www.mapbox.com/mapbox-gl-js/example/third-party/) */ -class NavigationControl { - _map: Map | null | undefined; - options: Options; +class NavigationControl implements IControl { + _map?: Map; + options: NavigationControlOptions; _container: HTMLElement; _zoomInButton: HTMLButtonElement; _zoomOutButton: HTMLButtonElement; _compass: HTMLButtonElement; _compassIcon: HTMLElement; - _handler: MouseRotateWrapper | null | undefined; + _handler?: MouseRotateWrapper; - constructor(options?: Options) { + constructor(options: NavigationControlOptions = {}) { this.options = extend({}, defaultOptions, options); this._container = DOM.create('div', 'mapboxgl-ctrl mapboxgl-ctrl-group'); diff --git a/src/ui/control/scale_control.ts b/src/ui/control/scale_control.ts index dc30b7d75ed..b7fcd0ace3b 100644 --- a/src/ui/control/scale_control.ts +++ b/src/ui/control/scale_control.ts @@ -1,16 +1,16 @@ import * as DOM from '../../util/dom'; import {extend, bindAll} from '../../util/util'; -import type {Map, ControlPosition} from '../map'; +import type {Map, IControl, ControlPosition} from '../map'; type Unit = 'imperial' | 'metric' | 'nautical'; -type Options = { +export type ScaleControlOptions = { maxWidth?: number; unit?: Unit; }; -const defaultOptions: Options = { +const defaultOptions: ScaleControlOptions = { maxWidth: 100, unit: 'metric' }; @@ -40,14 +40,14 @@ const unitAbbr = { * * scale.setUnit('metric'); */ -class ScaleControl { +class ScaleControl implements IControl { _map: Map; _container: HTMLElement; - _language: string | null | undefined | string[]; + _language?: string | string[]; _isNumberFormatSupported: boolean; - options: Options; + options: ScaleControlOptions; - constructor(options?: Options) { + constructor(options: ScaleControlOptions = {}) { this.options = extend({}, defaultOptions, options); // Some old browsers (e.g., Safari < 14.1) don't support the "unit" style in NumberFormat. @@ -132,7 +132,7 @@ class ScaleControl { this._map = (undefined as any); } - _setLanguage(language: string) { + _setLanguage(language?: string | string[]) { this._language = language; this._update(); } diff --git a/src/ui/events.ts b/src/ui/events.ts index e752c6b6b1b..8a220c5fb57 100644 --- a/src/ui/events.ts +++ b/src/ui/events.ts @@ -4,8 +4,11 @@ import * as DOM from '../util/dom'; import Point from '@mapbox/point-geometry'; import {extend} from '../util/util'; +import type Tile from '../source/tile'; import type {Map} from './map'; import type LngLat from '../geo/lng_lat'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; +import type {EventData, EventOf} from '../util/evented'; import type {SourceSpecification} from '../style-spec/types'; /** @@ -36,11 +39,12 @@ import type {SourceSpecification} from '../style-spec/types'; * @see [Example: Display popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) * @see [Example: Display popup on hover](https://www.mapbox.com/mapbox-gl-js/example/popup-on-hover/) */ -export class MapMouseEvent extends Event { +type MapMouseEventType = 'mousedown' | 'mouseup' | 'preclick' | 'click' | 'dblclick' | 'mousemove' | 'mouseover' | 'mouseenter' | 'mouseleave' | 'mouseout' | 'contextmenu'; +export class MapMouseEvent extends Event { /** * The type of originating event. For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). */ - type: 'mousedown' | 'mouseup' | 'preclick' | 'click' | 'dblclick' | 'mousemove' | 'mouseover' | 'mouseenter' | 'mouseleave' | 'mouseout' | 'contextmenu'; + type: MapMouseEventType; /** * The `Map` object that fired the event. @@ -91,7 +95,7 @@ export class MapMouseEvent extends Event { * console.log(`There are ${features.length} features at point ${e.point}`); * }); */ - features: Array | undefined; + features?: Array; /** * Prevents subsequent default processing of the event by the map. @@ -120,15 +124,18 @@ export class MapMouseEvent extends Event { return this._defaultPrevented; } + /** + * @private + */ _defaultPrevented: boolean; /** * @private */ - constructor(type: string, map: Map, originalEvent: MouseEvent, data: any = {}) { + constructor(type: MapMouseEventType, map: Map, originalEvent: MouseEvent, data: EventData = {}) { const point = DOM.mousePos(map.getCanvasContainer(), originalEvent); const lngLat = map.unproject(point); - super(type, extend({point, lngLat, originalEvent}, data)); + super(type, extend({point, lngLat, originalEvent}, data) as MapEvents[MapMouseEventType]); this._defaultPrevented = false; this.target = map; } @@ -175,11 +182,12 @@ export class MapMouseEvent extends Event { * @see [Reference: `Map` events API documentation](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-events) * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) */ -export class MapTouchEvent extends Event { +type MapTouchEventType = 'touchstart' | 'touchend' | 'touchcancel'; +export class MapTouchEvent extends Event { /** * The type of originating event. For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). */ - type: 'touchstart' | 'touchend' | 'touchcancel'; + type: MapTouchEventType; /** * The `Map` object that fired the event. @@ -236,7 +244,7 @@ export class MapTouchEvent extends Event { * console.log(`There are ${features.length} features at point ${e.point}`); * }); */ - features: Array | undefined; + features: Array | undefined; /** * Prevents subsequent default processing of the event by the map. @@ -268,7 +276,7 @@ export class MapTouchEvent extends Event { /** * @private */ - constructor(type: string, map: Map, originalEvent: TouchEvent) { + constructor(type: MapTouchEventType, map: Map, originalEvent: TouchEvent) { const touches = type === "touchend" ? originalEvent.changedTouches : originalEvent.touches; const points = DOM.touchPos(map.getCanvasContainer(), touches); const lngLats = points.map((t) => map.unproject(t)); @@ -276,7 +284,7 @@ export class MapTouchEvent extends Event { return prev.add(curr.div(arr.length)); }, new Point(0, 0)); const lngLat = map.unproject(point); - super(type, {points, point, lngLats, lngLat, originalEvent}); + super(type, {points, point, lngLats, lngLat, originalEvent} as MapEvents[MapTouchEventType]); this._defaultPrevented = false; } } @@ -302,7 +310,7 @@ export class MapTouchEvent extends Event { * // } * @see [Reference: `Map` events API documentation](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-events) */ -export class MapWheelEvent extends Event { +export class MapWheelEvent extends Event { /** * The type of originating event. For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). */ @@ -345,46 +353,29 @@ export class MapWheelEvent extends Event { /** * @private */ - constructor(type: string, map: Map, originalEvent: WheelEvent) { - super(type, {originalEvent}); + constructor(map: Map, originalEvent: WheelEvent) { + super('wheel', {originalEvent} as MapEvents['wheel']); this._defaultPrevented = false; } } -/** - * `MapBoxZoomEvent` is a class used to generate - * the events 'boxzoomstart', 'boxzoomend', and 'boxzoomcancel'. - * For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). - * - * @typedef {Object} MapBoxZoomEvent - * @property {MouseEvent} originalEvent The DOM event that triggered the boxzoom event. Can be a `MouseEvent` or `KeyboardEvent`. - * @property {('boxzoomstart' | 'boxzoomend' | 'boxzoomcancel')} type The type of originating event. For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). - * @property {Map} target The `Map` instance that triggered the event. - * @example - * // Example trigger of a BoxZoomEvent of type "boxzoomstart" - * map.on('boxzoomstart', (e) => { - * console.log('event type:', e.type); - * // event type: boxzoomstart - * }); - * @example - * // Example of a BoxZoomEvent of type "boxzoomstart" - * // { - * // originalEvent: {...}, - * // type: "boxzoomstart", - * // target: {...} - * // } - * @see [Reference: `Map` events API documentation](https://docs.mapbox.com/mapbox-gl-js/api/map/#map-events) - * @see [Example: Highlight features within a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) - */ -export type MapBoxZoomEvent = { - type: 'boxzoomstart' | 'boxzoomend' | 'boxzoomcancel'; - target: Map; - originalEvent: MouseEvent; +export type MapStyleDataEvent = { + dataType: 'style'; +}; + +export type MapSourceDataEvent = { + dataType: 'source'; + isSourceLoaded?: boolean; + source?: SourceSpecification; + sourceId?: string; + sourceCacheId?: string; + sourceDataType?: 'metadata' | 'content' | 'visibility' | 'error'; + tile?: Tile; + coord?: Tile['tileID']; }; /** - * `MapDataEvent` is a class used to generate - * events related to loading data, styles, and sources. + * `MapDataEvent` is a type of events related to loading data, styles, and sources. * For a full list of available events, see [`Map` events](/mapbox-gl-js/api/map/#map-events). * * @typedef {Object} MapDataEvent @@ -421,1106 +412,1180 @@ export type MapBoxZoomEvent = { * @see [Example: Change a map's style](https://docs.mapbox.com/mapbox-gl-js/example/setstyle/) * @see [Example: Add a GeoJSON line](https://docs.mapbox.com/mapbox-gl-js/example/geojson-line/) */ -export type MapDataEvent = - | MapStyleDataEvent - | MapSourceDataEvent; - -export type MapStyleDataEvent = { - type: 'data' | 'dataloading' | 'styledata' | 'styledataloading'; - dataType: 'style'; -}; +export type MapDataEvent = MapStyleDataEvent | MapSourceDataEvent -export type MapSourceDataEvent = { - type: 'data' | 'dataloading' | 'sourcedata' | 'sourcedataloading'; - dataType: 'source'; - isSourceLoaded: boolean; - source: SourceSpecification; - sourceId: string; - sourceDataType: 'metadata' | 'content' | 'visibility' | 'error'; - tile: object; - coord: object; -}; +export type MapContextEvent = MapEventOf<'webglcontextlost' | 'webglcontextrestored'> -export type MapContextEvent = { - type: 'webglcontextlost' | 'webglcontextrestored'; - originalEvent: WebGLContextEvent; -}; +export type MapEvents = { + /** @section {Interaction} + * @event + * @instance + * @memberof Map + */ -export type MapEvent = /** @section {Interaction} - * @event - * @instance - * @memberof Map */ + /** + * Fired when a pointing device (usually a mouse) is pressed within the map. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the + * the cursor is pressed while inside a visible portion of the specifed layer. + * + * @event mousedown + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('mousedown', () => { + * console.log('A mousedown event has occurred.'); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('mousedown', 'poi-label', () => { + * console.log('A mousedown event has occurred on a visible portion of the poi-label layer.'); + * }); + * @see [Example: Highlight features within a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) + * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) + */ + 'mousedown': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is pressed within the map. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the - * the cursor is pressed while inside a visible portion of the specifed layer. - * - * @event mousedown - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('mousedown', () => { - * console.log('A mousedown event has occurred.'); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('mousedown', 'poi-label', () => { - * console.log('A mousedown event has occurred on a visible portion of the poi-label layer.'); - * }); - * @see [Example: Highlight features within a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) - * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) - */ -'mousedown' + /** + * Fired when a pointing device (usually a mouse) is released within the map. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the + * the cursor is released while inside a visible portion of the specifed layer. + * + * @event mouseup + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('mouseup', () => { + * console.log('A mouseup event has occurred.'); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('mouseup', 'poi-label', () => { + * console.log('A mouseup event has occurred on a visible portion of the poi-label layer.'); + * }); + * @see [Example: Highlight features within a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) + * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) + */ + 'mouseup': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is released within the map. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the - * the cursor is released while inside a visible portion of the specifed layer. - * - * @event mouseup - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('mouseup', () => { - * console.log('A mouseup event has occurred.'); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('mouseup', 'poi-label', () => { - * console.log('A mouseup event has occurred on a visible portion of the poi-label layer.'); - * }); - * @see [Example: Highlight features within a bounding box](https://docs.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) - * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) - */ | 'mouseup' + /** + * Fired when a pointing device (usually a mouse) is moved within the map. + * As you move the cursor across a web page containing a map, + * the event will fire each time it enters the map or any child elements. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the + * the cursor is moved inside a visible portion of the specifed layer. + * + * @event mouseover + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('mouseover', () => { + * console.log('A mouseover event has occurred.'); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('mouseover', 'poi-label', () => { + * console.log('A mouseover event has occurred on a visible portion of the poi-label layer.'); + * }); + * @see [Example: Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) + * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) + * @see [Example: Display a popup on hover](https://www.mapbox.com/mapbox-gl-js/example/popup-on-hover/) + */ + 'mouseover': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is moved within the map. - * As you move the cursor across a web page containing a map, - * the event will fire each time it enters the map or any child elements. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the - * the cursor is moved inside a visible portion of the specifed layer. - * - * @event mouseover - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('mouseover', () => { - * console.log('A mouseover event has occurred.'); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('mouseover', 'poi-label', () => { - * console.log('A mouseover event has occurred on a visible portion of the poi-label layer.'); - * }); - * @see [Example: Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) - * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) - * @see [Example: Display a popup on hover](https://www.mapbox.com/mapbox-gl-js/example/popup-on-hover/) - */ | 'mouseover' + /** + * Fired when a pointing device (usually a mouse) is moved while the cursor is inside the map. + * As you move the cursor across the map, the event will fire every time the cursor changes position within the map. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the + * the cursor is inside a visible portion of the specified layer. + * + * @event mousemove + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('mousemove', () => { + * console.log('A mousemove event has occurred.'); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('mousemove', 'poi-label', () => { + * console.log('A mousemove event has occurred on a visible portion of the poi-label layer.'); + * }); + * @see [Example: Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) + * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) + * @see [Example: Display a popup on over](https://www.mapbox.com/mapbox-gl-js/example/popup-on-hover/) + */ + 'mousemove': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is moved while the cursor is inside the map. - * As you move the cursor across the map, the event will fire every time the cursor changes position within the map. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the - * the cursor is inside a visible portion of the specified layer. - * - * @event mousemove - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('mousemove', () => { - * console.log('A mousemove event has occurred.'); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('mousemove', 'poi-label', () => { - * console.log('A mousemove event has occurred on a visible portion of the poi-label layer.'); - * }); - * @see [Example: Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) - * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) - * @see [Example: Display a popup on over](https://www.mapbox.com/mapbox-gl-js/example/popup-on-hover/) - */ | 'mousemove' + /** + * Triggered when a click event occurs and is fired before the click event. + * Primarily implemented to ensure closeOnClick for pop-ups is fired before any other listeners. + * + * @event preclick + * @memberof Map + * @instance + * @type {MapMouseEvent} + */ + 'preclick': MapMouseEvent; -/** - * Triggered when a click event occurs and is fired before the click event. - * Primarily implemented to ensure closeOnClick for pop-ups is fired before any other listeners. - * - * @event preclick - * @memberof Map - * @instance - * @type {MapMouseEvent} - */ | 'preclick' + /** + * Fired when a pointing device (usually a mouse) is pressed and released at the same point on the map. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the + * point that is pressed and released contains a visible portion of the specifed layer. + * + * @event click + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('click', (e) => { + * console.log(`A click event has occurred at ${e.lngLat}`); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('click', 'poi-label', (e) => { + * console.log(`A click event has occurred on a visible portion of the poi-label layer at ${e.lngLat}`); + * }); + * @see [Example: Measure distances](https://www.mapbox.com/mapbox-gl-js/example/measure/) + * @see [Example: Center the map on a clicked symbol](https://www.mapbox.com/mapbox-gl-js/example/center-on-symbol/) + */ + 'click': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is pressed and released at the same point on the map. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only when the - * point that is pressed and released contains a visible portion of the specifed layer. - * - * @event click - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('click', (e) => { - * console.log(`A click event has occurred at ${e.lngLat}`); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('click', 'poi-label', (e) => { - * console.log(`A click event has occurred on a visible portion of the poi-label layer at ${e.lngLat}`); - * }); - * @see [Example: Measure distances](https://www.mapbox.com/mapbox-gl-js/example/measure/) - * @see [Example: Center the map on a clicked symbol](https://www.mapbox.com/mapbox-gl-js/example/center-on-symbol/) - */ | 'click' + /** + * Fired when a pointing device (usually a mouse) is pressed and released twice at the same point on + * the map in rapid succession. + * + * **Note:** This event is compatible with the optional `layerId` parameter. + * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only + * when the point that is clicked twice contains a visible portion of the specifed layer. + * + * @event dblclick + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('dblclick', (e) => { + * console.log(`A dblclick event has occurred at ${e.lngLat}`); + * }); + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener for a specific layer + * map.on('dblclick', 'poi-label', (e) => { + * console.log(`A dblclick event has occurred on a visible portion of the poi-label layer at ${e.lngLat}`); + * }); + */ + 'dblclick': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) is pressed and released twice at the same point on - * the map in rapid succession. - * - * **Note:** This event is compatible with the optional `layerId` parameter. - * If `layerId` is included as the second argument in {@link Map#on}, the event listener will fire only - * when the point that is clicked twice contains a visible portion of the specifed layer. - * - * @event dblclick - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('dblclick', (e) => { - * console.log(`A dblclick event has occurred at ${e.lngLat}`); - * }); - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener for a specific layer - * map.on('dblclick', 'poi-label', (e) => { - * console.log(`A dblclick event has occurred on a visible portion of the poi-label layer at ${e.lngLat}`); - * }); - */ | 'dblclick' + /** + * Fired when a pointing device (usually a mouse) enters a visible portion of a specified layer from + * outside that layer or outside the map canvas. + * + * **Important:** This event can only be listened for when {@link Map#on} includes three arguments, + * where the second argument specifies the desired layer. + * + * @event mouseenter + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener + * map.on('mouseenter', 'water', () => { + * console.log('A mouseenter event occurred on a visible portion of the water layer.'); + * }); + * @see [Example: Center the map on a clicked symbol](https://docs.mapbox.com/mapbox-gl-js/example/center-on-symbol/) + * @see [Example: Display a popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) + */ + 'mouseenter': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) enters a visible portion of a specified layer from - * outside that layer or outside the map canvas. - * - * **Important:** This event can only be listened for when {@link Map#on} includes three arguments, - * where the second argument specifies the desired layer. - * - * @event mouseenter - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener - * map.on('mouseenter', 'water', () => { - * console.log('A mouseenter event occurred on a visible portion of the water layer.'); - * }); - * @see [Example: Center the map on a clicked symbol](https://docs.mapbox.com/mapbox-gl-js/example/center-on-symbol/) - * @see [Example: Display a popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) - */ | 'mouseenter' + /** + * Fired when a pointing device (usually a mouse) leaves a visible portion of a specified layer or moves + * from the specified layer to outside the map canvas. + * + * **Note:** To detect when the mouse leaves the canvas, independent of layer, use {@link Map.event:mouseout} instead. + * + * **Important:** This event can only be listened for when {@link Map#on} includes three arguments, + * where the second argument specifies the desired layer. + * + * @event mouseleave + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the pointing device leaves + * // a visible portion of the specified layer. + * map.on('mouseleave', 'water', () => { + * console.log('A mouseleave event occurred.'); + * }); + * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) + * @see [Example: Display a popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) + */ + 'mouseleave': MapMouseEvent; -/** - * Fired when a pointing device (usually a mouse) leaves a visible portion of a specified layer or moves - * from the specified layer to outside the map canvas. - * - * **Note:** To detect when the mouse leaves the canvas, independent of layer, use {@link Map.event:mouseout} instead. - * - * **Important:** This event can only be listened for when {@link Map#on} includes three arguments, - * where the second argument specifies the desired layer. - * - * @event mouseleave - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the pointing device leaves - * // a visible portion of the specified layer. - * map.on('mouseleave', 'water', () => { - * console.log('A mouseleave event occurred.'); - * }); - * @see [Example: Highlight features under the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/hover-styles/) - * @see [Example: Display a popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) - */ | 'mouseleave' + /** + * Fired when a point device (usually a mouse) leaves the map's canvas. + * + * @event mouseout + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the pointing device leaves + * // the map's canvas. + * map.on('mouseout', () => { + * console.log('A mouseout event occurred.'); + * }); + */ + 'mouseout': MapMouseEvent; -/** - * Fired when a point device (usually a mouse) leaves the map's canvas. - * - * @event mouseout - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the pointing device leaves - * // the map's canvas. - * map.on('mouseout', () => { - * console.log('A mouseout event occurred.'); - * }); - */ | 'mouseout' + /** + * Fired when the right button of the mouse is clicked or the context menu key is pressed within the map. + * + * @event contextmenu + * @memberof Map + * @instance + * @type {MapMouseEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the right mouse button is + * // pressed within the map. + * map.on('contextmenu', () => { + * console.log('A contextmenu event occurred.'); + * }); + */ + 'contextmenu': MapMouseEvent; -/** - * Fired when the right button of the mouse is clicked or the context menu key is pressed within the map. - * - * @event contextmenu - * @memberof Map - * @instance - * @type {MapMouseEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the right mouse button is - * // pressed within the map. - * map.on('contextmenu', () => { - * console.log('A contextmenu event occurred.'); - * }); - */ | 'contextmenu' + /** + * Fired when a [`wheel`](https://developer.mozilla.org/en-US/docs/Web/Events/wheel) event occurs within the map. + * + * @event wheel + * @memberof Map + * @instance + * @type {MapWheelEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when a wheel event occurs within the map. + * map.on('wheel', () => { + * console.log('A wheel event occurred.'); + * }); + */ + 'wheel': MapWheelEvent; -/** - * Fired when a [`wheel`](https://developer.mozilla.org/en-US/docs/Web/Events/wheel) event occurs within the map. - * - * @event wheel - * @memberof Map - * @instance - * @type {MapWheelEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when a wheel event occurs within the map. - * map.on('wheel', () => { - * console.log('A wheel event occurred.'); - * }); - */ | 'wheel' + /** + * Fired when a [`touchstart`](https://developer.mozilla.org/en-US/docs/Web/Events/touchstart) event occurs within the map. + * + * @event touchstart + * @memberof Map + * @instance + * @type {MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when a `touchstart` event occurs within the map. + * map.on('touchstart', () => { + * console.log('A touchstart event occurred.'); + * }); + * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) + */ + 'touchstart': MapTouchEvent; -/** - * Fired when a [`touchstart`](https://developer.mozilla.org/en-US/docs/Web/Events/touchstart) event occurs within the map. - * - * @event touchstart - * @memberof Map - * @instance - * @type {MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when a `touchstart` event occurs within the map. - * map.on('touchstart', () => { - * console.log('A touchstart event occurred.'); - * }); - * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) - */ | 'touchstart' + /** + * Fired when a [`touchend`](https://developer.mozilla.org/en-US/docs/Web/Events/touchend) event occurs within the map. + * + * @event touchend + * @memberof Map + * @instance + * @type {MapTouchEvent} + * @example + * // Initialize the map. + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires when a `touchstart` event occurs within the map. + * map.on('touchstart', () => { + * console.log('A touchstart event occurred.'); + * }); + * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) + */ + 'touchend': MapTouchEvent; -/** - * Fired when a [`touchend`](https://developer.mozilla.org/en-US/docs/Web/Events/touchend) event occurs within the map. - * - * @event touchend - * @memberof Map - * @instance - * @type {MapTouchEvent} - * @example - * // Initialize the map. - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires when a `touchstart` event occurs within the map. - * map.on('touchstart', () => { - * console.log('A touchstart event occurred.'); - * }); - * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) - */ | 'touchend' + /** + * Fired when a [`touchmove`](https://developer.mozilla.org/en-US/docs/Web/Events/touchmove) event occurs within the map. + * + * @event touchmove + * @memberof Map + * @instance + * @type {MapTouchEvent} + * @example + * // Initialize the map. + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires when a touchmove event occurs within the map. + * map.on('touchmove', () => { + * console.log('A touchmove event occurred.'); + * }); + * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) + */ + 'touchmove': MapTouchEvent; -/** - * Fired when a [`touchmove`](https://developer.mozilla.org/en-US/docs/Web/Events/touchmove) event occurs within the map. - * - * @event touchmove - * @memberof Map - * @instance - * @type {MapTouchEvent} - * @example - * // Initialize the map. - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires when a touchmove event occurs within the map. - * map.on('touchmove', () => { - * console.log('A touchmove event occurred.'); - * }); - * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) - */ | 'touchmove' + /** + * Fired when a [`touchcancel`](https://developer.mozilla.org/en-US/docs/Web/Events/touchcancel) event occurs within the map. + * + * @event touchcancel + * @memberof Map + * @instance + * @type {MapTouchEvent} + * @example + * // Initialize the map. + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires when a `touchcancel` event occurs within the map. + * map.on('touchcancel', () => { + * console.log('A touchcancel event occurred.'); + * }); + */ + 'touchcancel': MapTouchEvent; -/** - * Fired when a [`touchcancel`](https://developer.mozilla.org/en-US/docs/Web/Events/touchcancel) event occurs within the map. - * - * @event touchcancel - * @memberof Map - * @instance - * @type {MapTouchEvent} - * @example - * // Initialize the map. - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires when a `touchcancel` event occurs within the map. - * map.on('touchcancel', () => { - * console.log('A touchcancel event occurred.'); - * }); - */ | 'touchcancel' + /** @section {Movement} + * @event + * @instance + * @memberof Map */ -/** @section {Movement} - * @event - * @instance - * @memberof Map */ + /** + * Fired just before the map begins a transition from one view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. + * + * @event movestart + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map. + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires just before the map begins a transition from one view to another. + * map.on('movestart', () => { + * console.log('A movestart` event occurred.'); + * }); + */ + 'movestart': {originalEvent?: MouseEvent | WheelEvent | TouchEvent}; -/** - * Fired just before the map begins a transition from one view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. - * - * @event movestart - * @memberof Map - * @instance - * @type {DragEvent} - * @example - * // Initialize the map. - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires just before the map begins a transition from one view to another. - * map.on('movestart', () => { - * console.log('A movestart` event occurred.'); - * }); - */ | 'movestart' + /** + * Fired repeatedly during an animated transition from one view to another, as the result of either user interaction or methods such as {@link Map#flyTo}. + * + * @event move + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map. + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires repeatedly during an animated transition. + * map.on('move', () => { + * console.log('A move event occurred.'); + * }); + * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) + * @see [Example: Filter features within map view](https://docs.mapbox.com/mapbox-gl-js/example/filter-features-within-map-view/) + */ + 'move': {originalEvent?: MouseEvent | WheelEvent | TouchEvent}; -/** - * Fired repeatedly during an animated transition from one view to another, as the result of either user interaction or methods such as {@link Map#flyTo}. - * - * @event move - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map. - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires repeatedly during an animated transition. - * map.on('move', () => { - * console.log('A move event occurred.'); - * }); - * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) - * @see [Example: Filter features within map view](https://docs.mapbox.com/mapbox-gl-js/example/filter-features-within-map-view/) - */ | 'move' + /** + * Fired just after the map completes a transition from one + * view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. + * + * @event moveend + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after the map completes a transition. + * map.on('moveend', () => { + * console.log('A moveend event occurred.'); + * }); + * @see [Example: Play map locations as a slideshow](https://www.mapbox.com/mapbox-gl-js/example/playback-locations/) + * @see [Example: Filter features within map view](https://www.mapbox.com/mapbox-gl-js/example/filter-features-within-map-view/) + * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) + */ + 'moveend': {originalEvent?: MouseEvent | WheelEvent | TouchEvent}; -/** - * Fired just after the map completes a transition from one - * view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. - * - * @event moveend - * @memberof Map - * @instance - * @type {DragEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after the map completes a transition. - * map.on('moveend', () => { - * console.log('A moveend event occurred.'); - * }); - * @see [Example: Play map locations as a slideshow](https://www.mapbox.com/mapbox-gl-js/example/playback-locations/) - * @see [Example: Filter features within map view](https://www.mapbox.com/mapbox-gl-js/example/filter-features-within-map-view/) - * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) - */ | 'moveend' + /** + * Fired when a "drag to pan" interaction starts. See {@link DragPanHandler}. + * + * @event dragstart + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when a "drag to pan" interaction starts. + * map.on('dragstart', () => { + * console.log('A dragstart event occurred.'); + * }); + */ + 'dragstart': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired when a "drag to pan" interaction starts. See {@link DragPanHandler}. - * - * @event dragstart - * @memberof Map - * @instance - * @type {DragEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when a "drag to pan" interaction starts. - * map.on('dragstart', () => { - * console.log('A dragstart event occurred.'); - * }); - */ | 'dragstart' + /** + * Fired repeatedly during a "drag to pan" interaction. See {@link DragPanHandler}. + * + * @event drag + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // repeatedly during a "drag to pan" interaction. + * map.on('drag', () => { + * console.log('A drag event occurred.'); + * }); + */ + 'drag': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired repeatedly during a "drag to pan" interaction. See {@link DragPanHandler}. - * - * @event drag - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // repeatedly during a "drag to pan" interaction. - * map.on('drag', () => { - * console.log('A drag event occurred.'); - * }); - */ | 'drag' + /** + * Fired when a "drag to pan" interaction ends. See {@link DragPanHandler}. + * + * @event dragend + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when a "drag to pan" interaction ends. + * map.on('dragend', () => { + * console.log('A dragend event occurred.'); + * }); + * @see [Example: Create a draggable marker](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-marker/) + */ + 'dragend': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired when a "drag to pan" interaction ends. See {@link DragPanHandler}. - * - * @event dragend - * @memberof Map - * @instance - * @type {DragEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when a "drag to pan" interaction ends. - * map.on('dragend', () => { - * console.log('A dragend event occurred.'); - * }); - * @see [Example: Create a draggable marker](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-marker/) - */ | 'dragend' + /** + * Fired just before the map begins a transition from one zoom level to another, + * as the result of either user interaction or methods such as {@link Map#flyTo}. + * + * @event zoomstart + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just before a zoom transition starts. + * map.on('zoomstart', () => { + * console.log('A zoomstart event occurred.'); + * }); + */ + 'zoomstart': {originalEvent?: WheelEvent | TouchEvent} | void; -/** - * Fired just before the map begins a transition from one zoom level to another, - * as the result of either user interaction or methods such as {@link Map#flyTo}. - * - * @event zoomstart - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just before a zoom transition starts. - * map.on('zoomstart', () => { - * console.log('A zoomstart event occurred.'); - * }); - */ | 'zoomstart' + /** + * Fired repeatedly during an animated transition from one zoom level to another, + * as the result of either user interaction or methods such as {@link Map#flyTo}. + * + * @event zoom + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // repeatedly during a zoom transition. + * map.on('zoom', () => { + * console.log('A zoom event occurred.'); + * }); + * @see [Example: Update a choropleth layer by zoom level](https://www.mapbox.com/mapbox-gl-js/example/updating-choropleth/) + */ + 'zoom': {originalEvent?: WheelEvent | TouchEvent} | void; -/** - * Fired repeatedly during an animated transition from one zoom level to another, - * as the result of either user interaction or methods such as {@link Map#flyTo}. - * - * @event zoom - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // repeatedly during a zoom transition. - * map.on('zoom', () => { - * console.log('A zoom event occurred.'); - * }); - * @see [Example: Update a choropleth layer by zoom level](https://www.mapbox.com/mapbox-gl-js/example/updating-choropleth/) - */ | 'zoom' + /** + * Fired just after the map completes a transition from one zoom level to another + * as the result of either user interaction or methods such as {@link Map#flyTo}. + * The zoom transition will usually end before rendering is finished, so if you + * need to wait for rendering to finish, use the {@link Map.event:idle} event instead. + * + * @event zoomend + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after a zoom transition finishes. + * map.on('zoomend', () => { + * console.log('A zoomend event occurred.'); + * }); + */ + 'zoomend': {originalEvent?: WheelEvent | TouchEvent} | void; -/** - * Fired just after the map completes a transition from one zoom level to another - * as the result of either user interaction or methods such as {@link Map#flyTo}. - * The zoom transition will usually end before rendering is finished, so if you - * need to wait for rendering to finish, use the {@link Map.event:idle} event instead. - * - * @event zoomend - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after a zoom transition finishes. - * map.on('zoomend', () => { - * console.log('A zoomend event occurred.'); - * }); - */ | 'zoomend' + /** + * Fired when a "drag to rotate" interaction starts. See {@link DragRotateHandler}. + * + * @event rotatestart + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just before a "drag to rotate" interaction starts. + * map.on('rotatestart', () => { + * console.log('A rotatestart event occurred.'); + * }); + */ + 'rotatestart': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired when a "drag to rotate" interaction starts. See {@link DragRotateHandler}. - * - * @event rotatestart - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just before a "drag to rotate" interaction starts. - * map.on('rotatestart', () => { - * console.log('A rotatestart event occurred.'); - * }); - */ | 'rotatestart' + /** + * Fired repeatedly during a "drag to rotate" interaction. See {@link DragRotateHandler}. + * + * @event rotate + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // repeatedly during "drag to rotate" interaction. + * map.on('rotate', () => { + * console.log('A rotate event occurred.'); + * }); + */ + 'rotate': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired repeatedly during a "drag to rotate" interaction. See {@link DragRotateHandler}. - * - * @event rotate - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // repeatedly during "drag to rotate" interaction. - * map.on('rotate', () => { - * console.log('A rotate event occurred.'); - * }); - */ | 'rotate' + /** + * Fired when a "drag to rotate" interaction ends. See {@link DragRotateHandler}. + * + * @event rotateend + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after a "drag to rotate" interaction ends. + * map.on('rotateend', () => { + * console.log('A rotateend event occurred.'); + * }); + */ + 'rotateend': {originalEvent?: MouseEvent | TouchEvent}; -/** - * Fired when a "drag to rotate" interaction ends. See {@link DragRotateHandler}. - * - * @event rotateend - * @memberof Map - * @instance - * @type {MapMouseEvent | MapTouchEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after a "drag to rotate" interaction ends. - * map.on('rotateend', () => { - * console.log('A rotateend event occurred.'); - * }); - */ | 'rotateend' + /** + * Fired whenever the map's pitch (tilt) begins a change as + * the result of either user interaction or methods such as {@link Map#flyTo} . + * + * @event pitchstart + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just before a pitch (tilt) transition starts. + * map.on('pitchstart', () => { + * console.log('A pitchstart event occurred.'); + * }); + */ + 'pitchstart': {originalEvent?: MouseEvent | TouchEvent} | void; -/** - * Fired whenever the map's pitch (tilt) begins a change as - * the result of either user interaction or methods such as {@link Map#flyTo} . - * - * @event pitchstart - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just before a pitch (tilt) transition starts. - * map.on('pitchstart', () => { - * console.log('A pitchstart event occurred.'); - * }); - */ | 'pitchstart' + /** + * Fired repeatedly during the map's pitch (tilt) animation between + * one state and another as the result of either user interaction + * or methods such as {@link Map#flyTo}. + * + * @event pitch + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // repeatedly during a pitch (tilt) transition. + * map.on('pitch', () => { + * console.log('A pitch event occurred.'); + * }); + */ + 'pitch': {originalEvent?: MouseEvent | TouchEvent} | void; -/** - * Fired repeatedly during the map's pitch (tilt) animation between - * one state and another as the result of either user interaction - * or methods such as {@link Map#flyTo}. - * - * @event pitch - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // repeatedly during a pitch (tilt) transition. - * map.on('pitch', () => { - * console.log('A pitch event occurred.'); - * }); - */ | 'pitch' + /** + * Fired immediately after the map's pitch (tilt) finishes changing as + * the result of either user interaction or methods such as {@link Map#flyTo}. + * + * @event pitchend + * @memberof Map + * @instance + * @type {MapMouseEvent | MapTouchEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after a pitch (tilt) transition ends. + * map.on('pitchend', () => { + * console.log('A pitchend event occurred.'); + * }); + */ + 'pitchend': {originalEvent?: MouseEvent | TouchEvent} | void; -/** - * Fired immediately after the map's pitch (tilt) finishes changing as - * the result of either user interaction or methods such as {@link Map#flyTo}. - * - * @event pitchend - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after a pitch (tilt) transition ends. - * map.on('pitchend', () => { - * console.log('A pitchend event occurred.'); - * }); - */ | 'pitchend' + /** + * Fired when a "box zoom" interaction starts. See {@link BoxZoomHandler}. + * + * @event boxzoomstart + * @memberof Map + * @instance + * @type {MapBoxZoomEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just before a "box zoom" interaction starts. + * map.on('boxzoomstart', () => { + * console.log('A boxzoomstart event occurred.'); + * }); + */ + 'boxzoomstart': {originalEvent?: MouseEvent | KeyboardEvent}; -/** - * Fired when a "box zoom" interaction starts. See {@link BoxZoomHandler}. - * - * @event boxzoomstart - * @memberof Map - * @instance - * @type {MapBoxZoomEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just before a "box zoom" interaction starts. - * map.on('boxzoomstart', () => { - * console.log('A boxzoomstart event occurred.'); - * }); - */ | 'boxzoomstart' + /** + * Fired when a "box zoom" interaction ends. See {@link BoxZoomHandler}. + * + * @event boxzoomend + * @memberof Map + * @instance + * @type {MapBoxZoomEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after a "box zoom" interaction ends. + * map.on('boxzoomend', () => { + * console.log('A boxzoomend event occurred.'); + * }); + */ + 'boxzoomend': {originalEvent?: MouseEvent}; -/** - * Fired when a "box zoom" interaction ends. See {@link BoxZoomHandler}. - * - * @event boxzoomend - * @memberof Map - * @instance - * @type {Object} - * @type {MapBoxZoomEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after a "box zoom" interaction ends. - * map.on('boxzoomend', () => { - * console.log('A boxzoomend event occurred.'); - * }); - */ | 'boxzoomend' + /** + * Fired when the user cancels a "box zoom" interaction, or when the bounding box does not meet the minimum size threshold. + * See {@link BoxZoomHandler}. + * + * @event boxzoomcancel + * @memberof Map + * @instance + * @type {MapBoxZoomEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // the user cancels a "box zoom" interaction. + * map.on('boxzoomcancel', () => { + * console.log('A boxzoomcancel event occurred.'); + * }); + */ + 'boxzoomcancel': {originalEvent?: MouseEvent | KeyboardEvent}; -/** - * Fired when the user cancels a "box zoom" interaction, or when the bounding box does not meet the minimum size threshold. - * See {@link BoxZoomHandler}. - * - * @event boxzoomcancel - * @memberof Map - * @instance - * @type {MapBoxZoomEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // the user cancels a "box zoom" interaction. - * map.on('boxzoomcancel', () => { - * console.log('A boxzoomcancel event occurred.'); - * }); - */ | 'boxzoomcancel' + /** + * Fired immediately after the map has been resized. + * + * @event resize + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // immediately after the map has been resized. + * map.on('resize', () => { + * console.log('A resize event occurred.'); + * }); + */ + 'resize': object | void; -/** - * Fired immediately after the map has been resized. - * - * @event resize - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // immediately after the map has been resized. - * map.on('resize', () => { - * console.log('A resize event occurred.'); - * }); - */ | 'resize' + /** @section {Lifecycle} + * @event + * @instance + * @memberof Map */ -/** @section {Lifecycle} - * @event - * @instance - * @memberof Map */ + /** + * Fired immediately after all necessary resources have been downloaded + * and the first visually complete rendering of the map has occurred. + * + * @event load + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map has finished loading. + * map.on('load', () => { + * console.log('A load event occurred.'); + * }); + * @see [Example: Draw GeoJSON points](https://www.mapbox.com/mapbox-gl-js/example/geojson-markers/) + * @see [Example: Add live realtime data](https://www.mapbox.com/mapbox-gl-js/example/live-geojson/) + * @see [Example: Animate a point](https://www.mapbox.com/mapbox-gl-js/example/animate-point-along-line/) + */ + 'load': void; -/** - * Fired immediately after all necessary resources have been downloaded - * and the first visually complete rendering of the map has occurred. - * - * @event load - * @memberof Map - * @instance - * @type {Object} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map has finished loading. - * map.on('load', () => { - * console.log('A load event occurred.'); - * }); - * @see [Example: Draw GeoJSON points](https://www.mapbox.com/mapbox-gl-js/example/geojson-markers/) - * @see [Example: Add live realtime data](https://www.mapbox.com/mapbox-gl-js/example/live-geojson/) - * @see [Example: Animate a point](https://www.mapbox.com/mapbox-gl-js/example/animate-point-along-line/) - */ | 'load' + /** + * Fired whenever the rendering process of the map is started. + * This event can be used in pair with the "render" event, + * to measure the time spent on the CPU during the rendering + * of a single frame. + * + * @event renderstart + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map begins rendering. + * map.on('renderstart', () => { + * console.log('A renderstart event occurred.'); + * }); + */ + 'renderstart': void; -/** - * Fired whenever the rendering process of the map is started. - * This event can be used in pair with the "render" event, - * to measure the time spent on the CPU during the rendering - * of a single frame. - * - * @event renderstart - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map begins rendering. - * map.on('renderstart', () => { - * console.log('A renderstart event occurred.'); - * }); - */ | 'renderstart' + /** + * Fired whenever the map is drawn to the screen, as the result of: + * + * - a change to the map's position, zoom, pitch, or bearing + * - a change to the map's style + * - a change to a GeoJSON source + * - the loading of a vector tile, GeoJSON file, glyph, or sprite. + * + * @event render + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // whenever the map is drawn to the screen. + * map.on('render', () => { + * console.log('A render event occurred.'); + * }); + */ + 'render': void; -/** - * Fired whenever the map is drawn to the screen, as the result of: - * - * - a change to the map's position, zoom, pitch, or bearing - * - a change to the map's style - * - a change to a GeoJSON source - * - the loading of a vector tile, GeoJSON file, glyph, or sprite. - * - * @event render - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // whenever the map is drawn to the screen. - * map.on('render', () => { - * console.log('A render event occurred.'); - * }); - */ | 'render' + /** + * Fired after the last frame rendered before the map enters an + * "idle" state: + * + * - No camera transitions are in progress + * - All currently requested tiles have loaded + * - All fade/transition animations have completed. + * + * @event idle + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just before the map enters an "idle" state. + * map.on('idle', () => { + * console.log('A idle event occurred.'); + * }); + */ + 'idle': void; -/** - * Fired after the last frame rendered before the map enters an - * "idle" state: - * - * - No camera transitions are in progress - * - All currently requested tiles have loaded - * - All fade/transition animations have completed. - * - * @event idle - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just before the map enters an "idle" state. - * map.on('idle', () => { - * console.log('A idle event occurred.'); - * }); - */ | 'idle' + /** + * Fired immediately after the map has been removed with {@link Map.event:remove}. + * + * @event remove + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // just after the map is removed. + * map.on('remove', () => { + * console.log('A remove event occurred.'); + * }); + */ + 'remove': void; -/** - * Fired immediately after the map has been removed with {@link Map.event:remove}. - * - * @event remove - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // just after the map is removed. - * map.on('remove', () => { - * console.log('A remove event occurred.'); - * }); - */ | 'remove' + /** + * Fired when an error occurs. This is Mapbox GL JS's primary error reporting + * mechanism. We use an event instead of `throw` to better accommodate + * asyncronous operations. If no listeners are bound to the `error` event, the + * error will be printed to the console. + * + * @event error + * @memberof Map + * @instance + * @property {string} message Error message. + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when an error occurs. + * map.on('error', () => { + * console.log('A error event occurred.'); + * }); + */ + 'error': {error: Error}; -/** - * Fired when an error occurs. This is Mapbox GL JS's primary error reporting - * mechanism. We use an event instead of `throw` to better accommodate - * asyncronous operations. If no listeners are bound to the `error` event, the - * error will be printed to the console. - * - * @event error - * @memberof Map - * @instance - * @property {string} message Error message. - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when an error occurs. - * map.on('error', () => { - * console.log('A error event occurred.'); - * }); - */ | 'error' + /** + * Fired when the WebGL context is lost. + * + * @event webglcontextlost + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the WebGL context is lost. + * map.on('webglcontextlost', () => { + * console.log('A webglcontextlost event occurred.'); + * }); + */ + 'webglcontextlost': {originalEvent?: WebGLContextEvent} -/** - * Fired when the WebGL context is lost. - * - * @event webglcontextlost - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the WebGL context is lost. - * map.on('webglcontextlost', () => { - * console.log('A webglcontextlost event occurred.'); - * }); - */ | 'webglcontextlost' + /** + * Fired when the WebGL context is restored. + * + * @event webglcontextrestored + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the WebGL context is restored. + * map.on('webglcontextrestored', () => { + * console.log('A webglcontextrestored event occurred.'); + * }); + */ + 'webglcontextrestored': {originalEvent?: WebGLContextEvent}; -/** - * Fired when the WebGL context is restored. - * - * @event webglcontextrestored - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the WebGL context is restored. - * map.on('webglcontextrestored', () => { - * console.log('A webglcontextrestored event occurred.'); - * }); - */ | 'webglcontextrestored' + /** @section {Data loading} + * @event + * @instance + * @memberof Map */ -/** @section {Data loading} - * @event - * @instance - * @memberof Map */ + /** + * Fired when any map data loads or changes. See {@link MapDataEvent} + * for more information. + * + * @event data + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when map data loads or changes. + * map.on('data', () => { + * console.log('A data event occurred.'); + * }); + * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) + */ + 'data': MapDataEvent; -/** - * Fired when any map data loads or changes. See {@link MapDataEvent} - * for more information. - * - * @event data - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when map data loads or changes. - * map.on('data', () => { - * console.log('A data event occurred.'); - * }); - * @see [Example: Display HTML clusters with custom properties](https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/) - */ | 'data' + /** + * Fired when the map's style loads or changes. See + * {@link MapDataEvent} for more information. + * + * @event styledata + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map's style loads or changes. + * map.on('styledata', () => { + * console.log('A styledata event occurred.'); + * }); + */ + 'styledata': MapStyleDataEvent; -/** - * Fired when the map's style loads or changes. See - * {@link MapDataEvent} for more information. - * - * @event styledata - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map's style loads or changes. - * map.on('styledata', () => { - * console.log('A styledata event occurred.'); - * }); - */ | 'styledata' + /** + * Fired when one of the map's sources loads or changes, including if a tile belonging + * to a source loads or changes. See {@link MapDataEvent} for more information. + * + * @event sourcedata + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when one of the map's sources loads or changes. + * map.on('sourcedata', () => { + * console.log('A sourcedata event occurred.'); + * }); + */ + 'sourcedata': MapSourceDataEvent; -/** - * Fired when one of the map's sources loads or changes, including if a tile belonging - * to a source loads or changes. See {@link MapDataEvent} for more information. - * - * @event sourcedata - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when one of the map's sources loads or changes. - * map.on('sourcedata', () => { - * console.log('A sourcedata event occurred.'); - * }); - */ | 'sourcedata' + /** + * Fired when any map data (style, source, tile, etc) begins loading or + * changing asynchronously. All `dataloading` events are followed by a `data` + * or `error` event. See {@link MapDataEvent} for more information. + * + * @event dataloading + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when any map data begins loading + * // or changing asynchronously. + * map.on('dataloading', () => { + * console.log('A dataloading event occurred.'); + * }); + */ + 'dataloading': MapDataEvent; -/** - * Fired when any map data (style, source, tile, etc) begins loading or - * changing asynchronously. All `dataloading` events are followed by a `data` - * or `error` event. See {@link MapDataEvent} for more information. - * - * @event dataloading - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when any map data begins loading - * // or changing asynchronously. - * map.on('dataloading', () => { - * console.log('A dataloading event occurred.'); - * }); - */ | 'dataloading' + /** + * Fired when the map's style begins loading or changing asynchronously. + * All `styledataloading` events are followed by a `styledata` + * or `error` event. See {@link MapDataEvent} for more information. + * + * @event styledataloading + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map's style begins loading or + * // changing asynchronously. + * map.on('styledataloading', () => { + * console.log('A styledataloading event occurred.'); + * }); + */ + 'styledataloading': MapStyleDataEvent; -/** - * Fired when the map's style begins loading or changing asynchronously. - * All `styledataloading` events are followed by a `styledata` - * or `error` event. See {@link MapDataEvent} for more information. - * - * @event styledataloading - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map's style begins loading or - * // changing asynchronously. - * map.on('styledataloading', () => { - * console.log('A styledataloading event occurred.'); - * }); - */ | 'styledataloading' + /** + * Fired when one of the map's sources begins loading or changing asynchronously. + * All `sourcedataloading` events are followed by a `sourcedata` or `error` event. + * See {@link MapDataEvent} for more information. + * + * @event sourcedataloading + * @memberof Map + * @instance + * @type {MapDataEvent} + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map's sources begin loading or + * // changing asynchronously. + * map.on('sourcedataloading', () => { + * console.log('A sourcedataloading event occurred.'); + * }); + */ + 'sourcedataloading': MapSourceDataEvent; -/** - * Fired when one of the map's sources begins loading or changing asynchronously. - * All `sourcedataloading` events are followed by a `sourcedata` or `error` event. - * See {@link MapDataEvent} for more information. - * - * @event sourcedataloading - * @memberof Map - * @instance - * @type {MapDataEvent} - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map's sources begin loading or - * // changing asynchronously. - * map.on('sourcedataloading', () => { - * console.log('A sourcedataloading event occurred.'); - * }); - */ | 'sourcedataloading' + /** + * Fired when an icon or pattern needed by the style is missing. The missing image can + * be added with {@link Map#addImage} within this event listener callback to prevent the image from + * being skipped. This event can be used to dynamically generate icons and patterns. + * + * @event styleimagemissing + * @memberof Map + * @instance + * @property {string} id The id of the missing image. + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when an icon or pattern is missing. + * map.on('styleimagemissing', () => { + * console.log('A styleimagemissing event occurred.'); + * }); + * @see [Example: Generate and add a missing icon to the map](https://mapbox.com/mapbox-gl-js/example/add-image-missing-generated/) + */ + 'styleimagemissing': void; -/** - * Fired when an icon or pattern needed by the style is missing. The missing image can - * be added with {@link Map#addImage} within this event listener callback to prevent the image from - * being skipped. This event can be used to dynamically generate icons and patterns. - * - * @event styleimagemissing - * @memberof Map - * @instance - * @property {string} id The id of the missing image. - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when an icon or pattern is missing. - * map.on('styleimagemissing', () => { - * console.log('A styleimagemissing event occurred.'); - * }); - * @see [Example: Generate and add a missing icon to the map](https://mapbox.com/mapbox-gl-js/example/add-image-missing-generated/) - */ | 'styleimagemissing' + /** + * Fired immediately after all style resources have been downloaded + * and the first visually complete rendering of the base style has occurred. + * + * @event style.load + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the map has finished loading. + * map.on('style.load', () => { + * console.log('A style load event occurred.'); + * }); + * @see [Example: Persist layers when switching base style](https://www.mapbox.com/mapbox-gl-js/example/style-switch) + */ + 'style.load': void; -/** - * Fired immediately after all style resources have been downloaded - * and the first visually complete rendering of the base style has occurred. - * - * @event style.load - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the map has finished loading. - * map.on('style.load', () => { - * console.log('A style load event occurred.'); - * }); - * @see [Example: Persist layers when switching base style](https://www.mapbox.com/mapbox-gl-js/example/style-switch) - */ | 'style.load' + /** + * Fired immediately after imported style resources have been downloaded + * and the first visually complete rendering of the base style extended with the imported style has occurred. + * + * @event style.import.load + * @memberof Map + * @instance + * @example + * // Initialize the map + * const map = new mapboxgl.Map({}); + * // Set an event listener that fires + * // when the style import has finished loading. + * map.on('style.import.load', () => { + * console.log('A style import load event occurred.'); + * }); + */ + 'style.import.load': void; -/** - * Fired immediately after imported style resources have been downloaded - * and the first visually complete rendering of the base style extended with the imported style has occurred. - * - * @event style.import.load - * @memberof Map - * @instance - * @example - * // Initialize the map - * const map = new mapboxgl.Map({}); - * // Set an event listener that fires - * // when the style import has finished loading. - * map.on('style.import.load', () => { - * console.log('A style import load event occurred.'); - * }); - */ | 'style.import.load' + /** + * Fired after speed index calculation is completed if `speedIndexTiming` option has been set to `true`. + * + * @private + * @event speedindexcompleted + * @memberof Map + * @instance + * @example + * // Initialize the map + * var map = new mapboxgl.Map({}); + * map.speedIndexTiming = true; + * // Set an event listener that fires + * // after speed index calculation is completed. + * map.on('speedindexcompleted', function() { + * console.log(`speed index is ${map.speedIndexNumber}`); + * }); + */ + 'speedindexcompleted': {speedIndex: number}; -/** - * Fired after speed index calculation is completed if `speedIndexTiming` option has been set to `true`. - * - * @private - * @event speedindexcompleted - * @memberof Map - * @instance - * @example - * // Initialize the map - * var map = new mapboxgl.Map({}); - * map.speedIndexTiming = true; - * // Set an event listener that fires - * // after speed index calculation is completed. - * map.on('speedindexcompleted', function() { - * console.log(`speed index is ${map.speedIndexNumber}`); - * }); - */ | 'speedindexcompleted' + /** + * Fired after RTL text plugin state changes. + * + * @event pluginStateChange + * @instance + * @private + */ + 'pluginStateChange': {pluginStatus: string, pluginURL: string}; -/** - * Fired after RTL text plugin state changes. - * - * @event pluginStateChange - * @instance - * @private - */ | 'pluginStateChange' + /** + * Fired in worker.js after sprite loaded. + * + * @event pluginStateChange + * @instance + * @private + */ + 'isSpriteLoaded': void; + + /** + * Fired in style.js after layer order changed. + * + * @event neworder + * @instance + * @private + */ + 'neworder': void; + + /** + * @event colorthemeset + * @instance + * @private + */ + 'colorthemeset': void; + + /** + * @private + */ + 'gpu-timing-frame': {cpuTime: number, gpuTime: number}; + + /** + * @private + */ + 'gpu-timing-layer': {layerTimes: {[layerId: string]: number}}; + + /** + * @private + */ + 'gpu-timing-deferred-render': {gpuTime: number}; +} /** - * Fired in worker.js after sprite loaded. - * - * @event pluginStateChange - * @instance - * @private - */ | 'isSpriteLoaded' + * Utility type that represents all possible Map event types. + */ +export type MapEventType = keyof MapEvents & string; /** - * Fired in style.js after layer order changed. + * Utility type that maps event types to their corresponding event object type. + * + * @example + * type LoadEvent = MapEvent<'load'>; // equivalent to { type: 'load', target: Map } * - * @event pluginStateChange - * @instance - * @private - */ | 'neworder'; + * type MoveEvent = MapEvent<'move'>; // equivalent to { type: 'move', target: Map, originalEvent?: MouseEvent | WheelEvent | TouchEvent } + */ +export type MapEventOf = EventOf; + +export type MapEvent = MapEventOf; diff --git a/src/ui/handler/box_zoom.ts b/src/ui/handler/box_zoom.ts index ac1a5d107e0..317797333ad 100644 --- a/src/ui/handler/box_zoom.ts +++ b/src/ui/handler/box_zoom.ts @@ -173,7 +173,7 @@ class BoxZoomHandler implements Handler { delete this._lastPos; } - _fireEvent(type: string, e: any): Map { + _fireEvent(type: 'boxzoomstart' | 'boxzoomcancel', e: MouseEvent | KeyboardEvent): Map { return this._map.fire(new Event(type, {originalEvent: e})); } } diff --git a/src/ui/handler/map_event.ts b/src/ui/handler/map_event.ts index 9d9cf6fa6a0..8acbd3decc2 100644 --- a/src/ui/handler/map_event.ts +++ b/src/ui/handler/map_event.ts @@ -26,7 +26,7 @@ export class MapEventHandler implements Handler { wheel(e: WheelEvent): HandlerResult | null | undefined { // If mapEvent.preventDefault() is called by the user, prevent handlers such as: // - ScrollZoom - return this._firePreventable(new MapWheelEvent(e.type, this._map, e)); + return this._firePreventable(new MapWheelEvent(this._map, e)); } mousedown(e: MouseEvent, point: Point): HandlerResult | null | undefined { @@ -36,37 +36,37 @@ export class MapEventHandler implements Handler { // - MouseRotate // - MousePitch // - DblclickHandler - return this._firePreventable(new MapMouseEvent(e.type, this._map, e)); + return this._firePreventable(new MapMouseEvent(e.type as 'mousedown', this._map, e)); } mouseup(e: MouseEvent) { - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'mouseup', this._map, e)); } preclick(e: MouseEvent) { const synth: Mutable = extend({}, e); synth.type = 'preclick'; - this._map.fire(new MapMouseEvent(synth.type, this._map, synth)); + this._map.fire(new MapMouseEvent(synth.type as 'preclick', this._map, synth)); } click(e: MouseEvent, point: Point) { if (this._mousedownPos && this._mousedownPos.dist(point) >= this._clickTolerance) return; this.preclick(e); - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'click', this._map, e)); } dblclick(e: MouseEvent): HandlerResult | null | undefined { // If mapEvent.preventDefault() is called by the user, prevent handlers such as: // - DblClickZoom - return this._firePreventable(new MapMouseEvent(e.type, this._map, e)); + return this._firePreventable(new MapMouseEvent(e.type as 'dblclick', this._map, e)); } mouseover(e: MouseEvent) { - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'mouseover', this._map, e)); } mouseout(e: MouseEvent) { - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'mouseout', this._map, e)); } touchstart(e: TouchEvent): HandlerResult | null | undefined { @@ -77,19 +77,19 @@ export class MapEventHandler implements Handler { // - TouchPitch // - TapZoom // - SwipeZoom - return this._firePreventable(new MapTouchEvent(e.type, this._map, e)); + return this._firePreventable(new MapTouchEvent(e.type as 'touchstart', this._map, e)); } touchmove(e: TouchEvent) { - this._map.fire(new MapTouchEvent(e.type, this._map, e)); + this._map.fire(new MapTouchEvent(e.type as 'touchstart', this._map, e)); } touchend(e: TouchEvent) { - this._map.fire(new MapTouchEvent(e.type, this._map, e)); + this._map.fire(new MapTouchEvent(e.type as 'touchend', this._map, e)); } touchcancel(e: TouchEvent) { - this._map.fire(new MapTouchEvent(e.type, this._map, e)); + this._map.fire(new MapTouchEvent(e.type as 'touchend', this._map, e)); } _firePreventable(mapEvent: MapMouseEvent | MapTouchEvent | MapWheelEvent): HandlerResult | null | undefined { @@ -127,7 +127,7 @@ export class BlockableMapEventHandler { mousemove(e: MouseEvent) { // mousemove map events should not be fired when interaction handlers (pan, rotate, etc) are active - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'mousemove', this._map, e)); } mousedown() { @@ -147,7 +147,7 @@ export class BlockableMapEventHandler { this._contextMenuEvent = e; } else { // Windows: contextmenu fired on mouseup, so fire event now - this._map.fire(new MapMouseEvent(e.type, this._map, e)); + this._map.fire(new MapMouseEvent(e.type as 'contextmenu', this._map, e)); } // prevent browser context menu when necessary diff --git a/src/ui/handler_manager.ts b/src/ui/handler_manager.ts index 68131659a0c..4b25f6458a1 100644 --- a/src/ui/handler_manager.ts +++ b/src/ui/handler_manager.ts @@ -22,15 +22,20 @@ import {vec3} from 'gl-matrix'; import MercatorCoordinate, {latFromMercatorY, mercatorScale} from '../geo/mercator_coordinate'; import type {Map} from './map'; +import type {MapEvents} from './events'; import type {Handler, HandlerResult} from './handler'; export type InputEvent = MouseEvent | TouchEvent | KeyboardEvent | WheelEvent; +type EventsInProgress = { + [T in keyof MapEvents]?: MapEvents[T]; +}; + const isMoving = (p: { [key: string]: any; }) => p.zoom || p.drag || p.pitch || p.rotate; -class RenderFrameEvent extends Event { +class RenderFrameEvent extends Event<{renderFrame: {timeStamp: number}}, 'renderFrame'> { type: 'renderFrame'; timeStamp: number; } @@ -95,7 +100,7 @@ class HandlerManager { handler: Handler; allowed: any; }>; - _eventsInProgress: any; + _eventsInProgress: EventsInProgress; _frameId: number | null | undefined; _inertia: HandlerInertia; _bearingSnap: number; @@ -577,14 +582,11 @@ class HandlerManager { this._fireEvents(combinedEventsInProgress, deactivatedHandlers, true); } - _fireEvents(newEventsInProgress: { - [key: string]: any; - }, deactivatedHandlers: any, allowEndAnimation: boolean) { - + _fireEvents(newEventsInProgress: EventsInProgress, deactivatedHandlers: any, allowEndAnimation: boolean) { const wasMoving = isMoving(this._eventsInProgress); const nowMoving = isMoving(newEventsInProgress); - const startEvents: Record = {}; + const startEvents: EventsInProgress = {}; for (const eventName in newEventsInProgress) { const {originalEvent} = newEventsInProgress[eventName]; @@ -600,7 +602,7 @@ class HandlerManager { } for (const name in startEvents) { - this._fireEvent(name, startEvents[name]); + this._fireEvent(name as keyof MapEvents, startEvents[name]); } if (nowMoving) { @@ -609,10 +611,10 @@ class HandlerManager { for (const eventName in newEventsInProgress) { const {originalEvent} = newEventsInProgress[eventName]; - this._fireEvent(eventName, originalEvent); + this._fireEvent(eventName as keyof MapEvents, originalEvent); } - const endEvents: Record = {}; + const endEvents: EventsInProgress = {}; let originalEndEvent; for (const eventName in this._eventsInProgress) { @@ -625,7 +627,7 @@ class HandlerManager { } for (const name in endEvents) { - this._fireEvent(name, endEvents[name]); + this._fireEvent(name as keyof MapEvents, endEvents[name]); } const stillMoving = isMoving(this._eventsInProgress); @@ -651,8 +653,9 @@ class HandlerManager { } - _fireEvent(type: string, e: any) { - this._map.fire(new Event(type, e ? {originalEvent: e} : {})); + _fireEvent(type: keyof MapEvents, event?: {originalEvent: unknown}) { + const eventData = (event ? {originalEvent: event} : {}); + this._map.fire(new Event(type, eventData as MapEvents[keyof MapEvents])); } _requestFrame(): number { diff --git a/src/ui/map.ts b/src/ui/map.ts index 3b20b62aa47..76c23cc63c3 100644 --- a/src/ui/map.ts +++ b/src/ui/map.ts @@ -44,15 +44,15 @@ import {Debug} from '../util/debug'; import config from '../util/config'; import {isFQID} from '../util/fqid'; -import type {Listener} from '../util/evented'; +import type {MapEventType, MapEventOf} from './events'; import type {PointLike} from '../types/point-like'; +import type {FeatureState} from '../style-spec/expression/index'; +import type {Evented} from '../util/evented'; import type {RequestTransformFunction} from '../util/mapbox'; import type {LngLatLike, LngLatBoundsLike} from '../geo/lng_lat'; -import type {StyleOptions, StyleSetterOptions} from '../style/style'; -import type {MapEvent, MapDataEvent} from './events'; import type {CustomLayerInterface} from '../style/style_layer/custom_style_layer'; import type {StyleImageInterface, StyleImageMetadata} from '../style/style_image'; - +import type {StyleOptions, StyleSetterOptions, AnyLayer, FeatureSelector} from '../style/style'; import type ScrollZoomHandler from './handler/scroll_zoom'; import type BoxZoomHandler from './handler/box_zoom'; import type {TouchPitchHandler} from './handler/touch_zoom_rotate'; @@ -89,7 +89,8 @@ import type StyleLayer from '../style/style_layer'; import type {Source, SourceClass} from '../source/source'; import type {EasingOptions} from './camera'; import type {ContextOptions} from '../gl/context'; -import type {QueryFeature, QueryRenderedFeaturesParams} from '../source/query_features'; +import type {QueryRenderedFeaturesParams} from '../source/query_features'; +import type {GeoJSONFeature} from '../util/vectortile_to_geojson'; import {TrackedParameters} from '../tracked-parameters/tracked_parameters'; import {TrackedParametersMock} from '../tracked-parameters/tracked_parameters_base'; @@ -102,7 +103,7 @@ export interface IControl { readonly onAdd: (map: Map) => HTMLElement; readonly onRemove: (map: Map) => void; readonly getDefaultPosition?: () => ControlPosition; - readonly _setLanguage?: (language: string | null | undefined | string[]) => void; + readonly _setLanguage?: (language?: string | string[]) => void; } /* eslint-enable no-use-before-define */ @@ -117,18 +118,14 @@ export type SetStyleOptions = { localIdeographFontFamily: StyleOptions['localIdeographFontFamily']; }; +type Listener = (event: MapEventOf) => void; + type DelegatedListener = { layers: Set; - listener: Listener; - delegates: {[K in MapEvent]?: Listener}; + listener: Listener; + delegates: {[T in MapEventType]?: Listener}; }; -export type FeatureSelector = { - id: string | number; - source: string; - sourceLayer?: string; -} - export const AVERAGE_ELEVATION_SAMPLING_INTERVAL = 500; // ms export const AVERAGE_ELEVATION_EASE_TIME = 300; // ms export const AVERAGE_ELEVATION_EASE_THRESHOLD = 1; // meters @@ -765,11 +762,13 @@ export class Map extends Camera { } this._postStyleLoadEvent(); }); - this.on('data', (event: MapDataEvent) => { + + this.on('data', (event) => { this._update(event.dataType === 'style'); this.fire(new Event(`${event.dataType}data`, event)); }); - this.on('dataloading', (event: MapDataEvent) => { + + this.on('dataloading', (event) => { this.fire(new Event(`${event.dataType}dataloading`, event)); }); } @@ -1513,7 +1512,7 @@ export class Map extends Camera { return (this.handlers && this.handlers._isDragging()) || false; } - _createDelegatedListener(type: MapEvent, layers: Array, listener: Listener): DelegatedListener { + _createDelegatedListener(type: T, layers: Array, listener: Listener): DelegatedListener { if (type === 'mouseenter' || type === 'mouseover') { let mousein = false; const mousemove = (e: MapMouseEvent) => { @@ -1563,7 +1562,7 @@ export class Map extends Camera { } }; - return {layers: new Set(layers), listener, delegates: {[(type as string)]: delegate}}; + return {layers: new Set(layers), listener, delegates: {[type]: delegate}}; } } @@ -1682,12 +1681,12 @@ export class Map extends Camera { * @see [Example: Create a hover effect](https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/) * @see [Example: Display popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) */ - on(type: MapEvent, listener: Listener): this; - on(type: MapEvent, layerIds: string | string[], listener: Listener): this; + on(type: T, listener: Listener): this; + on(type: T, layerIds: string | string[], listener: Listener): this; - on(type: MapEvent, layerIds: string | string[] | Listener, listener?: Listener): this { + on(type: T, layerIds: string | string[] | Listener, listener?: Listener): this { if (typeof layerIds === 'function' || listener === undefined) { - return super.on(type, layerIds as Listener); + return super.on(type, layerIds as Listener); } if (!Array.isArray(layerIds)) { @@ -1709,7 +1708,7 @@ export class Map extends Camera { this._delegatedListeners[type].push(delegatedListener); for (const event in delegatedListener.delegates) { - this.on(event as MapEvent, delegatedListener.delegates[event]); + this.on(event as T, delegatedListener.delegates[event]); } return this; @@ -1754,14 +1753,14 @@ export class Map extends Camera { * @see [Example: Animate the camera around a point with 3D terrain](https://docs.mapbox.com/mapbox-gl-js/example/free-camera-point/) * @see [Example: Play map locations as a slideshow](https://docs.mapbox.com/mapbox-gl-js/example/playback-locations/) */ - once(type: MapEvent): Promise; - once(type: MapEvent, listener: Listener): this; - once(type: MapEvent, layerIds: string | string[]): Promise; - once(type: MapEvent, layerIds: string | string[], listener: Listener): this; + once(type: T): Promise>; + once(type: T, listener: Listener): this; + once(type: T, layerIds: string | string[]): Promise>; + once(type: T, layerIds: string | string[], listener: Listener): this; - once(type: MapEvent, layerIds?: string | string[] | Listener, listener?: Listener): this | Promise { + once(type: T, layerIds?: string | string[] | Listener, listener?: Listener): this | Promise> { if (typeof layerIds === 'function' || listener === undefined) { - return super.once(type, layerIds as Listener); + return super.once(type, layerIds as Listener); } if (!Array.isArray(layerIds)) { @@ -1779,7 +1778,7 @@ export class Map extends Camera { const delegatedListener = this._createDelegatedListener(type, layerIds, listener); for (const event in delegatedListener.delegates) { - this.once(event as MapEvent, delegatedListener.delegates[event]); + this.once(event as T, delegatedListener.delegates[event]); } return this; @@ -1810,12 +1809,12 @@ export class Map extends Camera { * }); * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) */ - off(type: MapEvent, listener: Listener): this; - off(type: MapEvent, layerIds: string | string[], listener: Listener): this; + off(type: T, listener: Listener): this; + off(type: T, layerIds: string | string[], listener: Listener): this; - off(type: MapEvent, layerIds: string | string[] | Listener, listener?: Listener): this { + off(type: T, layerIds: string | string[] | Listener, listener?: Listener): this { if (typeof layerIds === 'function' || listener === undefined) { - return super.off(type, layerIds as Listener); + return super.off(type, layerIds as Listener); } const uniqLayerIds = new Set(Array.isArray(layerIds) ? layerIds : [layerIds]); @@ -1843,7 +1842,7 @@ export class Map extends Camera { const delegatedListener = listeners[i]; if (delegatedListener.listener === listener && areLayerIdsEqual(delegatedListener.layers, uniqLayerIds)) { for (const event in delegatedListener.delegates) { - this.off(event as MapEvent, delegatedListener.delegates[event]); + this.off(event as T, delegatedListener.delegates[event]); } listeners.splice(i, 1); return this; @@ -1940,7 +1939,7 @@ export class Map extends Camera { * @see [Example: Highlight features within a bounding box](https://www.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) * @see [Example: Filter features within map view](https://www.mapbox.com/mapbox-gl-js/example/filter-features-within-map-view/) */ - queryRenderedFeatures(geometry?: PointLike | [PointLike, PointLike], options?: Pick): Array { + queryRenderedFeatures(geometry?: PointLike | [PointLike, PointLike], options?: Pick): Array { // The first parameter can be omitted entirely, making this effectively an overloaded method // with two signatures: // @@ -2016,7 +2015,7 @@ export class Map extends Camera { filter?: FilterSpecification | ExpressionSpecification; validate?: boolean; }, - ): Array { + ): Array { if (!this._isValidId(sourceId)) { return []; } @@ -2332,12 +2331,12 @@ export class Map extends Camera { * @see [Example: Animate a point](https://docs.mapbox.com/mapbox-gl-js/example/animate-point-along-line/) * @see [Example: Add live realtime data](https://docs.mapbox.com/mapbox-gl-js/example/live-geojson/) */ - getSource(id: string): T | null | undefined { + getSource(id: string): T | undefined { if (!this._isValidId(id)) { return null; } - return this.style.getOwnSource(id) as T; + return this.style.getOwnSource(id); } /** @section {Images} */ @@ -2387,19 +2386,20 @@ export class Map extends Camera { * @see Example: Use `HTMLImageElement`: [Add an icon to the map](https://www.mapbox.com/mapbox-gl-js/example/add-image/) * @see Example: Use `ImageData`: [Add a generated icon to the map](https://www.mapbox.com/mapbox-gl-js/example/add-image-generated/) */ - addImage(id: string, - image: HTMLImageElement | ImageBitmap | ImageData | { - width: number; - height: number; - data: Uint8Array | Uint8ClampedArray; - } | StyleImageInterface, - { - pixelRatio = 1, - sdf = false, - stretchX, - stretchY, - content, - }: Partial = {}) { + addImage( + id: string, + image: HTMLImageElement | ImageBitmap | ImageData | StyleImageInterface | { + width: number; + height: number; + data: Uint8Array | Uint8ClampedArray; + }, + { + pixelRatio = 1, + sdf = false, + stretchX, + stretchY, + content, + }: Partial = {}) { this._lazyInitEmptyStyle(); const version = 0; @@ -2804,7 +2804,7 @@ export class Map extends Camera { * @see [Example: Add a vector tile source](https://docs.mapbox.com/mapbox-gl-js/example/vector-source/) (line layer) * @see [Example: Add a WMS layer](https://docs.mapbox.com/mapbox-gl-js/example/wms/) (raster layer) */ - addLayer(layer: LayerSpecification | CustomLayerInterface, beforeId?: string): this { + addLayer(layer: AnyLayer, beforeId?: string): this { if (!this._isValidId(layer.id)) { return this; } @@ -3039,12 +3039,13 @@ export class Map extends Camera { * @see [Example: Filter symbols by toggling a list](https://www.mapbox.com/mapbox-gl-js/example/filter-markers/) * @see [Example: Filter symbols by text input](https://www.mapbox.com/mapbox-gl-js/example/filter-markers-by-input/) */ - getLayer(id: string): StyleLayer | null | undefined { + getLayer(id: string): T | undefined { if (!this._isValidId(id)) { return null; } - return this.style.getOwnLayer(id); + const layer = this.style.getOwnLayer(id); + return layer ? layer.serialize() as T : undefined; } /** @@ -3604,7 +3605,7 @@ export class Map extends Camera { * @see [Example: Create a hover effect](https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/) * @see [Tutorial: Create interactive hover effects with Mapbox GL JS](https://docs.mapbox.com/help/tutorials/create-interactive-hover-effects-with-mapbox-gl-js/) */ - setFeatureState(feature: FeatureSelector, state: any): this { + setFeatureState(feature: FeatureSelector | GeoJSONFeature, state: FeatureState): this { if (!this._isValidId(feature.source)) { return this; } @@ -3659,7 +3660,7 @@ export class Map extends Camera { * }, 'hover'); * }); */ - removeFeatureState(feature: FeatureSelector, key?: string): this { + removeFeatureState(feature: Omit & {id?: FeatureSelector['id'] } | GeoJSONFeature, key?: string): this { if (!this._isValidId(feature.source)) { return this; } @@ -3696,7 +3697,7 @@ export class Map extends Camera { * } * }); */ - getFeatureState(feature: FeatureSelector): any { + getFeatureState(feature: FeatureSelector | GeoJSONFeature): FeatureState | null | undefined { if (!this._isValidId(feature.source)) { return null; } @@ -3823,7 +3824,7 @@ export class Map extends Camera { storeAuthState(gl, true); this.painter = new Painter(gl, this._contextCreateOptions, this.transform, this._tp); - this.on('data', (event: MapDataEvent) => { + this.on('data', (event) => { if (event.dataType === 'source') { this.painter.setTileLoadedFlag(true); } @@ -4463,7 +4464,7 @@ export class Map extends Camera { this._update(); } - _onWindowResize(event: Event) { + _onWindowResize(event: UIEvent) { if (this._trackResize) { this.resize({originalEvent: event})._update(); } diff --git a/src/ui/marker.ts b/src/ui/marker.ts index 6ac22f6c040..7d97dc11695 100644 --- a/src/ui/marker.ts +++ b/src/ui/marker.ts @@ -14,10 +14,10 @@ import type {Anchor} from './anchor'; import type {Map} from './map'; import type Popup from './popup'; import type {LngLatLike} from '../geo/lng_lat'; -import type {MapMouseEvent, MapTouchEvent} from './events'; +import type {MapEventOf, MapMouseEvent, MapTouchEvent} from './events'; import type {PointLike} from '../types/point-like'; -type Options = { +export type MarkerOptions = { element?: HTMLElement; offset?: PointLike; anchor?: Anchor; @@ -32,6 +32,12 @@ type Options = { className?: string; }; +type MarkerEvents = { + 'dragstart': void; + 'drag': void; + 'dragend': void; +}; + /** * Creates a marker component. * @@ -64,7 +70,7 @@ type Options = { * @see [Example: Add custom icons with Markers](https://www.mapbox.com/mapbox-gl-js/example/custom-marker-icons/) * @see [Example: Create a draggable Marker](https://www.mapbox.com/mapbox-gl-js/example/drag-a-marker/) */ -export default class Marker extends Evented { +export default class Marker extends Evented { _map: Map | null | undefined; _anchor: Anchor; _offset: Point; @@ -90,7 +96,7 @@ export default class Marker extends Evented { _updateMoving: () => void; _occludedOpacity: number; - constructor(options?: Options, legacyOptions?: Options) { + constructor(options?: MarkerOptions, legacyOptions?: MarkerOptions) { super(); // For backward compatibility -- the constructor used to accept the element as a // required first argument, before it was made optional. @@ -557,7 +563,7 @@ export default class Marker extends Evented { return rotation ? `rotateZ(${rotation}deg)` : ''; } - _update(delaySnap?: boolean) { + _update(delaySnap?: MapEventOf<'moveend'> | boolean) { cancelAnimationFrame(this._updateFrameId); const map = this._map; if (!map) return; diff --git a/src/ui/popup.ts b/src/ui/popup.ts index b4eb7cf264d..2415dd69a18 100644 --- a/src/ui/popup.ts +++ b/src/ui/popup.ts @@ -1,6 +1,6 @@ import {extend, bindAll} from '../util/util'; import {Event, Evented} from '../util/evented'; -import {MapMouseEvent} from '../ui/events'; +import {MapMouseEvent, type MapEventOf} from '../ui/events'; import * as DOM from '../util/dom'; import LngLat from '../geo/lng_lat'; import Point from '@mapbox/point-geometry'; @@ -35,6 +35,11 @@ export type PopupOptions = { maxWidth?: string; }; +type PopupEvents = { + 'open': void; + 'close': void; +} + const focusQuerySelector = [ "a[href]", "[tabindex]:not([tabindex='-1'])", @@ -99,7 +104,7 @@ const focusQuerySelector = [ * @see [Example: Display a popup on click](https://www.mapbox.com/mapbox-gl-js/example/popup-on-click/) * @see [Example: Attach a popup to a marker instance](https://www.mapbox.com/mapbox-gl-js/example/set-popup/) */ -export default class Popup extends Evented { +export default class Popup extends Evented { _map: Map | null | undefined; options: PopupOptions; _content: HTMLElement | null | undefined; @@ -594,7 +599,7 @@ export default class Popup extends Evented { container.className = classes.join(' '); } - _update(cursor?: Point) { + _update(cursor?: Point | MapEventOf<'move'>) { const hasPosition = this._lngLat || this._trackPointer; const map = this._map; const content = this._content; @@ -618,7 +623,7 @@ export default class Popup extends Evented { } if (!this._trackPointer || cursor) { - const pos = this._pos = this._trackPointer && cursor ? cursor : map.project(this._lngLat); + const pos = this._pos = this._trackPointer && cursor instanceof Point ? cursor : map.project(this._lngLat); const offsetBottom = normalizeOffset(this.options.offset); const anchor = this._anchor = this._getAnchor(offsetBottom.y); diff --git a/src/util/evented.ts b/src/util/evented.ts index cffcd86377e..47525cb4a78 100644 --- a/src/util/evented.ts +++ b/src/util/evented.ts @@ -1,34 +1,13 @@ import {extend} from './util'; -import type {MapEvent} from '../ui/events'; -export type Listener = (arg1: any) => void; -type Listeners = { - [_: string]: Array; -}; - -function _addEventListener(type: string, listener: Listener, listenerList: Listeners) { - const listenerExists = listenerList[type] && listenerList[type].indexOf(listener) !== -1; - if (!listenerExists) { - listenerList[type] = listenerList[type] || []; - listenerList[type].push(listener); - } -} - -function _removeEventListener(type: string, listener: Listener, listenerList: Listeners) { - if (listenerList && listenerList[type]) { - const index = listenerList[type].indexOf(listener); - if (index !== -1) { - listenerList[type].splice(index, 1); - } - } -} +export type EventData = object; -export class Event { +export class Event { target: unknown; - readonly type: string; + readonly type: T; - constructor(type: string, data: object = {}) { - extend(this, data); + constructor(type: T, ...eventData: R[T] extends void ? [] : [R[T]]) { + extend(this, eventData[0] || {}); this.type = type; } } @@ -37,14 +16,52 @@ interface ErrorLike { message: string; } -export class ErrorEvent extends Event { +export class ErrorEvent extends Event { error: ErrorLike; - constructor(error: ErrorLike, data: any = {}) { + constructor(error: ErrorLike, data: EventData = {} as EventData) { super('error', extend({error}, data)); } } +/** + * Utility type that represents a registry of events. Maps event type to an event data object. + */ +type EventRegistry = Record; + +/** + * Utility type that maps event type to an event object. + */ +export type EventOf = + R[T] extends Event ? + R[T] : + keyof R[T] extends never ? + {type: T, target: Target} : + {type: T, target: Target} & R[T]; + +type Listener = (event: EventOf) => void; + +type Listeners = { + [T in keyof R]?: Array>; +}; + +function _addEventListener(type: T, listener: Listener>, listenerList: Listeners) { + const listenerExists = listenerList[type] && listenerList[type].indexOf(listener) !== -1; + if (!listenerExists) { + listenerList[type] = listenerList[type] || []; + listenerList[type].push(listener); + } +} + +function _removeEventListener(type: T, listener: Listener>, listenerList: Listeners) { + if (listenerList && listenerList[type]) { + const index = listenerList[type].indexOf(listener); + if (index !== -1) { + listenerList[type].splice(index, 1); + } + } +} + /** * `Evented` mixes methods into other classes for event capabilities. * @@ -54,11 +71,11 @@ export class ErrorEvent extends Event { * * @mixin Evented */ -export class Evented { - _listeners: Listeners; - _oneTimeListeners: Listeners; +export class Evented { + _listeners: Listeners; + _oneTimeListeners: Listeners; _eventedParent?: Evented; - _eventedParentData?: unknown | (() => unknown); + _eventedParentData?: EventData | (() => EventData); /** * Adds a listener to a specified event type. @@ -69,7 +86,7 @@ export class Evented { * extended with `target` and `type` properties. * @returns {Object} Returns itself to allow for method chaining. */ - on(type: MapEvent, listener: Listener): this { + on(type: T, listener: Listener): this { this._listeners = this._listeners || {}; _addEventListener(type, listener, this._listeners); @@ -83,7 +100,7 @@ export class Evented { * @param {Function} listener The listener function to remove. * @returns {Object} Returns itself to allow for method chaining. */ - off(type: MapEvent, listener: Listener): this { + off(type: T, listener: Listener): this { _removeEventListener(type, listener, this._listeners); _removeEventListener(type, listener, this._oneTimeListeners); @@ -100,12 +117,11 @@ export class Evented { * If not provided, returns a Promise that will be resolved when the event is fired once. * @returns {Object} Returns `this` | Promise. */ - once(type: MapEvent): Promise; - once(type: MapEvent, listener: Listener): this; - - once(type: MapEvent, listener?: Listener): this | Promise { + once(type: T): Promise>; + once(type: T, listener: Listener): this; + once(type: T, listener?: Listener): this | Promise> { if (!listener) { - return new Promise((resolve) => this.once(type, resolve)); + return new Promise((resolve) => this.once(type, resolve as Listener)); } this._oneTimeListeners = this._oneTimeListeners || {}; @@ -114,14 +130,14 @@ export class Evented { return this; } - fire(event: Event | string, properties?: object): this { + fire(event: Event): this; + fire(event: ErrorEvent): this; + fire(type: T, eventData?: R[T]): this; + fire(e: Event | T, eventData?: R[T]): this { // Compatibility with (type: string, properties: Object) signature from previous versions. // See https://github.com/mapbox/mapbox-gl-js/issues/6522, // https://github.com/mapbox/mapbox-gl-draw/issues/766 - if (typeof event === 'string') { - event = new Event(event, properties || {}); - } - + const event = typeof e === 'string' ? new Event(e, eventData as R[T] extends void ? [] : [R[T]]) : e; const type = event.type; if (this.listens(type)) { @@ -147,7 +163,7 @@ export class Evented { this._eventedParentData; extend(event, eventedParentData); - parent.fire(event); + parent.fire(event as Event); } // To ensure that no error events are dropped, print them to the @@ -166,7 +182,7 @@ export class Evented { * @returns {boolean} Returns `true` if there is at least one registered listener for specified event type, `false` otherwise. * @private */ - listens(type: string): boolean { + listens(type: T): boolean { return !!( (this._listeners && this._listeners[type] && this._listeners[type].length > 0) || (this._oneTimeListeners && this._oneTimeListeners[type] && this._oneTimeListeners[type].length > 0) || @@ -180,7 +196,7 @@ export class Evented { * @returns {Object} `this` * @private */ - setEventedParent(parent?: Evented, data?: unknown | (() => unknown)): this { + setEventedParent(parent?: Evented, data?: EventData | (() => EventData)): this { this._eventedParent = parent; this._eventedParentData = data; diff --git a/src/util/primitives.ts b/src/util/primitives.ts index e77ea81fa44..252a7444a60 100644 --- a/src/util/primitives.ts +++ b/src/util/primitives.ts @@ -347,15 +347,14 @@ class Aabb { center: vec3; static fromPoints(points: Array): Aabb { - const min = [Infinity, Infinity, Infinity]; - const max = [-Infinity, -Infinity, -Infinity]; + const min : vec3 = [Infinity, Infinity, Infinity]; + const max : vec3 = [-Infinity, -Infinity, -Infinity]; for (const p of points) { - vec3.min(min as [number, number, number], min as [number, number, number], p); - vec3.max(max as [number, number, number], max as [number, number, number], p); + vec3.min(min, min, p); + vec3.max(max, max, p); } - // @ts-expect-error - TS2345 - Argument of type 'number[]' is not assignable to parameter of type 'vec3'. return new Aabb(min, max); } @@ -376,6 +375,25 @@ class Aabb { return Aabb.fromPoints(corners); } + // A fast version of applyTransform. Note that it breaks down for non-uniform + // scale and complex projection matrices. + static applyTransformFast(aabb: Aabb, transform: mat4): Aabb { + const min : vec3 = [transform[12], transform[13], transform[14]]; + const max : vec3 = [...min]; + + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + const value = transform[j * 4 + i]; + const a = value * aabb.min[j]; + const b = value * aabb.max[j]; + min[i] += Math.min(a, b); + max[i] += Math.max(a, b); + } + } + + return new Aabb(min, max); + } + static projectAabbCorners(aabb: Aabb, transform: mat4): Array { const corners = aabb.getCorners(); diff --git a/src/util/vectortile_to_geojson.ts b/src/util/vectortile_to_geojson.ts index 845cbbc6670..73529f4399b 100644 --- a/src/util/vectortile_to_geojson.ts +++ b/src/util/vectortile_to_geojson.ts @@ -1,11 +1,18 @@ import type {VectorTileFeature} from '@mapbox/vector-tile'; -import type {QueryFeature} from '../source/query_features'; -import type {LayerSpecification, SourceSpecification} from '../style-spec/types'; +import type {FeatureState} from '../style-spec/expression/index'; +import type {LayerSpecification} from '../style-spec/types'; const customProps = ['id', 'tile', 'layer', 'source', 'sourceLayer', 'state'] as const; -class Feature { +export interface GeoJSONFeature extends GeoJSON.Feature { + layer?: LayerSpecification; + source: string; + sourceLayer?: string; + state?: FeatureState; +} + +class Feature implements GeoJSONFeature { type: 'Feature'; _geometry?: GeoJSON.Geometry; properties: Record; @@ -18,8 +25,8 @@ class Feature { layer: LayerSpecification; source: string; sourceLayer?: string; - tile?: unknown; - state?: unknown; + state?: FeatureState; + tile?: {z: number; x: number; y: number}; constructor(vectorTileFeature: VectorTileFeature, z: number, x: number, y: number, id?: string | number) { this.type = 'Feature'; @@ -44,7 +51,7 @@ class Feature { this._geometry = g; } - toJSON(): QueryFeature { + toJSON(): GeoJSONFeature { const json = { type: 'Feature', state: undefined, @@ -56,7 +63,7 @@ class Feature { if (this[key] !== undefined) json[key] = this[key]; } - return json as QueryFeature; + return json as GeoJSONFeature; } } diff --git a/test/build/typings/compatibility-test.ts b/test/build/typings/compatibility-test.ts index fee6fcb784b..b482eddbbbe 100644 --- a/test/build/typings/compatibility-test.ts +++ b/test/build/typings/compatibility-test.ts @@ -49,19 +49,16 @@ mapboxgl.clearStorage(() => {}); /** * Get RTL Text Plugin Status */ -expectType(mapboxgl.getRTLTextPluginStatus()); +mapboxgl.getRTLTextPluginStatus() satisfies mapboxgl.PluginStatus; /** * Set RTL Text Plugin */ -// $ExpectType void -mapboxgl.setRTLTextPlugin("https://github.com", e => {}, false); +mapboxgl.setRTLTextPlugin("https://github.com", e => {}, false) satisfies void; -// $ExpectType void -mapboxgl.prewarm(); +mapboxgl.prewarm() satisfies void; -// $ExpectType void -mapboxgl.clearPrewarmedResources(); +mapboxgl.clearPrewarmedResources() satisfies void; /** * Display a Map @@ -104,7 +101,6 @@ expectType({ container: "map", bounds: new mapboxgl.LngLatBounds([-100, -90, 100, 90]), fitBoundsOptions: { - // @ts-expect-error - incompatible padding: 0, offset: new mapboxgl.Point(0, 0), linear: true, @@ -297,12 +293,12 @@ map.on("load", function () { type: "custom", renderingMode: "3d", onRemove: function (map, gl) { - map; // $ExpectType Map - gl; // $ExpectType WebGLRenderingContext + map satisfies mapboxgl.Map; + gl satisfies WebGLRenderingContext; }, render: function (gl, matrix) { - gl; // $ExpectType WebGLRenderingContext - matrix; // $ExpectType number[] + gl satisfies WebGLRenderingContext; + matrix satisfies number[]; }, }); }); @@ -311,17 +307,13 @@ map.on("load", function () { // setTerrain // -// $ExpectType Map -map.setTerrain(); -// $ExpectType Map -map.setTerrain(null); -// $ExpectType Map -map.setTerrain(undefined); -// $ExpectType Map +map.setTerrain() satisfies mapboxgl.Map; +map.setTerrain(null) satisfies mapboxgl.Map; +map.setTerrain(undefined) satisfies mapboxgl.Map; map.setTerrain({ source: "something", exaggeration: 10, -}); +}) satisfies mapboxgl.Map; // // getFreeCameraOptions @@ -334,8 +326,7 @@ map.getFreeCameraOptions(); // setFreeCameraOptions // -// $ExpectType Map -map.setFreeCameraOptions(new mapboxgl.FreeCameraOptions()); +map.setFreeCameraOptions(new mapboxgl.FreeCameraOptions()) satisfies mapboxgl.Map; // FlyTo map.flyTo({ @@ -361,16 +352,14 @@ map.rotateTo(45, { }); // QueryRenderedFeatures -const features = map.queryRenderedFeatures([0, 0], {layers: ["custom"], validate: false}); -features; // $ExpectType MapboxGeoJSONFeature[] +const features = map.queryRenderedFeatures([0, 0], {layers: ["custom"], validate: false}) satisfies mapboxgl.GeoJSONFeature[]; // querySourceFeatures const features2 = map.querySourceFeatures("some_source", { sourceLayer: "source_layer", filter: ["all"], validate: null, -}); -features2; // $ExpectType MapboxGeoJSONFeature[] +}) satisfies mapboxgl.GeoJSONFeature[]; /** * GeoJSONSource @@ -457,23 +446,17 @@ videoSourceObj.play(); * Raster Source */ const rasterSource: mapboxgl.RasterTileSource = map.getSource("tile-source"); -// $ExpectType void -rasterSource.reload(); -// $ExpectType RasterSourceImpl -rasterSource.setTiles(["a", "b"]); -// $ExpectType RasterSourceImpl -rasterSource.setUrl("https://github.com"); +rasterSource.reload() satisfies void; +rasterSource.setTiles(["a", "b"]) satisfies mapboxgl.RasterTileSource; +rasterSource.setUrl("https://github.com") satisfies mapboxgl.RasterTileSource; /** * Vector Source */ const vectorSource: mapboxgl.VectorTileSource = map.getSource("tile-source"); -// $ExpectType void -vectorSource.reload(); -// $ExpectType VectorSourceImpl -vectorSource.setTiles(["a", "b"]); -// $ExpectType VectorSourceImpl -vectorSource.setUrl("https://github.com"); +vectorSource.reload() satisfies void; +vectorSource.setTiles(["a", "b"]) satisfies mapboxgl.VectorTileSource; +vectorSource.setUrl("https://github.com") satisfies mapboxgl.VectorTileSource; /** * Add Raster Source /// made URL optional to allow only tiles. @@ -531,12 +514,11 @@ const popup = new mapboxgl.Popup(popupOptions) .setMaxWidth("none") .addTo(map); popup.getMaxWidth(); -popup.getElement(); // $ExpectType HTMLElement +popup.getElement() satisfies HTMLElement; popup.addClassName("class1"); popup.removeClassName("class2"); popup.toggleClassName("class3"); -// $ExpectType Popup -popup.setOffset([10, 20]); +popup.setOffset([10, 20]) satisfies mapboxgl.Popup; /** * Add terrain @@ -782,17 +764,14 @@ let marker = new mapboxgl.Marker(undefined, { // $ExpectType Alignment marker.getPitchAlignment(); -// $ExpectType number -marker.getRotation(); +marker.getRotation() satisfies number; // $ExpectType Alignment marker.getRotationAlignment(); -// $ExpectType number -marker.getOccludedOpacity(); +marker.getOccludedOpacity() satisfies number; -// $ExpectType Marker -marker.setOccludedOpacity(1); +marker.setOccludedOpacity(1) satisfies mapboxgl.Marker; marker.remove(); @@ -804,30 +783,21 @@ let bounds = new mapboxgl.LngLatBounds(); bool = bounds.isEmpty(); expectType(bounds.contains([37, 50])); -// $ExpectType LngLatBounds -bounds.extend(new mapboxgl.LngLat(45, 30)); -// $ExpectType LngLatBounds -bounds.extend({lng: 45, lat: 30}); -// $ExpectType LngLatBounds -bounds.extend({lon: 45, lat: 30}); -// $ExpectType LngLatBounds -bounds.extend([45, 30]); -// $ExpectType LngLatBounds -bounds.extend(new mapboxgl.LngLatBounds()); -// $ExpectType LngLatBounds +bounds.extend(new mapboxgl.LngLat(45, 30)) satisfies mapboxgl.LngLatBounds; +bounds.extend({lng: 45, lat: 30}) satisfies mapboxgl.LngLatBounds; +bounds.extend({lon: 45, lat: 30}) satisfies mapboxgl.LngLatBounds; +bounds.extend([45, 30]) satisfies mapboxgl.LngLatBounds; +bounds.extend(new mapboxgl.LngLatBounds()) satisfies mapboxgl.LngLatBounds; bounds.extend([ [45, 30], [60, 60], -]); -// $ExpectType LngLatBounds -bounds.extend([45, 30, 60, 60]); +]) satisfies mapboxgl.LngLatBounds; +bounds.extend([45, 30, 60, 60]) satisfies mapboxgl.LngLatBounds; // controls -// $ExpectType IControl -// @ts-expect-error - incompatible -new mapboxgl.Control() as IControl; -// $ExpectType IControl -new mapboxgl.AttributionControl() as IControl; +// @ts-expect-error - incompatible mapbox.Control doesn't exist +new mapboxgl.Control() satisfies mapboxgl.IControl; +new mapboxgl.AttributionControl() satisfies mapboxgl.IControl; /* * GeolocateControl @@ -838,7 +808,7 @@ const geolocateControl = new mapboxgl.GeolocateControl({showAccuracyCircle: true * AttributionControl */ let attributionControl = new mapboxgl.AttributionControl({compact: false, customAttribution: "© YourCo"}); -// @ts-expect-error - incompatible +// @ts-expect-error - incompatible: AttributionControl doesn't have click event listener attributionControl.on("click", () => {}); /* @@ -849,8 +819,7 @@ new mapboxgl.FullscreenControl(null); new mapboxgl.FullscreenControl({}); new mapboxgl.FullscreenControl({container: document.querySelector("body")}); -// $ExpectType boolean -map.hasControl(attributionControl); +map.hasControl(attributionControl) satisfies boolean; declare var lnglat: mapboxgl.LngLat; declare var lnglatlike: mapboxgl.LngLatLike; @@ -963,11 +932,11 @@ expectType(mapboxgl.Point.convert(pointlike)); new mapboxgl.MercatorCoordinate(0, 0); new mapboxgl.MercatorCoordinate(0, 0, 0); -mercatorcoordinate.toAltitude(); // $ExpectType number -mercatorcoordinate.toLngLat(); // $ExpectType LngLat -mapboxgl.MercatorCoordinate.fromLngLat(lnglatlike); // $ExpectType MercatorCoordinate -mapboxgl.MercatorCoordinate.fromLngLat(lnglatlike, 0); // $ExpectType MercatorCoordinate -mercatorcoordinate.meterInMercatorCoordinateUnits(); // $ExpectType number +mercatorcoordinate.toAltitude() satisfies number; +mercatorcoordinate.toLngLat() satisfies mapboxgl.LngLat; +mapboxgl.MercatorCoordinate.fromLngLat(lnglatlike) satisfies mapboxgl.MercatorCoordinate; +mapboxgl.MercatorCoordinate.fromLngLat(lnglatlike, 0) satisfies mapboxgl.MercatorCoordinate; +mercatorcoordinate.meterInMercatorCoordinateUnits() satisfies number; /* * TransformRequestFunction @@ -1019,14 +988,11 @@ expectType(map.fitScreenCoordinates([0, 0], pointlike, 1)); expectType(map.fitScreenCoordinates([0, 0], pointlike, 1, cameraOpts)); expectType(map.fitScreenCoordinates([0, 0], pointlike, 1, cameraOpts, {key: "value"})); -// $ExpectType void -map.triggerRepaint(); +map.triggerRepaint() satisfies void; -// $ExpectType PaddingOptions -map.getPadding(); +map.getPadding() satisfies mapboxgl.PaddingOptions; -// $ExpectType Map -map.setPadding({top: 10, bottom: 20, left: 30, right: 40}, {myData: "MY DATA"}); +map.setPadding({top: 10, bottom: 20, left: 30, right: 40}, {myData: "MY DATA"}) satisfies mapboxgl.Map; map.setPaintProperty("layerId", "layerName", null, {validate: true}); map.setPaintProperty("layerId", "layerName", null, {validate: false}); @@ -1046,8 +1012,7 @@ map.setLight({anchor: "viewport", color: "blue", intensity: 0.5}, {}); // @ts-expect-error map.setLight({anchor: "viewport", color: "blue", intensity: 0.5}, {some_option: "some_string"}); -// $ExpectType boolean -map.showPadding; +map.showPadding satisfies boolean; map.showPadding = false; // @ts-expect-error - incompatible expectType(map.setFilter("layerId", true)); @@ -1063,45 +1028,27 @@ map.setFilter("layerId", true, {}); // @ts-expect-error map.setFilter("layerId", true, {some_option: "some_string"}); -// $ExpectType Map -map.setMinZoom(5); -// $ExpectType Map -map.setMaxZoom(10); -// $ExpectType Map -map.setMinZoom(null); -// $ExpectType Map -map.setMinZoom(); -// $ExpectType Map -map.setMaxZoom(null); -// $ExpectType Map -map.setMaxZoom(); - -// $ExpectType number -map.getMinZoom(); -// $ExpectType number -map.getMaxZoom(); - -// $ExpectType Map -map.setMinPitch(5); -// $ExpectType Map -map.setMaxPitch(10); -// $ExpectType Map -map.setMinPitch(null); -// $ExpectType Map -map.setMinPitch(); -// $ExpectType Map -map.setMaxPitch(null); -// $ExpectType Map -map.setMaxPitch(); -// $ExpectType Map -map.resetNorthPitch(animOpts); - -// $ExpectType number -map.getMinPitch(); -// $ExpectType number -map.getMaxPitch(); - -// $ExpectType Map +map.setMinZoom(5) satisfies mapboxgl.Map; +map.setMaxZoom(10) satisfies mapboxgl.Map; +map.setMinZoom(null) satisfies mapboxgl.Map; +map.setMinZoom() satisfies mapboxgl.Map; +map.setMaxZoom(null) satisfies mapboxgl.Map; +map.setMaxZoom() satisfies mapboxgl.Map; + +map.getMinZoom() satisfies number; +map.getMaxZoom() satisfies number; + +map.setMinPitch(5) satisfies mapboxgl.Map; +map.setMaxPitch(10) satisfies mapboxgl.Map; +map.setMinPitch(null) satisfies mapboxgl.Map; +map.setMinPitch() satisfies mapboxgl.Map; +map.setMaxPitch(null) satisfies mapboxgl.Map; +map.setMaxPitch() satisfies mapboxgl.Map; +map.resetNorthPitch(animOpts) satisfies mapboxgl.Map; + +map.getMinPitch() satisfies number; +map.getMaxPitch() satisfies number; + map.setFog({ color: "blue", "horizon-blend": 0.5, @@ -1109,14 +1056,11 @@ map.setFog({ "high-color": "red", "space-color": "black", "star-intensity": 0.5, -}); -// $ExpectType Map -map.setFog(null); -// $ExpectType Map -map.setFog(undefined); +}) satisfies mapboxgl.Map; +map.setFog(null) satisfies mapboxgl.Map; +map.setFog(undefined) satisfies mapboxgl.Map; -// $ExpectType Fog | null -map.getFog(); +map.getFog() satisfies mapboxgl.FogSpecification | null; /* * Map Events @@ -1127,17 +1071,18 @@ expectType( map.on("load", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'load' event expectType(ev.originalEvent); }), ); -// $ExpectType Map map.on("idle", ev => { - ev; // $ExpectType MapboxEvent & EventData -}); + ev satisfies mapboxgl.MapEvent; +}) satisfies mapboxgl.Map; expectType( map.on("remove", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'remove' event expectType(ev.originalEvent); }), ); @@ -1145,6 +1090,7 @@ expectType( map.on("render", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'render' event expectType(ev.originalEvent); }), ); @@ -1152,6 +1098,7 @@ expectType( map.on("resize", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'resize' event expectType(ev.originalEvent); }), ); @@ -1161,6 +1108,7 @@ expectType( map.on("error", ev => { expectType(ev); expectType(ev.error); + // @ts-expect-error - incompatible originalEvent does not exist on 'error' event expectType(ev.originalEvent); }), ); @@ -1172,8 +1120,7 @@ expectType( expectType(ev.target); expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1186,8 +1133,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1200,8 +1146,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1214,8 +1159,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1228,8 +1172,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1242,8 +1185,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1256,8 +1198,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1270,8 +1211,7 @@ expectType( expectType(ev.lngLat); expectType(ev.point); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1288,8 +1228,7 @@ expectType( expectType(ev.point); expectType(ev.points); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1304,8 +1243,7 @@ expectType( expectType(ev.point); expectType(ev.points); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1320,8 +1258,7 @@ expectType( expectType(ev.point); expectType(ev.points); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1336,8 +1273,7 @@ expectType( expectType(ev.point); expectType(ev.points); - // $ExpectType void - ev.preventDefault(); + ev.preventDefault() satisfies void; expectType(ev.defaultPrevented); expectType(ev.originalEvent); @@ -1365,6 +1301,7 @@ expectType( map.on("dataloading", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'dataloading' event expectType(ev.originalEvent); }), ); @@ -1372,14 +1309,18 @@ expectType( map.on("data", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'data' event expectType(ev.originalEvent); }), ); expectType( // @ts-expect-error - incompatible map.on("tiledataloading", ev => { + // @ts-expect-error - incompatible expectType(ev); expectType(ev.target); + + // @ts-expect-error - incompatible expectType(ev.originalEvent); }), ); @@ -1387,6 +1328,7 @@ expectType( map.on("sourcedataloading", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'sourcedataloading' event expectType(ev.originalEvent); expectType<"source">(ev.dataType); }), @@ -1395,6 +1337,7 @@ expectType( map.on("sourcedata", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'sourcedata' event expectType(ev.originalEvent); expectType<"source">(ev.dataType); }), @@ -1403,6 +1346,7 @@ expectType( map.on("styledataloading", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'styledataloading' event expectType(ev.originalEvent); expectType<"style">(ev.dataType); }), @@ -1411,6 +1355,7 @@ expectType( map.on("styledata", ev => { expectType(ev); expectType(ev.target); + // @ts-expect-error - incompatible originalEvent does not exist on 'styledata' event expectType(ev.originalEvent); expectType<"style">(ev.dataType); }), @@ -1612,50 +1557,38 @@ const expression = expectType(["coalesce", ["get", "propert /* * ScrollZoomHandler */ -// $ExpectType void -new mapboxgl.Map({container: 'div'}).scrollZoom.setZoomRate(1); - -// $ExpectType void -new mapboxgl.Map({container: 'div'}).scrollZoom.setWheelZoomRate(1); -new mapboxgl.Map({container: 'div'}).scrollZoom.enable({around: "center"}); +new mapboxgl.Map({container: 'div'}).scrollZoom.setZoomRate(1) satisfies void; +new mapboxgl.Map({container: 'div'}).scrollZoom.setWheelZoomRate(1) satisfies void; +new mapboxgl.Map({container: 'div'}).scrollZoom.enable({around: "center"}) satisfies void; // @ts-expect-error - incompatible const touchPitchHandler = new mapboxgl.TouchPitchHandler(map); -// $ExpectType void -touchPitchHandler.enable(); -touchPitchHandler.enable({around: "center"}); -// $ExpectType boolean -touchPitchHandler.isActive(); -// $ExpectType boolean -touchPitchHandler.isEnabled(); -// $ExpectType void -touchPitchHandler.disable(); +touchPitchHandler.enable() satisfies void; +touchPitchHandler.enable({around: "center"}) satisfies void; +touchPitchHandler.isActive() satisfies void; +touchPitchHandler.isEnabled() satisfies void; +touchPitchHandler.disable() satisfies void; new mapboxgl.Map({container: 'div'}).touchPitch = touchPitchHandler; /** * `dragPan` */ -// $ExpectType void new mapboxgl.Map({container: 'div'}).dragPan.enable({ linearity: 0.3, easing: t => t, maxSpeed: 1400, deceleration: 2500, -}); +}) satisfies void; /** * `touchZoomRotate` */ -// $ExpectType void new mapboxgl.Map({container: 'div'}).touchZoomRotate.enable({ around: "center", -}); -// $ExpectType void -new mapboxgl.Map({container: 'div'}).touchZoomRotate.enable(); - -// $ExpectType void -new mapboxgl.Map({container: 'div'}).touchZoomRotate.enable({}); +}) satisfies void; +new mapboxgl.Map({container: 'div'}).touchZoomRotate.enable() satisfies void; +new mapboxgl.Map({container: 'div'}).touchZoomRotate.enable({}) satisfies void; /* * Visibility @@ -2093,16 +2026,13 @@ createImageBitmap(fooHTMLImageElement).then(fooImageBitmap => { map.addImage("foo", fooImageBitmap); }); -// $ExpectType void -map.loadImage("foo", (error, result) => {}); +map.loadImage("foo", (error, result) => {}) satisfies void; // KeyboardHandler // @ts-expect-error - incompatible var keyboardHandler = new mapboxgl.KeyboardHandler(map); -// $ExpectType void -keyboardHandler.enableRotation(); -// $ExpectType void -keyboardHandler.disableRotation(); +keyboardHandler.enableRotation() satisfies void; +keyboardHandler.disableRotation() satisfies void; /** * Test projections diff --git a/test/build/typings/index.ts b/test/build/typings/index.ts index c1619d762f7..0cf9ebd4b39 100644 --- a/test/build/typings/index.ts +++ b/test/build/typings/index.ts @@ -18,14 +18,93 @@ const map = new mapboxgl.Map({ }); // -// Controls, Markers, and Popups +// Events // -map.addControl(new mapboxgl.ScaleControl()); -map.addControl(new mapboxgl.GeolocateControl()); -map.addControl(new mapboxgl.NavigationControl()); -map.addControl(new mapboxgl.FullscreenControl()); -map.addControl(new mapboxgl.AttributionControl()); +map.on('load', (event) => { + event.type === 'load'; + event.target satisfies mapboxgl.Map; +}); + +map.on('style.load', (event) => { + event.type === 'style.load'; + event.target satisfies mapboxgl.Map; +}); + +map.on('click', (event) => { + event.type === 'click'; + event.target satisfies mapboxgl.Map; + + event.point satisfies mapboxgl.Point; + event.lngLat satisfies mapboxgl.LngLat; + event.features satisfies mapboxgl.GeoJSONFeature[]; + event.originalEvent satisfies MouseEvent; + + event.preventDefault(); +}); + +map.on('touchstart', 'layerId', (event) => { + event.type === 'touchstart'; + event.target satisfies mapboxgl.Map; + + event.point satisfies mapboxgl.Point; + event.lngLat satisfies mapboxgl.LngLat; + event.features satisfies mapboxgl.GeoJSONFeature[]; + event.originalEvent satisfies TouchEvent; + + event.preventDefault(); +}); + +// Custom events +map.fire('flystart' as mapboxgl.MapEventType, {}); +map.on('flystart' as mapboxgl.MapEventType, () => {}) + +await new Promise((resolve) => map.on('style.load', resolve)); + +// +// Controls +// + +map.addControl( + new mapboxgl.ScaleControl({unit: 'metric', maxWidth: 80}), + 'bottom-left' satisfies mapboxgl.ControlPosition +); + +map.addControl( + new mapboxgl.NavigationControl({ + showCompass: true, + showZoom: true, + visualizePitch: true + }) +); + +map.addControl( + new mapboxgl.FullscreenControl({ + container: document.querySelector('body') + }) +); + +map.addControl(new mapboxgl.AttributionControl({ + compact: true, + customAttribution: 'Custom attribution' +})); + +// +// GeolocateControl +// + +const geolocateControl = new mapboxgl.GeolocateControl(); + +geolocateControl.on('error', (error) => error satisfies GeolocationPositionError); +geolocateControl.on('geolocate', (position) => position satisfies GeolocationPosition); +geolocateControl.on('outofmaxbounds', (position) => position satisfies GeolocationPosition); +geolocateControl.on('trackuserlocationstart', () => {}); +geolocateControl.on('trackuserlocationend', () => {}); +map.addControl(geolocateControl); + +// +// Markers and Popups +// const center = mapboxgl.LngLat.convert(map.getCenter()); @@ -37,8 +116,6 @@ new mapboxgl.Marker() .setPopup(popup) .addTo(map); -await new Promise((resolve) => map.on('style.load', resolve)); - map.setConfigProperty('basemap', 'lightPreset', 'dawn'); // @@ -92,10 +169,56 @@ map.addSource('points', { } }); + +// +// Source narrowing +// + +const source = map.getSource('id'); +const geojsonSource: mapboxgl.GeoJSONSource = map.getSource('id'); + +switch (source.type) { + case 'geojson': + source satisfies mapboxgl.GeoJSONSource; + break; + case 'raster-array': + source satisfies mapboxgl.RasterArrayTileSource; + break; + case 'raster-dem': + source satisfies mapboxgl.RasterDemTileSource; + break; + case 'raster': + source satisfies mapboxgl.RasterTileSource; + break; + case 'vector': + source satisfies mapboxgl.VectorTileSource; + break; + case 'image': + source satisfies mapboxgl.ImageSource; + break; + case 'video': + source satisfies mapboxgl.VideoSource; + break; + case 'canvas': + source satisfies mapboxgl.CanvasSource; + break; + case 'custom': + source satisfies mapboxgl.CustomSource; + break; + case 'model': + source satisfies mapboxgl.ModelSource; + break; +} + // // Adding layers // +map.addLayer({ + id: 'background', + type: 'background' +}); + map.addLayer({ 'id': 'urban-areas-fill', 'type': 'fill', @@ -111,6 +234,25 @@ map.addLayer({ } }); +map.addLayer({ + 'id': 'radar', + 'type': 'raster', + 'slot': 'middle', + 'source': { + 'type': 'image', + 'url': 'https://docs.mapbox.com/mapbox-gl-js/assets/radar.gif', + 'coordinates': [ + [-80.425, 46.437], + [-71.516, 46.437], + [-71.516, 37.936], + [-80.425, 37.936] + ] + }, + 'paint': { + 'raster-fade-duration': 0 + } +}); + map.addLayer({ 'id': 'points', 'type': 'symbol', @@ -127,6 +269,52 @@ map.addLayer({ } }); + +const layer = map.getLayer('id'); +const backgroundLayer: mapboxgl.BackgroundLayerSpecification = map.getLayer('background'); + +switch (layer.type) { + case 'background': + layer satisfies mapboxgl.BackgroundLayerSpecification; + break; + case 'circle': + layer satisfies mapboxgl.CircleLayerSpecification; + break; + case 'fill': + layer satisfies mapboxgl.FillLayerSpecification; + break; + case 'fill-extrusion': + layer satisfies mapboxgl.FillExtrusionLayerSpecification; + break; + case 'heatmap': + layer satisfies mapboxgl.HeatmapLayerSpecification; + break; + case 'hillshade': + layer satisfies mapboxgl.HillshadeLayerSpecification; + break; + case 'line': + layer satisfies mapboxgl.LineLayerSpecification; + break; + case 'raster': + layer satisfies mapboxgl.RasterLayerSpecification; + break; + case 'symbol': + layer satisfies mapboxgl.SymbolLayerSpecification; + break; +} + +// +// Add Custom Layer +// + +const highlightLayer: mapboxgl.CustomLayerInterface = { + id: 'highlight', + type: 'custom', + render: (gl: WebGLRenderingContext, matrix: number[]): void => {} +} + +map.addLayer(highlightLayer); + // // Add 3D terrain // @@ -144,14 +332,14 @@ map.setTerrain({'source': 'mapbox-dem', 'exaggeration': 1.5}); // Query features // -const features1 = map.queryRenderedFeatures([0, 0], {layers: ['layer-id'], filter: ['>=', 'area', 80000], validate: true}); -const features2 = map.querySourceFeatures('sourceId', {sourceLayer: 'sourceLayer', filter: ['>=', 'area', 80000], validate: true}); +const features1 = map.queryRenderedFeatures([0, 0], {layers: ['layer-id'], filter: ['>=', 'area', 80000], validate: true}) satisfies mapboxgl.GeoJSONFeature[]; +const features2 = map.querySourceFeatures('sourceId', {sourceLayer: 'sourceLayer', filter: ['>=', 'area', 80000], validate: true}) satisfies mapboxgl.GeoJSONFeature[]; // // Set state // -const feature1 = features1[0]; +const feature1: mapboxgl.GeoJSONFeature = features1[0]; if (feature1.id) { map.setFeatureState({id: feature1.id, ...feature1}, {hide: true}); } @@ -160,3 +348,48 @@ const feature2 = features2[0]; if (feature2.id) { map.setFeatureState({id: feature2.id, ...feature2}, {hide: true}); } + +map.removeFeatureState({ + id: 'featureId', + source: 'sourceId', + sourceLayer: 'sourceLayer', +}); + +map.removeFeatureState({ + source: 'sourceId' +}); + +// +// EasingOptions, CameraOptions, AnimationOptions +// + +const cameraOptions: mapboxgl.CameraOptions = { + center: [0, 0], + zoom: 10, + padding: {top: 10, bottom: 10, left: 10, right: 10}, +}; + +const animationOptions: mapboxgl.AnimationOptions = { + speed: 0.5, + curve: 1, + screenSpeed: 1, + easing: function (t: number): number { return t; }, + maxDuration: 1, +}; + +const easingOptions: mapboxgl.EasingOptions = Object.assign({}, cameraOptions, animationOptions); + +// +// FlyTo +// + +map.flyTo(easingOptions); + +// +// FitBounds +// + +map.fitBounds([[-73.9876, 40.7661], [-73.9397, 40.8002]], { + padding: 20, + maxZoom: 12, +}); diff --git a/test/build/typings/package-lock.json b/test/build/typings/package-lock.json deleted file mode 100644 index 08c04ac5f96..00000000000 --- a/test/build/typings/package-lock.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "name": "mapbox-gl-ts", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "mapbox-gl-ts", - "dependencies": { - "mapbox-gl": "file:../../../" - }, - "devDependencies": { - "@types/geojson": "*", - "typescript": "^5.4.5" - } - }, - "../../..": { - "name": "@mapbox/mapbox-gl-private", - "version": "3.5.0-beta.1", - "license": "SEE LICENSE IN LICENSE.txt", - "workspaces": [ - "src/style-spec" - ], - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^3.0.0", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.6", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "cheap-ruler": "^3.0.1", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "fflate": "^0.8.1", - "geojson-vt": "^4.0.2", - "gl-matrix": "^3.4.3", - "grid-index": "^1.1.0", - "kdbush": "^4.0.1", - "lodash.clonedeep": "^4.5.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^2.0.0", - "quickselect": "^2.0.0", - "rw": "^1.3.3", - "serialize-to-js": "^3.1.2", - "supercluster": "^8.0.0", - "tiny-lru": "^11.2.6", - "tinyqueue": "^2.0.3", - "tweakpane": "^4.0.3", - "vt-pbf": "^3.1.3" - }, - "devDependencies": { - "@mapbox/mvt-fixtures": "^3.10.0", - "@octokit/rest": "^20.1.1", - "@rollup/plugin-alias": "^5.1.0", - "@rollup/plugin-commonjs": "^26.0.1", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.7", - "@rollup/plugin-strip": "^3.0.4", - "@rollup/plugin-terser": "^0.4.4", - "@tweakpane/core": "^2.0.3", - "@types/geojson": "^7946.0.14", - "@types/geojson-vt": "^3.2.5", - "@types/jest": "^29.5.12", - "@types/mapbox__point-geometry": "^0.1.4", - "@types/mapbox__vector-tile": "^1.3.4", - "@types/node": "^20.14.3", - "@types/offscreencanvas": "^2019.7.3", - "@types/pbf": "^3.0.5", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "@vitest/browser": "^1.6.0", - "@vitest/ui": "^1.6.0", - "address": "^2.0.2", - "browserify": "^17.0.0", - "chalk": "^5.0.1", - "chokidar": "^3.6.0", - "cross-env": "^7.0.3", - "cssnano": "^7.0.2", - "d3-queue": "^3.0.7", - "diff": "^5.2.0", - "dts-bundle-generator": "^9.5.1", - "ejs": "^3.1.10", - "envify": "^4.1.0", - "esbuild": "^0.21.5", - "eslint": "^8.57.0", - "eslint-config-mourner": "^3.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-html": "^8.1.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.2.12", - "glob": "^10.4.1", - "is-builtin-module": "^4.0.0", - "jest-extended": "^4.0.2", - "json-stringify-pretty-compact": "^4.0.0", - "lodash.template": "^4.5.0", - "mapbox-gl-styles": "^2.0.2", - "minimist": "^1.2.6", - "mock-geolocation": "^1.0.11", - "msw": "^2.3.1", - "node-notifier": "^10.0.1", - "npm-font-open-sans": "^1.1.0", - "npm-run-all": "^4.1.5", - "pixelmatch": "^5.3.0", - "playwright": "^1.44.1", - "postcss": "^8.4.38", - "postcss-cli": "^11.0.0", - "postcss-inline-svg": "^6.0.0", - "pretty-bytes": "^6.0.0", - "qrcode-terminal": "^0.12.0", - "rollup": "^4.18.0", - "rollup-plugin-esbuild": "^6.1.1", - "rollup-plugin-unassert": "^0.6.0", - "serve-static": "^1.15.0", - "shuffle-seed": "^1.1.6", - "st": "^3.0.0", - "stylelint": "^16.6.1", - "stylelint-config-standard": "^36.0.0", - "tape": "^5.8.1", - "tape-filter": "^1.0.4", - "testem": "^3.14.0", - "tsx": "^4.15.6", - "typescript": "^5.5.2", - "typescript-eslint": "^7.13.1", - "utility-types": "^3.11.0", - "vite-plugin-arraybuffer": "^0.0.7", - "vitest": "^1.6.0" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.14", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", - "dev": true - }, - "node_modules/mapbox-gl": { - "resolved": "../../..", - "link": true - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - } - } -} diff --git a/test/integration/lib/operation-handlers.js b/test/integration/lib/operation-handlers.js index 94dc62c5583..38e7e359929 100644 --- a/test/integration/lib/operation-handlers.js +++ b/test/integration/lib/operation-handlers.js @@ -204,7 +204,7 @@ export const operationHandlers = { check(map, params, doneCb) { // We still don't handle params[0] === "shadowPassVerticesCount" as lazy shadow map rendering is not implemented if (params[0] === "renderedVerticesCount") { - const layer = map.getLayer(params[1]); + const layer = map.style.getLayer(params[1]); const layerStats = layer.getLayerRenderingStats(); const renderedVertices = params[0] === "renderedVerticesCount" ? layerStats.numRenderedVerticesInTransparentPass : layerStats.numRenderedVerticesInShadowPass; if (renderedVertices !== params[2]) { diff --git a/test/integration/render-tests/color-theme/emission-bw/expected.png b/test/integration/render-tests/color-theme/emission-bw/expected.png index 91f6603cd36..01e162d3a2d 100644 Binary files a/test/integration/render-tests/color-theme/emission-bw/expected.png and b/test/integration/render-tests/color-theme/emission-bw/expected.png differ diff --git a/test/integration/render-tests/color-theme/trees-monochrome/expected.png b/test/integration/render-tests/color-theme/trees-monochrome/expected.png new file mode 100644 index 00000000000..cf0e0a06237 Binary files /dev/null and b/test/integration/render-tests/color-theme/trees-monochrome/expected.png differ diff --git a/test/integration/render-tests/color-theme/trees-monochrome/style.json b/test/integration/render-tests/color-theme/trees-monochrome/style.json new file mode 100644 index 00000000000..cf691715a5f --- /dev/null +++ b/test/integration/render-tests/color-theme/trees-monochrome/style.json @@ -0,0 +1,111 @@ +{ + "version": 8, + "metadata": { + "test": { + "allowed": 0.00085, + "height": 256, + "width": 256, + "standardDerivatives": true + } + }, + "lights": [ + { + "type": "ambient", + "id": "environment", + "properties": { + "color": "rgba(0, 0, 0, 1)", + "intensity": 0.4 + } + }, + { + "type": "directional", + "id": "sun_light", + "properties": { + "cast-shadows": true, + "shadow-intensity": 1.0, + "intensity": 0.5, + "direction": [ + 120, + 70 + ] + } + } + ], + "color-theme": { + "data": "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" + }, + "models": { + "maple1": "local://models/maple1-lod2.glb", + "maple2": "local://models/maple2-lod2.glb", + "oak1": "local://models/oak1-lod2.glb", + "oak2": "local://models/oak2-lod2.glb" + }, + "sources": { + "trees": { + "type": "vector", + "maxzoom": 15, + "tiles": [ + "local://tiles/trees/{z}-{x}-{y}.pbf" + ] + } + }, + "pitch": 45, + "zoom": 17.0, + "bearing": 264, + "center": [ + -122.4027, + 37.7845 + ], + "layers": [ + { + "id": "sky", + "type": "sky", + "paint": { + "sky-type": "atmosphere", + "sky-atmosphere-sun": [0, 0], + "sky-atmosphere-sun-intensity": 15 + } + }, + { + "id": "background", + "type": "background", + "paint": { + "background-color": "lightgray" + } + }, + { + "id": "tree-layer", + "type": "model", + "source": "trees", + "source-layer": "trees", + "layout" : { + "model-id": + ["match", ["%", ["id"], 4], + 0, "maple1", + 1, "maple2", + 3, "oak1", + "oak2"] + }, + "filter": ["<", ["%", ["id"], 6], 3], + "paint": { + "model-rotation": ["match", ["%", ["id"], 4], + 0, ["literal", [0.0, 0.0, 0.0]], + 1, ["literal", [0.0, 0.0, 50.0]], + 2, ["literal", [10.0, 0.0, 120.0]], + ["literal", [0.0, -3.0, -60]]], + "model-scale": [5, 5, 5], + "model-color": [ + "match", ["%", ["id"], 6], + 0, "orange", + 1, "gray", + 2, "white", + 3, "pink", + 4, "yellow", + "green"], + "model-cast-shadows": false, + "model-receive-shadows": false, + "model-color-mix-intensity": 0.7 + } + } + ] +} diff --git a/test/integration/render-tests/debug/collision-high-pitched-fractional-zoom/expected.png b/test/integration/render-tests/debug/collision-high-pitched-fractional-zoom/expected.png index 61d87ec6c06..5275c121f08 100644 Binary files a/test/integration/render-tests/debug/collision-high-pitched-fractional-zoom/expected.png and b/test/integration/render-tests/debug/collision-high-pitched-fractional-zoom/expected.png differ diff --git a/test/integration/render-tests/depth-occlusion/line-pattern-fill-extrusion-terrain/expected.png b/test/integration/render-tests/depth-occlusion/line-pattern-fill-extrusion-terrain/expected.png index 44485893926..79640519954 100644 Binary files a/test/integration/render-tests/depth-occlusion/line-pattern-fill-extrusion-terrain/expected.png and b/test/integration/render-tests/depth-occlusion/line-pattern-fill-extrusion-terrain/expected.png differ diff --git a/test/integration/render-tests/fill-extrusion-cutoff-fade-range/expected.png b/test/integration/render-tests/fill-extrusion-cutoff-fade-range/expected.png new file mode 100644 index 00000000000..c0f352f4033 Binary files /dev/null and b/test/integration/render-tests/fill-extrusion-cutoff-fade-range/expected.png differ diff --git a/test/integration/render-tests/fill-extrusion-cutoff-fade-range/style.json b/test/integration/render-tests/fill-extrusion-cutoff-fade-range/style.json new file mode 100644 index 00000000000..1c4d438474a --- /dev/null +++ b/test/integration/render-tests/fill-extrusion-cutoff-fade-range/style.json @@ -0,0 +1,79 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 512, + "width": 512, + "allowed": 0.0023 + } + }, + "lights": [ + { + "type": "ambient", + "id": "environment", + "properties": { + "intensity": 0.15, + "color": "rgba(100, 140, 255, 1.0)" + } + }, + { + "type": "directional", + "id": "sun_light", + "properties": { + "intensity": 0.9, + "cast-shadows": true, + "shadow-intensity": 1.0, + "direction": [300, 75], + "color": "rgba(255, 255, 100, 1.0)" + } + } + ], + "sources": { + "mapbox": { + "type": "vector", + "maxzoom": 16, + "tiles": [ + "local://tiles/{z}-{x}-{y}.mvt" + ] + } + }, + "pitch": 65, + "bearing": 90, + "zoom": 15.3, + "center": [ + -122.449283, + 37.749211 + ], + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "lightgreen" + } + }, + { + "id": "road", + "type": "line", + "source": "mapbox", + "source-layer": "road", + "paint": { + "line-color": "darkgray", + "line-width": 10 + } + }, + { + "id": "extrusion", + "type": "fill-extrusion", + "source": "mapbox", + "source-layer": "building", + "minzoom": 15, + "paint": { + "fill-extrusion-color": "white", + "fill-extrusion-opacity": 1.0, + "fill-extrusion-height": 50.0, + "fill-extrusion-cutoff-fade-range": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render-tests/lighting-3d-mode/shadow/pitch-max-distance/expected.png b/test/integration/render-tests/lighting-3d-mode/shadow/pitch-max-distance/expected.png index 038d773871f..0b9a345c588 100644 Binary files a/test/integration/render-tests/lighting-3d-mode/shadow/pitch-max-distance/expected.png and b/test/integration/render-tests/lighting-3d-mode/shadow/pitch-max-distance/expected.png differ diff --git a/test/integration/render-tests/model-layer/buildings-trees-shadows-fog-fade/expected.png b/test/integration/render-tests/model-layer/buildings-trees-shadows-fog-fade/expected.png index ce27f7e9a7c..4cbe71157d4 100644 Binary files a/test/integration/render-tests/model-layer/buildings-trees-shadows-fog-fade/expected.png and b/test/integration/render-tests/model-layer/buildings-trees-shadows-fog-fade/expected.png differ diff --git a/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/expected.png b/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/expected.png new file mode 100644 index 00000000000..f633ebf8171 Binary files /dev/null and b/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/expected.png differ diff --git a/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/style.json b/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/style.json new file mode 100644 index 00000000000..fedfcbf1241 --- /dev/null +++ b/test/integration/render-tests/model-layer/landmark-z-offset-munich-3d-hidden/style.json @@ -0,0 +1,532 @@ +{ + "version": 8, + "metadata": { + "test": { + "allowed": 0.0008, + "width": 512, + "height": 512, + "operations": [ + ["wait"] + ] + } + }, + "lights": [ + { + "type": "ambient", + "id": "environment" + }, + { + "type": "directional", + "id": "sun_light", + "properties": { + "cast-shadows": false, + "intensity": 0.8599999904632569, + "direction": [ + 311.9219970703125, + 82.37799835205078 + ] + } + } + ], + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sprite": "local://sprites/sprite", + "sources": { + "composite": { + "type": "vector", + "maxzoom": 15, + "tiles": [ + "local://models/vector/{z}-{x}-{y}.vector.pbf" + ] + }, + "file-system-tiles": { + "type": "batched-model", + "maxzoom": 14, + "tiles": [ + "local://models/landmark/mbx/{x}-{y}-{z}.glb" + ] + } + }, + "transition": { + "duration": 0 + }, + "pitch": 56, + "zoom": 16.9, + "bearing": 0, + "center": [ + 11.582, + 48.130199 + ], + "layers": [ + { + "type": "background", + "paint": { + "background-color": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 11.0, + [ + "rgba", + 239.00001525878907, + 233.00001525878907, + 225.00001525878907, + 1.0 + ], + 13.0, + [ + "rgba", + 230.00001525878907, + 228.00001525878907, + 224.00001525878907, + 1.0 + ] + ] + }, + "id": "land" + }, + { + "type": "fill", + "id": "landcover", + "source": "composite", + "maxzoom": 7.0, + "paint": { + "fill-antialias": false, + "fill-opacity": [ + "interpolate", + [ + "exponential", + 1.5 + ], + [ + "zoom" + ], + 2.0, + 0.3, + 7.0, + 0.0 + ], + "fill-color": [ + "match", + [ + "get", + "class" + ], + "snow", + [ + "rgba", + 255.0, + 255.0, + 255.0, + 1.0 + ], + [ + "rgba", + 222.00001525878907, + 237.00001525878907, + 177.0, + 1.0 + ] + ] + }, + "source-layer": "landcover" + }, + { + "type": "fill", + "source": "composite", + "paint": { + "fill-color": [ + "rgba", + 117.00000762939453, + 207.00001525878907, + 240.00001525878907, + 1.0 + ] + }, + "source-layer": "water", + "id": "water" + }, + { + "minzoom": 11.0, + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "class" + ], + "street_limited", + [ + "rgba", + 240.00001525878907, + 238.00001525878907, + 235.00001525878907, + 1.0 + ], + [ + "rgba", + 255.0, + 255.0, + 255.0, + 1.0 + ] + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.5 + ], + [ + "zoom" + ], + 12.0, + 0.5, + 14.0, + 2.0, + 18.0, + 18.0 + ] + }, + "source-layer": "road", + "filter": [ + "all", + [ + "match", + [ + "get", + "class" + ], + [ + "primary_link", + "street", + "street_limited" + ], + true, + false + ], + [ + "match", + [ + "get", + "structure" + ], + [ + "ford", + "none" + ], + true, + false + ], + [ + "==", + [ + "geometry-type" + ], + "LineString" + ] + ], + "layout": { + "line-join": "round", + "line-cap": "round" + }, + "source": "composite", + "id": "road-street" + }, + { + "id": "building-models", + "minzoom": 14.0, + "layout": { + "visibility": "none" + }, + "paint": { + "model-ambient-occlusion-intensity": 0.75, + "model-color": [ + "match", + [ + "get", + "part" + ], + "roof", + [ + "hsl", + 22, + 82, + 90 + ], + "wall", + [ + "hsl", + 0, + 0, + 100 + ], + "window", + [ + "interpolate", + [ "linear" ], + [ "measure-light", "brightness" ], + 0, + [ + "hsl", + [ + "random", + 0.0, + 90.0, + [ + "id" + ] + ], + [ + "random", + 20.0, + 100.0, + [ + "id" + ] + ], + 87 + ], + 0.15, + [ + "hsl", + [ + "random", + 200.0, + 215.0, + [ + "id" + ] + ], + 100, + [ + "random", + 70.0, + 80.0, + [ + "id" + ] + ] + ] + ], + [ + "interpolate", + [ "linear" ], + [ "measure-light", "brightness" ], + 0.16, + [ + "hsla", + [ + "random", + 10.0, + 70.0, + [ + "id" + ] + ], + 55 + , + [ + "random", + 80.0, + 90.0, + [ + "id" + ] + ], + 1.0 + ], + 0.4, + "hsl(0, 100%, 100%)" + ] + ], + "model-color-mix-intensity": [ + "match", + [ + "get", + "part" + ], + "logo", + [ + "interpolate", + [ "linear" ], + [ "measure-light", "brightness" ], + 0.2, + 0, + 0.4, + 0.3 + ], + 1.0 + ], + "model-emissive-strength": [ + "match", + [ + "get", + "part" + ], + "door", + [ + "interpolate", + [ "linear" ], + [ "measure-light", "brightness" ], + 0.2, + 1.5, + 0.4, + 2.5 + ], + "logo", + 0.6, + "window", + [ + "random", + 0.5, + 0.8, + [ + "id" + ] + ], + 0.0 + ], + "model-height-based-emissive-strength-multiplier": [ + "match", + [ + "get", + "part" + ], + "window", + [ + "literal", + [ + 0.0, + 0.9, + 0, + 1, + 0.5 + ] + ], + [ + "literal", + [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ] + ] + ], + "model-roughness": [ + "match", + [ + "get", + "part" + ], + "window", + 0.0, + 1.0 + ], + "model-type": "common-3d" + }, + "source": "file-system-tiles", + "type": "model" + }, + { + "minzoom": 15.0, + "type": "fill-extrusion", + "layout":{ + "visibility": "none" + }, + "paint": { + "fill-extrusion-height": [ + "number", + [ + "get", + "height" + ] + ], + "fill-extrusion-ambient-occlusion-intensity": 0.3499999940395355, + "fill-extrusion-ambient-occlusion-ground-radius": 5, + "fill-extrusion-ambient-occlusion-wall-radius": 5, + "fill-extrusion-opacity": 1.0, + "fill-extrusion-base": [ + "number", + [ + "get", + "min_height" + ] + ], + "fill-extrusion-color": [ + "rgba", + 255.0, + 255.0, + 255.0, + 1.0 + ], + "fill-extrusion-vertical-gradient": false, + "fill-extrusion-vertical-scale": 1.5 + }, + "source-layer": "building", + "filter": [ + "==", + [ + "get", + "extrude" + ], + "true" + ], + "source": "composite", + "id": "3d-buildings1" + }, + { + "id": "poi-label", + "type": "symbol", + "metadata": { + "mapbox:group": "Point of interest labels, poi-labels" + }, + "source": "composite", + "source-layer": "poi_label", + "minzoom": 6, + "layout": { + "symbol-z-elevate": true, + "text-size": [ + "step", + [ "zoom" ], + [ "step", [ "number", [ "get", "sizerank" ] ], 18, 5, 12 ], + 17, + [ "step", [ "number", [ "get", "sizerank" ] ], 18, 13, 12 ] + ], + "text-field": [ + "format", + [ "coalesce", [ "get", "name_en" ], [ "get", "name" ] ], + { } + ], + "text-font": [ "NotoCJK" ], + "text-padding": 4, + "icon-image": "building-12", + "text-offset": [ + "step", + [ "zoom" ], + [ + "step", + [ "number", [ "get", "sizerank" ] ], + [ "literal", [ 0, 0 ] ], + 5, + [ "literal", [ 0, 1 ] ] + ], + 17, + [ + "step", + [ "number", [ "get", "sizerank" ] ], + [ "literal", [ 0, 0 ] ], + 13, + [ "literal", [ 0, 1 ] ] + ] + ] + } + } + ] +} diff --git a/test/integration/render-tests/model-layer/powerplants-float-zoom-lod/expected.png b/test/integration/render-tests/model-layer/powerplants-float-zoom-lod/expected.png index d2bf39516ed..1f8b265a3e3 100644 Binary files a/test/integration/render-tests/model-layer/powerplants-float-zoom-lod/expected.png and b/test/integration/render-tests/model-layer/powerplants-float-zoom-lod/expected.png differ diff --git a/test/integration/render-tests/raster-particle/decoding/expected.png b/test/integration/render-tests/raster-particle/decoding/expected.png new file mode 100644 index 00000000000..a8da303048f Binary files /dev/null and b/test/integration/render-tests/raster-particle/decoding/expected.png differ diff --git a/test/integration/render-tests/raster-particle/decoding/style.json b/test/integration/render-tests/raster-particle/decoding/style.json new file mode 100644 index 00000000000..3a7e61f3f64 --- /dev/null +++ b/test/integration/render-tests/raster-particle/decoding/style.json @@ -0,0 +1,113 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 256, + "height": 256, + "allowed": 0.006, + "operations": [ + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100], + ["wait", 100] + ] + } + }, + "center": [0, 0], + "zoom": 0, + "transition": {"duration": 0}, + "projection": { "name": "mercator" }, + "sources": { + "satellite": { + "type": "raster", + "tiles": [ + "local://tiles/{z}-{x}-{y}.satellite.png" + ], + "maxzoom": 17, + "tileSize": 256 + }, + "wind-source": { + "type": "raster-array", + "tiles": [ "local://tiles/{z}-{x}-{y}.wind.mrt" ], + "raster_layers": [ + { + "fields": { + "bands": [ "1664366400" ], + "buffer": 1, + "name": "winds", + "offset": -40.60000000000001, + "range": [ -40.224327087402344, 40.6441650390625 ], + "scale": 0.2, + "tilesize": 512, + "units": "m/s" + }, + "id": "winds" + } + ] + } + }, + "layers": [ + { + "id": "satellite", + "type": "raster", + "source": "satellite", + "paint": { + "raster-fade-duration": 0 + } + }, + { + "id": "wind-animation", + "source": "wind-source", + "source-layer": "winds", + "type": "raster-particle", + "paint": { + "raster-particle-speed-factor": 0.5, + "raster-particle-reset-rate-factor": 0.0, + "raster-particle-fade-opacity-factor": 0.5, + "raster-particle-count": 4096, + "raster-particle-max-speed": 50, + "raster-particle-color": [ + "interpolate", + ["linear"], + ["raster-particle-speed"], + 1.5, "rgba(134,163,171,256)", + 2.5, "rgba(126,152,188,256)", + 4.12, "rgba(110,143,208,256)", + 4.63, "rgba(110,143,208,256)", + 6.17, "rgba(15,147,167,256)", + 7.72, "rgba(15,147,167,256)", + 9.26, "rgba(57,163,57,256)", + 10.29, "rgba(57,163,57,256)", + 11.83, "rgba(194,134,62,256)", + 13.37, "rgba(194,134,63,256)", + 14.92, "rgba(200,66,13,256)", + 16.46, "rgba(200,66,13,256)", + 18.00, "rgba(210,0,50,256)", + 20.06, "rgba(215,0,50,256)", + 21.60, "rgba(175,80,136,256)", + 23.66, "rgba(175,80,136,256)", + 25.21, "rgba(117,74,147,256)", + 27.78, "rgba(117,74,147,256)", + 29.32, "rgba(68,105,141,256)", + 31.89, "rgba(68,105,141,256)", + 33.44, "rgba(194,251,119,256)", + 42.18, "rgba(194,251,119,256)", + 43.72, "rgba(241,255,109,256)", + 48.87, "rgba(241,255,109,256)", + 50.41, "rgba(256,256,256,256)", + 57.61, "rgba(256,256,256,256)", + 59.16, "rgba(0,256,256,256)", + 68.93, "rgba(0,256,256,256)", + 69.44, "rgba(256,37,256,256)" + ] + } + } + ] +} diff --git a/test/integration/render-tests/raster-particle/default/expected.png b/test/integration/render-tests/raster-particle/default/expected.png index 52b5f45312c..7ad9ef914dc 100644 Binary files a/test/integration/render-tests/raster-particle/default/expected.png and b/test/integration/render-tests/raster-particle/default/expected.png differ diff --git a/test/integration/render-tests/raster-particle/raster-particle-array-band/expected.png b/test/integration/render-tests/raster-particle/raster-particle-array-band/expected.png index aa0977748b3..8e4d97f165d 100644 Binary files a/test/integration/render-tests/raster-particle/raster-particle-array-band/expected.png and b/test/integration/render-tests/raster-particle/raster-particle-array-band/expected.png differ diff --git a/test/integration/render-tests/terrain/background-clear-optimization/expected.png b/test/integration/render-tests/terrain/background-clear-optimization/expected.png index bf326c38ba0..af76bbaede1 100644 Binary files a/test/integration/render-tests/terrain/background-clear-optimization/expected.png and b/test/integration/render-tests/terrain/background-clear-optimization/expected.png differ diff --git a/test/integration/render-tests/text-writing-mode/point_label/cjk-variable-anchors-vertical-horizontal-mode-icon-text-fit-terrain/expected.png b/test/integration/render-tests/text-writing-mode/point_label/cjk-variable-anchors-vertical-horizontal-mode-icon-text-fit-terrain/expected.png index b78a03b3366..adae83064fb 100644 Binary files a/test/integration/render-tests/text-writing-mode/point_label/cjk-variable-anchors-vertical-horizontal-mode-icon-text-fit-terrain/expected.png and b/test/integration/render-tests/text-writing-mode/point_label/cjk-variable-anchors-vertical-horizontal-mode-icon-text-fit-terrain/expected.png differ diff --git a/test/integration/render-tests/wireframe/globe-high-exaggeration/expected.png b/test/integration/render-tests/wireframe/globe-high-exaggeration/expected.png index f306269af00..fb546299a21 100644 Binary files a/test/integration/render-tests/wireframe/globe-high-exaggeration/expected.png and b/test/integration/render-tests/wireframe/globe-high-exaggeration/expected.png differ diff --git a/test/integration/tiles/0-0-0.wind.mrt b/test/integration/tiles/0-0-0.wind.mrt new file mode 100644 index 00000000000..362f6d9cff9 Binary files /dev/null and b/test/integration/tiles/0-0-0.wind.mrt differ diff --git a/test/unit/geo/transform.test.ts b/test/unit/geo/transform.test.ts index e1da359284d..ed46448044e 100644 --- a/test/unit/geo/transform.test.ts +++ b/test/unit/geo/transform.test.ts @@ -505,9 +505,12 @@ describe('transform', () => { expect(transform.coveringTiles({tileSize: 512})).toEqual([ new OverscaledTileID(1, 0, 1, 0, 1), new OverscaledTileID(1, 0, 1, 0, 0), - new OverscaledTileID(0, -1, 0, 0, 0), + new OverscaledTileID(1, -1, 1, 1, 1), + new OverscaledTileID(1, -1, 1, 1, 0), new OverscaledTileID(1, 0, 1, 1, 1), new OverscaledTileID(1, 0, 1, 1, 0), + new OverscaledTileID(1, -1, 1, 0, 1), + new OverscaledTileID(1, -1, 1, 0, 0), new OverscaledTileID(1, 1, 1, 0, 1), new OverscaledTileID(1, 1, 1, 0, 0), new OverscaledTileID(0, -2, 0, 0, 0), @@ -1143,7 +1146,7 @@ describe('transform', () => { const cover = transform.coveringTiles(options); - expect(cover.length === 43).toBeTruthy(); + expect(cover.length === 44).toBeTruthy(); expect(cover.find(tileID => tileID.canonical.z === 13 && tileID.canonical.x === 4270 && tileID.canonical.y === 2927)).toBeTruthy(); expect(cover.find(tileID => tileID.canonical.z === 12 && tileID.canonical.x === 2134 && tileID.canonical.y === 1461)).toBeTruthy(); }); diff --git a/test/util/mockServiceWorker.js b/test/unit/mock-worker/mockServiceWorker.js similarity index 100% rename from test/util/mockServiceWorker.js rename to test/unit/mock-worker/mockServiceWorker.js diff --git a/test/unit/source/source_cache.test.ts b/test/unit/source/source_cache.test.ts index 18edf3b632f..5a47f54aded 100644 --- a/test/unit/source/source_cache.test.ts +++ b/test/unit/source/source_cache.test.ts @@ -714,7 +714,7 @@ describe('SourceCache#update', () => { transform.center = new LngLat(0, -0.005); sourceCache.update(transform); - expect(sourceCache.getRenderableIds().length).toEqual(10); + expect(sourceCache.getRenderableIds().length).toEqual(8); resolve(); } }); diff --git a/test/unit/style/style.test.ts b/test/unit/style/style.test.ts index 039c7e64ecd..495c1edfa69 100644 --- a/test/unit/style/style.test.ts +++ b/test/unit/style/style.test.ts @@ -2398,3 +2398,44 @@ test('Style#castShadows check', async () => { expect(sourceCache.castsShadows).toBeFalsy(); }); +describe('Style#setColorTheme', () => { + test('GLJS-905 empty lut loads faster than non-empty', async () => { + const style = new Style(new StubMap()); + expect(style._styleColorTheme.lutLoadingCorrelationID).toEqual(0); + style.loadJSON({ + "version": 8, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [] + } + } + }, + "color-theme": { + "data": "iVBORw0KGgoAAAANSUhEUgAABAAAAAAgCAYAAACM/gqmAAAAAXNSR0IArs4c6QAABSFJREFUeF7t3cFO40AQAFHnBv//wSAEEgmJPeUDsid5h9VqtcMiZsfdPdXVzmVZlo+3ZVm+fr3//L7257Lm778x+prL1ff0/b//H+z/4/M4OkuP/n70Nc7f+nnb+yzb//sY6vxt5xXPn+dP/aH+GsXJekb25izxR/ypZ6ucUefv9g4z2jPP3/HPHwAAgABAABgACIACkAAsAL1SD4yKWQAUAHUBdAG8buKNYoYL8PEX4FcHQAAAAAAAAAAAAAAAAAAAAAAA8LAeGF1mABAABAABQACQbZP7+hk5AwACAAAAAAAAAAAAAAAAAAAAAAAA4EE9AICMx4QBAAAAAAAANgvJsxGQV1dA/PxmMEtxU9YoABQACoC5CgDxX/wvsb2sEf/Ff/Ff/N96l5n73+/5YAB4CeBqx2VvMqXgUfD2npkzBCAXEBeQcrkoa5x/FxAXEBcQF5A2Wy3/t32qNYr8I//Mln+MABgBMAJgBMAIgBEAIwBGAIwAGAEwAmAE4K4eAGCNQIw+qQ0AmQ+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/6gEABAB5RgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN/UAAPKcAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEFNODICRtDkDO/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOhvlPUWem+h9xKQ+V4CUt9wO6KZnn/Pv+ff8z/bW5DFP59CUnJbWSP+iX/iX78znqED/urxnwHAAGAAMAAYAAwABgADgAHAAGAAMAAYAAwABgADoNMcHUAdQAQcAUfAe8xEwH0O86t3IPz8OvClu17WqD/UH+oP9cf1Gdia01d/LQsDgAHAAGAAMAAYAAwABgADgAHAAGAAMAAYAAwABkCnSQwABgACj8Aj8D1mItAMAB1wHfDS3S5r5F/5V/6Vf3XAW12h/mIArHY89iZTAAQA2XtmBKAWqOslyf4rgBXACmAFcIur8k/bJ/mnQTr5V/6Vf+fKv0YAjAAYATACYATACIARACMARgCMABgBMAJgBMAIgBEAIwCdZuiA64AjwAgwAtxjpg6cDlztLlLA7/Pr1gueyr56/jx/5ZzUNeof9Y/6R/0zk4HGAGAAMAAYAAwABgADgAHAAGAAMAAYAAwABgADgAHQaQ4DgAGAgCPgCHiPmTqQOpC1u8gAYACMjAf5V/6Vf+XfmTrQ8l97v8Z/5X8GAAOAAcAAYAAwABgADAAGAAOAAcAAYAAwABgADIBO0xgADAAdCB0IHYgeMxkADAAdkGM7IPbf/pfuWlmj/lH/qH/UPzMZGAwABgADgAHAAGAAMAAYAAwABgADgAHAAGAAMAAYAJ3mMAAYAAg4Ao6A95jJAGAA6EDrQJfuclkj/8q/8q/8O1MHWv47Nv8xABgADAAGAAOAAcAAYAAwABgADAAGAAOAAcAAYAB0msYAYADoQOhA6ED0mMkAYADogBzbAbH/9r/YFWWN+kf9o/5R/8xkYDAAGAAMAAYAA4ABwABgADAAGAAMAAYAA4ABwABgAHSawwBgACDgCDgC3mMmA4ABoAOtA126y2WN/Cv/yr/y70wdaPnv2PzHAGAAMAAYAAwABgADgAHAAGAAMAAYAAwABgADgAHQaRoDgAGgA6EDoQPRYyYDgAGgA3JsB8T+2/9iV5Q16h/1j/pH/TOTgcEAYAAwABgADAAGAAOAAcAAYAAwABgADAAGAAPgyQ2AT4NBIB3ew5dkAAAAAElFTkSuQmCC" + }, + "layers": [ + { + "id": "line", + "type": "line", + "source": "geojson" + } + ] + }); + + await waitFor(style, "style.load"); + + expect(style._styleColorTheme.lutLoadingCorrelationID).toEqual(1); + + const bwColorTheme = "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"; + style.setColorTheme({ "data": bwColorTheme }); + style.setColorTheme({ "data": "" }); + expect(style._styleColorTheme.lutLoadingCorrelationID).toEqual(3); + + await waitFor(style, "colorthemeset"); + await waitFor(style, "colorthemeset"); + expect(style._styleColorTheme.lut).toEqual(null); + }); +}); \ No newline at end of file diff --git a/test/unit/terrain/terrain.test.ts b/test/unit/terrain/terrain.test.ts index ef0a715c5b3..1e46765c6a2 100644 --- a/test/unit/terrain/terrain.test.ts +++ b/test/unit/terrain/terrain.test.ts @@ -1526,12 +1526,12 @@ describe('Marker interaction and raycast', () => { test('terrain is above horizon line', () => { // With a bit of tweaking (given that const terrain planes are used), terrain is above horizon line. - expect(terrainTop.y < tr.horizonLineFromTop() - 3).toBeTruthy(); + expect(terrainTop.y < tr.horizonLineFromTop()).toBeTruthy(); }); test('Drag above clamps at horizon', () => { // Offset marker down, 2 pixels under terrain top above horizon. - const startPos = new Point(0, 2)._add(terrainTop); + const startPos = new Point(0, 7)._add(terrainTop); marker.setLngLat(tr.pointLocation3D(startPos)); expect(Math.abs(tr.locationPoint3D(marker.getLngLat()).y - startPos.y) < 0.000001).toBeTruthy(); const el = marker.getElement(); diff --git a/test/unit/ui/map/metrics.test.ts b/test/unit/ui/map/metrics.test.ts index f77a6d0f853..a43a59807d8 100644 --- a/test/unit/ui/map/metrics.test.ts +++ b/test/unit/ui/map/metrics.test.ts @@ -644,10 +644,6 @@ describe('Map', () => { accessToken: 'access-token' }); - map.on('style.load', () => { - console.log('style.load'); - }); - await waitFor(map, 'load'); map.setStyle('/another.json'); diff --git a/test/unit/util/live_performance.test.ts b/test/unit/util/live_performance.test.ts index 4410c6fb17f..ec91a408635 100644 --- a/test/unit/util/live_performance.test.ts +++ b/test/unit/util/live_performance.test.ts @@ -176,8 +176,8 @@ describe('LivePerformance', () => { }, {name: 'screenWidth', value: window.screen.width.toString()}, {name: 'screenHeight', value: window.screen.height.toString()}, - {name: 'windowWidth', value: '300'}, - {name: 'windowHeight', value: '150'}, + {name: 'windowWidth', value: '414'}, + {name: 'windowHeight', value: '896'}, {name: 'mapWidth', value: '100'}, {name: 'mapHeight', value: '50'}, {name: 'webglRenderer', value: 'webgl renderer'}, diff --git a/test/unit/util/mapbox.test.ts b/test/unit/util/mapbox.test.ts index 99451001683..f222ba12cf7 100644 --- a/test/unit/util/mapbox.test.ts +++ b/test/unit/util/mapbox.test.ts @@ -563,8 +563,8 @@ describe("mapbox", () => { checkMetric(performanceEvent.metadata, 'sdkVersion', version); checkMetric(performanceEvent.metadata, 'sdkIdentifier', 'mapbox-gl-js'); checkMetric(performanceEvent.metadata, 'devicePixelRatio', '1'); - checkMetric(performanceEvent.metadata, 'windowWidth', '300'); - checkMetric(performanceEvent.metadata, 'windowHeight', '150'); + checkMetric(performanceEvent.metadata, 'windowWidth', '414'); + checkMetric(performanceEvent.metadata, 'windowHeight', '896'); checkMetric(performanceEvent.metadata, 'mapWidth', '100'); checkMetric(performanceEvent.metadata, 'mapHeight', '50'); checkMetric(performanceEvent.metadata, 'webglVendor', 'webgl vendor'); diff --git a/tsconfig.json b/tsconfig.json index 239824e3462..144df32c19d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -42,6 +42,6 @@ "./node_modules", "./src/style-spec/bin", "./src/style-spec/dist", - "./test/util/mockServiceWorker.js" + "./test/unit/mock-worker/mockServiceWorker.js" ] } diff --git a/vitest.config.base.ts b/vitest.config.base.ts index 07a098e6620..330b5bc3717 100644 --- a/vitest.config.base.ts +++ b/vitest.config.base.ts @@ -1,7 +1,4 @@ -// @ts-nocheck -import {readFile} from 'node:fs/promises'; - -import {defineConfig} from 'vite'; +import {defineConfig} from 'vitest/config'; import {createFilter} from '@rollup/pluginutils'; import arraybuffer from 'vite-plugin-arraybuffer'; @@ -12,65 +9,33 @@ function glsl(include: string[]) { transform(code, id) { if (!filter(id)) return; return { - code: `export default ${JSON.stringify(code)};`, - map: {mappings: ''} + code: `export default ${JSON.stringify(code)};` }; } }; } -function fixAssertUtil(regexp = /node_modules\/assert/) { - return { - name: 'fix-assert-util', - setup(build) { - build.onLoad({filter: regexp}, async (args: {path: string}) => { - const source = await readFile(args.path, 'utf8'); - - return { - contents: source.replace(/util\/'/g, 'util\'').toString(), - loader: 'jsx', - }; - }); - }, - }; -} - export default defineConfig({ - retry: 2, - pool: 'threads', - poolOptions: { - threads: { - isolate: false, - useAtomics: true, - singleThread: true - } - }, test: { + pool: 'threads', + poolOptions: { + threads: { + isolate: false, + useAtomics: true, + singleThread: true + } + }, + retry: 2, testTimeout: 5_000, browser: { name: 'chromium', provider: 'playwright', enabled: true, headless: true, - slowHijackESM: false, fileParallelism: false, }, restoreMocks: true, unstubGlobals: true, - reporters: process.env.CI ? [ - ['html', {outputFile: './test/unit/vitest/index.html'}], - ['junit', {outputFile: './test/unit/test-results.xml'}], - ] : ['basic'], - }, - optimizeDeps: { - esbuildOptions: { - plugins: [ - fixAssertUtil() - ] - }, - include: [ - 'assert' - ] }, plugins: [ glsl(['./src/shaders/*.glsl', './3d-style/shaders/*.glsl']), diff --git a/vitest.config.csp.ts b/vitest.config.csp.ts index 458ecd381ac..a742bef872f 100644 --- a/vitest.config.csp.ts +++ b/vitest.config.csp.ts @@ -1,7 +1,6 @@ import {defineConfig, mergeConfig} from 'vite'; import baseConfig from './vitest.config.base'; -// @ts-expect-error - TS2345 - Argument of type 'UserConfig & Promise & UserConfigFnObject & UserConfigExport' is not assignable to parameter of type 'never'. export default mergeConfig(baseConfig, defineConfig({ test: { browser: { diff --git a/vitest.config.unit.ts b/vitest.config.unit.ts index a323ee78561..122ea80c77f 100644 --- a/vitest.config.unit.ts +++ b/vitest.config.unit.ts @@ -1,9 +1,8 @@ -// @ts-nocheck -import {readFileSync} from 'node:fs'; import {basename as pathBasename} from 'node:path'; - -import {mergeConfig, defineConfig} from 'vite'; +import {readFileSync} from 'node:fs'; +import {mergeConfig, defineConfig} from 'vitest/config'; import {globSync} from 'glob'; + import baseConfig from './vitest.config.base'; function styleSpecFixtures() { @@ -33,8 +32,13 @@ export default mergeConfig(baseConfig, defineConfig({ test: { include: ['test/unit/**/*.test.ts'], setupFiles: ['test/unit/setup.ts'], + reporters: process.env.CI ? [ + ['html', {outputFile: './test/unit/vitest/index.html'}], + ['junit', {outputFile: './test/unit/test-results.xml'}], + ] : ['basic'], }, - publicDir: 'test/util', + // For msw mock worker + publicDir: 'test/unit/mock-worker', plugins: [ styleSpecFixtures() ]